Как я могу разобрать некоторые файлы JSON в список <Map>в дротик? - PullRequest
0 голосов
/ 16 мая 2019

Я написал этот код , чтобы сделать это. Мой API полностью работает и не имеет проблем. Мой код работает, когда я хочу напечатать одно из полей Product class, но он не работает, когда я хочу проанализировать весь свой файл json на карте и добавить его в список. Это ошибка:

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)

в чем проблема моего кода ?

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Попробуйте удалить "ProductNetwork ({this.allProducts});"

0 голосов
/ 16 мая 2019

Это не работает, потому что вы запрашиваете List в конструкторе ProductNetwork, но не пропускаете один, поэтому ваш List будет нулевым, а метод add не будет работатьноль.Вы фактически инициализируете List сразу после его объявления, но эта инициализация будет переопределена конструктором, который является нулевым.Либо удалите 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;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...