«Метод« где »был вызван на ноль». при использовании streambuilder с флаттером firestore - PullRequest
1 голос
/ 24 апреля 2020

Я использую 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.

1 Ответ

0 голосов
/ 24 апреля 2020

Перед созданием столбца из снимка убедитесь, что в снимке содержатся данные 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());
      },
    ),
  ),
)
...