Used InfoItemWidget for the Object detection tile in file info

This commit is contained in:
ashilkn 2023-03-10 20:29:00 +05:30
parent cdd7efd096
commit 3b304014c6
2 changed files with 36 additions and 8 deletions

View file

@ -1,14 +1,17 @@
import "package:flutter/material.dart"; import "package:flutter/material.dart";
import "package:photos/theme/ente_theme.dart"; import "package:photos/theme/ente_theme.dart";
///https://www.figma.com/file/SYtMyLBs5SAOkTbfMMzhqt/ente-Visual-Design?node-id=8119%3A59513&t=gQa1to5jY89Qk1k7-4
class ChipButtonWidget extends StatelessWidget { class ChipButtonWidget extends StatelessWidget {
final String? label; final String? label;
final IconData? leadingIcon; final IconData? leadingIcon;
final VoidCallback? onTap; final VoidCallback? onTap;
final bool noChips;
const ChipButtonWidget( const ChipButtonWidget(
this.label, { this.label, {
this.leadingIcon, this.leadingIcon,
this.onTap, this.onTap,
this.noChips = false,
super.key, super.key,
}); });
@ -17,6 +20,7 @@ class ChipButtonWidget extends StatelessWidget {
return GestureDetector( return GestureDetector(
onTap: onTap?.call, onTap: onTap?.call,
child: Container( child: Container(
width: noChips ? double.infinity : null,
decoration: BoxDecoration( decoration: BoxDecoration(
color: getEnteColorScheme(context).fillFaint, color: getEnteColorScheme(context).fillFaint,
borderRadius: const BorderRadius.all(Radius.circular(4)), borderRadius: const BorderRadius.all(Radius.circular(4)),

View file

@ -15,6 +15,7 @@ import "package:photos/models/file_type.dart";
import "package:photos/models/gallery_type.dart"; import "package:photos/models/gallery_type.dart";
import 'package:photos/services/collections_service.dart'; import 'package:photos/services/collections_service.dart';
import "package:photos/services/feature_flag_service.dart"; import "package:photos/services/feature_flag_service.dart";
import "package:photos/services/object_detection/object_detection_service.dart";
import 'package:photos/theme/ente_theme.dart'; import 'package:photos/theme/ente_theme.dart';
import "package:photos/ui/common/loading_widget.dart"; import "package:photos/ui/common/loading_widget.dart";
import "package:photos/ui/components/buttons/chip_button_widget.dart"; import "package:photos/ui/components/buttons/chip_button_widget.dart";
@ -23,7 +24,6 @@ import 'package:photos/ui/components/divider_widget.dart';
import "package:photos/ui/components/info_item_widget.dart"; import "package:photos/ui/components/info_item_widget.dart";
import 'package:photos/ui/components/title_bar_widget.dart'; import 'package:photos/ui/components/title_bar_widget.dart';
import 'package:photos/ui/viewer/file/file_caption_widget.dart'; import 'package:photos/ui/viewer/file/file_caption_widget.dart';
import "package:photos/ui/viewer/file/object_tags_widget.dart";
import 'package:photos/ui/viewer/file/raw_exif_list_tile_widget.dart'; import 'package:photos/ui/viewer/file/raw_exif_list_tile_widget.dart';
import "package:photos/ui/viewer/gallery/collection_page.dart"; import "package:photos/ui/viewer/gallery/collection_page.dart";
import "package:photos/utils/date_time_util.dart"; import "package:photos/utils/date_time_util.dart";
@ -31,6 +31,7 @@ import "package:photos/utils/exif_util.dart";
import "package:photos/utils/file_util.dart"; import "package:photos/utils/file_util.dart";
import "package:photos/utils/magic_util.dart"; import "package:photos/utils/magic_util.dart";
import "package:photos/utils/navigation_util.dart"; import "package:photos/utils/navigation_util.dart";
import "package:photos/utils/thumbnail_util.dart";
class FileInfoWidget extends StatefulWidget { class FileInfoWidget extends StatefulWidget {
final File file; final File file;
@ -200,13 +201,12 @@ class _FileInfoWidgetState extends State<FileInfoWidget> {
hasChipButtons: true, hasChipButtons: true,
), ),
FeatureFlagService.instance.isInternalUserOrDebugBuild() FeatureFlagService.instance.isInternalUserOrDebugBuild()
? SizedBox( ? InfoItemWidget(
height: 62, key: const ValueKey("Objects"),
child: ListTile( leadingIcon: Icons.image_search_outlined,
horizontalTitleGap: 0, title: "Objects",
leading: const Icon(Icons.image_search), subtitleSection: _objectTags(file),
title: ObjectTagsWidget(file), hasChipButtons: true,
),
) )
: null, : null,
(file.uploadedFileID != null && file.updationTime != null) (file.uploadedFileID != null && file.updationTime != null)
@ -281,6 +281,30 @@ class _FileInfoWidgetState extends State<FileInfoWidget> {
); );
} }
Future<List<ChipButtonWidget>> _objectTags(File file) async {
try {
final chipButtons = <ChipButtonWidget>[];
final objectTags = await getThumbnail(file).then((data) {
return ObjectDetectionService.instance.predict(data!);
});
for (String objectTag in objectTags) {
chipButtons.add(ChipButtonWidget(objectTag));
}
if (chipButtons.isEmpty) {
return const [
ChipButtonWidget(
"No result",
noChips: true,
)
];
}
return chipButtons;
} catch (e, s) {
Logger("FileInfoWidget").info(e, s);
return [];
}
}
Future<List<ChipButtonWidget>> _deviceFoldersListOfFile( Future<List<ChipButtonWidget>> _deviceFoldersListOfFile(
Future<Set<String>> allDeviceFoldersOfFile, Future<Set<String>> allDeviceFoldersOfFile,
) async { ) async {