【问题标题】:Flutter image_picker "'PickedFile'" can't be assigned to the parameter type 'File'Flutter image_picker“'PickedFile'”无法分配给参数类型'File'
【发布时间】:2020-10-14 23:14:36
【问题描述】:

我在我的代码中调用一个小部件以通过图像选择器插件显示选定的图像;以下是我的代码:

Widget _imagePlaceHolder() {
if (imageSelected == null){
  return Text("No File Selected!!");
} else {
  Image.file(imageSelected, width: 400, height: 400);
}

}

但我收到此错误:

参数类型“'PickedFile'”不能分配给参数类型'File'

在else语句下的imageSelected上。

我正在从图库中挑选这样的图片:

Future _openGallery(BuildContext context) async {
var picture = await picker.getImage(source: ImageSource.gallery);
this.setState(() {
  imageSelected = picture;
});}

我已经定义: PickedFile imageSelected; 最终选择器 = ImagePicker();

这里出了什么问题?请帮忙..

【问题讨论】:

    标签: image flutter picker


    【解决方案1】:

    Image.file() 接受 File 类类型的属性,而 ImagePicker().getImage() 方法返回 PickedFile 类型。

    我们必须利用返回的PickedFile 参数的getter .path 并将该文件路径传递给创建File 对象,如下所示:

    void _setImage() async {
        final picker = ImagePicker();
        PickedFile pickedFile = await picker.getImage(source: ImageSource.gallery);
        imageFile = File(pickedFile.path);
    }
    

    这可以在一行中完成,如下所示:

    void _setImage() async {
        imageFile = File(await ImagePicker().getImage(source: ImageSource.gallery).then((pickedFile) => pickedFile.path));
    }
    

    之后,您可以根据需要使用变量imageFile 并将其传递到Image.file() 中,如Image.file(imageFile),或FileImage(),如FileImage(imageFile)

    更多信息,请参阅image_picker documentation on pub.dev

    【讨论】:

    • 这是移动设备的答案。网络怎么做?
    【解决方案2】:
    //many time when user import dart.html package than it throw error so keep note that we have to import dart.io
    
    import 'dart.io';
    
    
    final imagePicker = ImagePicker();
    File imageFile;
    
    Future getImage() async {
      var image = await imagePicker.getImage(source: ImageSource.camera);
      setState(() {
        imageFile = File(image.path);
      });
    }
    

    【讨论】:

      【解决方案3】:

      PickedFile imageSelected 更改为File imageSelected 并使用ImagePicker.pickImage(source: ImageSource.gallery) 而不是 picker.getImage(source: ImageSource.gallery);

      【讨论】:

      • 仍然不起作用....如果我进行建议的更改,那么它会在我的代码中的“图片”上给出错误..错误是:“PickedFile”类型的值不能分配给“文件”类型的变量。尝试更改变量的类型,或将右侧类型转换为 'File'.dartinvalid_assignment
      • 您可以使用经典的ImagePicker.pickImage(source: ImageSource.gallery)。我更新了我的答案
      【解决方案4】:
      import 'package:image_picker/image_picker.dart';
      import 'dart:io';  
      
        var image;
            void imagem() async {
              PickedFile picked = await ImagePicker().getImage(
                  preferredCameraDevice: CameraDevice.front, source: ImageSource.camera);
              setState(() {
                image = File(picked.path);
              });
            }
      

      或者如果你需要完整的代码:

          import 'dart:io';
      import 'package:flutter/material.dart';
      import 'package:image_picker/image_picker.dart';
      
      class Photos extends StatefulWidget {
        @override
        _PhotosState createState() => _PhotosState();
      }
      
      class _PhotosState extends State<Photos> {
        var image;
        void imagem() async {
          PickedFile picked = await ImagePicker().getImage(
              preferredCameraDevice: CameraDevice.front, source: ImageSource.camera);
          setState(() {
            image = File(picked.path);
          });
        }
      
        @override
        Widget build(BuildContext context) {
          return SingleChildScrollView(
              child: Center(
            child: Column(
              children: [
                RaisedButton(
                  onPressed: imagem,
                  child: Text("Imagem"),
                ),
                image != null ? Image.file(image) : Text("I")
              ],
            ),
          ));
        }
      }
      

      【讨论】:

        【解决方案5】:

        墨菲斯的答案是正确的。

        只需将PickedFile 变量路径传递给File()

        例子:

        final picker = ImagePicker();
            PickedFile pickedFile = await picker.getImage(source: ImageSource.gallery);
            imageFile = File(pickedFile.path);
        

        【讨论】:

          【解决方案6】:

          尝试将您的 imageFile 类型转换为 PickedImage 并以 Casting the imageFile to File 类型返回文件,例如:- // 这里声明变量

          PickedImage 图像文件;

          并且在返回时:-

          return Image.file(File(imageFile.path),width: 400,height: 400,);

          我个人遇到过这个问题,这个解决方案解决了它。

          【讨论】:

          • 请使用 StackOverflow 编辑器中的文本格式选项。正确的格式有助于轻松阅读您的答案。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-08-14
          • 1970-01-01
          • 2021-05-13
          • 1970-01-01
          • 2020-10-22
          • 2021-06-10
          • 2021-03-13
          相关资源
          最近更新 更多