【发布时间】:2020-07-17 03:46:09
【问题描述】:
所以我制作了一个具有未来构建器的屏幕,并将 getJobs() 作为未来。问题是未来的构建器获取空数据,因为快照文档的循环不会停止。这是代码:
Future<List<Job>> getJobs() async {
var fbuser = await FirebaseAuth.instance.currentUser();
// print('got user');
var currentUser =
await Firestore.instance.collection('user').document(fbuser.uid).get();
setState(() {
seeker = currentUser.data['seeker'];
// print('seeker value = $seeker');
});
var snapshots = await Firestore.instance.collection('jobs').getDocuments();
var snapshotDocuments = snapshots.documents;
List<Job> jobs = [];
// print('got Jobs');
for (var docs in snapshotDocuments) {
var job = Job(
uid: docs.data['uid'],
salaryTo: docs.data['salTo'],
salaryFrom: docs.data['salFrom'],
exp: docs.data['exp'],
loc: docs.data['loc'],
title: docs.data['title'],
desc: docs.data['desc'],
skill: docs.data['skill'],
companyName: docs.data['companyName'],
);
print(job);
jobs.add(job);
}
print('returning $jobs');
return jobs;
}
这里是构建方法
Widget build(BuildContext context) {
return Scaffold(
//appBar: AppBar(),
body: FutureBuilder(
future: getJobs(),
builder: (BuildContext context, AsyncSnapshot snapshot) {
// print(snapshot.hasData);
if (snapshot.data == null)
return Center(
child: CircularProgressIndicator(),
);
else
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context, int index) {
return Center(child: Text('GOT DATA'),);
});
},
),
floatingActionButton: Visibility(
visible: seeker ? false : true,
child: FloatingActionButton(
onPressed: () {},
child: Icon(Icons.add_box),
)),
);
}
感谢您的帮助!!
编辑 好的,我发现这个块有错误
var job = Job(
uid: snapshotDocuments[i].data['uid'],
salaryTo: snapshotDocuments[i].data['salTo'],
salaryFrom: snapshotDocuments[i].data['salFrom'],
exp: snapshotDocuments[i].data['exp'],
loc: snapshotDocuments[i].data['loc'],
title: snapshotDocuments[i].data['title'],
desc: snapshotDocuments[i].data['desc'],
skill: snapshotDocuments[i].data['skill'],
companyName: snapshotDocuments[i].data['companyName'],
);
如果我删除作业类实例的创建,数据循环结束,我不知道为什么会这样。
【问题讨论】:
-
我认为
getJobs()中的setState()是问题所在。它要求颤振重绘小部件,从而递归调用自身。 -
没有同样的问题
-
所以删除
setState()仍然给你加载圈,没有别的? -
我已经更新了问题,请看看并告诉我
-
谢谢,这解决了问题。我正在为 int 分配一个字符串。
标签: firebase flutter dart google-cloud-firestore snapshot