【问题标题】:Flutter - Navigator.push() giving error "Context does not include a Navigator" on extends State<Main>Flutter - Navigator.push() 在 extends State<Main> 上给出错误“上下文不包括导航器”
【发布时间】:2022-01-20 08:45:31
【问题描述】:

我一直在为一个社会创建一个颤振应用程序,我正在使用颤振。 我创建了两个“窗口”(我不太了解颤振的技术术语), 第一个将正确显示,并带有打开第二个的按钮。 如果单击该按钮,另一个窗口将正确显示。 但是,我想使用 DeepLinks(用于通知),如果我点击链接,_AccueilPageState 中的重定向到 Pub 类(我正在使用

Navigator.push(context,MaterialPageRoute(builder: (context) =>  Pub()));

我收到了错误

使用不包含 导航器

有人可以解释我有什么问题吗?也许如何解决这个问题! 谢谢, 在这里你可以看到我的代码的层次结构(因为保密,我不能全部展示):

void main() async{...}

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return this;
  }
  @override
  State<StatefulWidget> createState() => _AccueilPageState();
}
//Loading properties for MyApp(with the navigator.push in it)
class _AccueilPageState extends State<MyApp>{...}

//class loading FenetrePrincipale
class WebView extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    return MaterialApp(home : FenetrePrincipale(),
    );
  }
}
//Pub that return a MaterialApp(home:Builder:(context)=>Scaffold())
class Pub extends StatelessWidget{...}

//FenetrePrincipale that return a Scaffold
class FenetrePrincipale extends StatelessWidget{...}

//When on FenetrePrincipale we can push a button to open Pub but if you go trough a deeplink : _AccueilPageState
//Does not redirect on Pub and put the error :
//"Navigator operation requested with a context that does not include a Navigator"


【问题讨论】:

    标签: flutter


    【解决方案1】:
    1. 为导航器创建一个全局键,以便您可以从应用程序中的任何位置访问它:
    final GlobalKey<NavigatorState> myNavigatorKey = GlobalKey<NavigatorState>();
    
    1. 创建MaterialApp时将其分配给您的应用:
    return MaterialApp(navigatorKey: myNavigatorKey,...);
    
    1. 在推送路由时使用它:
    myNavigatorKey.currentState?.pushNamed(...);
    

    【讨论】:

    • 它运行良好,谢谢!但是如果我恢复,我只是创建一个包含我的上下文的 globalKey,所以如果有一个上下文,应用程序将推送 globalKey 上下文?
    • 您只需要创建一次GlobalKey,它将提供对导航器的无上下文访问。
    • 但是是否可以通过 NavigatorKey 传递一些参数?
    • 你的意思是在推路由的时候?您可以在推送路由时为路由添加参数,check out this.
    猜你喜欢
    • 1970-01-01
    • 2021-01-30
    • 2021-02-23
    • 2020-03-17
    • 1970-01-01
    • 2021-09-12
    • 2021-01-05
    • 2019-09-05
    • 1970-01-01
    相关资源
    最近更新 更多