如何解决Flutter multi_image_picker 在选择继续之前等待图像完成加载
当用户从物理设备加载照片时,会有一个圆形加载指示器,如果图像在移动到下一个屏幕之前还没有完成加载,它们将不会被包含在列表中。
在列表加载完成之前,我不想让该选项继续。在使用侦听器完成列表之前,有没有办法让“开始”按钮不出现?我没有使用这样的东西的经验,所以任何帮助将不胜感激。
List<Asset> images = [];
String _error = 'No Error Detected';
List<File> files = [];
@override
void initState() {
super.initState();
}
Future<File> getImageFileFromAsset(String path) async {
final file = File(path);
return file;
}
void getImageList() async {
if (files.length == 0) {
print('files list empty at start');
} else {
files.clear();
}
for (int i = 0; i < images.length; i++) {
var path2 =
await FlutterAbsolutePath.getAbsolutePath(images[i].identifier);
var file = await getImageFileFromAsset(path2);
files.add(file);
}
}
Widget buildGridView() {
return GridView.count(
crossAxisCount: 3,children: List.generate(images.length,(index) {
Asset asset = images[index];
return AssetThumb(
asset: asset,width: 300,height: 300,);
}),);
}
Future<void> loadAssets() async {
List<Asset> resultList = [];
String error = 'No Error Detected';
try {
resultList = await MultiImagePicker.pickImages(
maxImages: 300,enableCamera: false,selectedAssets: images,cupertinoOptions: CupertinoOptions(takePhotoIcon: "chat"),materialOptions: MaterialOptions(
actionBarColor: "#abcdef",actionBarTitle: "Example App",allViewTitle: "All Photos",useDetailsView: false,selectCircleStrokeColor: "#000000",),);
} on Exception catch (e) {
error = e.toString();
}
if (!mounted) return;
setState(() {
images = resultList;
_error = error;
getImageList();
});
}
loadAssets() 在动作中被触发,并且有一个按钮在选择照片后从“选择图像”变为“开始”。如果在图像加载期间可能有一个中间显示“正在加载”,然后在图像完全加载后立即更改为“开始”,那将是理想的。
//TODO set up listener that changes to START once all images are loaded.
Widget _startButton() {
if (images.length > 2 && images.length == files.length
) {
return GestureDetector(
onTap: () {
Navigator.push(
context,//CardPage.id);
MaterialPageRoute(
builder: (context) => CardPage(
favpicz: files,);
},child: Container(
color: kLitePrimaryColor,padding: EdgeInsets.all(15.0),width: double.infinity,height: 90.0,child: Center(
child: Text(
'START',style: TextStyle(fontSize: 35.0,fontWeight: FontWeight.w300,letterSpacing: 5,color: Colors.white),);
// } else if (images.length > 2 && files.length < images.length) {
// return ButtonTheme(
// minWidth: double.infinity,// height: 100.0,// child: FlatButton(
// textColor: Colors.white,// color: PrimaryColor,// padding: EdgeInsets.all(15.0),// child: Text(
// 'Waiting for images to load',// style: TextStyle(fontSize: 35.0,fontWeight: FontWeight.w400),// ),// onPressed: () {
// print('Waiting for images to load');
// },// ),// );
} else {
return GestureDetector(
onTap: () {loadAssets();
},child: Center(
child: Text(
'SELECT IMAGES',style: TextStyle(fontSize: 20.0,letterSpacing: 5),);
}
}
我已经尝试设置条件来执行此操作,但它不听,因此在完成加载时帮助它切换会很棒。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。