我正在尝试使用导航器在命名的路线之间导航。 尽管存在类似性质的问题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
答案 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';
}