creation_time_item_widget.dart 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import "package:flutter/material.dart";
  2. import "package:flutter_datetime_picker/flutter_datetime_picker.dart";
  3. import "package:intl/intl.dart";
  4. import "package:photos/ente_theme_data.dart";
  5. import "package:photos/models/file.dart";
  6. import "package:photos/theme/ente_theme.dart";
  7. import "package:photos/ui/components/info_item_widget.dart";
  8. import "package:photos/utils/date_time_util.dart";
  9. import "package:photos/utils/magic_util.dart";
  10. class CreationTimeItem extends StatefulWidget {
  11. final File file;
  12. final int currentUserID;
  13. const CreationTimeItem(this.file, this.currentUserID, {super.key});
  14. @override
  15. State<CreationTimeItem> createState() => _CreationTimeItemState();
  16. }
  17. class _CreationTimeItemState extends State<CreationTimeItem> {
  18. @override
  19. Widget build(BuildContext context) {
  20. final dateTime =
  21. DateTime.fromMicrosecondsSinceEpoch(widget.file.creationTime!);
  22. return InfoItemWidget(
  23. key: const ValueKey("Creation time"),
  24. leadingIcon: Icons.calendar_today_outlined,
  25. title: DateFormat.yMMMEd(Localizations.localeOf(context).languageCode)
  26. .format(
  27. DateTime.fromMicrosecondsSinceEpoch(widget.file.creationTime!),
  28. ),
  29. subtitleSection: Future.value([
  30. Text(
  31. getTimeIn12hrFormat(dateTime) + " " + dateTime.timeZoneName,
  32. style: getEnteTextTheme(context).smallMuted,
  33. ),
  34. ]),
  35. editOnTap: ((widget.file.ownerID == null ||
  36. widget.file.ownerID == widget.currentUserID) &&
  37. widget.file.uploadedFileID != null)
  38. ? () {
  39. _showDateTimePicker(widget.file);
  40. }
  41. : null,
  42. );
  43. }
  44. void _showDateTimePicker(File file) async {
  45. final dateResult = await DatePicker.showDatePicker(
  46. context,
  47. minTime: DateTime(1800, 1, 1),
  48. maxTime: DateTime.now(),
  49. currentTime: DateTime.fromMicrosecondsSinceEpoch(file.creationTime!),
  50. locale: LocaleType.en,
  51. theme: Theme.of(context).colorScheme.dateTimePickertheme,
  52. );
  53. if (dateResult == null) {
  54. return;
  55. }
  56. final dateWithTimeResult = await DatePicker.showTime12hPicker(
  57. context,
  58. showTitleActions: true,
  59. currentTime: dateResult,
  60. locale: LocaleType.en,
  61. theme: Theme.of(context).colorScheme.dateTimePickertheme,
  62. );
  63. if (dateWithTimeResult != null) {
  64. if (await editTime(
  65. context,
  66. List.of([widget.file]),
  67. dateWithTimeResult.microsecondsSinceEpoch,
  68. )) {
  69. widget.file.creationTime = dateWithTimeResult.microsecondsSinceEpoch;
  70. setState(() {});
  71. }
  72. }
  73. }
  74. }