raw_exif_button.dart 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. // @dart=2.9
  2. import 'package:exif/exif.dart';
  3. import 'package:flutter/cupertino.dart';
  4. import 'package:flutter/material.dart';
  5. import 'package:photos/ente_theme_data.dart';
  6. import "package:photos/models/file.dart";
  7. import 'package:photos/ui/viewer/file/exif_info_dialog.dart';
  8. import 'package:photos/utils/toast_util.dart';
  9. enum Status {
  10. loading,
  11. exifIsAvailable,
  12. noExif,
  13. }
  14. class RawExifButton extends StatelessWidget {
  15. final File file;
  16. final Map<String, IfdTag> exif;
  17. const RawExifButton(this.exif, this.file, {Key key}) : super(key: key);
  18. @override
  19. Widget build(BuildContext context) {
  20. Status exifStatus = Status.loading;
  21. if (exif == null) {
  22. exifStatus = Status.loading;
  23. } else if (exif.isNotEmpty) {
  24. exifStatus = Status.exifIsAvailable;
  25. } else {
  26. exifStatus = Status.noExif;
  27. }
  28. return GestureDetector(
  29. onTap:
  30. exifStatus == Status.loading || exifStatus == Status.exifIsAvailable
  31. ? () {
  32. showDialog(
  33. context: context,
  34. builder: (BuildContext context) {
  35. return ExifInfoDialog(file);
  36. },
  37. barrierColor: Colors.black87,
  38. );
  39. }
  40. : exifStatus == Status.noExif
  41. ? () {
  42. showShortToast(context, "This image has no exif data");
  43. }
  44. : null,
  45. child: Container(
  46. height: 40,
  47. width: 140,
  48. decoration: BoxDecoration(
  49. color: Theme.of(context)
  50. .colorScheme
  51. .inverseBackgroundColor
  52. .withOpacity(0.12),
  53. borderRadius: const BorderRadius.all(
  54. Radius.circular(20),
  55. ),
  56. ),
  57. child: Center(
  58. child: exifStatus == Status.loading
  59. ? Row(
  60. mainAxisAlignment: MainAxisAlignment.center,
  61. children: const [
  62. CupertinoActivityIndicator(
  63. radius: 8,
  64. ),
  65. SizedBox(
  66. width: 8,
  67. ),
  68. Text('EXIF')
  69. ],
  70. )
  71. : exifStatus == Status.exifIsAvailable
  72. ? Row(
  73. mainAxisAlignment: MainAxisAlignment.center,
  74. children: const [
  75. Icon(Icons.feed_outlined),
  76. SizedBox(
  77. width: 8,
  78. ),
  79. Text('Raw EXIF'),
  80. ],
  81. )
  82. : Row(
  83. mainAxisAlignment: MainAxisAlignment.center,
  84. children: const [
  85. Icon(Icons.feed_outlined),
  86. SizedBox(
  87. width: 8,
  88. ),
  89. Text('No EXIF'),
  90. ],
  91. ),
  92. ),
  93. ),
  94. );
  95. }
  96. }