我已经在自己的Flutter应用程序中实现了Cloud Firestore,并遇到了以下问题:如果该应用程序的第一次加载(安装后)没有网络连接,则不会显示任何数据。
我的问题是:如何使Firestore中的数据在没有互联网连接的情况下在首次加载(安装后)时显示? 我的获取数据的代码是这样的:
class QuestionsListState extends State<QuestionsList> {
@override
Widget build(BuildContext context) {
return new StreamBuilder<QuerySnapshot>(
stream: _questionsCollectionReference
.where("category", isEqualTo: _chosenCategory).orderBy("order").snapshots,
builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (!snapshot.hasData) return const Text('');
final int messageCount = snapshot.data.documents.length;
return new ListView.builder(
itemCount: messageCount,
itemBuilder: (_, int index) {
final DocumentSnapshot document = snapshot.data.documents[index];
return new ListTile(
title: new FlatButton(
onPressed: () {
Navigator.push(context, new MaterialPageRoute(
builder: (BuildContext context) => new AddAnswerDialog(),
fullscreenDialog: true,
));
},
child: new Text(
document['text'],
style: new TextStyle(fontSize: 18.0, color: Colors.blue),
)),
);
},
);
},
);
}
}
最佳答案
我遇到了类似的情况。对我来说,解决方案是使用FutureBuilder
而不是const Text('')
从磁盘加载数据
换句话说,您的结构将是:
hasData
为假时的hasData
为假时的CircularProgress
hasData
为true时的hasData
为true时的对于初次使用的用户,将显示
CircularProgress
,然后显示磁盘中的数据,然后显示在线数据。如果没有加载在线数据(无网络),则用户将继续查看磁盘数据。