Flutter Firebase CRUD连接报错,请求代码修正指导(新手求助)
修正Firebase CRUD代码适配新版Cloud Firestore API
你遇到的所有错误都是因为参考代码使用了旧版Cloud Firestore API,而你当前依赖的cloud_firestore: 4.1.0是新版,API命名和调用方式有变更。以下是具体修正方案:
一、修正CRUDModel.dart的错误
针对代码里的3处错误,替换成新版API:
result.documents→result.docs:新版QuerySnapshot用docs属性获取文档列表,替代旧版的documentsdoc.documentID→doc.id:新版DocumentSnapshot用id属性获取文档ID,替代旧版的documentIDdoc.data→doc.data() as Map<String, dynamic>:新版data()是方法,返回Object?类型,需要强转为Map类型
修正后的CRUDModel.dart代码:
import 'dart:async'; import 'package:flutter/material.dart'; import '../../locator.dart'; import '../services/api.dart'; import '../models/productModel.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; class CRUDModel extends ChangeNotifier { Api _api = locator<Api>(); List<Product> products; Future<List<Product>> fetchProducts() async { var result = await _api.getDataCollection(); products = result.docs .map((doc) => Product.fromMap(doc.data() as Map<String, dynamic>, doc.id)) .toList(); return products; } Stream<QuerySnapshot> fetchProductsAsStream() { return _api.streamDataCollection(); } Future<Product> getProductById(String id) async { var doc = await _api.getDocumentById(id); return Product.fromMap(doc.data() as Map<String, dynamic>, doc.id); } Future removeProduct(String id) async{ await _api.removeDocument(id) ; return ; } Future updateProduct(Product data,String id) async{ await _api.updateDocument(data.toJson(), id) ; return ; } Future addProduct(Product data) async{ var result = await _api.addDocument(data.toJson()) ; return ; } }
二、修正api.dart的错误
旧版的Firestore类已被废弃,新版使用FirebaseFirestore:
- 将
Firestore替换为FirebaseFirestore - 将
Firestore.instance替换为FirebaseFirestore.instance
修正后的api.dart核心代码示例:
import 'package:cloud_firestore/cloud_firestore.dart'; class Api { final FirebaseFirestore _db = FirebaseFirestore.instance; // 其他业务方法保持原有逻辑即可 }
内容的提问来源于stack exchange,提问作者bluetail
相关产品推荐
相关产品推荐

