【发布时间】:2021-01-11 01:05:09
【问题描述】:
我正在尝试根据 authStatus 导航到我的主页或登录页面。在使用 Navigator.of(context)... 时,它会在 build 方法上返回 null 一秒钟,然后屏幕刷新并成功导航到给定页面。我对移动开发和颤振相对较新。任何线索都会有所帮助!谢谢。
代码如下:
@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。 有问题的小部件是: 根页面 构建函数绝不能返回 null。 要返回导致建筑小部件填满可用空间的空白空间,请返回 “容器()”。要返回一个占用尽可能少空间的空白空间,请返回 “容器(宽度:0.0,高度:0.0)”。
【问题讨论】:
-
switchCase 在第一种情况下实际上并没有返回任何东西,而第二种情况只有在进入 else 时才返回,您应该在其他地方执行此操作,而不是构建方法(init 或 didChangeDependencies)
-
嘿,开关盒确实有效!我已经在 initstate 和 didChangeDependencies 方法中设置了身份验证状态,但问题在于 Navigator.push 语句。我猜在它返回视图之前,构建方法会异步执行并给出一个空错误,并且当 Navigator.push 执行时它会加载正确的视图。
-
您会看到一秒钟的错误,因为您在其前面推送了一个新页面(它运行异步,因为您添加了 WidgetsBinding.instance.addPostFrameCallback)但您的 rootPage 构建方法永远不会返回一个小部件
标签: flutter dart flutter-web