Flutter 和 Cloud Firestore 获取问题

Posted

技术标签:

【中文标题】Flutter 和 Cloud Firestore 获取问题【英文标题】:Flutter and Cloud Firestore fetch issue 【发布时间】:2018-09-25 10:42:28 【问题描述】:

我在使用 Firebase 的 Flutter 和 Cloud Firestore 时遇到问题。 我已经可以将数据添加到数据库中,但我无法获取它,因为每次调用我的方法时,我都会返回 null。

这是我的代码:

dynamic getFromDatabase(String path, String item) 
  DocumentReference _docu = Firestore.instance.document('$path');
  var data;
  _docu.get().then((datasnapshot) 
    if(datasnapshot.exists)
      data = datasnapshot.data['$item'];
    
  );
  return data;

这是我调用方法的地方:

print((await getFromDatabase("User/$_uid","Vorname")));

还有错误:

I/flutter (26289): null

【问题讨论】:

【参考方案1】:

一个不错的选择是使用 FutureBuilder 小部件。 您可以在 StatelessWidget 中使用它,避免实现 StatefulWidget

FutureBuilder(
  future: Firestore.instance.document(path).get(),
  builder: (context, snapshot) 
    if (snapshot.connectionState != ConnectionState.done) 
      return CircularProgressIndicator();
    
    if (snapshot.hasError) 
      return Text('Something went wrong.');
    

    DocumentSnapshot docSnap = snapshot.data as DocumentSnapshot;
    return Text(docSnap.data['doc_field']);
  
)

【讨论】:

【参考方案2】:

我以前没有使用过 Firestore。只有firebase的正常数据库。但我认为这是一个异步时间问题。看起来它在完成数据快照之前返回 null。 (PS.datasnapshot 拼写错误)。尝试这样的事情。就像我说的。不确定它是否有效。

Future<String> getFromDatabse(String path, String item)
  DocumentReference _docu = Firestore.instance.document(path);
  _docu.get().then((datasnapchot)
    if(datasnapchot.exists)
      return datasnapchot.data[item];
    
  );

在调用方法时。这样做。

String getData = await getFromDatabse(path, item);

(PS也是数据库拼错哈哈)

【讨论】:

所以我稍微改变了我的代码,我尝试了你所说的但它仍然无法正常工作。 你能做一个1个文件的例子,我可以复制粘贴到我的开发环境中吗?我会尝试在几个小时内为您修复它。

以上是关于Flutter 和 Cloud Firestore 获取问题的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:cloud_firestore 的构建错误:高于版本“0.7.4”

Flutter - 任务':cloud_firestore:compileDebugJavaWithJavac'的执行失败

Flutter/cloud-firestore“任务已经完成”异常

Cloud Firestore 连接我的 Flutter Windows 应用

Flutter:[cloud_firestore/unknown] NoSuchMethodError:null 上的无效成员:'includeMetadataChanges'(Flutter Web

flutter cloud-firestore MissingPluginException 异常