在 flutter 中调用 Navigator.push 需要 Context
如何随时随地获取 Context 是个问题
既然不好获取
那就创建一个吧
//先获取 导航键
final nvc = GlobalKey<NavigatorState>();//属性写在全局里
CupertinoApp(
navigatorKey: nvc,
)
//通过创建和显示一个空白 overlay 获取 顶层Context
BuildContext gccc; //全局顶层Context 属性写在全局里
growGccc() {//获取 顶层Context 方法只需在程序开始加载出 CupertinoApp 后实现一次
if (gccc == null) {
print('want init entry $gccc');
Future.delayed(Duration(milliseconds: 240), () {
print('init entry $gccc');
OverlayEntry ee;
ee = OverlayEntry(
builder: (ccc) {
gccc = ccc;
return Material(
type: MaterialType.transparency,
child: Stack(
children: [
Text(
'全局顶层Context',
style:
TextStyle(backgroundColor: Colors.pink.withOpacity(0.2)),
)
],
),
);
},
);
nvc.currentState.overlay.insert(ee);//创建和显示顶层OverlayEntry
});
}
}
//如何使用?
//例如 showGeneralDialog 自定义弹窗
presentDo(Widget vvv) {//全局随处弹窗方法
print('showed entry $gccc');
showGeneralDialog(
context: gccc,//使用 全局顶层Context
barrierDismissible: true,
barrierLabel: 'ewsvergtwe',
transitionDuration: Duration(milliseconds: 200),
transitionBuilder: (ctx, a1, a2, vv) {//动画 从右侧弹出
return FractionalTranslation(translation: Offset(1 - a1.value, 0), child: vv);
},
pageBuilder: (ctx, a1, a2) {
return vvv;
});
}
这样就可以了