【问题标题】:Last Element is not getting stored in to an array in flutter?最后一个元素没有在颤动中存储到数组中?
【发布时间】:2022-01-01 16:35:51
【问题描述】:

我正在尝试将来自 API 的响应存储到列表中,响应被存储但最后一个元素没有存储在列表中。

var selectedImage = [];
    if (_image.length > 0) {
          for (var img in _image) {
            var request = http.MultipartRequest(
                'POST', Uri.parse('url'));
            request.fields.addAll({'userPath': "${widget.scanQr}"});
              var process = await http.MultipartFile.fromBytes(
                  'file', File(img.path).readAsBytesSync(),
                  filename: img.path.split("/").last,
                  contentType: MediaType('image', 'jpg'));
              request.files.add(process);
              var response = await request.send();
              print(response.statusCode);
              if (response.statusCode == 200) {
                response.stream.transform(utf8.decoder).listen((value) {
                  print("The value is $value");
                  selectedImage.add(value);
                  });
                print(selectedImage);
              }

我尝试插入 2 张图片时得到的响应是:

[/uploads/jdsfei884ri4h449898/activity/file_1637650234094]

第一个图像被存储,但第二个图像没有被存储。

【问题讨论】:

  • 为什么没有第二个回复?您收到错误消息吗?你设置断点找出来了吗?
  • @nvoigt ,没有收到任何错误。第二个响应正在打印但未进入列表

标签: arrays list flutter dart


【解决方案1】:

listen 不是同步方法。您不必等待它完成,因此当您的代码完成时,您不知道流侦听器是否已经完成了他们的工作。他们可能已添加到结果数组中,也可能没有。

我建议您使用一种方法来确保它在您继续之前完成它的工作。

您的流似乎只有一个元素:

if (response.statusCode == 200) {
  const value = await stream.transform(utf8.decoder).first;
  selectedImage.add(value);
}

【讨论】:

    【解决方案2】:

    selectedImage.add(value); 替换为 selectedImage.addAll(value);

    你从 API 获取 ArrayList,所以基本上添加函数只添加对象和 addAll 函数添加你的整个列表。

    【讨论】:

    • add和addAll都试过了,结果没有变化
    • 你是怎么得出这个结论的?我在问题中看不到任何可以指示响应中位置数组的内容?
    • [/uploads/jdsfei884ri4h449898/activity/file_1637650234094]
    猜你喜欢
    • 1970-01-01
    • 2020-04-12
    • 2014-10-10
    • 2021-06-13
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2014-05-22
    • 2021-08-18
    相关资源
    最近更新 更多