Used InfoItemWidget for EXIF tile in file info
This commit is contained in:
parent
941b06ac4f
commit
472377dbdf
|
@ -16,15 +16,17 @@ import "package:photos/models/gallery_type.dart";
|
||||||
import 'package:photos/services/collections_service.dart';
|
import 'package:photos/services/collections_service.dart';
|
||||||
import "package:photos/services/feature_flag_service.dart";
|
import "package:photos/services/feature_flag_service.dart";
|
||||||
import "package:photos/services/object_detection/object_detection_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/theme/ente_theme.dart';
|
||||||
import "package:photos/ui/common/loading_widget.dart";
|
import "package:photos/ui/common/loading_widget.dart";
|
||||||
import "package:photos/ui/components/buttons/chip_button_widget.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/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/divider_widget.dart';
|
||||||
import "package:photos/ui/components/info_item_widget.dart";
|
import "package:photos/ui/components/info_item_widget.dart";
|
||||||
import 'package:photos/ui/components/title_bar_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/file_caption_widget.dart';
|
||||||
import 'package:photos/ui/viewer/file/raw_exif_list_tile_widget.dart';
|
|
||||||
import "package:photos/ui/viewer/gallery/collection_page.dart";
|
import "package:photos/ui/viewer/gallery/collection_page.dart";
|
||||||
import "package:photos/utils/date_time_util.dart";
|
import "package:photos/utils/date_time_util.dart";
|
||||||
import "package:photos/utils/exif_util.dart";
|
import "package:photos/utils/exif_util.dart";
|
||||||
|
@ -32,6 +34,7 @@ import "package:photos/utils/file_util.dart";
|
||||||
import "package:photos/utils/magic_util.dart";
|
import "package:photos/utils/magic_util.dart";
|
||||||
import "package:photos/utils/navigation_util.dart";
|
import "package:photos/utils/navigation_util.dart";
|
||||||
import "package:photos/utils/thumbnail_util.dart";
|
import "package:photos/utils/thumbnail_util.dart";
|
||||||
|
import "package:photos/utils/toast_util.dart";
|
||||||
|
|
||||||
class FileInfoWidget extends StatefulWidget {
|
class FileInfoWidget extends StatefulWidget {
|
||||||
final File file;
|
final File file;
|
||||||
|
@ -226,7 +229,13 @@ class _FileInfoWidgetState extends State<FileInfoWidget> {
|
||||||
]),
|
]),
|
||||||
)
|
)
|
||||||
: null,
|
: null,
|
||||||
_isImage ? RawExifListTileWidget(_exif, widget.file) : null,
|
_isImage
|
||||||
|
? InfoItemWidget(
|
||||||
|
leadingIcon: Icons.text_snippet_outlined,
|
||||||
|
title: "EXIF",
|
||||||
|
subtitleSection: _exifButton(file, _exif),
|
||||||
|
)
|
||||||
|
: null,
|
||||||
];
|
];
|
||||||
|
|
||||||
listTiles.removeWhere(
|
listTiles.removeWhere(
|
||||||
|
@ -281,6 +290,36 @@ class _FileInfoWidgetState extends State<FileInfoWidget> {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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 {
|
Future<List<ChipButtonWidget>> _objectTags(File file) async {
|
||||||
try {
|
try {
|
||||||
final chipButtons = <ChipButtonWidget>[];
|
final chipButtons = <ChipButtonWidget>[];
|
||||||
|
|
|
@ -1,69 +0,0 @@
|
||||||
import 'package:exif/exif.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:photos/ente_theme_data.dart';
|
|
||||||
import "package:photos/models/file.dart";
|
|
||||||
import 'package:photos/ui/viewer/file/exif_info_dialog.dart';
|
|
||||||
import 'package:photos/utils/toast_util.dart';
|
|
||||||
|
|
||||||
enum Status {
|
|
||||||
loading,
|
|
||||||
exifIsAvailable,
|
|
||||||
noExif,
|
|
||||||
}
|
|
||||||
|
|
||||||
class RawExifListTileWidget extends StatelessWidget {
|
|
||||||
final File file;
|
|
||||||
final Map<String, IfdTag>? exif;
|
|
||||||
const RawExifListTileWidget(this.exif, this.file, {Key? key})
|
|
||||||
: super(key: key);
|
|
||||||
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
Status exifStatus = Status.loading;
|
|
||||||
if (exif == null) {
|
|
||||||
exifStatus = Status.loading;
|
|
||||||
} else if (exif!.isNotEmpty) {
|
|
||||||
exifStatus = Status.exifIsAvailable;
|
|
||||||
} else {
|
|
||||||
exifStatus = Status.noExif;
|
|
||||||
}
|
|
||||||
return GestureDetector(
|
|
||||||
onTap: exifStatus == Status.exifIsAvailable
|
|
||||||
? () {
|
|
||||||
showDialog(
|
|
||||||
context: context,
|
|
||||||
builder: (BuildContext context) {
|
|
||||||
return ExifInfoDialog(file);
|
|
||||||
},
|
|
||||||
barrierColor: Colors.black87,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
: exifStatus == Status.noExif
|
|
||||||
? () {
|
|
||||||
showShortToast(context, "This image has no exif data");
|
|
||||||
}
|
|
||||||
: null,
|
|
||||||
child: ListTile(
|
|
||||||
horizontalTitleGap: 2,
|
|
||||||
leading: const Padding(
|
|
||||||
padding: EdgeInsets.only(top: 8),
|
|
||||||
child: Icon(Icons.feed_outlined),
|
|
||||||
),
|
|
||||||
title: const Text("EXIF"),
|
|
||||||
subtitle: Text(
|
|
||||||
exifStatus == Status.loading
|
|
||||||
? "Loading EXIF data.."
|
|
||||||
: exifStatus == Status.exifIsAvailable
|
|
||||||
? "View all EXIF data"
|
|
||||||
: "No EXIF data",
|
|
||||||
style: Theme.of(context).textTheme.bodyText2!.copyWith(
|
|
||||||
color: Theme.of(context)
|
|
||||||
.colorScheme
|
|
||||||
.defaultTextColor
|
|
||||||
.withOpacity(0.5),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue