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
|
|
|
}
|