Flutter底部浮动导航栏插件floating_bottom_bar的使用

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

Flutter底部浮动导航栏插件floating_bottom_bar的使用

floating_bottom_bar 插件为Flutter应用提供了一个具有动画效果的浮动底部导航栏,它将一个浮动操作按钮(FAB)置于中心,并且通过 AnimatedContainerSlideTransition 来实现底部导航栏图标的动画效果。

Floating Bottom Bar

Floating Bottom Bar

Usage

示例代码

以下是一个完整的示例demo,展示了如何在Flutter项目中使用floating_bottom_bar插件:

import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:floating_bottom_bar/animated_bottom_navigation_bar.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: "App Name",
      theme: ThemeData(fontFamily: 'Poppins'),
      home: const BottomNavigatorExample(title: "App Name"),
    );
  }
}

class BottomNavigatorExample extends StatefulWidget {
  const BottomNavigatorExample({Key? key, required this.title})
      : super(key: key);

  final String title;

  @override
  State<BottomNavigatorExample> createState() => _BottomNavigatorExampleState();
}

class _BottomNavigatorExampleState extends State<BottomNavigatorExample> {
  bool circleButtonToggle = false;
  List<Color> listOfColor = [
    const Color(0xFFF2B5BA),
    Colors.orange,
    Colors.amber,
    Colors.deepOrangeAccent
  ];
  int index = 1;

  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        appBar: AppBar(
          elevation: 3,
          backgroundColor: Colors.redAccent,
          title: Text(widget.title),
        ),
        backgroundColor: listOfColor[index],
        floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
        bottomNavigationBar: AnimatedBottomNavigationBar(
          barColor: Colors.white,
          controller: FloatingBottomBarController(initialIndex: 1),
          bottomBar: [
            BottomBarItem(
              icon: const Icon(Icons.home, size: 24),
              iconSelected: const Icon(Icons.home, color: Colors.redAccent, size: 24),
              title: "Home",
              dotColor: Colors.redAccent,
              onTap: (value) {
                setState(() {
                  index = value;
                });
                log('Home $value');
              },
            ),
            BottomBarItem(
              icon: const Icon(Icons.photo, size: 24),
              iconSelected: const Icon(Icons.photo, color: Colors.redAccent, size: 24),
              title: "Search",
              dotColor: Colors.redAccent,
              onTap: (value) {
                setState(() {
                  index = value;
                });
                log('Search $value');
              },
            ),
            BottomBarItem(
              icon: const Icon(Icons.person, size: 24),
              iconSelected: const Icon(Icons.person, color: Colors.redAccent, size: 24),
              title: "Person",
              dotColor: Colors.redAccent,
              onTap: (value) {
                setState(() {
                  index = value;
                });
                log('Profile $value');
              },
            ),
            BottomBarItem(
              icon: const Icon(Icons.settings, size: 24),
              iconSelected: const Icon(Icons.settings, color: Colors.redAccent, size: 24),
              title: "Settings",
              dotColor: Colors.redAccent,
              onTap: (value) {
                setState(() {
                  index = value;
                });
                log('Settings $value');
              },
            ),
          ],
          bottomBarCenterModel: BottomBarCenterModel(
            centerBackgroundColor: Colors.redAccent,
            centerIcon: const FloatingCenterButton(
              child: Icon(
                Icons.add,
                color: Colors.white,
              ),
            ),
            centerIconChild: [
              FloatingCenterButtonChild(
                child: const Icon(
                  Icons.home,
                  color: Colors.white,
                ),
                onTap: () => log('Item1'),
              ),
              FloatingCenterButtonChild(
                child: const Icon(
                  Icons.access_alarm,
                  color: Colors.white,
                ),
                onTap: () => log('Item2'),
              ),
              FloatingCenterButtonChild(
                child: const Icon(
                  Icons.ac_unit_outlined,
                  color: Colors.white,
                ),
                onTap: () => log('Item3'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

Required Parameters

bottomBar:

此属性接收一个List<BottomBarItem>类型的列表,用于配置底部导航栏中的各个选项。

bottomBarCenterModel:

BottomBarCenterModel类是底部菜单的模型类。它接受icon、iconSelected、title、titleStyle等参数来定义中心按钮及其子项。

controller:

FloatingBottomBarController用于给底部导航栏设置初始索引,以预选某个项目。

Guideline for contributors

我们欢迎任何对仓库的贡献,请贡献者只向develop分支创建拉取请求。

Guideline to report an issue/feature request

如果您需要报告问题或提出功能请求,建议分享以下信息以便我们更好地理解问题的根源:

  • 库版本
  • 代码片段
  • 日志(如果适用)
  • 设备规格(如制造商、操作系统版本等)
  • 展示问题重现步骤的截图或视频

LICENSE

该库遵循MIT许可证。

Let us know!

如果您有任何问题或关于我们工作的建议,或者您想分享使用我们组件的项目链接,请发送邮件至sales@mindinventory.com。


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

1 回复

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


当然,以下是如何在Flutter项目中使用floating_bottom_bar插件来实现底部浮动导航栏的代码示例。

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

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

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

接下来,在你的Flutter项目中,你可以按照以下步骤实现底部浮动导航栏:

  1. 导入依赖

在你的主Dart文件中(例如main.dart),导入floating_bottom_bar

import 'package:flutter/material.dart';
import 'package:floating_bottom_bar/floating_bottom_bar.dart';
  1. 定义页面内容

定义你想要在导航栏点击时显示的页面内容。例如,可以创建几个简单的页面:

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Home')),
      body: Center(child: Text('Home Page')),
    );
  }
}

class SearchPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Search')),
      body: Center(child: Text('Search Page')),
    );
  }
}

class ProfilePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Profile')),
      body: Center(child: Text('Profile Page')),
    );
  }
}
  1. 创建底部浮动导航栏

在你的主Dart文件中,创建并配置FloatingActionButtonFloatingBottomBar

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

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

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

class _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin {
  int currentIndex = 0;
  final List<Widget> pages = [
    HomePage(),
    SearchPage(),
    ProfilePage(),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: IndexedStack(
        index: currentIndex,
        children: pages,
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {},
        child: Icon(Icons.add),
        backgroundColor: Colors.blue,
      ),
      floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
      bottomNavigationBar: FloatingBottomBar(
        items: [
          FloatingBottomBarItem(
            icon: Icons.home,
            title: 'Home',
            backgroundColor: Colors.blue,
          ),
          FloatingBottomBarItem(
            icon: Icons.search,
            title: 'Search',
            backgroundColor: Colors.blue,
          ),
          FloatingBottomBarItem(
            icon: Icons.person,
            title: 'Profile',
            backgroundColor: Colors.blue,
          ),
        ],
        onTabSelected: (index) {
          setState(() {
            currentIndex = index;
          });
        },
        backgroundColor: Colors.white,
        activeColor: Colors.blue,
        inactiveColor: Colors.grey,
        notchedShape: CircularNotchedRectangleShape(),
        fabLocation: FloatingActionLocation.center,
      ),
    );
  }
}

在上述代码中:

  • IndexedStack用于在底部导航栏选项之间切换页面。
  • FloatingActionButton用于添加浮动操作按钮(例如添加功能)。
  • FloatingBottomBar用于创建底部浮动导航栏,每个导航项都包含图标和标题。
  • onTabSelected回调函数用于处理导航项的选择事件,并更新当前显示的页面。

运行你的Flutter项目,你应该能够看到一个带有底部浮动导航栏的应用,点击不同的导航项可以切换不同的页面。

回到顶部