Функция Flutter A build возвращает значение null.StreamBuilder

#android #flutter #dart

#Android #флаттер #dart

Вопрос:

Я продолжаю получать эту ошибку, но, похоже, я не могу понять, какая часть возвращает null, я даже пытался просто вернуть пустой контейнер на всякий случай, я не уверен, где я ошибаюсь, обычно эта ошибка отображается, когда в firestore нет данных

 import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:provider/provider.dart';
import 'package:hotel_search/model.dart';

class BookScreen extends StatefulWidget {
  @override
  book createState() => book();
}

class book extends State<BookScreen> {
  @override
  void initState() {
    super.initState();
  }

  String userId;

  checkDatabase() {
    var docSnapshot = FirebaseFirestore.instance
        .collection('bookings')
        .where('customer', isEqualTo: userId)
        .snapshots();

    return docSnapshot;
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: DefaultTabController(
        length: 3,
        child: Scaffold(
          appBar: AppBar(
            backgroundColor: Colors.white,
            bottom: TabBar(
              labelColor: Colors.black,
              indicatorColor: Color(0xff008d4b),
              labelStyle: TextStyle(fontSize: 13, fontFamily: 'Montserrat'),
              tabs: [
                Tab(
                  text: "Upcoming",
                ),
                Tab(text: "Cancelled"),
                Tab(text: "Past"),
              ],
            ),
            title: Text('My Bookings',
                style: TextStyle(
                  color: Colors.black,
                  fontFamily: 'Montserrat',
                  fontSize: 20,
                )),
          ),
          body: TabBarView(
            children: [
              Container(
                  color: Colors.grey[100],
                  child: StreamBuilder(
                      stream: checkDatabase(),
                      builder: (context, snapshot) {
                        if (snapshot.hasData) {
                          if (snapshot.data.documents.isEmpty) {
                            return Column(
                              crossAxisAlignment: CrossAxisAlignment.center,
                              mainAxisAlignment: MainAxisAlignment.center,
                              children: [
                                Consumer<MyModel>(
                                    builder: (context, myModel, children) {
                                  userId = myModel.customer;

                                  return Container(
                                      child: Container(
                                          child: Image.asset(
                                    "assets/images/sunbird_white.png",
                                    width: 300,
                                    height: 80,
                                    fit: BoxFit.contain,
                                  )));
                                }),
                                SizedBox(height: 25),
                                Container(
                                    width: MediaQuery.of(context).size.width,
                                    child: Center(
                                        child: Text(
                                      "You currently dont have n any upcoming stays at our Hotels",
                                      textAlign: TextAlign.center,
                                      style: TextStyle(
                                          fontSize: 14,
                                          fontFamily: 'Montserrat'),
                                    )))
                              ],
                            );
                          } else if (snapshot.data.documents.isNotEmpty) {
                            return Container(width: 0, height: 0);
                          }
                        }
                      })),
              Container(
                color: Colors.grey[100],
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.center,
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    Container(
                        child: Container(
                            child: Image.asset(
                      "assets/images/sunbird_white.png",
                      width: 300,
                      height: 80,
                      fit: BoxFit.contain,
                    ))),
                    SizedBox(height: 25),
                    Container(
                        width: MediaQuery.of(context).size.width,
                        child: Center(
                            child: Text(
                          "You currently dont have n any cancelled stays at our Hotels",
                          textAlign: TextAlign.center,
                          style:
                              TextStyle(fontSize: 14, fontFamily: 'Montserrat'),
                        )))
                  ],
                ),
              ),
              Container(
                color: Colors.grey[100],
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.center,
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: [
                    Container(
                        child: Container(
                            child: Image.asset(
                      "assets/images/sunbird_white.png",
                      width: 300,
                      height: 80,
                      fit: BoxFit.contain,
                    ))),
                    SizedBox(height: 25),
                    Container(
                        width: MediaQuery.of(context).size.width,
                        child: Center(
                            child: Text(
                          "You currently dont have n any past stays at our Hotels",
                          textAlign: TextAlign.center,
                          style:
                              TextStyle(fontSize: 14, fontFamily: 'Montserrat'),
                        )))
                  ],
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
  

и это ошибка

 A build function returned null.
The offending widget is:
  StreamBuilder<dynamic>
Build functions must never return null.
To return an empty space that causes the building widget to fill available room, return
"Container()". To return an empty space that takes as little room as possible, return
"Container(width: 0.0, height: 0.0)".
The relevant error-causing widget was:
  StreamBuilder<dynamic> 
libbookings.dart:65
When the exception was thrown, this was the stack:
  

………………………………………………………………………………………………………………………………………..

Комментарии:

1. Поделитесь с use своей ошибкой 🙂

2. я добавил его, он обычно показывает эту ошибку, когда в firestore нет данных

Ответ №1:

Эта проблема, когда вы не настроили свой конструктор потоков, поэтому вам нужно добавить тип данных, которые будут возвращаться в <> после StreamBuilder

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

Комментарии:

1. когда я помещаю <String> после stream builder, все части, которые я написал snapshot.data.documents.isEmpty , часть документа красная, и я получаю сообщение об ошибке, в котором говорится, что средство получения «documents» не определено для типа «String». Попробуйте импортировать библиотеку, которая определяет «документы», исправив имя на имя существующего средства получения или определив средство получения или поле с именем «документы».dartundefined_getter