Flutter浮动操作栏插件floating_bar的使用

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

Flutter浮动操作栏插件floating_bar的使用

标题

Flutter浮动操作栏插件floating_bar的使用

内容

当点击时,子元素会扩展以使其可见,并且可以通过拖动进行拖拽。在onPanEnd时,设计用于根据给定的屏幕中心重新附着到左侧或右侧。

  • [children] 参数提供了一个包含在栏中的子控件列表。它可以包含最多五个子控件。
  • [initialYOffsetPercentage] 参数表示栏相对于父控件顶部的初始Y偏移量。其值必须在0和1之间。
  • [expansionWidthPercentage] 参数确定了父控件宽度中由扩展栏占用的比例。它必须在0和1之间。
  • [collapsedOpacity] 参数决定了栏在折叠状态下的不透明度。它必须在0和1之间。
  • [expandedOpacity] 参数决定了栏在扩展状态下的不透明度。它必须在0和1之间。

注意:每个 [children] 中的子元素的宽度由 [expansionWidthPercentage] 参数决定,该参数基于父控件的宽度计算可用宽度。每个子元素的宽度则通过减去子元素之间的间距 ([childrenPadding]) 并除以子元素的数量来约束。因此,应仔细考虑 [childrenPadding] 的值。

示例

如果父控件的宽度是500,且 [expansionWidthPercentage] 是0.5,则扩展宽度将是250。如果有 [childrenPadding] 为10且有5个子元素,每个子元素的最大宽度为 (250 - 10 * 5) / 5 = 40。

基本UI和onPanEnd

基本UI和onPanEnd

当点击扩展

当点击扩展

拖动时onPanupdate

拖动时onPanupdate

折叠后的浮动栏UI变化

折叠后的浮动栏UI变化

扩展后的浮动栏UI变化

扩展后的浮动栏UI变化

约束取决于父控件的大小及参数

约束取决于父控件的大小及参数

示例代码

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

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
          backgroundColor: Colors.red,
          body: Center(
            child: Container(
              color: Colors.blue,
              width: 500,
              height: 500,
              child: FloatingBar(
                isOnLeft: false,
                collapsedBackgroundColor: Colors.green,
                expandedBackgroundColor: Colors.black,
                collapsedOpacity: 1,
                expansionWidthPercentage: 0.5,
                floatingBarSize: 1,
                children: [
                  Container(
                      color: Colors.red,
                      width: 400,
                      child: const Center(child: Text('Hello'))),
                  const Center(child: Text('World')),
                  const Center(child: Text('Flutter')),
                ],
              ),
            ),
          )),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用floating_bar插件的示例代码。floating_bar插件允许你创建一个浮动操作栏(FAB),该栏可以在用户滚动页面时显示或隐藏。以下是一个简单的示例,展示如何集成和使用该插件。

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

dependencies:
  flutter:
    sdk: flutter
  floating_bar: ^最新版本号 # 请替换为实际的最新版本号

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

接下来,在你的Flutter项目中,你可以按照以下方式使用floating_bar

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

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

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

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

class _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin {
  late FloatingBarController _floatingBarController;

  @override
  void initState() {
    super.initState();
    _floatingBarController = FloatingBarController();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Floating Bar Demo'),
      ),
      body: NestedScrollView(
        controller: _floatingBarController.scrollController,
        headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
          return <Widget>[
            SliverAppBar(
              title: Text('Scroll to see FAB'),
              floating: true,
              pinned: true,
              snap: true,
              expandedHeight: 200,
              flexibleSpace: FlexibleSpaceBar(
                collapseMode: CollapseMode.parallax,
                background: Image.network(
                  'https://via.placeholder.com/1500x500',
                  fit: BoxFit.cover,
                ),
              ),
            ),
          ];
        },
        body: ListView.builder(
          itemCount: 50,
          itemBuilder: (context, index) {
            return ListTile(
              title: Text('Item $index'),
            );
          },
        ),
      ),
      floatingActionButton: FloatingBar(
        controller: _floatingBarController,
        actions: <FloatingBarAction>[
          FloatingBarAction(
            icon: Icons.add,
            onPressed: () {
              // 添加操作
              ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Add pressed')));
            },
          ),
          FloatingBarAction(
            icon: Icons.edit,
            onPressed: () {
              // 编辑操作
              ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Edit pressed')));
            },
          ),
          FloatingBarAction(
            icon: Icons.delete,
            onPressed: () {
              // 删除操作
              ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Delete pressed')));
            },
          ),
        ],
        mainButton: FloatingBarMainButton(
          icon: Icons.menu,
          onPressed: () {
            // 主按钮操作
            ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Main button pressed')));
          },
        ),
      ),
    );
  }
}

在这个示例中:

  1. 我们创建了一个MyApp,它是应用的根widget。
  2. MyHomePage是一个StatefulWidget,它包含了主要的UI逻辑。
  3. 我们使用NestedScrollView来支持列表的滚动和SliverAppBar的响应式行为。
  4. FloatingBarController被用来控制FAB的行为,特别是与滚动事件的同步。
  5. FloatingBar包含多个FloatingBarAction(浮动操作)和一个FloatingBarMainButton(主按钮)。

这个示例展示了如何创建一个带有多个操作的浮动操作栏,并且这些操作会在用户点击时显示SnackBar。你可以根据自己的需求修改这些操作的行为和图标。

回到顶部