Browse Source

Created InfoItem for locationTags in file details

ashilkn 2 years ago
parent
commit
23f878b962

+ 7 - 0
lib/ui/viewer/file/file_details_widget.dart

@@ -16,6 +16,7 @@ import 'package:photos/ui/viewer/file_details/backed_up_time_item_widget.dart';
 import "package:photos/ui/viewer/file_details/creation_time_item_widget.dart";
 import 'package:photos/ui/viewer/file_details/exif_item_widgets.dart';
 import "package:photos/ui/viewer/file_details/file_properties_item_widget.dart";
+import "package:photos/ui/viewer/file_details/location_tags_widget.dart";
 import "package:photos/ui/viewer/file_details/objects_item_widget.dart";
 import "package:photos/utils/exif_util.dart";
 
@@ -125,6 +126,12 @@ class _FileDetailsWidgetState extends State<FileDetailsWidget> {
         },
       ),
     );
+    if (FeatureFlagService.instance.isInternalUserOrDebugBuild()) {
+      fileDetailsTiles.addAll([
+        LocationTagsWidget(widget.file),
+        const FileDetailsDivider(),
+      ]);
+    }
     if (_isImage) {
       fileDetailsTiles.addAll([
         ValueListenableBuilder(

+ 54 - 0
lib/ui/viewer/file_details/location_tags_widget.dart

@@ -0,0 +1,54 @@
+import "dart:async";
+
+import "package:flutter/material.dart";
+import "package:photos/models/file.dart";
+import "package:photos/services/location_service.dart";
+import "package:photos/ui/components/buttons/chip_button_widget.dart";
+import "package:photos/ui/components/buttons/inline_button_widget.dart";
+import "package:photos/ui/components/info_item_widget.dart";
+
+class LocationTagsWidget extends StatefulWidget {
+  final File file;
+  const LocationTagsWidget(this.file, {super.key});
+
+  @override
+  State<LocationTagsWidget> createState() => _LocationTagsWidgetState();
+}
+
+class _LocationTagsWidgetState extends State<LocationTagsWidget> {
+  String title = "Add location";
+  IconData leadingIcon = Icons.add_location_alt_outlined;
+  bool hasChipButtons = false;
+  late final Future<List<Widget>> locationTagChips;
+  @override
+  void initState() {
+    locationTagChips = _getLocationTags();
+    super.initState();
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return InfoItemWidget(
+      leadingIcon: Icons.add_location_alt_outlined,
+      title: "Add location",
+      subtitleSection: locationTagChips,
+      hasChipButtons: hasChipButtons,
+    );
+  }
+
+  Future<List<Widget>> _getLocationTags() async {
+    final locationTags =
+        LocationService.instance.getLocationsByFileID(widget.file.generatedID!);
+    if (locationTags.isEmpty) {
+      return [
+        InlineButtonWidget("Group nearby photos", () {}),
+      ];
+    }
+    setState(() {
+      title = "Location";
+      leadingIcon = Icons.pin_drop_outlined;
+      hasChipButtons = true;
+    });
+    return locationTags.map((e) => ChipButtonWidget(e)).toList();
+  }
+}