【发布时间】:2020-10-23 17:39:45
【问题描述】:
我正在尝试显示提醒列表,用户可以在其中查看所有提醒并能够对其进行编辑。我正在使用 StreamProvider 以便能够在子小部件中访问。我将 DocumentSnapShot 映射到 MedReminder 对象。 StreamProvider 应该返回 MedReminder 对象的列表。但在 ReminderList 小部件中,Provider 返回 null。
流:
List<MedReminder> _medReminderListFromSnapshot(QuerySnapshot snapshot) {
print('here is db');
return snapshot.documents.map((doc) {
return MedReminder(
remindId: doc.data['remindId'] ?? '',
howManyTimeDay: doc.data['howManyTimeDay'] ?? '',
frequency: doc.data['frequecy'] ?? '',
hour: doc.data['hour'] ?? '',
min: doc.data['min'] ?? '',
dateStarted: doc.data['dateStarted'] ?? '',
dateEnded: doc.data['dateEnded'] ?? '',
dateRefill: doc.data['dateRefill'] ?? '',
quantityTime: doc.data['quantityTime'] ?? '',
);
}).toList();
}
Stream<List<MedReminder>> get medReminders {
return userCollection.document(uid).collection('medic_reminder').snapshots()
.map(_medReminderListFromSnapshot);
}
提醒页面:
Widget build(BuildContext context) {
final user = Provider.of<User>(context);
return StreamProvider<List<MedReminder>>.value(
value: DatabaseService(uid: user.uid).medReminders,
child: Scaffold(
body: Container(
child: ReminderList(),
),
),
);
}
提醒列表小部件(此处提供者返回 null):
Widget build(BuildContext context) {
final reminders = Provider.of<List<MedReminder>>(context) ?? [];
reminders.forEach((reminder) {
print(reminder.remindId);
});
return ListView.builder(
itemCount: reminders.length,
itemBuilder: (context, index) {
return ReminderTile();
});
}
请帮帮我,谢谢。
【问题讨论】:
-
您的 Stream 是否发出值?在返回 snapshot.documents.map 之前你确定它不为空吗?
-
我尝试在 _medReminderListFromSnapshot 中打印 snapshot.documents.map 显示我有文档快照实例
-
那么不为空
-
但是当我尝试通过流提供程序访问小部件子中的提醒对象列表时,列表为空。请帮助我
-
你修好了吗?如果是,请发布答案。
标签: firebase flutter dart google-cloud-firestore flutter-provider