Flutter-在构建方法中推送导航器路由
我试图在有状态的小部件中做这样的事情:
@override
Widget build(BuildContext context) {
if (condition) Navigator.pushNamed(context, '/someRoute');
// else, return some widget
return Container(child: someWidget());
}
如果条件评估为真,则颤振能够推动路线。但是,会引发错误:在 build 期间调用了 setState() 或 markNeedsBuild()
。
我怎样才能做到这一点而不会出错?
回答
a 的build()方法Widget用于描述 UI,更具体地说:
当这个小部件被插入到给定 BuildContext 的树中并且当这个小部件的依赖关系发生变化(例如,这个小部件引用的 InheritedWidget 发生变化)时,框架调用这个方法。这个方法可能会在每一帧中被调用,并且除了构建一个小部件之外不应该有任何副作用。
因此,该build()方法不是调用 的正确位置Navigator.pushNamed()。
一种选择是在布局完全加载后,通过覆盖该initState()方法:
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
if (true) { // condition here
Navigator.pushNamed(context, '/someRoute');
}
});
}