Flutter底部导航动画插件animated_bottom_navigation的使用
Flutter底部导航动画插件animated_bottom_navigation的使用
简介
animated_bottom_navigation
是一个用于实现带有漂亮动画效果的底部导航栏的Flutter插件。它支持RTL布局、优雅的过渡动画,并且可以为每个导航项添加子项。
添加依赖
在 pubspec.yaml
文件中添加以下依赖:
dependencies:
animated_bottom_navigation: ^latest_version
请将 ^latest_version
替换为最新版本号。
如何使用
下面是一个完整的示例,展示了如何使用 AnimatedBottomNavigation
插件:
import 'package:animated_bottom_navigation/animated_bottom_navigation.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int currentIndex = 0;
late List<Widget> widgets;
@override
void initState() {
super.initState();
widgets = [
const Center(child: Text('Page1')),
const Center(child: Text('Page2')),
const Center(child: Text('Page3')),
const Center(child: Text('Page4')),
];
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: widgets[currentIndex],
bottomNavigationBar: AnimatedBottomNavigation(
context: context,
items: [
TabItem(
icon: const Icon(Icons.hive_sharp),
haveChildren: true,
activeColor: Colors.white,
inActiveColor: Colors.white60,
children: [
TabChildrenItem(
icon: const Icon(Icons.call),
title: 'Call',
onTap: () {},
),
TabChildrenItem(
icon: const Icon(Icons.photo_rounded),
onTap: () {},
title: 'Gallery',
),
TabChildrenItem(
icon: const Icon(Icons.add_road),
onTap: () {},
),
],
),
TabItem(
icon: const Icon(Icons.library_add),
haveChildren: true,
activeColor: Colors.white,
inActiveColor: Colors.white60,
children: [
TabChildrenItem(
icon: const Icon(Icons.add_a_photo),
onTap: () {},
),
TabChildrenItem(
icon: const Icon(Icons.get_app),
onTap: () {},
),
TabChildrenItem(
icon: const Icon(Icons.settings),
onTap: () {},
),
],
),
TabItem(
icon: const Icon(Icons.bookmark),
activeColor: Colors.white,
inActiveColor: Colors.white60,
),
TabItem(
icon: const Icon(Icons.camera_alt_rounded),
haveChildren: true,
activeColor: Colors.white,
inActiveColor: Colors.white60,
children: [
TabChildrenItem(
icon: const Icon(Icons.timer_10_select_rounded),
onTap: () {},
),
TabChildrenItem(
icon: const Icon(Icons.phone_iphone_rounded),
onTap: () {},
),
TabChildrenItem(
icon: const Icon(Icons.alarm),
onTap: () {},
),
TabChildrenItem(
icon: const Icon(Icons.color_lens),
onTap: () {},
),
],
),
],
width: 30,
direction: TextDirection.rtl,
backgroundColor: Colors.blueAccent,
animationCurve: Curves.easeIn,
onChanged: (value) {
setState(() {
currentIndex = value;
});
},
),
);
}
}
属性说明
context
: BuildContext 用于获取距离。items
: 显示图标的 TabItem 列表。backgroundColor
: 导航栏背景颜色,默认为白色。onChanged
: 处理项目点击的函数。animationCurve
: 按钮切换动画的曲线,默认为Curves.easeIn
。animationDuration
: 按钮切换动画的持续时间,默认为Duration(milliseconds: 150)
。height
: 导航栏的高度,最小值为0.0,最大值为75.0。width
: 导航栏中任何小部件的宽度,默认为40.0。letIndexChange
: 接受页面索引作为参数并返回布尔值的函数。如果函数返回false,则按钮点击时不会更改页面,默认返回true。direction
: 应用程序的方向,以处理旋转和布局,默认为TextDirection.ltr
。borderRadius
: 上边缘的曲率,默认为20.0。horizontalPadding
: 周围的距离,默认为20.0。margin
: 小部件的边距。
特性
- 支持RTL布局。
- 优雅的过渡动画。
- 能够为每个导航项添加子项。
通过以上示例代码和属性说明,您可以轻松地在您的Flutter应用中集成并自定义 animated_bottom_navigation
插件,以实现具有漂亮动画效果的底部导航栏。
更多关于Flutter底部导航动画插件animated_bottom_navigation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter底部导航动画插件animated_bottom_navigation的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个使用 animated_bottom_navigation
插件的 Flutter 示例代码。这个插件可以帮助你在应用中实现带有动画效果的底部导航栏。
首先,确保在你的 pubspec.yaml
文件中添加 animated_bottom_navigation
依赖:
dependencies:
flutter:
sdk: flutter
animated_bottom_navigation: ^x.y.z # 请替换为最新版本号
然后运行 flutter pub get
来获取依赖。
接下来是一个完整的示例代码,展示如何使用 animated_bottom_navigation
:
import 'package:flutter/material.dart';
import 'package:animated_bottom_navigation/animated_bottom_navigation.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomeScreen(),
);
}
}
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> with SingleTickerProviderStateMixin {
int _selectedPageIndex = 0;
final List<AnimatedNavItem> _navItems = [
AnimatedNavItem(
icon: Icons.home,
title: "Home",
route: "/",
),
AnimatedNavItem(
icon: Icons.search,
title: "Search",
route: "/search",
),
AnimatedNavItem(
icon: Icons.add,
title: "Add",
route: "/add",
),
AnimatedNavItem(
icon: Icons.profile,
title: "Profile",
route: "/profile",
),
];
@override
Widget build(BuildContext context) {
return Scaffold(
body: _getPage(),
bottomNavigationBar: AnimatedBottomNavigation(
icons: _navItems.map((item) => item.icon).toList(),
activeColor: Colors.blue,
inactiveColor: Colors.grey,
backgroundColor: Colors.white,
notchSmoothness: NotchSmoothness.softEdge,
notchWidth: 24,
selectedIndex: _selectedPageIndex,
onTabSelectedIndexChanged: (index) {
setState(() {
_selectedPageIndex = index;
});
},
),
);
}
Widget _getPage() {
switch (_selectedPageIndex) {
case 0:
return Center(child: Text("Home Page"));
case 1:
return Center(child: Text("Search Page"));
case 2:
return Center(child: Text("Add Page"));
case 3:
return Center(child: Text("Profile Page"));
default:
return Center(child: Text("Unknown Page"));
}
}
}
class AnimatedNavItem {
final IconData icon;
final String title;
final String route;
AnimatedNavItem({required this.icon, required this.title, required this.route});
}
在这个示例中,我们创建了一个 HomeScreen
小部件,它包含一个 AnimatedBottomNavigation
底部导航栏和四个页面(Home、Search、Add、Profile)。AnimatedNavItem
类用于存储每个导航项的图标、标题和路由信息。
当用户点击底部导航栏中的不同图标时,onTabSelectedIndexChanged
回调函数会被调用,并更新 _selectedPageIndex
的值,从而通过 _getPage
方法显示相应的页面。
这个示例展示了如何使用 animated_bottom_navigation
插件来创建一个带有动画效果的底部导航栏,并处理页面切换。希望这对你有所帮助!