Flutter Navigator无法使用命名路线

时间:2020-11-07 13:30:44

标签: flutter

我正在尝试使用导航器在命名的路线之间导航。 尽管存在类似性质的问题here,但我认为答案并没有特别的帮助。另外,当我尝试实施一些建议的解决方案时,它们都不起作用。

相关错误是:

Navigator operation requested with a context that does not include a Navigator.
The context used to push or pop routes from the Navigator must be that of a widget that is a
descendant of a Navigator widget.

我尝试删除和添加提供程序,但这似乎不是问题的原因,我测试了对Provider.of<T>(context)接口的访问是否按预期进行。

我还尝试实现Builder小部件,但这也没有效果。

为澄清起见,Naigator.of(context).pushNamed('/home')出现在build的{​​{1}}方法内,用于调试。

代码:

LandingPage

1 个答案:

答案 0 :(得分:1)

替换此行

routes: {'/home': (ctx) => HomePage(), '/topup': (ctx) => TopUpPage()},

使用

initialRoute: RoutesLinks.main,
onGenerateRoute: RoutesProvider.provideRoutes,

并添加此文件

class RoutesProvider {
static Route<dynamic> provideRoutes(RouteSettings settings) {
// Getting arguments passed, in while calling Navigator.pushNamed
final arguments = settings.arguments;

switch (settings.name) {
  case RoutesLinks.main:
    return MaterialPageRoute(builder: (_) => MainPage());
  case RoutesLinks.home:
    return MaterialPageRoute(builder: (_) => HomeScreen());
  default:
    // If there is no such named route in the switch statement, e.g. /third
    return _errorRoute();
}
}

static Route<dynamic> _errorRoute() {
return MaterialPageRoute(builder: (_) {
  return Scaffold(
    appBar: AppBar(
      title: Text('Error'),
    ),
    body: Center(
      child: Text('ERROR'),
    ),
  );
  });
 }
 }

 class RoutesLinks {
  static const main = '/';
  static const home = '/home';
 }