【问题标题】:How to acces data from StreamProvider Flutter如何从 StreamProvider Flutter 访问数据
【发布时间】: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


【解决方案1】:
Stream<List<MedReminder>> get medReminders {
    return userCollection.snapshots()
        .map(_medReminderListFromSnapshot);
  }

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

喜欢

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

在“用户”中保存数据时

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

然后就可以了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 2020-05-01
    • 2020-10-22
    • 2020-10-10
    • 2021-03-03
    • 1970-01-01
    相关资源
    最近更新 更多