向下拉动越远,可关闭小部件的 flutter 就越会减少其背景模糊

标签 flutter

我在屏幕上显示了一个“可关闭”对话框。当它显示时,它会使背景变得模糊,并且向下拖动越远,背景就会变得模糊。这个示例有效,但我的问题是,在 Listener 小部件中,其方法 onPointerMove、onPointerDown、onPointerSignal 仅对用户输入使用react,当我向下拖动一点以关闭它时,我 Handlebars 指从它上面移开,模糊背景到无模糊的转变太突然了。仅当我将模态一直向下拖动时,它才能顺利工作,但是当我将手指从模态上移开时,它只会跟踪我在屏幕上握住手指的最后位置,然后在对话框完全关闭时消除背景模糊.

我这样做是因为我想跟踪模态向下拖动的程度,以便我可以获取百分比并调整 ImageFilter.blur 的值。

我一直在想将key给予MyDialogModal中的某个小部件并获取其位置,但问题是我只能在保留我的触发onPointerMove时将手指放在屏幕上,否则不起作用。

有没有办法添加一些监听器,该监听器将始终监听我的模态并始终返回其位置,以便相应地调整模糊背景?或者也许有人可以建议一个更好的方法来解决这个问题?

  @override
  Widget build(BuildContext context) {
    return Positioned.fill(
          child: Container(
            child: BackdropFilter(
              filter: ImageFilter.blur(sigmaX: 15 * _percentageHeight, sigmaY: 15 * _percentageHeight),
              child: Align(
                alignment: Alignment.bottomCenter,
                child: Listener(
                  onPointerMove: (PointerMoveEvent event) {
                    double percentage = 1 - (_initialPosY! - event.position.dy).abs() / _keyMyDialog.currentContext!.size!.height;
                  setState(() => _percentageHeight = percentage);
                  },
                  onPointerDown: (PointerDownEvent event) {
                    _initialPosY = event.position.dy;
                  },
                  onPointerSignal: (PointerSignalEvent event) {},
                  child: Dismissible(
                    key: const Key('my-dialog'),
                    direction: DismissDirection.down,
                    onDismissed: () {
                      Navigator.of(context).pop();
                    },
                    child: MyDialogModal();
                  ),
                ),
              ),
            ),
          ),
        );
  }

最佳答案

当用户停止向下拖动 Dismissible 并且 _percentageHeight 不为 0 时,您可以使用 onPointerUp,这意味着 Dismissible 尚未完全关闭。

您可以使用Tween_percentageHeight 变为 1,以使用自定义持续时间恢复 100% 的模糊。

onPointerUp中,您应该调用_yourTween.animate(_animationController),然后监听其值的变化,调用setState 每次直到它停在 1。

关于向下拉动越远,可关闭小部件的 flutter 就越会减少其背景模糊,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68900159/

相关文章:

flutter - 在 Flutter 中滚动时隐藏键盘

android - flutter 等效于 `View::onAttachedToWindow` 和 `View::onDetachedFromWindow`

flutter - fontAwesome 图标在我的 flutter 应用程序中不起作用

android - 如何包装 PageView 的内容,以便 Indicators 出现在 PageView 结束位置的正下方?

flutter - 我希望我的按钮导航回到我的主页,而不是 flutter 中的前一页

flutter - 必须初始化不可为 null 的实例字段 '_selectedDate'

flutter - 未处理的异常 : A Products was used after being disposed

flutter - LayoutBuilder : constrains. maxHeight 返回无穷大

flutter - AppBar中的分隔线未出现

firebase - Firestore 无法使用 Flutter for iOS 构建