未处理的异常:类型“String”不是“index”获取数据的“int”类型的子类型

问题描述 投票:0回答:2

我想把数据库中的product(entry)id作为代码中object的['id'],但是报错 code database

Future<void> fetchAndSetProducts() async {
    final url =
        Uri.parse('https://flutter-update.firebaseio.com/products.json');
    try {
      final response = await http.get(url);
      final extractedData = json.decode(response.body) as Map<String, dynamic>;
      final List<Product> loadedProducts = [];
      extractedData.forEach((prodId, prodData) {
        loadedProducts.add(Product(
          id: prodId,
          title: prodData['title'],
          description: prodData['description'],
          price: prodData['price'],
          isFavorite: prodData['isFavorite'],
          imageUrl: prodData['imageUrl'],
        ));
      });
      _items = loadedProducts;
      notifyListeners();
    } catch (error) {
      throw (error);
    }
  }
flutter dart unhandled-exception formatexception
2个回答
0
投票

错误表明,您正在尝试访问具有非整数值索引的字符串元素 您能否分享从 json 文件接收到的数据,以及打印 prodData 会更有帮助,因为它表明 prodData 似乎是字符串而不是您期望的 Map 类型


0
投票

试试这个:

Future<void> fetchAndSetProducts() async {
...
    extractedData.forEach((prodId, prodData) {
      loadedProducts.add(Product(
        id: prodId,
        title: prodData['title'] ?? 'Untitled',
        description: prodData['description'] ?? '',
        price: (prodData['price'] ?? 0).toDouble(),
        isFavorite: prodData['isFavorite'] ?? false,
        imageUrl: prodData['imageUrl'] ?? '',
      ));
    });
...
}
© www.soinside.com 2019 - 2024. All rights reserved.