You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中Firebase Map类型字段stockBySize始终返回null问题排查

问题原因及解决方案

核心问题:fromFirestore中stockBySize的类型判断逻辑错误

Firebase Firestore中的Map字段读取后是Map<String, dynamic>类型,并非Iterable类型,你当前代码里用data?['stockBySize'] is Iterable做判断,这个条件永远不成立,导致stockBySize始终返回null。


修复步骤

  1. 修正Product.fromFirestore的类型判断逻辑
    将stockBySize的赋值代码改为判断Map类型后转换:

    stockBySize: data?['stockBySize'] is Map
        ? Map<String, String>.from(data?['stockBySize'])
        : null,
    
  2. 简化findProducts代码(可选,更规范)
    既然已经使用withConverter,element.data()直接返回转换好的Product对象,无需手动重新构造:

    Future<List<Product>> findProducts() async {
        final query = db.collection("products").withConverter(
              fromFirestore: Product.fromFirestore,
              toFirestore: (Product product, _) => product.toFirestore(),
            );
        try {
          final docSnap = await query.get();
          final products = docSnap.docs.map((doc) => doc.data()).toList();
          log(products.toString());
          return products;
        } on FirebaseException {
          rethrow;
        }
      }
    

额外检查点

  • 确认Firebase中stockBySize的键值均为字符串类型(你的示例符合要求),若存在数字类型,需在转换时添加toString()处理。
  • 确保Product类的toFirestore方法(未在代码中展示)正确处理stockBySize字段的写入,避免后续数据格式异常。

内容的提问来源于stack exchange,提问作者Adalberto Júnior

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 12:55:37