Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 向列表中添加元素时出现问题_Firebase_Flutter_Dart_Google Cloud Firestore_Flutter Web - Fatal编程技术网

Firebase 向列表中添加元素时出现问题

Firebase 向列表中添加元素时出现问题,firebase,flutter,dart,google-cloud-firestore,flutter-web,Firebase,Flutter,Dart,Google Cloud Firestore,Flutter Web,我对Flitter完全是一个新手,我正在尝试将CloudFireStore中的一些数据添加到Flitter的列表中,但有问题。我尝试添加元素,但执行后,元素不在那里。它也不会抛出异常或任何东西。也许别人会给我一些建议 我尝试过更改列表的类型(从Cloud Firestore捕获文档,而不是文档中的数据,同一问题),我还调试并打印了我尝试存储的数据,以确保它存在,它确实存在。我也做过一些基本的故障排除,比如运行flutter clean。我是最新版本的颤振 Firestore db = fires

我对Flitter完全是一个新手,我正在尝试将CloudFireStore中的一些数据添加到Flitter的列表中,但有问题。我尝试添加元素,但执行后,元素不在那里。它也不会抛出异常或任何东西。也许别人会给我一些建议

我尝试过更改列表的类型(从Cloud Firestore捕获文档,而不是文档中的数据,同一问题),我还调试并打印了我尝试存储的数据,以确保它存在,它确实存在。我也做过一些基本的故障排除,比如运行flutter clean。我是最新版本的颤振

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;
Firestore db=Firestore();
列表getString(){
var dataList=新列表();
db.collection('Users').get().then((querySnapshot){
querySnapshot.forEach((文档){
dataList.add(doc.get('First name'));
});
});
debugPrint(dataList.first);
返回数据列表;
列表为空,但它应该包含此Cloud Firestore文档上的“First name”字段。再次验证数据是否存在,并在调用debugPrint时打印。

db.collection('Users').get()是一个异步函数,因此
debugPrint(dataList.First);
在firestores get结束之前执行,因为数组返回空

如果您尝试:

db.collection('Users').get().then((querySnapshot) {
  querySnapshot.forEach((doc) {
    dataList.add(doc.get('First name'));
  });
  debugPrint(dataList.first);
});
您将看到您的数据

您可以使用
wait
等待调用完成,因此必须返回
Future
并在函数声明中使用
async
关键字。这是您必须了解的关于flatter async函数()的概念。因此,下面的代码可以解决您的问题

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;
}
Firestore db=Firestore();
Future getString()异步{
var dataList=新列表();
var result=await db.collection('Users').get();
结果。forEach((doc){
dataList.add(doc.get('First name'));
});
debugPrint(dataList.first);
返回数据列表;
}

我已经回答了这个问题。请确保包含偶尔更新的数据的小部件是有状态的,而不是无状态的。这些问题没有说明小部件组件。但是如果使用它们,小部件当然必须是正确的。啊,这很有意义!此代码正在工作。感谢您的帮助!