我想将一个项目添加到列表中
__call__
但是如果我将列表的长度打印到控制台,它总是说,列表长为0 ...
help
有任何建议吗?
最好的问候
答案 0 :(得分:1)
在添加项目后,尝试在forEach中添加print(userSearchItems.length);
,您将看到实际长度。
答案 1 :(得分:1)
我将尝试解释这里的内容,请看下面的代码:
import 'dart:async';
void main() {
List<int> userSearchItems = [];
Timer _sendTimeOutTimer;
const oneSec = Duration(seconds: 2);
_sendTimeOutTimer = Timer.periodic(oneSec, (Timer t) {
userSearchItems.add(1);
print(userSearchItems.length); // result 1 and it will be executed after 2 seconds
_sendTimeOutTimer.cancel();
});
print(userSearchItems.length); // result 0 and it will be executed first
}
异步动作(Timer)内的打印将在2秒后执行,这意味着异步动作结束后,但异步动作(Timer)之外的打印将不等待2秒直接执行,在您这种情况下异步操作正在监听数据.listen((data) =>
,因此,如果您在异步操作之外打印长度,您将看不到所发送的内容,因为尚未添加该项。
解决方案:您可以创建函数witch return Future
,然后等到完成后再打印长度。
List<UserSearchItem> userSearchItems = [];
Future<String> submitAll() async {
Firestore.instance
.collection('insta_users')
.snapshots()
.listen((data) =>
data.documents.forEach((doc){
print(data.documents.length);
User user = new User.fromDocument(doc);
UserSearchItem searchItem = new UserSearchItem(user);
userSearchItems.add(searchItem);
print(user.bio);
return 'success';
}));
}
void yourFunction() async{
await submitAll();
print("Loaded");
print(userSearchItems.length);
}
然后致电yourFunction()
。