Неудачное утверждение: логическое выражение не должно быть нулевым (для данных снимков документов)

Когда я запускаю приведенный ниже код, я получаю сообщение об ошибке, как показано ниже:

======== Исключение, обнаруженное библиотекой виджетов ===================================== ================== Следующее утверждение было выдано при построении StreamBuilder (грязное, состояние: _StreamBuilderBaseState ‹DocumentSnapshot, AsyncSnapshot› # cfcf8): Неудачное утверждение: логическое выражение не должно быть нулевым.

Код, который я запустил, показан ниже:

class DataState extends AppState {
  final CollectionReference dataCollection =
  FirebaseFirestore.instance.collection('data');

  Stream<DocumentSnapshot> dataStream({String uid}) =>
      dataCollection.doc(uid).snapshots();

class WaitingPage extends StatefulWidget {
  @override
  _WaitingPageState createState() => _WaitingPageState();
}

class _WaitingPageState extends State<WaitingPage> {
  @override
  Widget build(BuildContext context) {
    final AuthState userProvider = Provider.of<AuthState>(context);
    var dataState = Provider.of<DataState>(context, listen:false);
    return (userProvider.userModel != null)
        ? StreamBuilder<DocumentSnapshot>(
      stream: dataState.dataStream(uid: userProvider.userModel.userId),
      builder: (context, snapshot) {
        if (snapshot.hasData && snapshot.data.data() != null) {
          Data data = Data.fromMap(snapshot.data.data());
          if (data.hasPickup) {
            return DataPage(data:data);
          }
          else{
            return Scaffold(
              body: Container(
              ),
            );
          }
        }
        return Scaffold(
          body: Center(
            child: CircularProgressIndicator(),
          ),
        );
      },
    )
        : Scaffold(
      body: Center(
        child: CircularProgressIndicator(),
      ),
    );
  }
}

Есть предложения о том, как изменить код, чтобы он работал? Спасибо :)


person scott lee    schedule 28.05.2021    source источник
comment
Возможно ли, что это data.hasPickup равно нулю? Я бы зарегистрировал весь объект data, чтобы проверить, есть ли какие-либо неожиданные значения.   -  person Rafael Lemos    schedule 28.05.2021
comment
Рафаэль, спасибо !!! Ты был прав. Это ноль. Я все время думал, что это ошибка streambuilder, поэтому я продолжал пытаться устранить неполадки там. Я не знал, что проблема в data.hasPickup. Спасибо!   -  person scott lee    schedule 28.05.2021


Ответы (1)


Значение data.hasPickup, вероятно, является нулевым для некоторого значения, и это вызывает эту ошибку, чтобы исправить этот симптом лечения, вы должны сделать if (data.hasPickup != null) проверку в своем построителе, и это будет смягчено.

При этом фактической основной причины проблемы здесь нет, но когда вы создаете эти документы, лучший способ избежать такого рода проблем - никогда не инициализировать значение Firestore значением null (или, по крайней мере, значением, которое будет активно используя), а вместо этого используйте значение по умолчанию, например false.

person Rafael Lemos    schedule 28.05.2021