aves/lib/widgets/stats/mime_donut.dart
2023-06-18 23:23:31 +02:00

42 lines
1.3 KiB
Dart

import 'package:aves/model/filters/mime.dart';
import 'package:aves/theme/colors.dart';
import 'package:aves/utils/mime_utils.dart';
import 'package:aves/widgets/common/extensions/build_context.dart';
import 'package:aves/widgets/common/identity/aves_donut.dart';
import 'package:aves/widgets/common/identity/aves_filter_chip.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
class MimeDonut extends StatelessWidget {
final IconData icon;
final Map<String, int> byMimeTypes;
final Duration animationDuration;
final FilterCallback onFilterSelection;
const MimeDonut({
super.key,
required this.icon,
required this.byMimeTypes,
required this.animationDuration,
required this.onFilterSelection,
});
@override
Widget build(BuildContext context) {
final locale = context.l10n.localeName;
final numberFormat = NumberFormat.decimalPattern(locale);
final colors = context.watch<AvesColorsData>();
String formatKey(d) => MimeUtils.displayType(d.key);
return AvesDonut(
title: Icon(icon),
byTypes: byMimeTypes,
animationDuration: animationDuration,
formatKey: formatKey,
formatValue: numberFormat.format,
colorize: (d) => colors.fromString(formatKey(d)),
onTap: (d) => onFilterSelection(MimeFilter(d.key)),
);
}
}