123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- import "package:exif/exif.dart";
- import "package:flutter/material.dart";
- import "package:photos/models/file.dart";
- import "package:photos/theme/colors.dart";
- import "package:photos/theme/ente_theme.dart";
- import "package:photos/ui/components/buttons/inline_button_widget.dart";
- import "package:photos/ui/components/info_item_widget.dart";
- import "package:photos/ui/viewer/file/exif_info_dialog.dart";
- import "package:photos/utils/toast_util.dart";
- class BasicExifItemWidget extends StatelessWidget {
- final Map<String, dynamic> exifData;
- const BasicExifItemWidget(this.exifData, {super.key});
- @override
- Widget build(BuildContext context) {
- final subtitleTextTheme = getEnteTextTheme(context).smallMuted;
- return InfoItemWidget(
- key: const ValueKey("Basic EXIF"),
- leadingIcon: Icons.camera_outlined,
- title: exifData["takenOnDevice"] ?? "--",
- subtitleSection: Future.value([
- if (exifData["fNumber"] != null)
- Text(
- 'ƒ/' + exifData["fNumber"].toString(),
- style: subtitleTextTheme,
- ),
- if (exifData["exposureTime"] != null)
- Text(
- exifData["exposureTime"],
- style: subtitleTextTheme,
- ),
- if (exifData["focalLength"] != null)
- Text(
- exifData["focalLength"].toString() + "mm",
- style: subtitleTextTheme,
- ),
- if (exifData["ISO"] != null)
- Text(
- "ISO" + exifData["ISO"].toString(),
- style: subtitleTextTheme,
- ),
- ]),
- );
- }
- }
- class AllExifItemWidget extends StatelessWidget {
- final File file;
- final Map<String, IfdTag>? exif;
- const AllExifItemWidget(
- this.file,
- this.exif, {
- super.key,
- });
- @override
- Widget build(BuildContext context) {
- return InfoItemWidget(
- leadingIcon: Icons.text_snippet_outlined,
- title: "EXIF",
- subtitleSection: _exifButton(context, file, exif),
- );
- }
- Future<List<InlineButtonWidget>> _exifButton(
- BuildContext context,
- 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,
- )
- ]);
- }
- }
|