繁体   English   中英

无法在 flutter 应用中从 Cloud Firestore 获取数据

[英]Can't Get data from Cloud Firestore in flutter app

我创建了 createRecord() 方法:

CollectionReference addBlog = FirebaseFirestore.instance.collection('blogAddress');
  Future<void> createRecord() {
    // Call the user's CollectionReference to add a new user
    return addBlog
        .add({
      'blogAddress': IfUserProfile.blog, // Stokes and Sons
    })
        .then((value) => print("Blog Added"))
        .catchError((error) => print("Failed to add Blog: $error"));
  }

从 textformField 创建记录:

onChanged: (value) {
                    IfUserProfile.blog = value;
                  },

它工作正常 它在 Firestore 上正确添加了集合: 在此处输入图像描述

现在我试图将这些数据放到另一个屏幕中,我调用了这个实例:

CollectionReference blogAddress =
  FirebaseFirestore.instance.collection('blogAddress');

我用 FutureBuilder 包装我有数据的列:

 FutureBuilder<DocumentSnapshot>(
              future: blogAddress.doc().get(),
              builder: (BuildContext context,
                  AsyncSnapshot<DocumentSnapshot> snapshot) {
                if (snapshot.hasError) {
                  return Text("Something went wrong");
                }
                if (snapshot.connectionState == ConnectionState.done) {
                  Map<String, dynamic> data = snapshot.data.data();
                  return Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: [
                      SizedBox(
                        height: 30,
                      ),
                      Text("Full Name: ${data['blogAddress']}"),

但我无法获得数据:

在 null 上调用了方法“[]”。接收方:null 尝试调用:

snapshot.data.data()返回 null。当您请求不存在的文档时会发生这种情况。 您的代码blogAddress.doc().get()永远不会获取文档,因为没有 arguments 的doc()会生成对尚不存在的随机文档 ID 的引用。 如果你想要一个特定的文档,你应该将文档 ID 传递给doc()

blogAddress.doc("the-document-ID-you-want").get()
    Try this,
    
      



body: StreamBuilder(
                    stream: Firestore.instance
                        .collection('blogAddress')
                        .snapshots(),
                    builder: (BuildContext context,
                        AsyncSnapshot<QuerySnapshot> snapshot) {
                      if (snapshot.data.toString()=='null')
                        return Text('');
                      if (snapshot.hasError)
                        return new Text('Error: ${snapshot.error}');
                      if(snapshot.data.documents.length<1)
                        return SizedBox.shrink();
                      switch (snapshot.connectionState) {
                        case ConnectionState.waiting:
                          return new Text('Loading...');
                        default:
         
                     Print("snapshotData:- "+snapshot.data.documents.toString());
                          return new ListView(
                            children: snapshot.data.documents
                                .map((DocumentSnapshot document) {
                   Print("documentAll :-"+document.toString());
                      Print("document blogAddress:- "+ document['blogAddress'].toString());      

         
   return Text(document['blogAddress'].toString());
                            }).toList(),
                          );
                      }
                    },
                  )

暂无
暂无

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

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