gallery_picker/lib/models/media_file.dart

67 lines
1.7 KiB
Dart
Raw Normal View History

2022-12-29 08:45:28 +03:00
import 'dart:async';
2022-12-25 12:30:20 +03:00
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:photo_gallery/photo_gallery.dart';
import 'package:video_thumbnail/video_thumbnail.dart';
2022-12-25 12:30:20 +03:00
enum MediaType { image, video }
2022-12-25 12:30:20 +03:00
class MediaFile {
2023-01-20 09:58:21 +03:00
Medium? _medium;
File? _file;
2022-12-25 12:30:20 +03:00
Uint8List? thumbnail;
2023-01-20 09:58:21 +03:00
late MediaType _type;
late String _id;
bool get isVideo => _type == MediaType.video;
bool get isImage => _type == MediaType.image;
Medium? get medium => _medium;
MediaType get type => _type;
String get id => _id;
File? get file => _file;
DateTime? get lastModified =>
_medium != null ? _medium!.modifiedDate : _file!.lastModifiedSync();
2023-01-20 09:58:21 +03:00
MediaFile.medium(Medium medium) {
_medium = medium;
_type = _medium!.mediumType == MediumType.video
? MediaType.video
: MediaType.image;
2023-01-20 09:58:21 +03:00
_id = _medium!.id;
2022-12-25 12:30:20 +03:00
}
2023-01-20 09:58:21 +03:00
MediaFile.file(
{required String id, required File file, required MediaType type}) {
_file = file;
_id = id;
_type = type;
}
2023-01-20 09:58:21 +03:00
Future<Uint8List> getThumbnail({bool highQuality = true}) async {
if (_medium == null) {
thumbnail = isVideo
? (await VideoThumbnail.thumbnailData(
video: _file!.path,
imageFormat: ImageFormat.JPEG,
quality: highQuality ? 100 : 20,
))!
: await getData();
} else {
thumbnail = Uint8List.fromList(
await _medium!.getThumbnail(highQuality: highQuality));
2022-12-25 12:30:20 +03:00
}
2023-01-20 09:58:21 +03:00
return thumbnail!;
2022-12-25 12:30:20 +03:00
}
2022-12-29 08:45:28 +03:00
Future<File> getFile() async {
2023-01-20 09:58:21 +03:00
if (_medium != null) {
return await _medium!.getFile();
} else {
2023-01-20 09:58:21 +03:00
return _file!;
}
2022-12-29 08:45:28 +03:00
}
Future<Uint8List> getData() async {
2023-01-20 09:58:21 +03:00
_file ??= await getFile();
return _file!.readAsBytesSync();
2022-12-29 08:45:28 +03:00
}
2022-12-25 12:30:20 +03:00
}