【发布时间】:2021-11-21 01:30:11
【问题描述】:
//这是我的启动画面
class SplashScreen extends StatefulWidget {
@override
_SplashScreenState createState() => _SplashScreenState();
}
class _SplashScreenState extends State<SplashScreen> {
@override
void initState() {
super.initState();
init();
}
Future<void> init() async {
await doSomeAsyncStuff();
}
doSomeAsyncStuff() {
User user = Provider.of<User>(context);
if (user == null) {
Navigator.pop(context);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => LoginScreen(),
),
);
} else {
Navigator.pop(context);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => BusinessList(),
));
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: Center(
child: Image.asset(
'assets/ledgerslogofinal.png',
width: 250,
height: 250,
),
),
);
}
} 如果用户不为空,则初始屏幕已重定向到 BusinessList(),否则它必须重定向到 LoginScreen()
这是我控制台中的错误消息 E/flutter (20189): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] 未处理的异常:在_SplashScreenState.initState() 完成之前调用了dependOnInheritedWidgetOfExactType<_inheritedproviderscope>() 或dependOnInheritedElement()。 E/flutter (20189):当继承的小部件发生变化时,例如,如果 Theme.of() 的值发生变化,则重新构建其依赖的小部件。如果依赖小部件对继承小部件的引用在构造函数或 initState() 方法中,则重建的依赖小部件将不会反映继承小部件中的更改。 E/flutter (20189):通常对继承的小部件的引用应该出现在小部件的 build() 方法中。或者,可以将基于继承的小部件的初始化放在 didChangeDependencies 方法中,该方法在 initState 之后以及此后依赖关系发生变化时调用。
【问题讨论】:
-
为什么在调用
Navigator.push之前先调用Navigator.pop?如果您想从导航堆栈中删除SplashScreen,请尝试使用Navigator.pushAndRemoveUntil