我想防止在颤动中向下滑动时忽略
bottom sheet
,
我想用
Scaffold.of(context).showBottomSheet<void>((BuildContext context) => ...)
而不是
showModalBottomSheet
,因为我需要脚手架信息,showBottomSheet
有什么解决方案吗?我该怎么办?
如果您使用
showModalBottomSheet
,请使用 enableDrag
属性。
showModalBottomSheet<bool>(
context: context,
enableDrag: false,
...
builder: (BuildContext bc) {
return ..your widgets...
}
);
showModalBottomSheet(
isDismissible: false,
)
用
GestureDetector
包裹您的小部件并禁用拖动:
Scaffold.of(context).showBottomSheet(
(context) => GestureDetector(
child: YourWidget(),
onVerticalDragStart: (_) {},
),
)
尽管@Sami 答案工作正常,但它不太优雅,因为它似乎是一种解决方法。
AbsorbPointer
而不是仅使用空手势。
简单地说(粘贴文档):
在命中测试期间吸收指针的小部件。
在你的情况下,你会这样使用:
Scaffold.of(context).showBottomSheet(
(context) => AbsorbPointer(child: Container()),
)
如果有人想阻止 Android 设备上的硬件后退按钮关闭底部工作表
你必须制作自己的底部工作表,而不是使用 showBottomSheet(),就像这样
Navigator.of(context).push(
PageRouteBuilder(
opaque: false,
pageBuilder: (_, __, ___) {
return Material(
color: Colors.black.withOpacity(0.5),
child: WillPopScope(
onWillPop: () async {
return false;
},
child: YourCustomBottomSheet(),
),
);
},
),
);