Flutter: Неудачное утверждение: логическое выражение не должно быть нулевым - PullRequest
1 голос
/ 13 июля 2020

Во флаттере я вызываю значение из облачной базы данных Firestore, используя future, и пытаюсь присвоить это значение переменной.

Вот мой код:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
class Gyanpothro extends StatefulWidget {
  @override
  _GyanpothroState createState() => _GyanpothroState();
}

class _GyanpothroState extends State<Gyanpothro> {
  Firestore db = Firestore.instance;
  Future databaseFuture;
  @override
  void initState() {
    databaseFuture = db.collection('notice').document('0').get();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
        future: databaseFuture,
        builder: (context, snapshot) {
          if (!snapshot.data) {
            return Column(
              mainAxisAlignment: MainAxisAlignment.center,
              crossAxisAlignment: CrossAxisAlignment.center,
              children: <Widget>[
                LinearProgressIndicator(
                  backgroundColor: Colors.amber,
                ),
                Text("Loading"),
              ],
            );
          }
          var _notice = snapshot.data.data['notice'];
          var _heading = snapshot.data.data['heading'];
          print(_notice);

          return Text(_notice);
        });
  }
}

Но я получаю сообщение об ошибке при использовании future builder - Another exception was thrown: Failed assertion: boolean expression must not be null

В чем проблема. И как это исправить?

1 Ответ

2 голосов
/ 13 июля 2020

Проблема в коде FutureBuilder. Чтобы проверить, прибыл ли data, вы проверяете неправильный флаг. Отметьте snapshot.hasData вместо snapshot.data

    @override
      Widget build(BuildContext context) {
        return FutureBuilder(
            future: databaseFuture,
            builder: (context, snapshot) {
              if (snapshot.hasData) {
                // Data is avialable. call snapshot.data 
              }
              else if(snapshot.hasError){     
                 // Do error handling
              }
              else {
                // Still Loading. Show progressbar
              }
            });
      }
...