[英]Flutter - 'parent != 'null' is not true' error for Navigator
我写了一个检查,如果条件为真,然后导航到下一页。 但是,每当该条件返回 true 并且我打算导航时,我都会收到错误消息
class BuyTickets extends StatefulWidget {
@override
_BuyTicketsState createState() => new _BuyTicketsState();
}
class _BuyTicketsState extends State<BuyTickets> {
@override
void initState(){
...
if(condition){
//Skip to next page
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => SelectSeat(data: widget.data)
)
);
}
super.initState();
}
@override
Widget build(BuildContext context) {
return new Scaffold(
...
)
}
错误:
请问我该如何解决?
它抱怨说它找不到父对象,因为与小部件关联的渲染对象没有完全创建和安装。
在所有这些情况下,您需要将调用延迟到渲染对象安装的那一刻。 一种方法是在第一帧之后执行它。
@override
void initState() {
super.initState();
if(condition){
WidgetsBinding.instance.addPostFrameCallback((_) async {
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => SelectSeat(data: widget.data)
)
);
});
}
}
您无法在initState()
或build()
等生命周期函数中导航。 您可以将您的登录名放在async
函数中或使用Future.delayed
或类似的东西。
@override
void initState(){
super.initState();
...
if(condition){
skipToNextPage();
}
}
void skipToNextPage() async {
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => SelectSeat(data: widget.data)
)
);
}
我很久以前写过一篇评论,我建议延迟一秒开始操作,实际上是错误的。 我们需要做的是初始化变量,对于任何依赖于另一个的操作,我们必须等待图形创建,只需输入:
@override
void initState() {
super.initState();
//here you can init your variables
WidgetsBinding.instance.addPostFrameCallback((_) async {
//All dynamic operations that will impact on graphics
});
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.