Flutter自定义底部导航栏插件shaped_bottom_bar的使用
Flutter自定义底部导航栏插件shaped_bottom_bar的使用
shaped bottom bar
一个新的Flutter底部导航栏!一个带有形状的底部导航栏。
选择你的形状和动画,让我们来完成工作。
Hexagon | Slide_transition_example.gif |
---|---|
fade_transition_example.gif | rotated_transition_example.gif |
---|---|
Circle | Diamond | Pentagon | Hexagon |
---|---|---|---|
Rhombus | Square | Star | Triangle |
---|---|---|---|
Installing
在pubspec.yaml
文件中添加以下行:
dependencies:
shaped_bottom_bar: ^1.1.0
Widgets
- ShapedBottomBar:创建底部导航栏的主要组件。
- ShapedBottomBarItem:用于
listItems
参数中的子组件。
ShapedBottomBar
仅需两个必填参数即可获得完整的底部导航栏。
-
必填参数
onItemChanged
:每次切换项目时触发的函数。listItems
:类型为ShapedItemObject
的列表,将在底部导航栏中渲染。
-
其他参数
shape
:ShapeType
枚举类型,包含所有可用的形状,默认值为None
。shapeColor
:选中项的形状颜色,默认为null。customShape
:传递给底部导航栏以渲染自定义形状(不同于内置形状)的CustomPaint
类型,要使用customShape
需要将shape
设置为ShapeType.CUSTOM
。selectedIconColor
:选中图标的颜色,默认为白色。backgroundColor
:带形状的底部导航栏的背景色,默认为蓝色。selectedItemIndex
:默认选中项,默认为第一个(索引0)。textStyle
:应用于项目文本的文本样式(颜色、大小、字体等)。animationType
:ANIMATION_TYPE
类型的属性,可选值有NONE
、ROTATE
、FADE
、SLIDE_VERTICALLY
。with3dEffect
:启用或禁用底部导航栏选中形状的3D效果,默认为False
。
ShapedBottomBarItem
-
必填参数
icon
:图标数据类型,表示项目将获取的图标。
-
其他参数
text
:项目文本,默认为空文本。themeColor
:将设置给图标的颜色,默认为黑色。renderWithText
:是否渲染文本,默认为false。
Example
下面是一个简单的例子,它将生成一个没有形状的普通底部导航栏。
ShapedBottomBar(
backgroundColor: Colors.grey,
listItems: [
ShapedItemObject(iconData: Icons.settings, title: "Settings"),
ShapedItemObject(iconData: Icons.account_balance_outlined, title: "Account"),
ShapedItemObject(iconData: Icons.verified_user_rounded, title: "User"),
ShapedItemObject(iconData: Icons.login, title: "Logout")
],
onItemChanged: (position) {
setState(() {
this.selectedItem = position;
});
},
selectedIconColor: Colors.white
)
下面的例子将生成一个带有六边形形状的底部导航栏。
ShapedBottomBar(
backgroundColor: Colors.grey,
iconsColor: Colors.white,
listItems: [
ShapedItemObject(iconData: Icons.settings, title: "Settings"),
ShapedItemObject(iconData: Icons.account_balance_outlined, title: "Account"),
ShapedItemObject(iconData: Icons.verified_user_rounded, title: "User"),
ShapedItemObject(iconData: Icons.login, title: "Logout"),
],
onItemChanged: (position) {
setState(() {
this.selectedItem = position;
});
},
shapeColor: Colors.pink,
selectedIconColor: Colors.white,
shape: ShapeType.HEXAGONE
)
使用自定义形状
为了创建带有自定义形状的底部导航栏,你需要使用customShape
参数,并将shape
设置为ShapeType.CUSTOM
,如下所示:
ShapedBottomBar(
backgroundColor: Colors.blue[50],
iconsColor: Color(0xFF020750),
listItems: [
ShapedItembject(iconData: Icons.settings, title: "Settings"),
ShapedItemObject(iconData: Icons.account_balance_outlined, title: "Account"),
ShapedItemObject(iconData: Icons.verified_user_rounded, title: "User"),
ShapedItemObject(iconData: Icons.login, title: "Logout"),
],
onItemChanged: (position) {
setState(() {
this.selectedItem = position;
});
},
textStyle: TextStyle(color: Colors.black, fontSize: 15),
shape: ShapeType.CUSTOM,
customShape: CustomPaint(
painter: MyShape(),
)
)
使用内置动画
ShapedBottomBar(
backgroundColor: Colors.black12,
iconsColor: Colors.black,
listItems: [
ShapedItemObject(iconData: Icons.alarm, title: "Alarm"),
ShapedItemObject(iconData: Icons.menu_book, title: "Menu"),
ShapedItemObject(iconData: Icons.verified_user_rounded, title: "User"),
ShapedItemObject(iconData: Icons.login, title: "Logout")
],
onItemChanged: (position) {
setState(() {
this.selectedItem = position;
});
},
shape: ShapeType.OCTAGON,
shapeColor: Colors.black,
selectedIconColor: Colors.white,
animationType: ANIMATION_TYPE.ROTATE,
)
使用3D效果属性
ShapedBottomBar(
backgroundColor: Colors.black12,
iconsColor: Colors.black,
listItems: [
ShapedItemObject(iconData: Icons.alarm, title: "Alarm"),
ShapedItemObject(iconData: Icons.menu_book, title: "Menu"),
ShapedItemObject(iconData: Icons.verified_user_rounded, title: "User"),
ShapedItemObject(iconData: Icons.login, title: "Logout"),
],
onItemChanged: (position) {
setState(() {
this.selectedItem = position;
});
},
shape: ShapeType.SQUARE,
shapeColor: Colors.pink,
selectedIconColor: Colors.white,
with3dEffect: true,
animationType: ANIMATION_TYPE.FADE
)
示例代码
以下是一个完整的示例代码,展示了如何在应用程序中使用shaped_bottom_bar
插件。
import 'package:flutter/material.dart';
import 'package:shaped_bottom_bar/models/shaped_item_object.dart';
import 'package:shaped_bottom_bar/utils/arrays.dart';
import 'package:shaped_bottom_bar/shaped_bottom_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: MyScreen(),
);
}
}
class MyScreen extends StatefulWidget {
@override
_MyScreenState createState() => _MyScreenState();
}
class _MyScreenState extends State<MyScreen> {
List<Widget> screens = [
Container(color: Colors.white),
Container(color: Colors.white),
Container(color: Colors.white),
Container(color: Colors.white)
];
int selectedItem = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
bottomNavigationBar: ShapedBottomBar(
backgroundColor: Colors.black12,
iconsColor: Colors.black,
listItems: [
ShapedItemObject(iconData: Icons.alarm, title: "Alarm"),
ShapedItemObject(iconData: Icons.menu_book, title: "Menu"),
ShapedItemObject(iconData: Icons.verified_user_rounded, title: "User"),
ShapedItemObject(iconData: Icons.login, title: "Logout"),
],
onItemChanged: (position) {
setState(() {
this.selectedItem = position;
});
},
shape: ShapeType.SQUARE,
shapeColor: Colors.pink,
selectedIconColor: Colors.white,
with3dEffect: true,
animationType: ANIMATION_TYPE.FADE,
),
body: Container(),
);
}
}
更多关于Flutter自定义底部导航栏插件shaped_bottom_bar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter自定义底部导航栏插件shaped_bottom_bar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,shaped_bottom_bar
是一个用于 Flutter 的强大插件,它允许你创建高度自定义的底部导航栏。以下是一个简单的示例代码,展示了如何使用 shaped_bottom_bar
插件来创建一个自定义形状的底部导航栏。
首先,你需要在你的 pubspec.yaml
文件中添加 shaped_bottom_bar
依赖:
dependencies:
flutter:
sdk: flutter
shaped_bottom_bar: ^2.0.0 # 请确保使用最新版本
然后,运行 flutter pub get
来获取依赖。
接下来,你可以在你的 Flutter 应用中使用 ShapedBottomBar
。以下是一个完整的示例代码:
import 'package:flutter/material.dart';
import 'package:shaped_bottom_bar/shaped_bottom_bar.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Shaped Bottom Bar Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin {
int _selectedIndex = 0;
final List<Widget> _widgetOptions = <Widget>[
Text('Home'),
Text('Search'),
Text('Profile'),
Text('Settings'),
];
void _onItemTapped(int index) {
setState(() {
_selectedIndex = index;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Shaped Bottom Bar Demo'),
),
body: Center(
child: _widgetOptions.elementAt(_selectedIndex),
),
bottomNavigationBar: ShapedBottomBar(
items: [
ShapedBottomBarItem(
iconData: Icons.home,
title: 'Home',
backgroundColor: Colors.blue,
),
ShapedBottomBarItem(
iconData: Icons.search,
title: 'Search',
backgroundColor: Colors.green,
),
ShapedBottomBarItem(
iconData: Icons.person,
title: 'Profile',
backgroundColor: Colors.amber,
),
ShapedBottomBarItem(
iconData: Icons.settings,
title: 'Settings',
backgroundColor: Colors.red,
),
],
currentIndex: _selectedIndex,
onTap: (int index) {
setState(() {
_selectedIndex = index;
});
},
backgroundColor: Colors.white,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.only(
topLeft: Radius.circular(30),
topRight: Radius.circular(30),
),
),
elevation: 8,
),
);
}
}
在这个示例中,我们创建了一个简单的 Flutter 应用,它包含一个底部导航栏,使用 ShapedBottomBar
来实现。ShapedBottomBarItem
用于定义每个导航项,包括图标、标题和背景颜色。currentIndex
属性用于指定当前选中的导航项索引,onTap
回调函数用于处理导航项的点击事件。
我们还通过 shape
属性自定义了底部导航栏的形状,这里使用了 RoundedRectangleBorder
来创建圆角矩形。你可以根据需要进一步自定义形状和样式。
这个示例应该可以帮助你快速上手 shaped_bottom_bar
插件的使用。如果你有更复杂的需求,可以查阅该插件的官方文档来获取更多信息和高级用法。