flutter_boost
flutter_boost copied to clipboard
3.0版本仍旧无法 通过 GlobalKey 去获取 context
之前有个issue 1367
版本:v1.22.4-hotfixes child: MaterialApp( navigatorKey: navigatorKey, theme: provider.getTheme(), darkTheme: provider.getTheme(isDarkMode: true), themeMode: provider.getThemeMode(), home: AccountUtils.isLogin() ? HomePage() : LoginPage(), onGenerateRoute: Application.router.generator, builder: FlutterBoost.init(postPush: _onRoutePushed), ), 无法通过navigatorKey.currentState.overlay.context 获取context,注释掉FlutterBoost.init()正常
本以为高版本已经解决,但是发现3.0版本还是无法通过navigatorKey.currentState.overlay.context 获取context
你这边想拿这个context主要是做什么,我们可以看看能不能有代替方案
某些逻辑中不传context,不使用name路由,怎么打开一个flutter页面?
某些逻辑中不传context,不使用name路由,怎么打开一个flutter页面?
https://github.com/alibaba/flutter_boost/blob/master/docs/routeAPI.md
已经使用遍历树方式拿到了context,用于弹dialog
已经使用遍历树方式拿到了context,用于弹dialog
求代码
大兄弟,之前有事忙了给忘记了,这是我现在在用的,包在APP外就可以了
import 'package:flutter/material.dart'; import 'package:tdf_base_utils/tdf_base_utils.dart';
class ContextUtils { ContextUtils._();
static BuildContext? getContext() { return _overlayState?.context; } }
/// 全局Finderkey final GlobalKey<_AppContainerFinderState> _keyFinder = GlobalKey(debugLabel: 'overlay_support');
/// 全局overlayState OverlayState? get _overlayState { final context = _keyFinder.currentContext; if (context == null) return null; NavigatorState? navigator; void visitor(Element element) { if (navigator != null) { return; }
/// 如果是一个页面路由
if (element.widget is Navigator) {
/// navigator返回他的state
navigator = (element as StatefulElement).state as NavigatorState?;
} else {
/// 否则递归
element.visitChildElements(visitor);
}
}
/// 就是总能找到最后一页的overlay context.visitChildElements(visitor); return navigator?.overlay; }
/// 静态app容器 class AppContainer extends StatelessWidget { final Widget child; AppContainer({required this.child}); @override Widget build(BuildContext context) { return AppContainerFinder(child: child, key: _keyFinder); } }
/// 动态app容器内容 class AppContainerFinder extends StatefulWidget { final Widget child; AppContainerFinder({required Key key, required this.child}) : super(key: key); @override _AppContainerFinderState createState() => _AppContainerFinderState(); }
class _AppContainerFinderState extends State<AppContainerFinder> { @override Widget build(BuildContext context) { return widget.child; } }
------------------ 原始邮件 ------------------ 发件人: @.>; 发送时间: 2022年8月9日(星期二) 下午5:22 收件人: @.>; 抄送: @.>; @.>; 主题: Re: [alibaba/flutter_boost] 3.0版本仍旧无法 通过 GlobalKey 去获取 context (Issue #1459)
已经使用遍历树方式拿到了context,用于弹dialog
求代码
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>