import 'package:auto_size_text/auto_size_text.dart'; import 'package:refilc/models/settings.dart'; import 'package:refilc/ui/widgets/grade/grade_tile.dart'; import 'package:flutter/material.dart'; import 'package:i18n_extension/i18n_extension.dart'; import 'package:provider/provider.dart'; class StatisticsTile extends StatelessWidget { const StatisticsTile({ super.key, required this.value, this.title, this.decimal = true, this.color, this.valueSuffix = '', this.fill = false, this.outline = false, }); final double value; final Widget? title; final bool decimal; final Color? color; final String valueSuffix; final bool fill; final bool outline; @override Widget build(BuildContext context) { String valueText; if (decimal) { valueText = value.toStringAsFixed(2); } else { valueText = value.toStringAsFixed(0); } if (I18n.of(context).locale.languageCode != "en") { valueText = valueText.replaceAll(".", ","); } if (value.isNaN || value == 0) { valueText = "?"; } return Container( width: double.infinity, padding: const EdgeInsets.all(18.0), decoration: BoxDecoration( borderRadius: BorderRadius.circular(12.0), color: Theme.of(context).colorScheme.background, boxShadow: [ if (Provider.of(context, listen: false) .shadowEffect) BoxShadow( offset: const Offset(0, 21), blurRadius: 23.0, color: Theme.of(context).shadowColor, ) ], ), constraints: const BoxConstraints( minHeight: 140.0, ), child: Column( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ if (title != null) DefaultTextStyle( style: Theme.of(context).textTheme.bodyMedium!.copyWith( fontWeight: FontWeight.w600, fontSize: 18.0, ), child: title!, ), if (title != null) const SizedBox(height: 4.0), Container( margin: const EdgeInsets.only(top: 4.0), padding: const EdgeInsets.symmetric(horizontal: 16.0, vertical: 4.0), decoration: BoxDecoration( color: fill ? (color ?? gradeColor(context: context, value: value)) .withOpacity(.2) : null, border: outline || fill ? Border.all( color: (color ?? gradeColor(context: context, value: value)) .withOpacity(outline ? 1.0 : 0.0), width: fill ? 5.0 : 5.0, ) : null, borderRadius: BorderRadius.circular(45.0), ), child: AutoSizeText.rich( TextSpan( text: valueText, children: [ if (valueSuffix != "") TextSpan( text: valueSuffix, style: const TextStyle(fontSize: 24.0), ), ], ), maxLines: 1, minFontSize: 5, textAlign: TextAlign.center, style: TextStyle( color: color ?? gradeColor(context: context, value: value), fontWeight: FontWeight.w800, fontSize: 28.0, ), ), ), ], ), ); } }