问题将元素添加到列表

Posted

技术标签:

【中文标题】问题将元素添加到列表【英文标题】:Issue adding element to list 【发布时间】:2020-01-03 23:42:00 【问题描述】:

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

我尝试更改列表的类型(从 Cloud Firestore 捕获文档而不是文档中的数据,同样的问题),我还调试打印了我尝试存储的数据以确保它存在,它确实存在。我也完成了基本的故障排除,比如运行 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】:

db.collection('Users').get() 是一个异步函数,因此debugPrint(dataList.first); 在您的 firestore 获取结束之前执行,因为您的数组返回空。

如果你尝试一下:

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

您将看到您的数据。

您可以使用await 等待调用完成,因此您必须返回Future 并在函数声明中使用async 关键字。这是 Flutter 异步函数必须知道的一个概念 (Async Flutter)。所以,下面的代码可以解决你的问题。

Firestore db = firestore();

Future <List<String>> getString() async 

var dataList = new List<String>();

var result = await db.collection('Users').get();
result.forEach((doc) 
    dataList.add(doc.get('First name'));
  );

debugPrint(dataList.first);

return dataList;

【讨论】:

确保包含要偶尔更新的数据的小部件是有状态的而不是无状态的。 这些问题没有说明小部件组件。但是如果使用它们,当然小部件必须是正确的 啊,这很有道理!此代码正在运行。感谢您的帮助!

以上是关于问题将元素添加到列表的主要内容,如果未能解决你的问题,请参考以下文章

如何将元素添加到列表中?

将通用列表的元素添加到字典

如何将所有列表元素添加到另一个列表中[重复]

有啥办法可以将元素添加到列表中,如图所示?

如何将元素添加到R中的列表(循环)[重复]

如何将每个 x 个元素拆分一个列表并将这些 x 个元素添加到一个新列表中?