Flutter的build函数返回null。

3

我想根据authStatus导航到我的主页或登录页面。使用Navigator.of(context)...时,在build方法中第一秒它返回null,然后屏幕刷新并成功导航到给定页面。我对移动开发和Flutter相对较新。任何线索都会有所帮助!谢谢。

以下是代码:

  @override
  Widget build(BuildContext context) {
    switch (authStatus) {
      case AuthStatus.NOT_LOGGED_IN:
        WidgetsBinding.instance.addPostFrameCallback((_) {
          {
            Navigator.push(
              context,
              MaterialPageRoute(
                  builder: (context) => LoginSignUpPage(
                        auth: widget.auth,
                        onSignedIn: _onLoggedIn,
                        params: widget.params,
                      )),
            );
          }
        });

        break;
      case AuthStatus.LOGGED_IN:
        if (_userId.length > 0 && _userId != null) {
          WidgetsBinding.instance.addPostFrameCallback((_) {
            Navigator.push(
              context,
              MaterialPageRoute(
                  builder: (context) => HomePage(
                        userId: _userId,
                        auth: widget.auth,
                        onSignedOut: _onSignedOut,
                        params: widget.params,
                      )),
            );
          });
        } else
          return widget.waitingScreen;
        break;
      default:
        return widget.waitingScreen;
    }

以下是错误信息:

一个构建函数返回了null。 有问题的widget是: RootPage 构建函数绝不能返回null。 如果要返回一个空间,使得构建的widget填充可用的空间,请返回"Container()"。 如果要返回一个尽可能占据尽量少空间的空间,请返回"Container(width: 0.0, height: 0.0)"。


switchCase 在第一个 case 中实际上没有返回任何内容,而在第二个 case 中只有在进入 else 时才会返回。你应该在其他地方执行此操作,而不是在 build 方法(init 或 didChangeDependencies)中。 - EdwynZN
嘿,switch case 确实起作用了!我已经在 initstate 和 didChangeDependencies 方法中设置了 auth 状态,但问题出在 Navigator.push 语句上。我猜在返回视图之前,build 方法会异步执行并给出一个空错误,只有当 Navigator.push 执行时才会加载正确的视图。 - Maaz Ahmed
你之所以看到错误信息只是因为你在页面前面添加了一个新页面(这是因为你使用了异步的WidgetsBinding.instance.addPostFrameCallback方法),但是你的rootPage构建方法没有返回任何Widget。 - EdwynZN
1个回答

4
在紧随着WidgetsBinding的代码行后面添加。
return Container();

您还可以包含一个颜色参数以匹配您的设计。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接