ente/lib/ui/image_info_dialog.dart

129 lines
3.5 KiB
Dart
Raw Normal View History

2021-07-06 12:02:45 +00:00
import 'package:exif/exif.dart';
2021-07-06 11:50:35 +00:00
import 'package:flutter/material.dart';
2021-07-06 12:02:45 +00:00
import 'package:logging/logging.dart';
2021-07-06 11:50:35 +00:00
import 'package:photo_manager/photo_manager.dart';
import 'package:photos/models/file.dart';
import 'package:photos/models/file_type.dart';
import 'package:photos/services/collections_service.dart';
import 'package:photos/utils/date_time_util.dart';
2021-07-06 12:02:45 +00:00
import 'package:photos/utils/file_util.dart';
2021-07-06 11:50:35 +00:00
2021-07-06 12:02:45 +00:00
class FileInfoWidget extends StatefulWidget {
2021-07-06 11:50:35 +00:00
final File file;
final AssetEntity entity;
final int fileSize;
2021-07-06 11:51:51 +00:00
const FileInfoWidget(
this.file,
this.entity,
this.fileSize, {
Key key,
}) : super(key: key);
2021-07-06 11:50:35 +00:00
2021-07-06 12:02:45 +00:00
@override
_FileInfoWidgetState createState() => _FileInfoWidgetState();
}
class _FileInfoWidgetState extends State<FileInfoWidget> {
@override
void initState() {
_getExif();
super.initState();
}
2021-07-06 11:50:35 +00:00
@override
Widget build(BuildContext context) {
var items = <Widget>[
Row(
children: [
Icon(Icons.calendar_today_outlined),
Padding(padding: EdgeInsets.all(4)),
Text(getFormattedTime(
2021-07-06 12:02:45 +00:00
DateTime.fromMicrosecondsSinceEpoch(widget.file.creationTime))),
2021-07-06 11:50:35 +00:00
],
),
Padding(padding: EdgeInsets.all(4)),
Row(
children: [
Icon(Icons.folder_outlined),
Padding(padding: EdgeInsets.all(4)),
2021-07-06 12:02:45 +00:00
Text(widget.file.deviceFolder ??
2021-07-06 11:50:35 +00:00
CollectionsService.instance
2021-07-06 12:02:45 +00:00
.getCollectionByID(widget.file.collectionID)
2021-07-06 11:50:35 +00:00
.name),
],
),
Padding(padding: EdgeInsets.all(4)),
];
2021-07-06 12:02:45 +00:00
if (widget.file.localID != null) {
2021-07-06 11:50:35 +00:00
items.add(Row(
children: [
Icon(Icons.sd_storage_outlined),
Padding(padding: EdgeInsets.all(4)),
2021-07-06 12:02:45 +00:00
Text((widget.fileSize / (1024 * 1024)).toStringAsFixed(2) + " MB"),
2021-07-06 11:50:35 +00:00
],
2021-07-06 12:02:45 +00:00
),);
2021-07-06 11:50:35 +00:00
items.add(
Padding(padding: EdgeInsets.all(4)),
);
2021-07-06 12:02:45 +00:00
if (widget.file.fileType == FileType.image) {
2021-07-06 11:50:35 +00:00
items.add(Row(
children: [
Icon(Icons.photo_size_select_actual_outlined),
Padding(padding: EdgeInsets.all(4)),
2021-07-06 12:02:45 +00:00
Text(widget.entity.width.toString() +
" x " +
widget.entity.height.toString()),
2021-07-06 11:50:35 +00:00
],
2021-07-06 12:02:45 +00:00
),);
2021-07-06 11:50:35 +00:00
} else {
2021-07-06 12:02:45 +00:00
items.add(
Row(
children: [
Icon(Icons.timer_outlined),
Padding(padding: EdgeInsets.all(4)),
Text(widget.entity.videoDuration.toString().split(".")[0]),
],
),
);
2021-07-06 11:50:35 +00:00
}
items.add(
Padding(padding: EdgeInsets.all(4)),
);
}
2021-07-06 12:02:45 +00:00
if (widget.file.uploadedFileID != null) {
2021-07-06 11:50:35 +00:00
items.add(Row(
children: [
Icon(Icons.cloud_upload_outlined),
Padding(padding: EdgeInsets.all(4)),
Text(getFormattedTime(
2021-07-06 12:02:45 +00:00
DateTime.fromMicrosecondsSinceEpoch(widget.file.updationTime))),
2021-07-06 11:50:35 +00:00
],
));
}
return AlertDialog(
2021-07-06 12:02:45 +00:00
title: Text(widget.file.title),
2021-07-06 11:50:35 +00:00
content: SingleChildScrollView(
child: ListBody(
children: items,
),
),
actions: <Widget>[
FlatButton(
child: Text('ok'),
onPressed: () {
Navigator.of(context, rootNavigator: true).pop('dialog');
},
),
],
);
}
2021-07-06 12:02:45 +00:00
Future<void> _getExif() async {
final exif = await readExifFromFile(await getFile(widget.file));
for (String key in exif.keys) {
Logger("ImageInfo").info("$key (${exif[key].tagType}): ${exif[key]}");
}
}
2021-07-06 11:50:35 +00:00
}