#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