到底发生了什么?
- 主省道**
在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)]未处理的异常:迭代过程中并发修改:"_GrowableList"的示例(长度:3). E/flutter(32313):#0列表.添加全部(dart:核心补丁/可增长阵列. dart:187:11)
- 主省道**
这是从图库中选择图像后的代码。
@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);
为什么第一次成功,第二次失败?
3条答案
按热度按时间j9per5c41#
你可以这么做
并且图像会立即反映在UI中。
我觉得问题出在这一行
这看起来很奇怪,你不能把数据流复制到数组中,它不起作用.
ffvjumwh2#
你看过这个帖子吗:Exception: Concurrent modification during iteration: Instance(length:17) of '_GrowableList'
我引述这篇文章:
此错误意味着您在迭代过程中向集合添加对象或从集合中移除对象。这是不允许的,因为添加或移除项将更改集合大小并扰乱后续迭代。
所以我没有看到所有的代码,但是当你通过添加按钮添加图片时,你会清除列表或者删除当前的项目吗?
amrnrhlw3#
在执行
addAll
之前,尝试按如下方式清除数组