Flutter:选择后删除选择文件图像

Posted

技术标签:

【中文标题】Flutter:选择后删除选择文件图像【英文标题】:Flutter : delete pick file image after picked it 【发布时间】:2020-12-24 12:53:55 【问题描述】:

我想在选择后删除图像,但执行此操作后会显示此错误,并且图像容器返回错误屏幕

'package:flutter/src/painting/image_provider.dart':断言失败: 第 854 行 pos 14: 'file != null': is not true.

这是我用来删除图像并显示图像的方法

Container(
        height: MediaQuery.of(context).size.height * 0.2, //list height
        child: ListView.builder(
          itemCount: uploadedFilesList.length,
          shrinkWrap: true,
          scrollDirection: Axis.horizontal,
          itemBuilder: (context, index) 
            return Padding(
              padding: const EdgeInsets.all(8.0),
              child: Container(
                child: Column(
                  children: [
                    InkWell(
                        onTap: () 
                          setState(() 
                            uploadedFilesList[index] = null;
                          );
                        ,
                        child: Icon(Icons.close)),
                    Image.file(
                      uploadedFilesList[index],
                      width: MediaQuery.of(context).size.width * .25,
                      height: MediaQuery.of(context).size.height * .2,
                    ),
                  ],
                ),
              ),
            );
          ,
        ),
      ),

谁能告诉我我的代码哪里出了问题?

【问题讨论】:

【参考方案1】:

在您的 setState 中,您正在设置 UploadedFilesList[index] = null;这意味着您尝试显示的列表中有一个空值:

Image.file(uploadedFilesList[index], ....)

所以基本上,错误是说您将 null 传递给图像提供者。

要修复它,我认为您应该使用以下方法删除该索引处的元素:

setState(() => uploadedFilesList.removeAt(index));

而不是将其设置为 null。

【讨论】:

你是对的,真的感谢你拯救了我的一天,祝你一切顺利【参考方案2】:
setState(() 
     uploadedFilesList[index] = null;
     );

这不应该为空

将 null 替换为任何虚拟 Image 或将 Image 提供程序替换为空容器。 您不能为 Image 提供程序提供空值。

uploadedFilesList[index]==null?Image.file(
           uploadedFilesList[index],
           width: MediaQuery.of(context).size.width * .25,
           height: MediaQuery.of(context).size.height * .2,
                    ):Container(
           width: MediaQuery.of(context).size.width * .25,
           height: MediaQuery.of(context).size.height * .2,),

【讨论】:

以上是关于Flutter:选择后删除选择文件图像的主要内容,如果未能解决你的问题,请参考以下文章

Flutter Image Picker 插件为每个选择的文件分配自己的名称

如何在Flutter中保存图像文件?使用Image_picker插件选择文件

Flutter/Dart - 如何在其他屏幕上的图像选择器后更新图像

在 Flutter 中使用 Multi Image Picker 选择图像后如何获取图像路径?

Flutter Web 的文件夹选择器?

Javascript - 删除从输入文件中选择的图像[重复]