列表addAll抛出错误:Unhandled Exception: Concurrent modification during iteration:

标签 list listview flutter dart

到底发生了什么?

ma​​in.dart

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

var capturedImagesList = List<dynamic>();

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

block 类

  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中。

enter image description here

当单击 + 图像时,它将允许用户从图库中选择图像,然后将其放置在 ListView 旁边,如下图所示。

enter image description here

一切正常!

但是当我再次单击 + 图像以添加另一张图像时,它会向我们抛出此错误

[ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: Concurrent modification during iteration: Instance(length:3) of '_GrowableList'. E/flutter (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);

为什么第一次可以,第二次就失败了?

最佳答案

你可以这样做

_bloc.urlImageSink.add([images])

图像会立即反射(reflect)在 UI 中。

我认为问题出在这一行

capturedImagesList.addAll(_bloc.urlImageStream.value);

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

关于列表addAll抛出错误:Unhandled Exception: Concurrent modification during iteration:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59865627/

相关文章:

ios - flutter iOS​​。字体在调试模拟器和发布设备中看起来不同

c# - 如何将 WorkItemCollection 转换为列表

python - 如何测试求和树?

java - 单击时返回整个字符串的 Spannable 字符串

android - ListView 和页脚 - 如何消除它们之间的空间?

java - Flutter:如何将原生 SDK(Spotify Android SDK)添加到应用程序中?

list - 方案将条目转换为列表

python - 在同一个循环中迭代两个列表

java - 在 ListView 中完整显示列表

android - 如何在flutter mobile中保存网站以供离线使用