objects_item_widget.dart 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import "package:flutter/foundation.dart";
  2. import "package:flutter/material.dart";
  3. import "package:logging/logging.dart";
  4. import "package:photos/generated/l10n.dart";
  5. import 'package:photos/models/file/file.dart';
  6. import "package:photos/ui/components/buttons/chip_button_widget.dart";
  7. import "package:photos/ui/components/info_item_widget.dart";
  8. class ObjectsItemWidget extends StatelessWidget {
  9. final EnteFile file;
  10. const ObjectsItemWidget(this.file, {super.key});
  11. @override
  12. Widget build(BuildContext context) {
  13. return InfoItemWidget(
  14. key: const ValueKey("Objects"),
  15. leadingIcon: Icons.image_search_outlined,
  16. subtitleSection: _objectTags(context, file),
  17. hasChipButtons: true,
  18. );
  19. }
  20. Future<List<ChipButtonWidget>> _objectTags(
  21. BuildContext context,
  22. EnteFile file,
  23. ) async {
  24. try {
  25. final chipButtons = <ChipButtonWidget>[];
  26. var objectTags = <String, double>{};
  27. // final thumbnail = await getThumbnail(file);
  28. // if (thumbnail != null) {
  29. // objectTags = await ObjectDetectionService.instance.predict(thumbnail);
  30. // }
  31. if (objectTags.isEmpty) {
  32. return [
  33. ChipButtonWidget(
  34. S.of(context).noResults,
  35. noChips: true,
  36. ),
  37. ];
  38. }
  39. // sort by values
  40. objectTags = Map.fromEntries(
  41. objectTags.entries.toList()
  42. ..sort((e1, e2) => e2.value.compareTo(e1.value)),
  43. );
  44. for (MapEntry<String, double> entry in objectTags.entries) {
  45. chipButtons.add(
  46. ChipButtonWidget(
  47. entry.key +
  48. (kDebugMode
  49. ? "-" + (entry.value * 100).round().toString()
  50. : ""),
  51. ),
  52. );
  53. }
  54. return chipButtons;
  55. } catch (e, s) {
  56. Logger("ObjctsItemWidget").info(e, s);
  57. return [];
  58. }
  59. }
  60. }