之前一直使用几千star的image_picker,后来发现这个包有几个问题
1、安卓系统中,选择相册图片,会自动压缩的很模糊,严重失真(虚拟机和实际都这样)
2、安卓系统中,选择相册图片的UI很难看,和国人使用习惯相差很大
3、安卓系统中,调用相机,调用的是原生相机,app会自动切换到后台,并且有可能被系统后台kill,拍照完成,返回app后,app重启到首页。
4、安卓系统中,调用相机拍照,有个bug,会同时返回两次结果,导致添加两张照片。
于是选择了wechat_assets_picker和wechat_camera_picker
这个插件内部使用了photo_manage这个插件,所以很多配置也是photo_manage到配置。
开始配置
添加到pubspec.yaml
wechat_assets_picker: ^6.3.1
wechat_camera_picker: ^2.6.4
1、AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<!--读写图片文件-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" />
2、android/app/build.gradle
最低sdk版本21
defaultConfig {
minSdkVersion 21
}
3、android/build.gradle
ext.kotlin_version = '1.5.21'
使用
onTapPickFromGallery() async{
final List<AssetEntity>? entitys = await AssetPicker.pickAssets(context,maxAssets: 6);
if(entitys == null) return;
List<String> chooseImagesPath = [];
//遍历
for(var entity in entitys){
File? imgFile = await entity.file;
if(imgFile != null) chooseImagesPath.add(imgFile.path);
}
print('选择照片路径:$chooseImagesPath');
}
onTapPickFromCamera() async{
final AssetEntity? entity = await CameraPicker.pickFromCamera(context);
if(entity == null) return;
File? imgFile = await entity.file;
if(imgFile == null) return;
print('照片路径:${imgFile.path}');
}
相册选取效果
image.png
网友评论