【问题标题】:List addAll throw error :Unhandled Exception: Concurrent modification during iteration:List addAll throw error :Unhandled Exception: 迭代期间并发修改:
【发布时间】:2020-05-08 23:05:06
【问题描述】:

实际发生了什么?

ma​​in.dart

initState中,我们正在调用服务器从数据库中获取图像,然后将其添加到接收器中

var capturedImagesList = List<dynamic>();

    @override
      void initState() {
        super.initState();  
         _bloc.getImages(); // 
        });
      }

集团类

  final _urlImage = BehaviorSubject<List<dynamic>>();
  get urlImageSink => _urlImage.sink;
  get urlImageStream => _urlImage.stream;

 Future getImages() async {
    Response image = await _repo.getImages();  // call server
    var imageResponse = Response.fromJson(image.body);
    urlImageSink.add(imageResponse.images);  // add image to sink
  }

检索到的图片会横向显示ListView

当点击+图片时,它会允许用户从图库中选择一张图片,然后放在ListView旁边,如下图。

一切正常!

但是当我再次单击 + 图像以添加更多图像时,它会抛出这个错误

[错误:flutter/lib/ui/ui_dart_state.cc(157)] 未处理的异常: 迭代中并发修改:Instance(length:3) of '_GrowableList'。 E/颤振(32313):#0 List.addAll (dart:core-patch/growable_array.dart:187:11)

ma​​in.dart

这是从图库中选择图像后的代码。

 @override
  List<dynamic> userImage(File images) {
    if (images != null) {
      capturedImagesList.add(images.path);  // add selected image to List
      capturedImagesList.addAll(_bloc.urlImageStream.value);  // add the server image to list
       _bloc.urlImageSink.add(capturedImagesList);  // add all images to list
    }
    return null;
  }

错误指向这一行

capturedImagesList.addAll(_bloc.urlImageStream.value);

为什么第一次成功,第二次失败了?

【问题讨论】:

  • 你找到解决办法了吗?
  • @rajithShetty 是的
  • @JohnJoe 解决方案是什么?
  • @AjayGautam 我在最后使用 for 循环。

标签: list listview flutter dart


【解决方案1】:

你可以这样做

_bloc.urlImageSink.add([images])

并且图像会立即反映在 UI 中。

我认为问题出在这一行

capturedImagesList.addAll(_bloc.urlImageStream.value);

这看起来很奇怪,你不能将流复制到数组中,它不起作用。

【讨论】:

    【解决方案2】:

    您是否查看过这个帖子:Exception: Concurrent modification during iteration: Instance(length:17) of '_GrowableList'

    我引用这篇文章:

    此错误表示您在迭代期间从集合中添加或删除对象。这是不允许的,因为添加或删除项目会改变集合大小并扰乱后续迭代。

    所以我没有看到所有的代码,但是当您通过添加按钮添加图片时,您会清除列表或删除当前项目吗?

    【讨论】:

      猜你喜欢
      • 2019-09-16
      • 2019-12-14
      • 1970-01-01
      • 1970-01-01
      • 2020-11-19
      • 2020-04-21
      • 2017-03-04
      • 1970-01-01
      • 2011-01-16
      相关资源
      最近更新 更多