Flutter Navigator返回黑屏解决

  • 发表于
  • flutter

Flutter Navigator黑屏

使用Navigator和静态路由和动态路由从第三级子页面跳到一级页出现黑屏:

child: RaisedButton(
child: Text('走走'),
 onPressed: (){
//静态路由
//Navigator.of(context).pushNamed('/twoPage');
//动态路由
Navigator.push(
context,
MaterialPageRoute(builder: (newPage){
 return new newTwoPage();
}),
);
}),

stackoverflow看到一个回复:

This can happen if your MoviesPage has another MaterialApp widget. Most of the time you want to use Scaffold as a top widget for a new page/screen, but if you accidentally use MaterialApp instead, nothing warns you.

What happens, is that MaterialApp creates a new Navigator, so if you switch from one page with MaterialApp to another, you now have two Navigators in the widget tree.

The call Navigator.of(context) looks for the closest Navigator, so it'll use the one, newly created in your MoviesPage. As the history of your route transitions is stored in a first Navigator, this one can't pop back – it has empty route history.

Hence, the black screen.

Long story short, to fix this, just use Scaffold as a top widget instead of MaterialApp in all nested screens.

然后开始检查是否存在第二个MaterialApp引用,在设置页中发现确实使用了,把MaterialApp去改直接使用Scaffold问题解决。

一个程序只能有一个MaterialApp存在,其它都应该使用Scaffold包含,如果你使用多个MaterialApp也不会报错,但就会出现类似跳转黑屏这种问题。同时也可能会报如下错误:

flutter: Another exception was thrown: Could not find a generator for route RouteSettings

解决方法也是一样的。