一旦数据库中没有数据,我想禁止向右滑动。
if (data.length > 1) {
// I can swipe to the left or right
} else {
// I can't swipe to the right only left
}
实现这个目标真的吗?
也许,一旦将某个元素向右滑动,我就可以将其返回到中心
解决方案: 我只是在Dismissible小部件中使用了ConfirmDismiss。
confirmDismiss: (direction) {
if(data.length > 0 && direction==..)
// do stuff
else if(...)
}
答案 0 :(得分:5)
答案较晚,但是您可以将direction
的{{1}}属性设置为Dismissible
或direction: DismissDirection.endToStart,
答案 1 :(得分:2)
按照tomblue的想法,我提出了另一个想法,该想法不仅没有任何错误(包括编译和运行时错误),而且还允许开发人员防止向右或向左滑动:
我使用了将dismissThresholds中的属性设置为不可能值的三元数。完整示例如下:
class SwiperState extends State<Swiper> {
bool _isNotFirstIndex = false;
bool _isNotLastIndex = true;
int _currentIndex = 0;
void nextOne() {
setState(() {
_isNotFirstIndex = !(_currentIndex - 1 < 0);
_isNotLastIndex = !(_currentIndex + 1 == count);
});
}
@override
Widget build(BuildContext context) {
return Dismissible(
dismissThresholds: {DismissDirection.startToEnd: _isNotFirstIndex ? 0.05 : 2.00,
DismissDirection.endToStart: _isNotLastIndex ? 0.05 : 2.00},
key: UniqueKey(),
onDismissed: (DismissDirection direction) {
if(direction == DismissDirection.endToStart) {
// dismissed to the left, next one
nextOne();
}
else (do the same with prevOne())
(...)
答案 2 :(得分:2)
您可以使用方向属性
将其设置为 DismissDirection.endToStart
或 DismissDirection.startToEnd
Dismissible(
direction: DismissDirection.endToStart,
)
答案 3 :(得分:2)
如果有人想完全禁用关闭滑动(向左或向右),您可以使用 DismissDirection.none
*注意此参数目前仅在测试版频道可用
Dismissible(
direction: data.length > 1 ? DismissDirection.endToStart : DismissDirection.none,
)
答案 4 :(得分:1)
用AbsorbPointer
包装可弃用的小部件。然后,每当您不希望取消该项目时,请将absorbing
设置为true。检查此以获得更多信息link
答案 5 :(得分:1)
尽管Sergio的解决方案在您遇到简单情况时仍然有效,但在我的情况下,我在Dismissible小部件(需要接受其他类型的交互)下方有一棵复杂的树。
在@ flutter's source for Dismissible上偷看,我注意到我们可以将属性direction
设置为null以防止滑动。例如:
Dismissible(
key: UniqueKey(),
direction: !_canSwipe ? null : DismissDirection.horizontal,
(...)
虽然有点hacky,但由于小部件在第380行使用assert(widget.direction != null);
,它会打印一些调试错误,但是它将按预期工作。
希望有帮助!
答案 6 :(得分:0)
这些链接可能会有所帮助:
disable swiping tabs in TabBar flutter
https://inducesmile.com/google-flutter/how-to-disable-swiping-tabs-in-flutter-tabbar/
答案 7 :(得分:0)
这是一个新提议的api更改,不幸的是,在此之前,我们不得不重用代码。
return isDisabled ?
CardWidgetAndCode(
...
)
: Dismissible(
child: CardWidgetAndCode( // <-- duplicate code and/or function call
...
)
)