瀏覽代碼

File details: Moved creation time's tile to a separate widget

ashilkn 2 年之前
父節點
當前提交
927a313c3b

+ 1 - 0
lib/ui/components/info_item_widget.dart

@@ -21,6 +21,7 @@ class InfoItemWidget extends StatelessWidget {
 
   @override
   Widget build(BuildContext context) {
+    debugPrint("InfoItemWidget.build -------");
     return Row(
       mainAxisAlignment: MainAxisAlignment.spaceBetween,
       crossAxisAlignment: CrossAxisAlignment.start,

+ 2 - 52
lib/ui/viewer/file/file_details_widget.dart

@@ -1,7 +1,6 @@
 import "package:exif/exif.dart";
 import "package:flutter/cupertino.dart";
 import "package:flutter/material.dart";
-import 'package:flutter_datetime_picker/flutter_datetime_picker.dart';
 import "package:logging/logging.dart";
 import 'package:path/path.dart' as path;
 import 'package:photo_manager/photo_manager.dart';
@@ -27,6 +26,7 @@ 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/gallery/collection_page.dart";
 import "package:photos/utils/date_time_util.dart";
 import "package:photos/utils/exif_util.dart";
@@ -120,26 +120,7 @@ class _FileDetailsWidgetState extends State<FileDetailsWidget> {
                   ? FileCaptionWidget(file: widget.file)
                   : FileCaptionReadyOnly(caption: widget.file.caption!),
             ),
-      InfoItemWidget(
-        key: const ValueKey("Creation time"),
-        leadingIcon: Icons.calendar_today_outlined,
-        title: getFullDate(
-          DateTime.fromMicrosecondsSinceEpoch(file.creationTime!),
-        ),
-        subtitleSection: Future.value([
-          Text(
-            getTimeIn12hrFormat(dateTime) + "  " + dateTime.timeZoneName,
-            style: subtitleTextTheme,
-          ),
-        ]),
-        editOnTap: ((widget.file.ownerID == null ||
-                    widget.file.ownerID == _currentUserID) &&
-                widget.file.uploadedFileID != null)
-            ? () {
-                _showDateTimePicker(widget.file);
-              }
-            : null,
-      ),
+      CreationTimeItem(file, _currentUserID),
       InfoItemWidget(
         key: const ValueKey("File name and info"),
         leadingIcon:
@@ -530,35 +511,4 @@ class _FileDetailsWidgetState extends State<FileDetailsWidget> {
       },
     );
   }
-
-  void _showDateTimePicker(File file) async {
-    final dateResult = await DatePicker.showDatePicker(
-      context,
-      minTime: DateTime(1800, 1, 1),
-      maxTime: DateTime.now(),
-      currentTime: DateTime.fromMicrosecondsSinceEpoch(file.creationTime!),
-      locale: LocaleType.en,
-      theme: Theme.of(context).colorScheme.dateTimePickertheme,
-    );
-    if (dateResult == null) {
-      return;
-    }
-    final dateWithTimeResult = await DatePicker.showTime12hPicker(
-      context,
-      showTitleActions: true,
-      currentTime: dateResult,
-      locale: LocaleType.en,
-      theme: Theme.of(context).colorScheme.dateTimePickertheme,
-    );
-    if (dateWithTimeResult != null) {
-      if (await editTime(
-        context,
-        List.of([widget.file]),
-        dateWithTimeResult.microsecondsSinceEpoch,
-      )) {
-        widget.file.creationTime = dateWithTimeResult.microsecondsSinceEpoch;
-        setState(() {});
-      }
-    }
-  }
 }

+ 76 - 0
lib/ui/viewer/file_details/creation_time_item_widget.dart

@@ -0,0 +1,76 @@
+import "package:flutter/material.dart";
+import "package:flutter_datetime_picker/flutter_datetime_picker.dart";
+import "package:photos/ente_theme_data.dart";
+import "package:photos/models/file.dart";
+import "package:photos/theme/ente_theme.dart";
+import "package:photos/ui/components/info_item_widget.dart";
+import "package:photos/utils/date_time_util.dart";
+import "package:photos/utils/magic_util.dart";
+
+class CreationTimeItem extends StatefulWidget {
+  final File file;
+  final int currentUserID;
+  const CreationTimeItem(this.file, this.currentUserID, {super.key});
+
+  @override
+  State<CreationTimeItem> createState() => _CreationTimeItemState();
+}
+
+class _CreationTimeItemState extends State<CreationTimeItem> {
+  @override
+  Widget build(BuildContext context) {
+    final dateTime =
+        DateTime.fromMicrosecondsSinceEpoch(widget.file.creationTime!);
+    return InfoItemWidget(
+      key: const ValueKey("Creation time"),
+      leadingIcon: Icons.calendar_today_outlined,
+      title: getFullDate(
+        DateTime.fromMicrosecondsSinceEpoch(widget.file.creationTime!),
+      ),
+      subtitleSection: Future.value([
+        Text(
+          getTimeIn12hrFormat(dateTime) + "  " + dateTime.timeZoneName,
+          style: getEnteTextTheme(context).smallMuted,
+        ),
+      ]),
+      editOnTap: ((widget.file.ownerID == null ||
+                  widget.file.ownerID == widget.currentUserID) &&
+              widget.file.uploadedFileID != null)
+          ? () {
+              _showDateTimePicker(widget.file);
+            }
+          : null,
+    );
+  }
+
+  void _showDateTimePicker(File file) async {
+    final dateResult = await DatePicker.showDatePicker(
+      context,
+      minTime: DateTime(1800, 1, 1),
+      maxTime: DateTime.now(),
+      currentTime: DateTime.fromMicrosecondsSinceEpoch(file.creationTime!),
+      locale: LocaleType.en,
+      theme: Theme.of(context).colorScheme.dateTimePickertheme,
+    );
+    if (dateResult == null) {
+      return;
+    }
+    final dateWithTimeResult = await DatePicker.showTime12hPicker(
+      context,
+      showTitleActions: true,
+      currentTime: dateResult,
+      locale: LocaleType.en,
+      theme: Theme.of(context).colorScheme.dateTimePickertheme,
+    );
+    if (dateWithTimeResult != null) {
+      if (await editTime(
+        context,
+        List.of([widget.file]),
+        dateWithTimeResult.microsecondsSinceEpoch,
+      )) {
+        widget.file.creationTime = dateWithTimeResult.microsecondsSinceEpoch;
+        setState(() {});
+      }
+    }
+  }
+}