Flutter自定义导航栏插件curved_nav_bar的使用
Flutter自定义导航栏插件curved_nav_bar的使用
curved_nav_bar
是一个Flutter插件,用于创建带有浮动操作按钮(FAB)和中心文本的底部导航栏。你可以将FAB用作中间标签,或者执行其他操作,如打开弹出窗口或相机。
Screenshots
Usage
添加依赖
首先,在你的 pubspec.yaml
文件中添加 curved_nav_bar
依赖:
dependencies:
flutter:
sdk: flutter
curved_nav_bar:
导入包
在你的 Dart 文件中导入 curved_nav_bar
包:
import 'package:curved_nav_bar/curved_bar/curved_action_bar.dart';
import 'package:curved_nav_bar/fab_bar/fab_bottom_app_bar_item.dart';
import 'package:curved_nav_bar/flutter_curved_bottom_nav_bar.dart';
使用 CurvedNavBar
CurvedNavBar
提供了多种配置选项,以下是一些主要的属性:
属性 | 类型 | 描述 |
---|---|---|
appBarItems |
List<FABBottomAppBarItem> |
导航栏项列表,长度应与 bodyItems 相等 |
bodyItems |
List<Widget> |
页面内容列表,长度应与 appBarItems 相等 |
extendBody |
bool |
默认值为 true |
actionButton |
CurvedActionBar |
通常是一个 FloatingActionButton |
activeColor |
Color |
选中的标签颜色,默认为 Colors.black |
inActiveColor |
Color |
未选中的标签颜色,默认为 Colors.black26 |
navBarBackgroundColor |
Color |
导航栏背景颜色,默认为 Colors.white |
actionBarView |
Widget |
当 actionButton 被选中时设置为 Scaffold 的 body |
FABBottomAppBarItem 配置
属性 | 类型 | 描述 |
---|---|---|
activeIcon |
Widget |
选中的图标 |
inActiveIcon |
Widget |
未选中的图标 |
text |
String |
导航栏项的标签 |
CurvedActionBar 配置
属性 | 类型 | 描述 |
---|---|---|
activeIcon |
Widget |
选中的图标 |
inActiveIcon |
Widget |
未选中的图标 |
text |
String |
按钮的标签 |
onTab |
ValueChanged<bool> |
点击按钮时返回一个布尔值 |
示例代码
以下是一个完整的示例代码,展示了如何使用 CurvedNavBar
:
import 'package:flutter/material.dart';
import 'package:curved_nav_bar/curved_bar/curved_action_bar.dart';
import 'package:curved_nav_bar/fab_bar/fab_bottom_app_bar_item.dart';
import 'package:curved_nav_bar/flutter_curved_bottom_nav_bar.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(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return CurvedNavBar(
actionButton: CurvedActionBar(
onTab: (value) {
/// 执行操作
print(value);
},
activeIcon: Container(
padding: EdgeInsets.all(8),
decoration: BoxDecoration(color: Colors.white, shape: BoxShape.circle),
child: Icon(
Icons.camera_alt,
size: 50,
color: Colors.orange,
),
),
inActiveIcon: Container(
padding: EdgeInsets.all(8),
decoration: BoxDecoration(color: Colors.white70, shape: BoxShape.circle),
child: Icon(
Icons.camera_alt_outlined,
size: 50,
color: Colors.orange,
),
),
text: "Camera",
),
activeColor: Colors.blue,
navBarBackgroundColor: Colors.limeAccent,
inActiveColor: Colors.black45,
appBarItems: [
FABBottomAppBarItem(
activeIcon: Icon(
Icons.home,
color: Colors.blue,
),
inActiveIcon: Icon(
Icons.home,
color: Colors.black26,
),
text: 'Home',
),
FABBottomAppBarItem(
activeIcon: Icon(
Icons.wallet_giftcard,
color: Colors.blue,
),
inActiveIcon: Icon(
Icons.wallet_giftcard,
color: Colors.black26,
),
text: 'Wallet',
),
],
bodyItems: [
Container(
height: MediaQuery.of(context).size.height,
color: Colors.blue,
),
Container(
height: MediaQuery.of(context).size.height,
color: Colors.pinkAccent,
),
],
actionBarView: Container(
height: MediaQuery.of(context).size.height,
color: Colors.orange,
),
);
}
}
Pull Requests
欢迎提交 Pull Requests。通常我会在 24-48 小时内响应任何问题或请求。
- 请保持 PR 标题简洁易读且描述性强,这将使它们更容易合并。
- PR 必须针对
develop
分支。除非维护者另有指定,否则其他分支的 PR 将被拒绝。
Created & Maintained By
如果你觉得这个项目有帮助或从源代码中学到了东西,并想感谢我,可以考虑请我喝一杯 ☕。
License
Copyright 2018 Boffin Coders Pvt. Ltd.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
更多关于Flutter自定义导航栏插件curved_nav_bar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter自定义导航栏插件curved_nav_bar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter中使用curved_nav_bar
插件来创建自定义导航栏的示例代码。curved_nav_bar
是一个流行的 Flutter 插件,用于创建具有曲线效果的底部导航栏。
首先,确保你已经在pubspec.yaml
文件中添加了curved_nav_bar
依赖:
dependencies:
flutter:
sdk: flutter
curved_navigation_bar: ^1.0.3 # 请检查最新版本号
然后运行flutter pub get
来安装依赖。
接下来,你可以按照以下步骤在你的Flutter应用中实现自定义导航栏:
import 'package:flutter/material.dart';
import 'package:curved_navigation_bar/curved_navigation_bar.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Curved Navigation Bar Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: HomeScreen(),
);
}
}
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
int _selectedIndex = 0;
final List<Widget> _widgetOptions = [
Text('Home Page'),
Text('Search Page'),
Text('Profile Page'),
Text('Settings Page'),
];
void _onItemTapped(int index) {
setState(() {
_selectedIndex = index;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Curved Navigation Bar Demo'),
),
body: Center(
child: _widgetOptions.elementAt(_selectedIndex),
),
bottomNavigationBar: CurvedNavigationBar(
index: _selectedIndex,
height: 50.0,
color: Colors.white,
backgroundColor: Colors.blue,
buttonBackgroundColor: Colors.blue.withOpacity(0.2),
animationCurve: Curves.easeInOut,
animationDuration: Duration(milliseconds: 600),
onTap: _onItemTapped,
pages: [
Icon(Icons.home, color: Colors.black),
Icon(Icons.search, color: Colors.black),
Icon(Icons.person, color: Colors.black),
Icon(Icons.settings, color: Colors.black),
],
),
);
}
}
代码解释:
-
依赖引入:
- 确保在
pubspec.yaml
中添加了curved_navigation_bar
依赖。
- 确保在
-
主应用:
MyApp
类作为主应用入口,定义了应用的主题和主页。
-
主页:
HomeScreen
是一个有状态的小部件,用于管理导航栏的当前选中项。_widgetOptions
列表包含了不同页面的内容(这里为了简单起见,只是文本)。_onItemTapped
方法用于处理导航栏项的点击事件,更新当前选中项。
-
导航栏:
CurvedNavigationBar
小部件用于创建底部导航栏。index
属性表示当前选中的导航项索引。height
属性定义了导航栏的高度。color
和backgroundColor
属性分别定义了按钮和背景的颜色。buttonBackgroundColor
属性定义了未选中按钮的背景颜色。animationCurve
和animationDuration
属性定义了动画效果和持续时间。onTap
属性绑定了点击事件处理函数。pages
属性包含了导航项的图标。
通过这种方式,你可以轻松地在Flutter应用中实现一个具有曲线效果的自定义底部导航栏。如果需要更多自定义选项,比如添加标签或者更改图标的颜色,可以参考curved_navigation_bar
的文档进行进一步配置。