如何解决为什么我在我的代码函数中收到此错误返回空值?
为什么我的小部件会出现此错误?:
======== Exception caught by widgets library =======================================================
The following assertion was thrown building StreamBuilder<UserData>(dirty,state: _StreamBuilderBaseState<UserData,AsyncSnapshot<UserData>>#1e46f):
A build function returned null.
The offending widget is: StreamBuilder<UserData>
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<UserData> file:///Users/name/StudioProjects/project/lib/seitenleiste/meinacount.dart:356:16
When the exception was thrown,this was the stack:
#0 debugWidgetBuilderValue.<anonymous closure> (package:flutter/src/widgets/debug.dart:305:7)
#1 debugWidgetBuilderValue (package:flutter/src/widgets/debug.dart:326:4)
#2 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4592:7)
#3 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:4759:11)
#4 Element.rebuild (package:flutter/src/widgets/framework.dart:4281:5)
...
====================================================================================================
这是我的小部件
@override
Widget build(BuildContext context) {
final user = Provider.of<Userr>(context);
return StreamBuilder<UserData>(
stream: DatbaseService(uid:user.uid).userData,builder: (context,snapshot) {
if(snapshot.hasData){
UserData userData =snapshot.data;
return Container(
child: Scaffold(
appBar: AppBar(
backgroundColor: Colors.transparent,elevation: 0.0,),body: AnnotatedRegion<SystemUiOverlayStyle>(
value: SystemUiOverlayStyle.light,child: GestureDetector(
onTap: () => FocusScope.of(context).unfocus(),child: Form(
key: _formKey,child: Stack(
children: <Widget>[
Container(
height: double.infinity,child: SingleChildScrollView(
physics: AlwaysScrollableScrollPhysics(),padding: EdgeInsets.symmetric(
horizontal: 40.0,vertical: 10,child: Column(
mainAxisAlignment: MainAxisAlignment.center,children: <Widget>[
Center(
child: Stack(
children: [
Container(
width: 110,height: 110,decoration: BoxDecoration(
borderRadius: BorderRadius.circular(100),image: DecorationImage(
fit: BoxFit.cover,image: NetworkImage(
"https://images.pexels.com/photos/3307758/pexels-photo-3307758.jpeg?auto=compress&cs=tinysrgb&dpr=3&h=250",))),Positioned(
bottom: 0,right: 0,child: Container(
height: 35,width: 35,decoration: BoxDecoration(
shape: BoxShape.circle,border: Border.all(
width: 4,color: Theme.of(context)
.scaffoldBackgroundColor,color: Colors.green,child: Icon(
Icons.edit,color: Colors.white,)),],SizedBox(
height: 10,Text(
'Mein Profil',style: TextStyle(
color: Colors.black,fontFamily: 'OpenSans',fontSize: 20.0,fontWeight: FontWeight.w600,showAlert2(),_buildEmailTF(userData),SizedBox(
height: 30.0,_buildName(userData ),_builduserName(userData),_buildPasswordTF(userData),SizedBox(height: 30,_buildPassword2TF(userData),_buildUpdateDataButton(),// _buildEmailform(),)
],);
}else{
return null;
}
}
);
}
解决方法
错误信息非常简单:
The offending widget is: StreamBuilder<UserData>
Build functions must never return null.
在您的 StreamBuilder
中,如果 null
没有数据,您将返回 snapshot
:
@override
Widget build(BuildContext context) {
final user = Provider.of<User>(context);
return StreamBuilder<UserData>(
stream: DatbaseService(uid: user.uid).userData,builder: (context,snapshot) {
if (snapshot.hasData) {
...
} else {
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)".
因此,不要返回 null
,而是返回一个空的 Container
:
@override
Widget build(BuildContext context) {
final user = Provider.of<User>(context);
return StreamBuilder<UserData>(
stream: DatbaseService(uid: user.uid).userData,snapshot) {
if (snapshot.hasData) {
} else {
return Container();
}
},);
}
,
错误消息中的答案是正确的:
构建函数返回 null。
有问题的小部件是:StreamBuilder 构建函数绝不能返回 null。
要返回导致建筑小部件填满可用空间的空白空间,请返回“Container()”。要返回占用尽可能少空间的空白空间,请返回“Container(width: 0.0,height: 0.0)”。
你在 else 中返回 null
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。