Files
IKAR/lib/frontend/widgets/message_status_icon.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)),
);
}
}