【问题标题】:how to get data from firebase in flutter如何在flutter中从firebase获取数据
【发布时间】:2019-02-07 08:43:39
【问题描述】:

我正在构建一个颤振应用程序并使用 cloud-firestore, 这就是我的数据库的样子

我想要一个函数,它可以在字符串数组中检索名为“驱动程序列表”的集合中的所有文档 那是我已经使用过的,但它会让它们回到新屏幕的列表视图中

class DriverList extends StatelessWidget {@overrideWidget build(BuildContext context) {
return new StreamBuilder<QuerySnapshot>(
  stream: Firestore.instance.collection('DriverList').snapshots(),
  builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
    if (!snapshot.hasData) return new Text('Loading...');
    return new ListView(
      children: snapshot.data.documents.map((DocumentSnapshot document) {
        return new ListTile(
          title: new Text(document['name']),
          subtitle: new Text(document['phone']),
        );
      }).toList(),
    );
  },
);

} }

【问题讨论】:

  • 谢谢我得到了这个链接和其他链接,但它们都只是展示了如何在新屏幕的 ListView 中检索数据,我的问题是如何将它们放入字符串数组中?
  • 目前还不清楚您在实现此要求的过程中遇到的问题。请更新您的问题以显示您已经尝试过的内容。
  • 是关于如何从 firstore 中检索数据或如何在代码中构造检索到的数据的问题
  • 问题已更新,它是关于检索不在列表视图中的字符串数组中的数据

标签: firebase dart flutter google-cloud-firestore


【解决方案1】:

这有一些额外的逻辑来删除可能重复的记录,但您可以使用类似以下内容从 Firestore 检索数据。

我们可以访问一个集合引用,然后列出查询结果,然后为 Firestore 返回的数据创建本地模型对象,然后我们返回这些模型对象的列表。

  static Future<List<AustinFeedsMeEvent>> _getEventsFromFirestore() async {
CollectionReference ref = Firestore.instance.collection('events');
QuerySnapshot eventsQuery = await ref
    .where("time", isGreaterThan: new DateTime.now().millisecondsSinceEpoch)
    .where("food", isEqualTo: true)
    .getDocuments();

HashMap<String, AustinFeedsMeEvent> eventsHashMap = new HashMap<String, AustinFeedsMeEvent>();

eventsQuery.documents.forEach((document) {
  eventsHashMap.putIfAbsent(document['id'], () => new AustinFeedsMeEvent(
      name: document['name'],
      time: document['time'],
      description: document['description'],
      url: document['event_url'],
      photoUrl: _getEventPhotoUrl(document['group']),
      latLng: _getLatLng(document)));
});

return eventsHashMap.values.toList();
}

来源:https://github.com/dazza5000/austin-feeds-me-flutter/blob/master/lib/data/events_repository.dart#L33

【讨论】:

    【解决方案2】:
        import 'package:cloud_firestore/cloud_firestore.dart';
        import 'package:flutter/material.dart';
    
        class LoadDataFromFirestore extends StatefulWidget {
          @override
          _LoadDataFromFirestoreState createState() => _LoadDataFromFirestoreState();
        }
    
        class _LoadDataFromFirestoreState extends State<LoadDataFromFirestore> {
          @override
          void initState() {
            super.initState();
            getDriversList().then((results) {
              setState(() {
                querySnapshot = results;
              });
            });
          }
    
          QuerySnapshot querySnapshot;
          @override
          Widget build(BuildContext context) {
            return Scaffold(
              body: _showDrivers(),
            );
          }
    
        //build widget as prefered
        //i'll be using a listview.builder
          Widget _showDrivers() {
            //check if querysnapshot is null
            if (querySnapshot != null) {
              return ListView.builder(
                primary: false,
                itemCount: querySnapshot.documents.length,
                padding: EdgeInsets.all(12),
                itemBuilder: (context, i) {
                  return Column(
                    children: <Widget>[
    //load data into widgets
                      Text("${querySnapshot.documents[i].data['activation']}"),
                      Text("${querySnapshot.documents[i].data['car1']}"),
                      Text("${querySnapshot.documents[i].data['car2']}"),
                      Text("${querySnapshot.documents[i].data['car5']}"),
                      Text("${querySnapshot.documents[i].data['name']}"),
                      Text("${querySnapshot.documents[i].data['phone']}"),
                    ],
                  );
                },
              );
            } else {
              return Center(
                child: CircularProgressIndicator(),
              );
            }
          }
    
          //get firestore instance
          getDriversList() async {
            return await Firestore.instance.collection('DriversList').getDocuments();
          }
        }
    

    【讨论】:

      【解决方案3】:
      • 获取一次性数据:

        var collection = FirebaseFirestore.instance.collection('DriverList');
        var querySnapshot = await collection.get();
        for (var queryDocumentSnapshot in querySnapshot.docs) {
          Map<String, dynamic> data = queryDocumentSnapshot.data();
          var name = data['name'];
          var phone = data['phone'];
        }
        
      • 每次更改时获取数据,使用StreamBuilder

        StreamBuilder<QuerySnapshot<Map<String, dynamic>>>(
          stream: FirebaseFirestore.instance.collection('DriverList').snapshots(),
          builder: (_, snapshot) {
            if (snapshot.hasError) return Text('Error = ${snapshot.error}');
        
            if (snapshot.hasData) {
              final docs = snapshot.data!.docs;
              return ListView.builder(
                itemCount: docs.length,
                itemBuilder: (_, i) {
                  final data = docs[i].data();
                  return ListTile(
                    title: Text(data['name']),
                    subtitle: Text(data['phone']),
                  );
                },
              );
            }
        
            return Center(child: CircularProgressIndicator());
          },
        )
        

      【讨论】:

        猜你喜欢
        • 2022-01-15
        • 2021-04-08
        • 2021-12-04
        • 2019-10-17
        • 1970-01-01
        • 2021-06-23
        • 2020-10-18
        • 2022-10-05
        • 2021-03-04
        相关资源
        最近更新 更多