Flutter可拖拽扩展浮动按钮插件draggable_expandable_fab的使用

发布于 1周前 作者 nodeper 来自 Flutter

Flutter可拖拽扩展浮动按钮插件 draggable_expandable_fab 的使用

draggable_expandable_fab 是一个提供可扩展和可拖拽的浮动按钮的Flutter插件,带有动画效果。以下是详细的使用说明和示例代码。

安装

pubspec.yaml 文件中的 dependencies 部分添加以下内容:

dependencies:
  draggable_expandable_fab: <latest version>

如果你想使用最新的更改,可以使用以下方式:

dependencies:
  draggable_expandable_fab:
    git:
      url: https://github.com/Tughra/draggable_expandable_fab.git
      ref: master

使用方法

首先,导入该插件:

import 'package:draggable_expandable_fab/draggable_expandable_fab.dart';

然后,在 Scaffold 中替换以下参数以更好地使用该插件:

floatingActionButtonAnimator: NoScalingAnimation(),
floatingActionButtonLocation: ExpandableFloatLocation(),

简单实现

以下是一个简单的示例,展示了如何创建一个包含三个子按钮的可扩展和可拖拽的浮动按钮:

Scaffold(
  floatingActionButtonAnimator: NoScalingAnimation(),
  floatingActionButtonLocation: ExpandableFloatLocation(),
  floatingActionButton: ExpandableDraggableFab(
    childrenCount: 3,
    distance: 100, // 动画距离,在打开和关闭时使用。
    children: [
      FloatingActionButton(onPressed: () {}),
      FloatingActionButton(onPressed: () {}),
      FloatingActionButton(onPressed: () {}),
    ],
  ),
  body: Container(),
);

完整实现

以下是一个更复杂的示例,展示了更多的配置选项:

import 'package:flutter/material.dart';
import 'package:draggable_expandable_fab/draggable_expandable_fab.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    final Size _size = MediaQuery.of(context).size;

    return Scaffold(
      floatingActionButtonAnimator: NoScalingAnimation(),
      floatingActionButtonLocation: ExpandableFloatLocation(),
      floatingActionButton: ExpandableDraggableFab(
        childrenCount: 3,
        onTab: () {
          debugPrint("Tab");
        },
        childrenTransition: ChildrenTransition.fadeTransation,
        initialOpen: false,
        childrenBoxDecoration: const BoxDecoration(color: Colors.red),
        enableChildrenAnimation: true,
        curveAnimation: Curves.linear,
        reverseAnimation: Curves.linear,
        childrenType: ChildrenType.columnChildren,
        closeChildrenRotate: false,
        childrenAlignment: Alignment.topRight,
        initialDraggableOffset: Offset(_size.width - 90, _size.height - 100),
        distance: 100, // 动画距离,在打开和关闭时使用。
        children: [
          FloatingActionButton(
            onPressed: () {
              debugPrint("Button 1 pressed");
            },
            child: Icon(Icons.add),
          ),
          FloatingActionButton(
            onPressed: () {
              debugPrint("Button 2 pressed");
            },
            child: Icon(Icons.edit),
          ),
          FloatingActionButton(
            onPressed: () {
              debugPrint("Button 3 pressed");
            },
            child: Icon(Icons.delete),
          ),
        ],
      ),
      body: Center(
        child: Text('Drag and expand the FAB'),
      ),
    );
  }
}

更多关于Flutter可拖拽扩展浮动按钮插件draggable_expandable_fab的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter可拖拽扩展浮动按钮插件draggable_expandable_fab的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用draggable_expandable_fab插件的示例代码。这个插件允许你创建一个可拖拽和可扩展的浮动按钮(FAB)。

首先,确保你已经在pubspec.yaml文件中添加了draggable_expandable_fab依赖:

dependencies:
  flutter:
    sdk: flutter
  draggable_expandable_fab: ^x.y.z  # 请使用最新版本号替换x.y.z

然后,运行flutter pub get来安装依赖。

接下来是一个完整的示例代码,展示了如何使用draggable_expandable_fab插件:

import 'package:flutter/material.dart';
import 'package:draggable_expandable_fab/draggable_expandable_fab.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Draggable Expandable FAB Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Draggable Expandable FAB Demo'),
        ),
        body: Center(
          child: Text('Drag and expand the FAB button below!'),
        ),
        floatingActionButton: DraggableExpandableFab(
          // FAB按钮的初始位置
          initialOffset: Offset(100, 200),
          // FAB按钮的动画时长
          animationDuration: Duration(milliseconds: 300),
          // FAB按钮的初始状态(展开或收起)
          isOpened: false,
          // FAB按钮的背景颜色
          backgroundColor: Colors.blue,
          // FAB按钮的图标
          iconClosed: Icons.add,
          iconOpened: Icons.menu,
          // 展开后的子按钮列表
          children: [
            DraggableExpandableFabChild(
              iconData: Icons.star,
              backgroundColor: Colors.amber,
              label: 'Star',
              onPressed: () {
                // 子按钮点击事件
                print('Star button pressed');
              },
            ),
            DraggableExpandableFabChild(
              iconData: Icons.send,
              backgroundColor: Colors.green,
              label: 'Send',
              onPressed: () {
                // 子按钮点击事件
                print('Send button pressed');
              },
            ),
            DraggableExpandableFabChild(
              iconData: Icons.share,
              backgroundColor: Colors.red,
              label: 'Share',
              onPressed: () {
                // 子按钮点击事件
                print('Share button pressed');
              },
            ),
          ],
          // FAB按钮的拖动回调
          onDrag: (details) {
            print('FAB dragged: ${details.globalPosition}');
          },
          // FAB按钮的拖动结束回调
          onDragEnded: (details) {
            print('FAB drag ended: ${details.primaryVelocity}');
          },
        ),
      ),
    );
  }
}

在这个示例中:

  1. DraggableExpandableFab用于创建可拖拽和可扩展的FAB按钮。
  2. initialOffset属性用于设置FAB按钮的初始位置。
  3. animationDuration属性用于设置FAB按钮展开和收起时的动画时长。
  4. isOpened属性用于设置FAB按钮的初始状态(展开或收起)。
  5. backgroundColor属性用于设置FAB按钮的背景颜色。
  6. iconClosediconOpened属性分别用于设置FAB按钮在收起和展开状态下的图标。
  7. children属性是一个DraggableExpandableFabChild列表,用于定义展开后的子按钮。
  8. onDragonDragEnded属性分别用于处理FAB按钮拖动和拖动结束时的回调。

这个示例展示了如何使用draggable_expandable_fab插件创建一个基本的可拖拽和可扩展的FAB按钮,并添加了一些子按钮和拖动回调。你可以根据需求进一步自定义和扩展这个示例。

回到顶部