Refactored FilePropertiesItemWidget
This commit is contained in:
parent
f40d7d31ce
commit
c084675552
|
@ -1,11 +1,8 @@
|
|||
import "package:flutter/cupertino.dart";
|
||||
import "package:flutter/material.dart";
|
||||
import 'package:path/path.dart' as path;
|
||||
import "package:photo_manager/photo_manager.dart";
|
||||
import "package:photos/models/file.dart";
|
||||
import "package:photos/models/file_type.dart";
|
||||
import "package:photos/theme/ente_theme.dart";
|
||||
import "package:photos/ui/common/loading_widget.dart";
|
||||
import "package:photos/ui/components/info_item_widget.dart";
|
||||
import "package:photos/utils/date_time_util.dart";
|
||||
import "package:photos/utils/file_util.dart";
|
||||
|
@ -30,8 +27,6 @@ class FilePropertiesWidget extends StatefulWidget {
|
|||
class _FilePropertiesWidgetState extends State<FilePropertiesWidget> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final bool showDimension = widget.exifData["resolution"] != null &&
|
||||
widget.exifData["megaPixels"] != null;
|
||||
return InfoItemWidget(
|
||||
key: const ValueKey("File properties"),
|
||||
leadingIcon: widget.isImage
|
||||
|
@ -39,18 +34,7 @@ class _FilePropertiesWidgetState extends State<FilePropertiesWidget> {
|
|||
: Icons.video_camera_back_outlined,
|
||||
title: path.basenameWithoutExtension(widget.file.displayName) +
|
||||
path.extension(widget.file.displayName).toUpperCase(),
|
||||
subtitleSection: Future.value([
|
||||
if (showDimension)
|
||||
Text(
|
||||
"${widget.exifData["megaPixels"]}MP "
|
||||
"${widget.exifData["resolution"]} ",
|
||||
style: getEnteTextTheme(context).smallMuted,
|
||||
),
|
||||
_getFileSize(),
|
||||
if ((widget.file.fileType == FileType.video) &&
|
||||
(widget.file.localID != null || widget.file.duration != 0))
|
||||
_getVideoDuration(),
|
||||
]),
|
||||
subtitleSection: _subTitleSection(),
|
||||
editOnTap: widget.file.uploadedFileID == null ||
|
||||
widget.file.ownerID != widget.currentUserID
|
||||
? null
|
||||
|
@ -61,60 +45,54 @@ class _FilePropertiesWidgetState extends State<FilePropertiesWidget> {
|
|||
);
|
||||
}
|
||||
|
||||
Widget _getFileSize() {
|
||||
Future<int> fileSizeFuture;
|
||||
if (widget.file.fileSize != null) {
|
||||
fileSizeFuture = Future.value(widget.file.fileSize);
|
||||
} else {
|
||||
fileSizeFuture = getFile(widget.file).then((f) => f!.length());
|
||||
}
|
||||
return FutureBuilder<int>(
|
||||
future: fileSizeFuture,
|
||||
builder: (context, snapshot) {
|
||||
if (snapshot.hasData) {
|
||||
return Text(
|
||||
(snapshot.data! / (1024 * 1024)).toStringAsFixed(2) + " MB",
|
||||
style: getEnteTextTheme(context).smallMuted,
|
||||
);
|
||||
} else {
|
||||
return SizedBox.fromSize(
|
||||
size: const Size.square(16),
|
||||
child: EnteLoadingWidget(
|
||||
padding: 3,
|
||||
color: getEnteColorScheme(context).strokeMuted,
|
||||
),
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
Future<List<Widget>> _subTitleSection() async {
|
||||
final bool showDimension = widget.exifData["resolution"] != null &&
|
||||
widget.exifData["megaPixels"] != null;
|
||||
final subSectionWidgets = <Widget>[];
|
||||
|
||||
Widget _getVideoDuration() {
|
||||
if (widget.file.duration != 0) {
|
||||
return Text(
|
||||
secondsToHHMMSS(widget.file.duration!),
|
||||
style: getEnteTextTheme(context).smallMuted,
|
||||
if (showDimension) {
|
||||
subSectionWidgets.add(
|
||||
Text(
|
||||
"${widget.exifData["megaPixels"]}MP "
|
||||
"${widget.exifData["resolution"]} ",
|
||||
style: getEnteTextTheme(context).smallMuted,
|
||||
),
|
||||
);
|
||||
}
|
||||
return FutureBuilder<AssetEntity?>(
|
||||
future: widget.file.getAsset,
|
||||
builder: (context, snapshot) {
|
||||
if (snapshot.hasData) {
|
||||
return Text(
|
||||
snapshot.data!.videoDuration.toString().split(".")[0],
|
||||
style: getEnteTextTheme(context).smallMuted,
|
||||
);
|
||||
} else {
|
||||
return Center(
|
||||
child: SizedBox.fromSize(
|
||||
size: const Size.square(24),
|
||||
child: const CupertinoActivityIndicator(
|
||||
radius: 8,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
int fileSize;
|
||||
if (widget.file.fileSize != null) {
|
||||
fileSize = widget.file.fileSize!;
|
||||
} else {
|
||||
fileSize = await getFile(widget.file).then((f) => f!.length());
|
||||
}
|
||||
subSectionWidgets.add(
|
||||
Text(
|
||||
(fileSize / (1024 * 1024)).toStringAsFixed(2) + " MB",
|
||||
style: getEnteTextTheme(context).smallMuted,
|
||||
),
|
||||
);
|
||||
|
||||
if ((widget.file.fileType == FileType.video) &&
|
||||
(widget.file.localID != null || widget.file.duration != 0)) {
|
||||
if (widget.file.duration != 0) {
|
||||
subSectionWidgets.add(
|
||||
Text(
|
||||
secondsToHHMMSS(widget.file.duration!),
|
||||
style: getEnteTextTheme(context).smallMuted,
|
||||
),
|
||||
);
|
||||
} else {
|
||||
final asset = await widget.file.getAsset;
|
||||
subSectionWidgets.add(
|
||||
Text(
|
||||
asset!.videoDuration.toString().split(".")[0],
|
||||
style: getEnteTextTheme(context).smallMuted,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return Future.value(subSectionWidgets);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue