Flutter中的LongAction侦听器上的FloatingActionButton

时间:2019-08-27 19:10:42

标签: flutter dart flutter-layout

在我的应用中长按FloatingActionButton时,我需要执行第二项操作。

floatingActionButton: FloatingActionButton(
  onPressed: someFunction,
  child: Icon(Icons.add),
  onLongPressed: //Something like this or any other solution
),

4 个答案:

答案 0 :(得分:2)

您可以创建自己的LongPressFloatingActionButton,因为StatefullWidget已经具有此选项。

参见:  Flutter - I want to select the card by onLongPress?

Api: https://api.flutter.dev/flutter/flutter_test/WidgetController/longPress.html

在包裹了FloatingActionButton的新CustomStatefullWidget的状态内,您可以像使用它一样

class CustomWidget extends StatefulWidget {
  final int index;
  final bool longPressEnabled;
  final VoidCallback callback;

  const CustomWidget({Key key, this.index, this.longPressEnabled, this.callback}) : super(key: key);

  @override
  _CustomWidgetState createState() => new _CustomWidgetState();
}

class _CustomWidgetState extends State<CustomWidget> {
  bool selected = false;

  @override
  Widget build(BuildContext context) {
    return new GestureDetector(
      onLongPress: () {
        setState(() {
          selected = !selected;
        });
        widget.callback();
      },

答案 1 :(得分:1)

确实存在可以与GestureDetector一起使用的onLongPress手势。 FloatingActionButton没有类似的直接解决方案。它不是很好,但是如果您真的想使用FloatingActionButton而不是简单地使用GestureDetector,则可以像这样轻松地将FAB嵌套在GestureDetector中,以达到相同的结果:

GestureDetector(
  onLongPress: () {
    print("Long press made");
  },
  child: FloatingActionButton(
    child: Text("FAB"),
    onPressed: () {},
  ),
)

您可以在Flutter的官方文档here

中阅读有关onLongPress的更多信息。

答案 2 :(得分:1)

我建议使用InkWell,以便也可以产生涟漪效应。

这里是您如何使用它的方法。

floatingActionButton: InkWell(
  splashColor: Colors.blue,
  onLongPress: () {
    // handle your long press functionality here
  },
  child: FloatingActionButton(
    child: Icon(Icons.add),
    onPressed: someFunction,
  ),
)

答案 3 :(得分:0)

基于上面的解决方案,我创建了自己的解决方案,它似乎也具有所需的波纹效果。谢谢大家。

    floatingActionButton: FloatingActionButton(
       onPressed: normalPressAction,
       child: GestureDetector(
       child: Icon(Icons.add),
          onLongPress: longPressAction,
          ),
    ),