如何捕获和停止Flutter中所有抽头的传播

des4xlb0  于 2023-05-23  发布在  Flutter
关注(0)|答案(1)|浏览(135)

在我的应用程序中,我想渲染整个应用程序,但如果用户没有登录,那么我想弹出模态底部表单,提示他们登录,如果他们点击屏幕上的任何东西。
我希望能够用一个GestureDetector来 Package 整个屏幕,但似乎嵌套的按钮首先获得了点击事件。
我希望我可以使用Listener,然后取消(停止传播/冒泡)PointerUp上的事件,但这似乎是不可能的。
我希望能够重叠一个 * 透明 * Container捕捉所有水龙头,如果用户没有登录,但我不知道这是否是可能的。
有没有一种优雅的方法可以在Flutter中做到这一点,而不必添加代码来检查每个嵌套小部件的onTap处理程序上的登录用户?

hvvq6cgz

hvvq6cgz1#

谢谢你的指点@pskink -这为我解决了问题:

class LoginHandlerWrapper extends StatefulWidget {
  final Widget child;

  const LoginHandlerWrapper({super.key, required this.child});

  @override
  State<LoginHandlerWrapper> createState() => _LoginHandlerWrapperState();
}

class _LoginHandlerWrapperState extends State<LoginHandlerWrapper> {
  bool absorbPointer = false;

  @override
  Widget build(context) {
    return Listener(
        onPointerDown: (event) {
          if (FirebaseAuth.instance.currentUser?.isAnonymous == true) {
            showModalBottomSheet(
                context: context, builder: (context) => const SignIn());
            setState(() {
              absorbPointer = true;
            });
          } else {
            setState(() {
              absorbPointer = false;
            });
          }
        },
        child: AbsorbPointer(
          absorbing: absorbPointer,
          child: widget.child,
        ));
  }
}

相关问题