Flutter 通过 全局顶层Context 跳转视图

在 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;
      });
}

这样就可以了

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。