例外:在不包含导航器的上下文中请求了导航器操作

时间:2020-05-16 02:24:49

标签: flutter exception routes navigator

此错误有很多解决方案。但我收到此错误。我在此站点尝试了几种方法。但无法解决。这是我的代码

@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'),
        ),
      )

    ),

  ),
 );
}

3 个答案:

答案 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