此错误有很多解决方案。但我收到此错误。我在此站点尝试了几种方法。但无法解决。这是我的代码
@override
Widget build(BuildContext context) {
// TODO: implement build
SystemChrome.setEnabledSystemUIOverlays([]);
return MaterialApp(
routes: <String, WidgetBuilder>{
'/homepage': (context) => MyApp(),
'/loginpage': (BuildContext context) => new LoginPage()
},
home: Scaffold (
body: Center(
child: GestureDetector(
onTap: () {
Navigator.of(context).pushNamed('/loginpage');
},
child: Image(
width: 100.0,
height: 100.0,
image: AssetImage('assets/images/icon.png'),
),
)
),
),
);
}
答案 0 :(得分:1)
您可以使用Scaffold
小部件包装Builder
,它将为您提供上下文。
这是更新的代码
@override
Widget build(BuildContext context) {
SystemChrome.setEnabledSystemUIOverlays([]);
return MaterialApp(
routes: <String, WidgetBuilder>{
'/homepage': (context) => MyApp(),
'/loginpage': (BuildContext context) => new LoginPage()
},
home: Builder(
builder:(context)=>Scaffold (
body: Center(
child: GestureDetector(
onTap: () {
Navigator.of(context).pushNamed('/loginpage');
},
child: Image(
width: 100.0,
height: 100.0,
image: AssetImage('assets/images/icon.png'),
),
),
),
),
),
);
}
希望这会有所帮助!
答案 1 :(得分:0)
之所以发生这种情况,是因为您使用的上下文没有导航器正常工作所需的实质性应用程序,build
小部件中使用的上下文来自发送给其子级的父级,因此在这种情况下,父级是您的主应用程序类,它没有实质性应用程序,因此您可以按照答案之一的建议使用Builder
小部件,也可以创建一个单独的小部件并将其分配给home
参数,如下所示:
您的无状态窗口小部件:
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold (
body: Center(
child: GestureDetector(
onTap: () {
Navigator.of(context).pushNamed('/loginpage');
},
child: Image(
width: 100.0,
height: 100.0,
image: AssetImage('assets/images/icon.png'),
),
)
),
);
}
}
使用它作为home参数
home: MyHomePage()
。
答案 2 :(得分:0)
您可以在此链接上看到答案
https://stackoverflow.com/questions/44004451/navigator-operation-requested-with-a-context-that-does-not-include-a-navigator