在列表中添加元素

时间:2019-08-30 18:12:35

标签: firebase flutter dart google-cloud-firestore flutter-web

我是Flutter的新手,我正尝试将Cloud Firestore的一些数据添加到Flutter中的列表中,但是遇到了问题。我尝试添加该元素,但是执行后,该元素不存在。它也不抛出异常或任何异常。也许其他人对我有一些建议!

我尝试更改列表的类型(从Cloud Firestore捕获文档而不是doc中的数据,这是相同的问题),我还调试了我试图存储的数据以确保它存在。我已经完成了基本的故障排除工作,例如还运行了Flutter Clean。我正在使用最新版本的Flutter。

Firestore db = firestore();

List<String> getString() {

var dataList = new List<String>();

db.collection('Users').get().then((querySnapshot) {
  querySnapshot.forEach((doc) {
    dataList.add(doc.get('First name'));
  });
});

debugPrint(dataList.first);

return dataList;

该列表为空,尽管该列表应包含此Cloud Firestore文档上的“名字”字段。再次验证数据确实存在,并在调用debugPrint时进行打印。

1 个答案:

答案 0 :(得分:3)

<td > @if(isset($student->name)) {{ $student->name }} @else @lang('NA') @endif </td> 是一个异步函数,因此db.collection('Users').get()在Firestore结束之前执行,因为您的数组返回空。

如果您尝试过:

debugPrint(dataList.first);

您将看到您的数据。

您可以使用db.collection('Users').get().then((querySnapshot) { querySnapshot.forEach((doc) { dataList.add(doc.get('First name')); }); debugPrint(dataList.first); }); 等待调用完成,因此必须返回一个await并在函数声明中使用Future关键字。您必须了解抖动异步功能(Async Flutter)的概念。因此,下面的代码可以解决您的问题。

async