StreamProvider не обновляет состояние. Поток помещен в Firestore Query - PullRequest
0 голосов
/ 01 апреля 2020

У меня настроен поток, который возвращает идентификатор пользователя. Я передаю это значение в мою модель, которая возвращает поток Firebase.

Потоки возвращают свои значения при создании виджета, но когда я добавляю или удаляю значения с помощью плавающей кнопки действия, виджеты не обновляются.

Если это поможет. Виджет TodaysSummary () - это страница внутри виджета PageView ().

Вот код

class TodaysSummary extends StatefulWidget {
  @override
  _TodaysSummaryState createState() => _TodaysSummaryState();
}

class _TodaysSummaryState extends State<TodaysSummary> {

  @override
  Widget build(BuildContext context) {
    //provide the user id
    final user = Provider.of<User>(context);

    return StreamProvider<List<Entry>>(
      create: DatabaseService(uid: user.uid).dates,
      updateShouldNotify: (_, __) => true,
      child: 
        body: TodaysDataList(),
      ),
    );
  }
}

class TodaysDataList extends StatefulWidget {
  @override
  _TodaysDataListState createState() => _TodaysDataListState();
}

class _TodaysDataListState extends State<TodaysDataList> {
  @override
  Widget build(BuildContext context) {
    final entries = Provider.of<List<Entry>>(context); //this is double code. I added it because I tohught I needed it.
    final user = Provider.of<User>(context);

    if (entries == null) {
      return Scaffold(
        body: NoEntryYet(),
      );
    } else {
      return StreamProvider<List<Entry>>.value(
        create: (_) => DashboardDatabaseService(uid: user.uid),
        updateShouldNotify: (_, __) => true,
        child:  ListView.builder(
          itemCount: entries.length,
          itemBuilder: (context,index) {
            return EntryTile(entry: entries[index]);
          },
        ),
      );
    }
  }
}

Этот код является потоком в DatabaseService

// Segment of the dashboard database service

Stream<List<Entry>> get dates {
  return entryCollection.where('date', isGreaterThanOrEqualTo: today).where('uid', isEqualTo: uid).orderBy('date', descending: true).snapshots()
    .map(_todayEntryListFromSnapshot);
}
...