Skip to content

Commit 85def67

Browse files
committed
✨ Support HEIC/HEIF image type.
1 parent 8507a2d commit 85def67

File tree

2 files changed

+21
-19
lines changed

2 files changed

+21
-19
lines changed

lib/src/provider/asset_entity_image_provider.dart

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,17 @@ class AssetEntityImageProvider extends ImageProvider<AssetEntityImageProvider> {
3131
/// 选择载入原数据还是缩略图数据
3232
final bool isOriginal;
3333

34+
/// File type for the image asset, use it for some special type detection.
35+
/// 图片资源的类型,用于某些特殊类型的判断
3436
ImageFileType _imageFileType;
3537

3638
ImageFileType get imageFileType => _imageFileType ?? _getType();
3739

3840
@override
3941
ImageStreamCompleter load(
40-
AssetEntityImageProvider key, DecoderCallback decode) {
42+
AssetEntityImageProvider key,
43+
DecoderCallback decode,
44+
) {
4145
return MultiFrameImageStreamCompleter(
4246
codec: _loadAsync(key, decode),
4347
scale: key.scale,
@@ -56,11 +60,17 @@ class AssetEntityImageProvider extends ImageProvider<AssetEntityImageProvider> {
5660
}
5761

5862
Future<ui.Codec> _loadAsync(
59-
AssetEntityImageProvider key, DecoderCallback decode) async {
63+
AssetEntityImageProvider key,
64+
DecoderCallback decode,
65+
) async {
6066
assert(key == this);
6167
Uint8List data;
6268
if (isOriginal ?? false) {
63-
data = await key.entity.originBytes;
69+
if (imageFileType == ImageFileType.heic) {
70+
data = await (await key.entity.file).readAsBytes();
71+
} else {
72+
data = await key.entity.originBytes;
73+
}
6474
} else {
6575
data = await key.entity.thumbDataWithSize(thumbSize, thumbSize);
6676
}

lib/src/widget/asset_picker.dart

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -662,22 +662,14 @@ class AssetPicker extends StatelessWidget {
662662
} else if (asset.type == AssetType.video) {
663663
type = SpecialAssetType.video;
664664
}
665-
if (type != SpecialAssetType.heic) {
666-
loader = FadeImageBuilder(
667-
child: _succeedItem(
668-
context,
669-
index,
670-
state.completedWidget,
671-
specialAssetType: type,
672-
),
673-
);
674-
} else {
675-
loader = Center(
676-
child: Text(
677-
Constants.textDelegate.heicNotSupported,
678-
),
679-
);
680-
}
665+
loader = FadeImageBuilder(
666+
child: _succeedItem(
667+
context,
668+
index,
669+
state.completedWidget,
670+
specialAssetType: type,
671+
),
672+
);
681673
break;
682674
case LoadState.failed:
683675
loader = _failedItem;

0 commit comments

Comments
 (0)