50 lines
1.2 KiB
Dart
50 lines
1.2 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:material_symbols_icons/symbols.dart';
|
|
|
|
import '../../core/config/app_message_status_size.dart';
|
|
|
|
/// A receipt icon whose layout follows the user's size preference.
|
|
class MessageStatusIcon extends StatelessWidget {
|
|
final IconData icon;
|
|
final Color? color;
|
|
final double size;
|
|
final double? weight;
|
|
final double? fill;
|
|
final double? opticalSize;
|
|
final String? semanticLabel;
|
|
|
|
const MessageStatusIcon({
|
|
super.key,
|
|
required this.icon,
|
|
this.color,
|
|
this.size = 14,
|
|
this.weight,
|
|
this.fill,
|
|
this.opticalSize,
|
|
this.semanticLabel,
|
|
});
|
|
|
|
bool get _isReceipt =>
|
|
icon == Symbols.check || icon == Symbols.done || icon == Symbols.done_all;
|
|
|
|
Widget _icon(double scale) => Icon(
|
|
icon,
|
|
color: color,
|
|
size: size * scale,
|
|
weight: weight,
|
|
fill: fill,
|
|
opticalSize: opticalSize,
|
|
semanticLabel: semanticLabel,
|
|
);
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
if (!_isReceipt) return _icon(1);
|
|
return ValueListenableBuilder<double>(
|
|
valueListenable: AppMessageStatusSize.current,
|
|
builder: (context, scale, _) =>
|
|
_icon(AppMessageStatusSize.clampScale(scale)),
|
|
);
|
|
}
|
|
}
|