gpt4 book ai didi

flutter - 从非 Widget 类注销

转载 作者:IT王子 更新时间:2023-10-29 06:57:12 25 4
gpt4 key购买 nike

我的应用向服务器发出多个请求。有时服务器可能会要求用户重新登录,类似这个问题: Flutter: how to force an application restart (in production mode)?

我可以做这样的事情,

      Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(builder: (context) => LoginPage()),
(Route<dynamic> route) => false);

但我需要为此创建一个 BuildContext。

有没有办法在非 Widget 类中获取当前(最近使用的)上下文?我知道我可以在每次进行服务器调用时将上下文作为参数传递,但我希望找到一种侵入性较小的方法来执行此操作。

最佳答案

您寻找context 的原因是因为您想获得Navigator。 (所有 Navigator.pushXXX 调用都在后台执行 Navigator.of(context) 以在小部件树顶部附近找到(通常)唯一的导航器.)

如果您真正想要的只是访问导航器,还有另一种方法可以做到这一点。使您的应用程序有状态并将全局键放入其状态。

  GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();

在应用程序的构建(或顶级继承小部件的构建)中,当您创建 Material 应用程序时,将 key 传递给它。

  @override
Widget build(BuildContext context) {
return _SomeInherited(
data: this,
child: MaterialApp(
navigatorKey: navigatorKey,
title: 'Some Title',
theme: someTheme,
home: FrontPage(),
),
);
}

现在,从app层面,可以使用navigatorKey.currentState.pushXXX

关于flutter - 从非 Widget 类注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55978111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com