我正在构建一个基于 InteractiveViewer
的图像查看器。 InteractiveViewer
被包装在可消失的小部件中,当用户向上滑动时将关闭该小部件。
Listener(
onPointerMove: (PointerMoveEvent event) {
if (_transformationController.value.getMaxScaleOnAxis() > 1.0) {
_canBeDismissed = false; }
else { _canBeDismissed = true; }
},
child: AnimatedOpacity(
opacity:_opacity,
duration: const Duration(milliseconds: 200),
child: Dismissible(
//direction: DismissDirection.vertical,
direction: (_canBeDismissed == true) ? DismissDirection.vertical : DismissDirection.vertical,
key: daKey,
onDismissed: (_) => Navigator.of(context).pop(),
child: GestureDetector(
onDoubleTapDown: _handleDoubleTapDown,
onDoubleTap: _handleDoubleTap,
child: InteractiveViewer(
transformationController: _transformationController,
child:
Container(
alignment: Alignment.center,
decoration: BoxDecoration(
image:
DecorationImage(
image:
CachedNetworkImageProvider(image),
fit: BoxFit.contain,
),
),
),
),
),
),
),
)
);
然而,当用户放大图片并尝试拖动图像时,它将关闭图像而不是允许用户拖动图像。
因此,我想简单地禁用 Dismissible,以防止在用户缩放图像时出现问题。我可以使用 Listener
检测到当图像被缩放时,并将变量 _canBeDismissed
设置为 true 或 false - 这不是问题。
问题在于如何程序化地禁用 Dismissible 功能?
我尝试通过更改方向并将其设置为 null 来实现此目的:
direction: (_canBeDismissed == true) ? DismissDirection.vertical : null,
但是,似乎不允许将其设置为 null,因此这没有起作用。我希望有某种 enabled
标志可以解决我的问题。有任何想法吗?或者有其他实现类似 Twitter 图像查看器功能的方式吗?(我已经尝试了一些在 pub.dev 上的大型存储库,但它们都似乎存在问题或无法实现)
谢谢!
答案 0 :(得分:1)
你可以使用 confirmDismiss
参数来否决关闭。
示例:
Dismissible(
confirmDismiss: (direction) async => _canBeDismissed,
child: // ...
),