mirror of
https://github.com/kuhyx/todo-app.git
synced 2026-11-11 16:34:05 +01:00
Glyph + spoken label replaces every app-written string the guard found: empty states, tile meta, sheet dates/fields, date presets, template/section headings, status footer, snackbars, GitHub and cloud-image results, upload/download badges, Material tooltips. Guard tests (text_free_*_test) walk the painted tree. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
50 lines
1.3 KiB
Dart
50 lines
1.3 KiB
Dart
/// A screen's latest result as a glyph in place of a status sentence.
|
|
library;
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
/// One result: what to paint, whether it is a failure, and the old
|
|
/// sentence, kept as the spoken label only.
|
|
class StatusCue {
|
|
/// Creates a cue.
|
|
const StatusCue(this.icon, this.spoken, {this.error = false});
|
|
|
|
/// A success: a check glyph in the accent colour.
|
|
const StatusCue.ok(this.spoken) : icon = Icons.check_circle, error = false;
|
|
|
|
/// A failure: an error glyph in the danger hue.
|
|
const StatusCue.failed(this.spoken) : icon = Icons.error, error = true;
|
|
|
|
/// The glyph painted.
|
|
final IconData icon;
|
|
|
|
/// What a screen reader says.
|
|
final String spoken;
|
|
|
|
/// Whether this is a failure (danger hue) rather than a success.
|
|
final bool error;
|
|
}
|
|
|
|
/// Paints [cue] as a large glyph; colour is the second channel.
|
|
class StatusCueView extends StatelessWidget {
|
|
/// Creates the view.
|
|
const StatusCueView(this.cue, {super.key});
|
|
|
|
/// The result shown.
|
|
final StatusCue cue;
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final scheme = Theme.of(context).colorScheme;
|
|
return Align(
|
|
alignment: Alignment.centerLeft,
|
|
child: Icon(
|
|
cue.icon,
|
|
size: 32,
|
|
color: cue.error ? scheme.error : scheme.primary,
|
|
semanticLabel: cue.spoken,
|
|
),
|
|
);
|
|
}
|
|
}
|