简体   繁体   English

带有 firebase 连接的 Crud 应用程序(抖动)

[英]Crud app with firebase conncetion (flutter)

I study flutter. I'm beginner and currently started to learn CRUD with firebase.我学习 flutter。我是初学者,目前开始使用 firebase 学习 CRUD。

I study from this great gentleman's code我从这位伟大的绅士的代码中学习

https://github.com/mohamedHassanKa/ProductAppCourse https://github.com/mohamedHassanKa/ProductAppCourse

This is my first time to connect firebase. Am I connecting firebase sucesfully?我是第一次连接firebase,我连接firebase成功了吗? I got these error.我得到了这些错误。 Could someone teach me how to correct code please?有人可以教我如何更正代码吗?

CRUDEModel.dart CRUDEModel.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.documents
        .map((doc) => Product.fromMap(doc.data, doc.documentID))
        .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, doc.documentID) ;
  }


  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 ;

  }

Error错误

lib/core/viewmodels/CRUDModel.dart:16:23: Error: The getter 'documents' isn't defined for the class 'QuerySnapshot<Object>'.
 - 'QuerySnapshot' is from 'package:cloud_firestore/cloud_firestore.dart' ('../../Documents/flutter_windows_3.3.4-stable/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-4.1.0/lib/cloud_firestore.dart').
 - 'Object' is from 'dart:core'.
Try correcting the name to the name of an existing getter, or defining a getter or field named 'documents'.
    products = result.documents
                      ^^^^^^^^^
lib/core/viewmodels/CRUDModel.dart:28:43: Error: The getter 'documentID' isn't defined for the class 'DocumentSnapshot<Object>'.
 - 'DocumentSnapshot' is from 'package:cloud_firestore/cloud_firestore.dart' ('../../Documents/flutter_windows_3.3.4-stable/flutter/.pub-cache/hosted/pub.dartlang.org/cloud_firestore-4.1.0/lib/cloud_firestore.dart').
 - 'Object' is from 'dart:core'.
Try correcting the name to the name of an existing getter, or defining a getter or field named 'documentID'.
    return  Product.fromMap(doc.data, doc.documentID) ;
                                          ^^^^^^^^^^
lib/core/viewmodels/CRUDModel.dart:28:33: Error: The argument type 'Object Function()' can't be assigned to the parameter type 'Map<dynamic, dynamic>'.
 - 'Object' is from 'dart:core'.
 - 'Map' is from 'dart:core'.
    return  Product.fromMap(doc.data, doc.documentID) ;
                                ^
lib/core/services/api.dart:5:9: Error: Type 'Firestore' not found.
  final Firestore _db = Firestore.instance;
        ^^^^^^^^^
lib/core/services/api.dart:5:9: Error: 'Firestore' isn't a type.
  final Firestore _db = Firestore.instance;
        ^^^^^^^^^
lib/core/services/api.dart:5:25: Error: Undefined name 'Firestore'.
  final Firestore _db = Firestore.instance;
                        ^^^^^^^^^

since you said you're new, then you should know that this repository is been made 3 years ago, and a lot of updates happened to the Firebase SDK for Flutter.既然你说你是新人,那么你应该知道这个存储库是 3 年前制作的,并且 Flutter 的 Firebase SDK 发生了很多更新。

with the new versions of Firebase services, exactly in the Firestore, to get its instance inside your project:使用新版本的 Firebase 服务,就在 Firestore 中,在您的项目中获取它的实例:

Firestore.instance // old
FirebaseFirestore.instance // new

The documents property is replaced with docs , so you need to use this: documents属性被替换为docs ,所以你需要使用这个:

 result.documents // old - not working
 result.docs // new - will return a List<DocumentSnapshot>

to get the Map<String, dynamic> data of a specific document, you need:要获取特定文档的Map<String, dynamic>数据,您需要:

 doc.data // old
 doc.data() as Map<String, dynamic> new

to get the id of a document you should use:要获取文档的id ,您应该使用:

doc.documentId // old
doc.id // new

so basically your code with new migrations should be similar to this:所以基本上你的新迁移代码应该与此类似:

class CRUDModel extends ChangeNotifier {
  Api _api = locator<Api>();

  List<Product> products;

  Future<List<Product>> fetchProducts() async {
    QuerySnapshot 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 {
    DocumentSnapshot 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 ;

  }}

I assume that those changes are not enough, and you need to migrate with the new terms/notations of Firebase SDK.我认为这些更改还不够,您需要使用 Firebase SDK 的新术语/符号进行迁移。

I would say that you need to stop following with the old repository ( no offense to its owner ), and look for a new project, or just follow first and read the official documentation of Firebase.我会说你需要停止关注旧存储库(没有冒犯它的所有者),并寻找一个新项目,或者先关注并阅读 Firebase 的官方文档。

check this:检查这个:

https://firebase.flutter.dev/docs/firestore/overview https://firebase.flutter.dev/docs/firestore/overview

https://firebase.flutter.dev/ https://firebase.flutter.dev/

https://firebase.google.com/docs/flutter/setup https://firebase.google.com/docs/flutter/setup

https://firebase.flutter.dev/docs/firestore/2.0.0_migration https://firebase.flutter.dev/docs/firestore/2.0.0_migration

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM