Flutter自定义浮动操作按钮插件custom_floating_action_button的使用

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

Flutter自定义浮动操作按钮插件custom_floating_action_button的使用

插件介绍

此插件允许您创建一个带有多个选项的浮动操作按钮(FloatingActionButton)。

如何使用

  1. pubspec.yaml文件中添加以下依赖:

    # 添加这行到你的依赖项
    custom_floating_action_button: ^0.0.3
    
  2. 导入插件:

    import 'package:custom_floating_action_button/custom_floating_action_button.dart';
    
  3. 在Scaffold上添加自定义浮动操作按钮,最少需要2个选项,最多5个选项:

    [@override](/user/override)
    Widget build(BuildContext context) {
      return CustomFloatingActionButton(
        body: Scaffold(
          appBar: AppBar(
            title: const Text('appbar title'), // 标题
          ),
          body: Container(), // 主体内容
        ),
        options: const [
            CircleAvatar( // 选项一
              child: Icon(Icons.height),
            ),
            CircleAvatar( // 选项二
              child: Icon(Icons.title),
            ),
        ],
        type: CustomFloatingActionButtonType.circular, // 按钮类型为圆形
        openFloatingActionButton: const Icon(Icons.add), // 打开时的图标
        closeFloatingActionButton: const Icon(Icons.close), // 关闭时的图标
      );
    }
    

示例代码

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

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

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  void initState() {
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: CustomFloatingActionButton(
        body: Scaffold(
          appBar: AppBar(
            title: const Text('Custom FAB'), // 自定义FAB标题
          ),
          body: const Center(
            child: Text('Custom Floating Action Button Plugin'), // 内容文本
          ),
        ),
        openFloatingActionButton: const Icon(Icons.add), // 打开时的图标
        closeFloatingActionButton: const Icon(Icons.close), // 关闭时的图标
        type: CustomFloatingActionButtonType.circular, // 类型为圆形
        spaceFromBottom: 100, // 距离底部的距离
        options: const [
          CircleAvatar( // 选项一
            child: Icon(Icons.height),
          ),
          CircleAvatar( // 选项二
            child: Icon(Icons.title),
          ),
          CircleAvatar( // 选项三
            child: Icon(Icons.translate),
          ),
          CircleAvatar( // 选项四
            child: Icon(Icons.email),
          ),
          CircleAvatar( // 选项五
            child: Icon(Icons.star),
          ),
        ],
      ),
    );
  }
}

截图示例

示例截图 示例截图 示例截图 示例截图 示例截图

更改按钮颜色

floatinButtonColor: Colors.blue, // 设置按钮颜色为蓝色

更改按钮颜色示例

使背景透明(默认颜色是黑色54)

backgroundColor: Colors.transparent, // 设置背景色为透明

透明背景示例

将类型更改为水平

type: CustomFloatingActionButtonType.horizontal, // 类型为水平

水平类型示例

向选项中添加任何小部件

options: const [
          Row(
            children: [
              Container(
                padding: const EdgeInsets.all(8),
                decoration: BoxDecoration(
                  color: Colors.white,
                  borderRadius: BorderRadius.all(
                    Radius.circular(10),
                  ),
                ),
                child: Text(
                  'demo',
                  style: TextStyle(color: Colors.white), // 文本颜色为白色
                ),
              ),
              const SizedBox(
                width: 5,
              ),
              CircleAvatar(
                child: Icon(Icons.title),
              ),
            ],
          ),
          Row(
            children: [
              Container(
                padding: const EdgeInsets.all(8),
                decoration: BoxDecoration(
                  color: Colors.white,
                  borderRadius: BorderRadius.all(
                    Radius.circular(10),
                  ),
                ),
                child: Text(
                  'demo',
                  style: TextStyle(color: Colors.white),
                ),
              ),
              const SizedBox(
                width: 5,
              ),
              CircleAvatar(
                child: Icon(Icons.translate),
              ),
            ],
          ),
          Row(
            children: [
              Container(
                padding: const EdgeInsets.all(8),
                decoration: BoxDecoration(
                  color: Colors.white,
                  borderRadius: BorderRadius.all(
                    Radius.circular(10),
                  ),
                ),
                child: Text(
                  'demo',
                  style: TextStyle(color: Colors.white),
                ),
              ),
              const SizedBox(
                width: 5,
              ),
              CircleAvatar(
                child: Icon(Icons.event),
              ),
            ],
          ),
      ],

