如何从StreamProvider Flutter访问数据

时间:2020-07-03 03:07:15

标签: firebase flutter dart google-cloud-firestore flutter-provider

我正在尝试显示提醒列表,以便用户查看所有提醒并可以对其进行编辑。我正在使用StreamProvider,以便能够在子窗口小部件中进行访问。我将DocumentSnapShot映射到MedReminder对象。 StreamProvider应该返回MedReminder对象的List。但是在ReminderList小部件中,提供程序返回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();
    });
  }

请帮助我谢谢。

1 个答案:

答案 0 :(得分:0)

Stream<List<MedReminder>> get medReminders {
    return userCollection.snapshots()
        .map(_medReminderListFromSnapshot);
  }

使用uid将数据存储在userCollection中,不要添加其他集合

喜欢

collectionReference userCollection = Firestore.instance.collection('users');

在“用户”中保存数据时

userCollection.document(uid).setData()..

然后有效