123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- import "package:exif/exif.dart";
- import "package:flutter/material.dart";
- import "package:photos/generated/l10n.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/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).miniMuted;
- 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 StatefulWidget {
- final File file;
- final Map<String, IfdTag>? exif;
- const AllExifItemWidget(
- this.file,
- this.exif, {
- super.key,
- });
- @override
- State<AllExifItemWidget> createState() => _AllExifItemWidgetState();
- }
- class _AllExifItemWidgetState extends State<AllExifItemWidget> {
- VoidCallback? _onTap;
- @override
- void initState() {
- super.initState();
- }
- @override
- Widget build(BuildContext context) {
- return InfoItemWidget(
- leadingIcon: Icons.text_snippet_outlined,
- title: S.of(context).exif,
- subtitleSection: _exifButton(context, widget.file, widget.exif),
- onTap: _onTap,
- );
- }
- Future<List<Widget>> _exifButton(
- BuildContext context,
- File file,
- Map<String, IfdTag>? exif,
- ) async {
- late final String label;
- late final VoidCallback? onTap;
- if (exif == null) {
- label = S.of(context).loadingExifData;
- onTap = null;
- } else if (exif.isNotEmpty) {
- label = S.of(context).viewAllExifData;
- onTap = () => showDialog(
- context: context,
- builder: (BuildContext context) {
- return ExifInfoDialog(file);
- },
- barrierColor: backdropFaintDark,
- );
- } else {
- label = S.of(context).noExifData;
- onTap =
- () => showShortToast(context, S.of(context).thisImageHasNoExifData);
- }
- setState(() {
- _onTap = onTap;
- });
- return Future.value([
- Text(label, style: getEnteTextTheme(context).miniBoldMuted),
- ]);
- }
- }
|