Flutter底部导航栏插件fancy_bottom_navigation_plus的使用

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

Flutter底部导航栏插件fancy_bottom_navigation_plus的使用

Overview

fancy_bottom_navigation_plus 是一个用于 Flutter 应用程序的底部导航栏插件。它提供了丰富的自定义选项,可以轻松地为您的应用添加美观且功能强大的底部导航栏。

特点

  • 支持 2 到 5 个标签页
  • 自定义图标、标题、颜色等
  • 简单易用的 API

安装

pubspec.yaml 文件中添加依赖:

dependencies:
  ...
  fancy_bottom_navigation_plus: ^1.0.3

基本用法

添加底部导航栏

Scaffold 中添加 FancyBottomNavigationPlus 小部件:

bottomNavigationBar: FancyBottomNavigationPlus(
  tabs: [
    TabData(icon: const Icon(Icons.home), title: "Home"),
    TabData(icon: const Icon(Icons.history), title: "History"),
    TabData(icon: const Icon(Icons.search), title: "Search"),
    TabData(icon: const Icon(Icons.phone), title: "Phone"),
    TabData(icon: const Icon(Icons.settings), title: "Settings"),
  ],
  onTabChangedListener: (position) {
    setState(() {
      currentPage = position;
    });
  },
)

TabData

TabData 是用于定义每个标签页的数据结构,包含以下属性:

  • icon - 用于标签页的图标小部件
  • title - 用于标签页的标题字符串
  • onClick - 可选函数,当点击活动标签页的圆圈时调用

可选参数

FancyBottomNavigationPlus 还支持以下可选参数:

  • initialSelection - 默认值为 0,表示初始选中的标签页
  • circleColor - 圆圈的颜色,默认从主题中获取
  • textColor - 文本的颜色,默认从主题中获取
  • barBackgroundColor - 导航栏的背景颜色,默认从主题中获取
  • barHeight - 导航栏的高度,默认为 60
  • circleRadius - 圆圈的半径,默认为 60
  • shadowRadius - 阴影的半径,默认为 10
  • circleOutline - 圆圈的轮廓,默认为 10
  • titleStyle - 标题的样式,默认值已给出
  • key - 默认为 null

主题

导航栏会尝试使用当前的主题,但您可以根据需要进行自定义。

示例代码

以下是一个完整的示例代码,展示了如何在 Flutter 应用程序中使用 FancyBottomNavigationPlus

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

void main() => runApp(const MyApp());

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  int currentPage = 0;

  Center? _getPage(int page) {
    switch (page) {
      case 0:
        return Center(
          child: Text("Welcome to Home page"),
        );
      case 1:
        return Center(
          child: Text("Welcome to History page"),
        );
      case 2:
        return Center(
          child: Text("Welcome to Search page"),
        );
      case 3:
        return Center(
          child: Text("Welcome to Phone page"),
        );
      case 4:
        return Center(
          child: Text("Welcome to Settings page"),
        );
      default:
        return Center(
          child: Text("Welcome to $page page"),
        );
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        primaryColor: Colors.purple,
        iconTheme: const IconThemeData(
          color: Colors.white,
        ),
      ),
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Fancy Bottom Navigation'),
          backgroundColor: Colors.purple,
        ),
        body: _getPage(currentPage),
        bottomNavigationBar: FancyBottomNavigationPlus(
          barBackgroundColor: Colors.purple,
          tabs: [
            TabData(icon: const Icon(Icons.home), title: "Home"),
            TabData(icon: const Icon(Icons.history), title: "History"),
            TabData(icon: const Icon(Icons.search), title: "Search"),
            TabData(icon: const Icon(Icons.phone), title: "Phone"),
            TabData(icon: const Icon(Icons.settings), title: "Settings"),
          ],
          onTabChangedListener: (position) {
            setState(() {
              currentPage = position;
            });
          },
        ),
      ),
    );
  }
}

展示

如果您在实际应用中使用了这个插件,请告诉我,我会在这里展示您的应用。

致谢

这个插件受到了 fancy_bottom_navigation 的启发。

提交问题

如果您发现任何问题或有改进建议,请提交 issue。

贡献

欢迎贡献代码,请提交 PR。

希望这个插件能帮助您创建出更加美观和功能强大的 Flutter 应用程序!


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

1 回复

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


当然,以下是如何在Flutter项目中使用fancy_bottom_navigation_plus插件来实现底部导航栏的一个示例代码。这个插件提供了丰富的自定义选项,可以使你的底部导航栏更加美观和灵活。

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

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

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

接下来,在你的主Dart文件中(通常是main.dart),你可以按照以下方式实现底部导航栏:

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

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> {
  int _selectedIndex = 0;

  final List<FancyTabData> _tabs = [
    FancyTabData(
      iconData: Icons.home,
      title: 'Home',
    ),
    FancyTabData(
      iconData: Icons.search,
      title: 'Search',
    ),
    FancyTabData(
      iconData: Icons.library_books,
      title: 'Library',
    ),
    FancyTabData(
      iconData: Icons.account_circle,
      title: 'Profile',
    ),
  ];

  List<Widget> _buildPages() {
    return [
      Center(child: Text('Home Page')),
      Center(child: Text('Search Page')),
      Center(child: Text('Library Page')),
      Center(child: Text('Profile Page')),
    ];
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Fancy Bottom Navigation Plus Demo'),
      ),
      body: _buildPages()[_selectedIndex],
      bottomNavigationBar: FancyBottomNavigation(
        tabs: _tabs,
        initialSelection: _selectedIndex,
        onTabChangedListener: (int index) {
          setState(() {
            _selectedIndex = index;
          });
        },
        configuration: FancyBottomNavigationConfiguration(
          // Customize the appearance here
          tabWidth: 80,
          tabHeight: 50,
          inactiveColor: Colors.grey,
          activeColor: Colors.blue,
          inactiveIconSize: 20,
          activeIconSize: 24,
          inactiveLabelStyle: TextStyle(fontSize: 12),
          activeLabelStyle: TextStyle(fontSize: 14, fontWeight: FontWeight.bold),
          circleSize: 40,
          notchedShapeConfiguration: NotchedShapeConfiguration(
            startTopLeft: Radius.circular(10),
            startTopRight: Radius.circular(10),
            endTopLeft: Radius.circular(10),
            endTopRight: Radius.circular(10),
          ),
        ),
      ),
    );
  }
}

在这个示例中:

  1. 我们定义了一个_MyHomePageState类,它管理底部导航栏的状态。
  2. _tabs列表包含了每个导航项的图标和数据。
  3. _buildPages方法返回一个与导航项对应的页面列表。
  4. FancyBottomNavigation组件用于创建底部导航栏,并配置其外观和行为。
  5. onTabChangedListener回调用于处理导航项点击事件,更新当前选中的页面。

你可以根据需要进一步自定义FancyBottomNavigationConfiguration中的属性,以满足你的设计需求。

回到顶部