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

在 flutter 中调用 Navigator.push 需要 Context
如何随时随地获取 Context 是个问题
既然不好获取
那就创建一个吧

//先获取 导航键

final nvc = GlobalKey();//属性写在全局里
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;
      });
}

这样就可以了

你可能感兴趣的:(Flutter 通过 全局顶层Context 跳转视图)