Flutter底部导航栏插件fancy_bottom_navigation_plus的使用
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
更多关于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),
),
),
),
);
}
}
在这个示例中:
- 我们定义了一个
_MyHomePageState
类,它管理底部导航栏的状态。 _tabs
列表包含了每个导航项的图标和数据。_buildPages
方法返回一个与导航项对应的页面列表。FancyBottomNavigation
组件用于创建底部导航栏,并配置其外观和行为。onTabChangedListener
回调用于处理导航项点击事件,更新当前选中的页面。
你可以根据需要进一步自定义FancyBottomNavigationConfiguration
中的属性,以满足你的设计需求。