Flutter - ImagePicker 不显示选中的图片

Flutter - ImagePicker does not display the image selected

我正在尝试使用 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,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,
                                        child: Column(
                                          mainAxisAlignment: MainAxisAlignment.center,
                                          children: [
                                            Icon(Icons.add_a_photo_rounded),
                                            Text('Photo'),
                                          ],
                                        )
                                    ),
                                    onTap: () {
                                      
                                    },
                                  ),
                                ),

//Voice Recording
                                FlatButton(
                                  onPressed: () {  },
                                  child:
                                  InkWell(
                                    child: Container(
                                      //   color: Colors.white,
                                        child: Column(
                                          mainAxisAlignment: MainAxisAlignment.center,
                                          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",style: TextStyle(
                              fontSize: 18.0,fontWeight: FontWeight.bold,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不是return一种文件类型,而是一种

Future<PickedFile>

因此您需要执行以下操作。

final image =  await ImagePicker().getImage(source: ImageSource.gallery);
 this.setState(() {
imageFile = File(image.path);
    });