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

This commit is contained in:
ashilkn 2023-03-13 16:37:12 +05:30
parent 6bcb6f0e84
commit 927a313c3b
3 changed files with 79 additions and 52 deletions

View file

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

View file

@ -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(() {});
}
}
}
}

View file

@ -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(() {});
}
}
}
}