添加小部件示例

将类型更改为垂直向下

// 可以添加距离底部和右侧的空间
// 最大底部空间为500,最大右侧空间为50
spaceFromBottom: 300,
type: CustomFloatingActionButtonType.verticalDown, // 类型为垂直向下

垂直向下类型示例

将类型更改为垂直向上

type: CustomFloatingActionButtonType.verticalUp, // 类型为垂直向上

更多关于Flutter自定义浮动操作按钮插件custom_floating_action_button的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter自定义浮动操作按钮插件custom_floating_action_button的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用 custom_floating_action_button 插件的 Flutter 代码示例。这个插件允许你自定义浮动操作按钮(FAB)的布局和行为。

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

dependencies:
  flutter:
    sdk: flutter
  custom_floating_action_button: ^x.y.z  # 替换为最新版本号

然后,运行 flutter pub get 来获取依赖。

以下是一个完整的 Flutter 应用示例,展示了如何使用 custom_floating_action_button 插件:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Custom FAB Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Custom Floating Action Button Demo'),
      ),
      body: Center(
        child: Text('Scroll down to see the FAB'),
      ),
      floatingActionButton: CustomFloatingActionButton(
        hasBackground: true,
        backgroundColor: Colors.blue,
        buttonSize: 56.0,
        elevation: 4.0,
        items: <FloatingActionButton>[
          FloatingActionButton(
            heroTag: 'button1',
            backgroundColor: Colors.red,
            child: Icon(Icons.add),
            onPressed: () {
              // Handle button press
              ScaffoldMessenger.of(context).showSnackBar(
                SnackBar(content: Text('Button 1 pressed')),
              );
            },
          ),
          FloatingActionButton(
            heroTag: 'button2',
            backgroundColor: Colors.green,
            child: Icon(Icons.edit),
            onPressed: () {
              // Handle button press
              ScaffoldMessenger.of(context).showSnackBar(
                SnackBar(content: Text('Button 2 pressed')),
              );
            },
          ),
          FloatingActionButton(
            heroTag: 'button3',
            backgroundColor: Colors.purple,
            child: Icon(Icons.delete),
            onPressed: () {
              // Handle button press
              ScaffoldMessenger.of(context).showSnackBar(
                SnackBar(content: Text('Button 3 pressed')),
              );
            },
          ),
        ],
        onPressed: () {
          // Handle main FAB press
          ScaffoldMessenger.of(context).showSnackBar(
            SnackBar(content: Text('Main FAB pressed')),
          );
        },
        mainButton: FloatingActionButton(
          heroTag: 'mainButton',
          backgroundColor: Colors.blue,
          child: Icon(Icons.menu),
          onPressed: null, // This is handled by the CustomFAB
        ),
      ),
      floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
      bottomNavigationBar: BottomNavigationBar(
        items: <BottomNavigationBarItem>[
          BottomNavigationBarItem(
            icon: Icon(Icons.home),
            label: 'Home',
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.business),
            label: 'Business',
          ),
        ],
        currentIndex: 0,
        onTap: (int index) {},
      ),
    );
  }
}

在这个示例中:

  1. 我们创建了一个简单的 Flutter 应用,其中包含一个 ScaffoldAppBar 和一个居中的文本。
  2. floatingActionButton 属性被设置为一个 CustomFloatingActionButton,它允许我们定义多个浮动操作按钮(FAB)以及一个主按钮。
  3. 每个子按钮(FAB)都有自己的 onPressed 回调,用于处理点击事件。
  4. mainButton 是主浮动操作按钮,虽然在这个示例中它的 onPressed 被设置为 null,但点击事件实际上是由 CustomFloatingActionButton 管理的,当展开或收起子按钮时会触发主按钮的动画。
  5. floatingActionButtonLocation 被设置为 FloatingActionButtonLocation.centerDocked,使得 FAB 停靠在屏幕底部中央,并且与 BottomNavigationBar 一起显示。

你可以根据需要进一步自定义这个示例,比如调整按钮的样式、添加更多按钮或者修改动画效果等。

回到顶部