【问题标题】:How can I parse some json files to a List<Map> in dart?如何将一些 json 文件解析为 dart 中的 List<Map>?
【发布时间】:2019-10-03 02:58:08
【问题描述】:

我写了this code 来做这件事。我的 API 完全正常工作,没有问题。当我想打印Product class 字段之一时,我的代码正在工作,但是当我想将我的所有 json 文件解析为 Map 并将其添加到列表时它不起作用。这是错误:

Unhandled exception:
NoSuchMethodError: The method 'add' was called on null.
Receiver: null
Tried calling: add(Instance of 'Product')
#0      Object.noSuchMethod  (dart:core-patch/object_patch.dart:50:5)
#1      ProductNetwork.fetchProduct
package:dart_project/product.dart:62
<asynchronous suspension>
#2      main
package:dart_project/main.dart:5
<asynchronous suspension>
#3      _startIsolate.<anonymous closure>  (dart:isolate-patch/isolate_patch.dart:300:19)
#4      _RawReceivePortImpl._handleMessage  (dart:isolate-patch/isolate_patch.dart:171:12)
Exited (255)

我的code有什么问题?

【问题讨论】:

标签: json parsing serialization dart flutter


【解决方案1】:

这不起作用,因为您在ProductNetwork 的构造函数中要求List,但没有传递一个,因此您的List 将为null,add 方法将无法运行空值。您实际上是在 List 声明之后对其进行初始化,但是此初始化将被构造函数覆盖,该构造函数为 null。从构造函数中删除 List 或将 List 传递给它。

这应该可行:

void main() async {
  ProductNetwork productNetwork = ProductNetwork();
  var data = await productNetwork.fetchProduct();
  print(data.toString());
}

class ProductNetwork {
  List<Product> allProducts = List<Product>();

  Future<List<Product>> fetchProduct() async {
    int productId = 0;
    String url =
        'http://example.com/api/Product/GetProduct?id=${productId.toString()}';
    final http.Response response = await http.get(url);
    if (response.statusCode == 200)
      await allProducts.add((Product.fromJson(json.decode(response.body))));
    else
      throw Exception('Failed. Status Code: ${response.statusCode}');
    return allProducts;
  }
}

【讨论】:

    【解决方案2】:

    尝试删除“ProductNetwork({this.allProducts});”

    【讨论】:

      猜你喜欢
      • 2020-02-14
      • 2017-11-02
      • 2023-03-09
      • 1970-01-01
      • 2021-06-07
      • 2021-10-20
      • 2023-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多