ente/lib/ui/viewer/file_details/creation_time_item_widget.dart

79 lines
2.6 KiB
Dart
Raw Normal View History

import "package:flutter/material.dart";
import "package:flutter_datetime_picker/flutter_datetime_picker.dart";
2023-05-04 10:47:11 +00:00
import "package:intl/intl.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,
2023-05-04 10:47:11 +00:00
title: DateFormat.yMMMEd(Localizations.localeOf(context).languageCode)
.format(
DateTime.fromMicrosecondsSinceEpoch(widget.file.creationTime!),
),
subtitleSection: Future.value([
Text(
getTimeIn12hrFormat(dateTime) + " " + dateTime.timeZoneName,
2023-06-13 14:43:52 +00:00
style: getEnteTextTheme(context).miniMuted,
),
]),
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(() {});
}
}
}
}