如何解决Flutter - ImagePicker 不显示所选图像
我正在尝试使用 ImagePicker。选择图像后,它不会显示在屏幕上。值似乎为空。在下面,您将找到完整的源代码。我做了一些研究,但我没有发现我在做什么错误。如果你能指出我正确的方向,那就太好了,也很感激。非常感谢。
class CaptureV2 extends StatefulWidget {
CaptureV2({Key key}) : super(key: key);
@override
_CaptureV2State createState() => _CaptureV2State();
}
class _CaptureV2State extends State<CaptureV2> {
GlobalKey<FormState> _captureFormKey = GlobalKey<FormState>();
bool isOn = true;
String _valueTaskNameChanged = '';
String _valueTaskNameToValidate ='';
String _valueTaskNameSaved='';
File imageFile;
_openGallery(BuildContext context) async{
imageFile = await ImagePicker().getImage(source: ImageSource.gallery) as File;
this.setState(() {
});
}
_openCamera(BuildContext context) async {
imageFile = await ImagePicker().getImage(source: ImageSource.camera) as File;
this.setState(() {
});
}
Widget _showImageView(context){ //Even when I am selecting an image I always get null
if(imageFile ==null) {
return Text('No attachment');
}else{
return Image.file(imageFile,width: 200,height: 200,);
}
}
@override
Widget build(BuildContext context) {
return Material(
child: Scaffold(
drawer: MyMenu(),appBar: AppBar(
centerTitle: true,title: Text('CAPTURE'),actions: <Widget>[
Padding(
padding: const EdgeInsets.fromLTRB(0,22,0),child: Text("On/Off"),),Switch(
value: isOn,onChanged: (value) {
setState(() {
isOn = value;
});
},activeTrackColor: Colors.green,activeColor: Colors.green,],//==================
body: isOn?
SingleChildScrollView(
child: Column(
// crossAxisAlignment: CrossAxisAlignment.end,// mainAxisAlignment: MainAxisAlignment.end,children: [
Form(
key: _captureFormKey,child: Column(
// crossAxisAlignment: CrossAxisAlignment.end,mainAxisAlignment: MainAxisAlignment.start,children: <Widget>[
Padding(
padding: const EdgeInsets.fromLTRB(8.0,0.0,15.0,1.0),child: TextFormField(
decoration: InputDecoration(hintText: "Task Name"),maxLength: 100,maxLines: 3,onChanged: (valProjectName) => setState(() => _valueTaskNameChanged = valProjectName),validator: (valProjectName) {
setState(() => _valueTaskNameToValidate = valProjectName);
return valProjectName.isEmpty? "Task name cannot be empty" : null;
},onSaved: (valProjectName) => setState(() => _valueTaskNameSaved = valProjectName),SizedBox(
height: 50.0,//########ATTACHEMENT & PHOTOS
Card(
child:
Container(
// color: Colors.red,alignment: Alignment.center,child: Row(
mainAxisAlignment: MainAxisAlignment.center,children:[
//Attachement
FlatButton(
onPressed: () {
},child:
InkWell(
child: Container(
// color: Colors.white,child: Column(
mainAxisAlignment: MainAxisAlignment.center,children: [
Icon(Icons.attach_file),Text('Attachement'),)
),onTap: () {
_openGallery(context);
},//Photo
FlatButton(
onPressed: () {(); },child:
InkWell(
child: Container(
// color: Colors.white,children: [
Icon(Icons.add_a_photo_rounded),Text('Photo'),onTap: () {
},//Voice Recording
FlatButton(
onPressed: () { },children: [
ConstrainedBox(
constraints: BoxConstraints(
minWidth: iconSize,minHeight: iconSize,maxWidth: iconSize,maxHeight: iconSize,child: Image.asset('assets/icons/microphone.png',fit: BoxFit.cover),Text('Recording'),onTap: () {
MyApp_AZERTY();
},)
),]
),Container(
child:
_showImageView(context)
),SizedBox(
height: 150.0,//CANCEL & SAVE
Container(
decoration: const BoxDecoration(
border: Border(
top: BorderSide(width: 1.0,color: Colors.grey),child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,children: <Widget>[
Container(
child:
FlatButton(
child: Text("Cancel",style: TextStyle(
fontSize: 18.0,fontWeight: FontWeight.bold,color: Colors.grey
)
),onPressed: (){
final loForm = _captureFormKey.currentState;
loForm.reset();
},Container(
child: FlatButton(
child: Text("Save",color: Colors.blue
)),// Border.all(width: 1.0,color: Colors.black),onPressed: (){}
loForm.reset();
showSimpleFlushbar(context,'Task Saved',_valueTaskNameSaved,Icons.mode_comment);
}
loForm.reset();
},) :
解决方法
问题是getImage不返回文件的类型,而是返回的类型
Future<PickedFile>
因此您需要执行以下操作。
final image = await ImagePicker().getImage(source: ImageSource.gallery);
this.setState(() {
imageFile = File(image.path);
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。