Метод «где» был вызван для нулевого значения. при использовании StreamBuilder с флаттером firestore

Я использую StreamBuilder для передачи некоторых данных из Firestore.

Он работает хорошо, и данные появляются, но в консоли есть ошибка.

Это код, который, я думаю, может содержать ошибку:

Padding(
                  padding: const EdgeInsets.symmetric(horizontal: 16),
                  child: Consumer<AppState>(
                    builder: (context, appState, _) =>
                        StreamBuilder<List<Dentist>>(
                      stream: database.dentistsStream(),
                      builder: (context, snapshot) => Column(
                        children: <Widget>[
                          for (final dentist in snapshot.data.where((e) => e
                              .categoryIds
                              .contains(appState.selectedCategoryId)))
                            GestureDetector(
                              onTap: () {},
                              child: DentistItem(
                                dentist: dentist,
                              ),
                            ),
                        ],
                      ),
                    ),
                  ),
                ),

и ошибка:

введите здесь описание изображения

Любая помощь?!

Примечание. Я знаю, что здесь for не поддерживается в старых версиях Dart.


person Tarek Alabd    schedule 23.04.2020    source источник
comment
Примечание. Я знаю, что здесь for не поддерживается в СТАРЫХ версиях Dart. :)   -  person malibayram91    schedule 24.04.2020


Ответы (1)


Перед созданием столбца из моментального снимка убедитесь, что в нем есть данные, if (snapshot.hasData);

Padding(
  padding: const EdgeInsets.symmetric(horizontal: 16),
  child: Consumer<AppState>(
    builder: (context, appState, _) => StreamBuilder<List<Dentist>>(
      stream: database.dentistsStream(),
      builder: (context, snapshot) {
        if (snapshot.hasData)
          return Column(
            children: <Widget>[
              for (final dentist in snapshot.data.where((e) =>
                  e.categoryIds.contains(appState.selectedCategoryId)))
                GestureDetector(
                  onTap: () {},
                  child: DentistItem(
                    dentist: dentist,
                  ),
                ),
            ],
          );
        return Center(child: CircularProgressIndicator());
      },
    ),
  ),
)
person malibayram91    schedule 23.04.2020