如何解决在第二次尝试中传递图像,而不是在Flutter中的第一次尝试中传递图像
我需要有关Flutter中图像选择器插件的帮助。当我在警报对话框中按图像或图库并选择我的图像时,则显示背景图像,但未通过/保存,但是当我再次在警报对话框中按图像或图库并选择我的图像时,则同时显示背景图像并通过/保存。我该怎么办?
*s
解决方法
问题出在_pickImage()
方法中。您需要在widget.imagePickfn(_pickedImage);
部分内移动then
。这样。
void _pickImage() {
showDialog<ImageSource>(
context: context,builder: (context) =>
AlertDialog(title: Text("Choose image source"),actions: [
FlatButton(
child: Text("Camera"),onPressed: () => Navigator.pop(context,ImageSource.camera),),FlatButton(
child: Text("Gallery"),ImageSource.gallery),]),).then((ImageSource source) async {
if (source != null) {
final pickedFile = await ImagePicker().getImage(
source: source,imageQuality: 50,maxWidth: 150,);
setState(() => _pickedImage = File(pickedFile.path));
widget.imagePickfn(_pickedImage);
}
});
}
之所以发生这种情况,是因为您在then方法之外调用了widget.imagePickfn(_pickedImage);
方法。关闭对话框后,在then
部分中返回选择的图像结果。这就是为什么第一次尝试不返回图像,而第二次尝试返回先前选择的图像的原因。
希望这可以解决您的问题。
如果上述方法不能解决您的问题,则可以尝试此方法
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
class UserImagePicker extends StatefulWidget {
UserImagePicker(this.imagePickfn);
final void Function(File pickedImage) imagePickfn;
@override
_UserImagePickerState createState() => _UserImagePickerState();
}
class _UserImagePickerState extends State<UserImagePicker> {
File _pickedImage;
void _pickImage() async {
ImageSource source = await showDialog<ImageSource>(
context: context,);
if (source != null) {
final pickedFile = await ImagePicker().getImage(
source: source,);
setState(() => _pickedImage = File(pickedFile.path));
widget.imagePickfn(_pickedImage);
}
}
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
CircleAvatar(
radius: 40,backgroundColor: Theme.of(context).primaryColor,backgroundImage:
_pickedImage != null ? FileImage(_pickedImage) : null,FlatButton.icon(
textColor: Theme.of(context).primaryColor,onPressed: () => _pickImage(),icon: Icon(Icons.image),label: Text('Add an Image'),],);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。