在Firestore Flutter提供程序中从数据库收集数据时如何初始化类

时间:2020-02-24 12:00:47

标签: firebase flutter google-cloud-firestore flutter-provider

我正在关注使用Firestore和Flutter提供程序的Flutter电子商务教程。

我想从Firestore Db中检索所有数据,但是问题是我不知道如何初始化将用于从Db firestore中检索数据的类。请帮助。如果您有更好的方法,可以与我分享您的知识。这是下面的代码:

 import 'package:flutter/material.dart';
import 'package:shopping/db/product.dart';
import 'package:shopping/models/product.dart';

 class AppProvider with ChangeNotifier {
   List<Product>_fearturedProducts=[];
   ProductService _productService=new ProductService();

   AppProvider(){
     //please how to initialize class AppProvider here 
 }
   //getter
   List<Product> get featuredProducts=>_fearturedProducts;

   //method
   void _getFeaturedProducts()async{

    _fearturedProducts=await _productService.getFeaturedProducts();
    notifyListeners();
   }
 }

ProductService类的代码:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:shopping/models/product.dart';

class ProductService{
    Firestore _firestore=Firestore.instance;
  String collection="Products";

  Future<List<Product>>getFeaturedProducts(){

 _firestore.collection(collection).where('featured', isEqualTo:true).getDocuments()
 .then((snap){

  List<Product>featuredProducts=[];
   snap.documents.map((snapshot)=> featuredProducts.add(Product.fromSnapshot(snapshot)));
   return featuredProducts;
 }); 

}

}

1 个答案:

答案 0 :(得分:0)

我认为可能会有很多解决方案,具体取决于您要如何使用AppProvider类。

也许您可以这样做:

AppProvider(){
    this._getFeaturedProducts();
  }

在您的主类中,初始化对象的方式如下:

AppProvider _appProvider = new AppProvider();

在对象创建期间,应从Firestore中获取数据,并将通知所有侦听器。

我希望它将对您有帮助!