Quellcode durchsuchen

File details: Moved both exif tiles to separate widgets

ashilkn vor 2 Jahren
Ursprung
Commit
297d05042b

+ 3 - 70
lib/ui/viewer/file/file_details_widget.dart

@@ -13,24 +13,21 @@ import "package:photos/models/gallery_type.dart";
 import 'package:photos/services/collections_service.dart';
 import "package:photos/services/feature_flag_service.dart";
 import "package:photos/services/object_detection/object_detection_service.dart";
-import "package:photos/theme/colors.dart";
 import 'package:photos/theme/ente_theme.dart';
 import "package:photos/ui/components/buttons/chip_button_widget.dart";
 import 'package:photos/ui/components/buttons/icon_button_widget.dart';
-import "package:photos/ui/components/buttons/inline_button_widget.dart";
 import 'package:photos/ui/components/divider_widget.dart';
 import "package:photos/ui/components/info_item_widget.dart";
 import 'package:photos/ui/components/title_bar_widget.dart';
-import "package:photos/ui/viewer/file/exif_info_dialog.dart";
 import 'package:photos/ui/viewer/file/file_caption_widget.dart';
 import "package:photos/ui/viewer/file_details/creation_time_item_widget.dart";
+import "package:photos/ui/viewer/file_details/exif_item_widget.dart";
 import "package:photos/ui/viewer/file_details/file_properties_item_widget.dart";
 import "package:photos/ui/viewer/gallery/collection_page.dart";
 import "package:photos/utils/date_time_util.dart";
 import "package:photos/utils/exif_util.dart";
 import "package:photos/utils/navigation_util.dart";
 import "package:photos/utils/thumbnail_util.dart";
-import "package:photos/utils/toast_util.dart";
 
 class FileDetailsWidget extends StatefulWidget {
   final File file;
@@ -115,42 +112,8 @@ class _FileDetailsWidgetState extends State<FileDetailsWidget> {
             ),
       CreationTimeItem(file, _currentUserID),
       FilePropertiesWidget(file, _isImage, _exifData, _currentUserID),
-      showExifListTile
-          ? InfoItemWidget(
-              key: const ValueKey("Basic EXIF"),
-              leadingIcon: Icons.camera_outlined,
-              title: _exifData["takenOnDevice"] ?? "--",
-              subtitleSection: Future.value([
-                if (_exifData["fNumber"] != null)
-                  Text(
-                    'ƒ/' + _exifData["fNumber"].toString(),
-                    style: subtitleTextTheme,
-                  ),
-                if (_exifData["exposureTime"] != null)
-                  Text(
-                    _exifData["exposureTime"],
-                    style: subtitleTextTheme,
-                  ),
-                if (_exifData["focalLength"] != null)
-                  Text(
-                    _exifData["focalLength"].toString() + "mm",
-                    style: subtitleTextTheme,
-                  ),
-                if (_exifData["ISO"] != null)
-                  Text(
-                    "ISO" + _exifData["ISO"].toString(),
-                    style: subtitleTextTheme,
-                  ),
-              ]),
-            )
-          : null,
-      _isImage
-          ? InfoItemWidget(
-              leadingIcon: Icons.text_snippet_outlined,
-              title: "EXIF",
-              subtitleSection: _exifButton(file, _exif),
-            )
-          : null,
+      showExifListTile ? BasicExifItemWidget(_exifData) : null,
+      _isImage ? AllExifItemWidget(file, _exif) : null,
       FeatureFlagService.instance.isInternalUserOrDebugBuild()
           ? InfoItemWidget(
               key: const ValueKey("Objects"),
@@ -244,36 +207,6 @@ class _FileDetailsWidgetState extends State<FileDetailsWidget> {
     );
   }
 
-  Future<List<InlineButtonWidget>> _exifButton(
-    File file,
-    Map<String, IfdTag>? exif,
-  ) {
-    late final String label;
-    late final VoidCallback? onTap;
-    if (exif == null) {
-      label = "Loading EXIF data...";
-      onTap = null;
-    } else if (exif.isNotEmpty) {
-      label = "View all EXIF data";
-      onTap = () => showDialog(
-            context: context,
-            builder: (BuildContext context) {
-              return ExifInfoDialog(file);
-            },
-            barrierColor: backdropFaintDark,
-          );
-    } else {
-      label = "No EXIF data";
-      onTap = () => showShortToast(context, "This image has no exif data");
-    }
-    return Future.value([
-      InlineButtonWidget(
-        label,
-        onTap,
-      )
-    ]);
-  }
-
   Future<List<ChipButtonWidget>> _objectTags(File file) async {
     try {
       final chipButtons = <ChipButtonWidget>[];

+ 96 - 0
lib/ui/viewer/file_details/exif_item_widget.dart

@@ -0,0 +1,96 @@
+import "package:exif/exif.dart";
+import "package:flutter/material.dart";
+import "package:photos/models/file.dart";
+import "package:photos/theme/colors.dart";
+import "package:photos/theme/ente_theme.dart";
+import "package:photos/ui/components/buttons/inline_button_widget.dart";
+import "package:photos/ui/components/info_item_widget.dart";
+import "package:photos/ui/viewer/file/exif_info_dialog.dart";
+import "package:photos/utils/toast_util.dart";
+
+class BasicExifItemWidget extends StatelessWidget {
+  final Map<String, dynamic> exifData;
+  const BasicExifItemWidget(this.exifData, {super.key});
+
+  @override
+  Widget build(BuildContext context) {
+    final subtitleTextTheme = getEnteTextTheme(context).smallMuted;
+    return InfoItemWidget(
+      key: const ValueKey("Basic EXIF"),
+      leadingIcon: Icons.camera_outlined,
+      title: exifData["takenOnDevice"] ?? "--",
+      subtitleSection: Future.value([
+        if (exifData["fNumber"] != null)
+          Text(
+            'ƒ/' + exifData["fNumber"].toString(),
+            style: subtitleTextTheme,
+          ),
+        if (exifData["exposureTime"] != null)
+          Text(
+            exifData["exposureTime"],
+            style: subtitleTextTheme,
+          ),
+        if (exifData["focalLength"] != null)
+          Text(
+            exifData["focalLength"].toString() + "mm",
+            style: subtitleTextTheme,
+          ),
+        if (exifData["ISO"] != null)
+          Text(
+            "ISO" + exifData["ISO"].toString(),
+            style: subtitleTextTheme,
+          ),
+      ]),
+    );
+  }
+}
+
+class AllExifItemWidget extends StatelessWidget {
+  final File file;
+  final Map<String, IfdTag>? exif;
+  const AllExifItemWidget(
+    this.file,
+    this.exif, {
+    super.key,
+  });
+
+  @override
+  Widget build(BuildContext context) {
+    return InfoItemWidget(
+      leadingIcon: Icons.text_snippet_outlined,
+      title: "EXIF",
+      subtitleSection: _exifButton(context, file, exif),
+    );
+  }
+
+  Future<List<InlineButtonWidget>> _exifButton(
+    BuildContext context,
+    File file,
+    Map<String, IfdTag>? exif,
+  ) {
+    late final String label;
+    late final VoidCallback? onTap;
+    if (exif == null) {
+      label = "Loading EXIF data...";
+      onTap = null;
+    } else if (exif.isNotEmpty) {
+      label = "View all EXIF data";
+      onTap = () => showDialog(
+            context: context,
+            builder: (BuildContext context) {
+              return ExifInfoDialog(file);
+            },
+            barrierColor: backdropFaintDark,
+          );
+    } else {
+      label = "No EXIF data";
+      onTap = () => showShortToast(context, "This image has no exif data");
+    }
+    return Future.value([
+      InlineButtonWidget(
+        label,
+        onTap,
+      )
+    ]);
+  }
+}