为什么我在我的代码函数中收到此错误返回null? [英] why im getting this error in my code function returned null?

查看:139
本文介绍了为什么我在我的代码函数中收到此错误返回null?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为什么我的小部件会出现此错误?:

Why my widget give this error ?:

======== 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 ),
                                    SizedBox(
                                      height: 30.0,
                                    ),
                                    _builduserName(userData),
                                    SizedBox(
                                      height: 30.0,
                                    ),
                                    _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 中,如果 snapshot 没有数据,则返回 null :

In your StreamBuilder, you are returning null if the snapshot has no data:

@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;
      }
    },
  );
}

错误消息在此处提供了解决方案:

The error message is providing the solution here:

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 :

So, instead of returning null, just return an empty Container:

@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 Container();
      }
    },
  );
}

这篇关于为什么我在我的代码函数中收到此错误返回null?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