【发布时间】:2021-10-18 20:42:59
【问题描述】:
请帮助我对图标按钮进行长按检测。
我正在尝试获取一个图标按钮,如果点击它会将数量值更改为 1,而在长按时更改为 10。
问题是 Flutter 2.12 中没有可用于 IconButton 的长按事件处理程序。
所以我只在Container 中使用了Icon,如下所示
GestureDetector(
child: Container(
child: const Icon(
Icons.add,
),
padding: EdgeInsets.symmetric(vertical: 6.0, horizontal: 18.0),
),
onTap: () {
increment(1);
},
onLongPressStart: (_) async {
startPressing(() => increment(10));
},
onLongPressCancel: () {
cancelPress();
},
onLongPressEnd: (_) {
cancelPress();
},
),
它可以工作,但问题是按压区域非常小,在移动设备上查找按压点很不舒服。
我尝试将图标大小增加到 48,但结果很糟糕,图标大得不自然
const Icon(
Icons.add,
size: 48,
),
对我来说看起来不错的设计是使用GestureDetector(用于长按)和IconButton(以及 onPressed 用于单击检测):
GestureDetector(
child: IconButton(
onPressed: () => decrement(1),
icon: const Icon(
Icons.remove,
),
padding: EdgeInsets.symmetric(vertical: 8.0, horizontal: 18.0),
color: Theme.of(context).primaryColor,
),
onLongPressStart: (_) async {
startPressing(() => decrement(10));
},
onLongPressCancel: () {
cancelPress();
},
onLongPressEnd: (_) {
cancelPress();
},
),
Flutter 可以将 GestureDetector 用于 longPress 并将 IconButton 用于 onPressed 吗?
我可以在某些特定的 Android 版本上遇到这样的解决方案吗?
【问题讨论】:
-
当您触发
onPressed时,它也会触发onLongPressEnd,尝试添加print()看看会发生什么 -
@cahyo 一切正常。我的问题是“将 IconButton 放在 GuestureDetecor 上是否安全”?
-
我觉得没问题。不是最优雅的,但它对我有用并且可读。