参数类型 'Object?' 无法分配给参数类型 'Map<dynamic, dynamic>

The argument type 'Object?' can't be assigned to the parameter type 'Map<dynamic, dynamic>

我想从 Firebase Firestore 获取类别部分,所以我使用了这个 class

class CategoryModel {
  late String name, image;

  CategoryModel({
    required this.name,
    required this.image,
  });

  CategoryModel.fromJson(Map<dynamic, dynamic> map) {
    if (map == null) {
      return;
    }

    name = map['name'];
    image = map['image'];
  }

  toJson() {
    return {
      'name': name,
      'image': image,
    };
  }
}

然后我用 gets

创建了这个
class HomeViewModel extends GetxController {
  ValueNotifier<bool> get loading => _loading;
  ValueNotifier<bool> _loading = ValueNotifier(false);

  List<CategoryModel> get categoryModel => _categoryModel;
  List<CategoryModel> _categoryModel = [];

  HomeViewModel() {
    getCategory();
  }
  getCategory() async {
    _loading.value = true;
    await HomeService().getCategory().then((value) {
      for (int i = 0; i < value.length; i++) {
        _categoryModel.add(
          CategoryModel.fromJson(
            value[i].data(),
          ),
        );
        
        _loading.value = false;
      }
      update();
    });
  }
}

但是当我尝试使用函数 getCategory() 从 Firestore 获取类别时出现此错误

Error in vs code

Error in Problems scetion

这样试一下,有没有问题告诉我。

CategoryModel.fromJson(
            value[i].data() as Map<String,dynamic>,
          ),

您可以阅读有关 Cloud Firestore 2.0 here 的更多信息。

基本思想是,无论您尝试从 DocumentSnapshot 中读取数据,都需要强制转换对象?到 Map.

您可以通过几种方式做到这一点。

  1. 投射对象?在你的 toJson 方法中映射
    CategoryModel.fromJson(
         value[i].data() as Map<String,dynamic>,
    ),
  1. 在构造函数中指定类型
DocumentReference<Map<String, dynamic>> documentReference;

  1. 在 StreamBuilder 中指定类型
StreamBuilder<QuerySnapshot<Map<String, dynamic>>>(
                stream: model.testSnap,
                builder: (context, snapshot) {
                  return Container();
                },
              )