Flutter侧边导航插件side_nav的使用
Flutter侧边导航插件side_nav的使用
本仓库由作者@Tri7Ratops创作的flutter_side_navbar而来,对这个组件进行了二次修改从而得到了这个组件。
一个仿点餐菜单的边栏导航,自动滚动高亮。
开始
在文件pubspec.yaml中添加下面的依赖:
dependencies:
...
side_nav: any
在你的组件中引入:
import 'package:side_nav/side_nav.dart';
使用
首先,在Scaffold中添加SideNavbar:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
backgroundColor: Colors.white70,
body: SideNavbar(
pages: [],
),
),
);
}
}
然后,将不同的pages作为SideItemModel列表添加进去:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
backgroundColor: Colors.white70,
body: SideNavbar(
pages: [
SideItemModel(
defaultIconColor: Colors.blue,
onTap: () {},
page: Column(
children: [
Container(
height: 800,
width: double.infinity,
color: Colors.green,
),
],
),
icon: Icons.home_filled,
),
SideItemModel(
defaultIconColor: Colors.blue,
onTap: () {},
page: Column(
children: [
Container(
height: 1000,
width: double.infinity,
color: Colors.red,
),
],
),
icon: Icons.verified_user,
),
],
),
),
);
}
}
现在你已经可以运行了!
自定义
SideItemModel
/// 显示的Widget
final Widget? page;
/// 导航中对应的图标
final IconData icon;
/// 图标的补充说明文字
final String? iconTitle;
/// 用户点击导航项时触发的回调
final Function()? onTap;
/// 当前页面最突出时触发的回调
final Function()? onMostVisible;
/// 页面失去焦点时触发的回调
final Function()? lostFocus;
/// 页面未聚焦时图标的默认颜色
final Color defaultIconColor;
/// 当前页面聚焦时导航项的背景颜色
final Color focusBackgroundColor;
/// 当前页面聚焦时图标的颜色
final Color focusIconColor;
/// 当前页面聚焦时文字的颜色
final Color focusTextColor;
SideNavbar
/// 需要展示的所有页面
final List<SideItemModel> pages;
/// 导航栏的宽度
final double navigationWidth;
/// 导航栏的背景颜色
final Color navigationBackgroundColor;
/// 用于个性化导航按钮容器的装饰
final BoxDecoration decorationItem;
/// 用于改变导航栏的位置
///
/// reversed = false => 导航栏在右侧
/// reversed = true => 导航栏在左侧
final bool reversed;
/// 用于指定是否显示AppBar
final bool appBarIsShown;
/// 用于设置页面的内边距
final EdgeInsets? padding;
/// 用于设置导航栏的内边距
final EdgeInsets? paddingNavigation;
/// 如果ScrollView不启用shrinkWrap,则ScrollView会扩展到允许的最大大小
final bool shrinkWrap;
/// 用于设置包的滚动控制器
final AutoScrollController? controller;
/// 用于设置包的滚动物理属性
final ScrollPhysics? physics;
/// 用于设置用户点击导航项并滚动时动画的持续时间
final Duration duration;
更多关于Flutter侧边导航插件side_nav的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter侧边导航插件side_nav的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
side_nav 是一个用于 Flutter 的侧边导航插件,可以帮助你轻松地在应用中添加侧边导航栏。以下是如何使用 side_nav 插件的详细步骤:
1. 添加依赖
首先,在 pubspec.yaml 文件中添加 side_nav 插件的依赖:
dependencies:
flutter:
sdk: flutter
side_nav: ^0.0.1 # 请使用最新版本
然后运行 flutter pub get 来安装依赖。
2. 导入包
在你的 Dart 文件中导入 side_nav:
import 'package:side_nav/side_nav.dart';
3. 使用 SideNav 组件
SideNav 是一个可以自定义的侧边导航栏组件。你可以通过传递参数来定制它的外观和行为。
以下是一个简单的使用示例:
import 'package:flutter/material.dart';
import 'package:side_nav/side_nav.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('SideNav Example'),
),
body: Row(
children: [
SideNav(
items: [
SideNavItem(
icon: Icons.home,
label: 'Home',
onTap: () {
print('Home tapped');
},
),
SideNavItem(
icon: Icons.settings,
label: 'Settings',
onTap: () {
print('Settings tapped');
},
),
SideNavItem(
icon: Icons.person,
label: 'Profile',
onTap: () {
print('Profile tapped');
},
),
],
selectedIndex: 0,
),
Expanded(
child: Center(
child: Text('Main Content'),
),
),
],
),
),
);
}
}
4. 自定义 SideNav
SideNav 提供了多个参数,允许你自定义导航栏的外观和行为。以下是一些常用的参数:
items: 导航项列表,每个导航项都是一个SideNavItem。selectedIndex: 当前选中的导航项索引。backgroundColor: 导航栏的背景颜色。selectedColor: 选中项的颜色。unselectedColor: 未选中项的颜色。iconSize: 图标的大小。itemSpacing: 导航项之间的间距。onItemSelected: 当导航项被选中时的回调函数。
5. 处理导航项点击事件
你可以在 SideNavItem 的 onTap 回调中处理导航项的点击事件。例如:
SideNavItem(
icon: Icons.home,
label: 'Home',
onTap: () {
// 处理点击事件
print('Home tapped');
},
),
6. 动态更新选中项
你可以通过 setState 动态更新 selectedIndex 来改变选中的导航项:
int _selectedIndex = 0;
void _onItemTapped(int index) {
setState(() {
_selectedIndex = index;
});
}
SideNav(
items: [
SideNavItem(
icon: Icons.home,
label: 'Home',
onTap: () {
_onItemTapped(0);
},
),
SideNavItem(
icon: Icons.settings,
label: 'Settings',
onTap: () {
_onItemTapped(1);
},
),
],
selectedIndex: _selectedIndex,
),
7. 完整示例
以下是一个完整的示例,展示了如何使用 side_nav 插件:
import 'package:flutter/material.dart';
import 'package:side_nav/side_nav.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: HomeScreen(),
);
}
}
class HomeScreen extends StatefulWidget {
[@override](/user/override)
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
int _selectedIndex = 0;
void _onItemTapped(int index) {
setState(() {
_selectedIndex = index;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('SideNav Example'),
),
body: Row(
children: [
SideNav(
items: [
SideNavItem(
icon: Icons.home,
label: 'Home',
onTap: () {
_onItemTapped(0);
},
),
SideNavItem(
icon: Icons.settings,
label: 'Settings',
onTap: () {
_onItemTapped(1);
},
),
SideNavItem(
icon: Icons.person,
label: 'Profile',
onTap: () {
_onItemTapped(2);
},
),
],
selectedIndex: _selectedIndex,
),
Expanded(
child: Center(
child: Text('Page ${_selectedIndex + 1}'),
),
),
],
),
);
}
}

