到底发生了什么?
main.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
中。
当单击 + 图像时,它将允许用户从图库中选择图像,然后将其放置在 ListView
旁边,如下图所示。
一切正常!
但是当我再次单击 + 图像以添加另一张图像时,它会向我们抛出此错误
[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)
main.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/