import 'package:awesome_extensions/awesome_extensions.dart'; import 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import '../../theme.dart'; class StyledAvatar extends StatelessWidget { const StyledAvatar({ required String name, required double size, bool enabled = true, super.key, ImageProvider? imageProvider, }) : _name = name, _size = size, _imageProvider = imageProvider, _enabled = enabled; @override Widget build(BuildContext context) { final theme = Theme.of(context); final scaleTheme = Theme.of(context).extension()!; final borderColor = scaleTheme.config.useVisualIndicators ? scaleTheme.scheme.primaryScale.primaryText : scaleTheme.scheme.primaryScale.subtleBorder; final foregroundColor = !_enabled ? scaleTheme.scheme.grayScale.primaryText : scaleTheme.scheme.primaryScale.calloutText; final backgroundColor = !_enabled ? scaleTheme.scheme.grayScale.primary : scaleTheme.scheme.primaryScale.calloutBackground; final scaleConfig = scaleTheme.config; final textStyle = theme.textTheme.titleLarge!.copyWith(fontSize: _size / 2); final abbrev = _name.split(' ').map((s) => s.isEmpty ? '' : s[0]).join(); late final String shortname; if (abbrev.length >= 3) { shortname = abbrev[0] + abbrev[1] + abbrev[abbrev.length - 1]; } else { shortname = abbrev; } return Container( height: _size, width: _size, decoration: BoxDecoration( shape: BoxShape.circle, border: !scaleConfig.useVisualIndicators ? null : Border.all( color: borderColor, width: 1 * (_size ~/ 16 + 1), strokeAlign: BorderSide.strokeAlignOutside)), child: AvatarImage( backgroundImage: _imageProvider, backgroundColor: scaleConfig.useVisualIndicators ? foregroundColor : backgroundColor, child: Text( shortname.isNotEmpty ? shortname : '?', softWrap: false, textScaler: MediaQuery.of(context).textScaler, style: textStyle.copyWith( color: scaleConfig.useVisualIndicators ? backgroundColor : foregroundColor, ), ).paddingAll(4.scaled(context)).fit(fit: BoxFit.scaleDown))); } //////////////////////////////////////////////////////////////////////////// final String _name; final double _size; final ImageProvider? _imageProvider; final bool _enabled; }