Flutter底部弹出菜单插件icon_bottomsheet的使用
Flutter底部弹出菜单插件icon_bottomsheet的使用
icon_bottomsheet
是一个自定义的底部弹出菜单类,其顶部带有动态图标(widget),并且支持多种形状。它使用了从 package:flutter/material.dart
导入的默认底部弹出菜单。IconBottomSheet
类创建了一个透明边框的图标小部件。图标小部件的边距大小由 iconPadding
定义,图标的大小由 iconSize
定义,而图标的形状则由 iconShape
定义。图标的形状可以是 circle
(圆形)、square
(方形)、circleTop
(上半圆)或 circleBottom
(下半圆)。以下是不同 iconShape
的图标展示。
参数
参数名 | 描述 |
---|---|
child |
这是在底部弹出菜单中显示的小部件。 |
iconWidget |
显示在底部弹出菜单顶部的小部件。 |
iconSize |
图标小部件的高度/宽度,默认为 50(高度和宽度相同)。 |
iconPadding |
图标小部件周围的透明边框填充,默认为 16。使用 0 当不需要时。 |
position |
帮助将图标小部件定位到左、右或中心,默认为中心。 |
iconBackgroundColor |
定义图标小部件的背景颜色,默认为白色。为了显示无色,使用 Colors.transparent 。 |
childBackgroundColor |
定义子小部件的背景颜色,默认为白色。 |
位置
参数名 | 描述 |
---|---|
Position.center |
将图标小部件对齐到底部弹出菜单的中心。如果没有传递位置参数,则默认设置为此值。 |
Position.left |
将图标小部件对齐到底部弹出菜单的左侧。 |
Position.right |
将图标小部件对齐到底部弹出菜单的右侧。 |
图标形状
参数名 | 描述 |
---|---|
IconShape.circle |
创建图标小部件的圆形背景。 |
IconShape.circleTop |
创建图标小部件的上半圆背景,下半部分为方形。 |
IconShape.circleBottom |
创建图标小部件的下半圆背景,上半部分为方形。 |
IconShape.square |
创建图标小部件的方形背景。 |
开始使用
在 pubspec.yaml
文件中添加 icon_bottomsheet
包,并执行 pub get
。
dependencies:
icon_bottomsheet: ^x.x.x
然后,在你的 MaterialApp
中更改画布颜色以使底部弹出菜单具有透明背景。
MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
canvasColor: Colors.transparent,
),
home: const MyHomePage(title: 'Icon BottomSheet'),
);
接下来,导入 showModalBottomSheet
从 material.dart
并导入 IconBottomSheet
从 package:icon_bottomsheet/icon_bottomsheet.dart
,并传入上述描述的参数。
showModalBottomSheet<int>(
context: context,
builder: (context) {
return const IconBottomSheet(
iconWidget: Icon(
Icons.cancel_outlined,
color: Colors.white,
size: 100,
),
iconShape: IconShape.square,
position: Position.right,
iconBackgroundColor: Colors.redAccent,
//childBackgroundColor: Colors.grey,
iconSize: 120,
iconPadding: 20,
child: PaymentFailed(),
);
},
);
示例代码
以下是一个完整的示例代码,展示了如何使用 icon_bottomsheet
插件:
import 'package:example/kid.dart';
import 'package:example/payment_failed.dart';
import 'package:example/payment_success.dart';
import 'package:example/success.dart';
import 'package:flutter/material.dart';
import 'package:icon_bottomsheet/icon_bottomsheet.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
canvasColor: Colors.transparent,
),
home: const MyHomePage(title: 'Icon BottomSheet'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
void _showBottomSheet() {
showModalBottomSheet<int>(
context: context,
builder: (context) {
return const IconBottomSheet(
iconWidget: Icon(
Icons.cancel_outlined,
color: Colors.redAccent,
size: 100,
),
position: Position.right,
iconShape: IconShape.circle,
iconSize: 120,
iconPadding: 20,
child: Success(),
);
},
);
}
void _showKidsBottomSheet() {
showModalBottomSheet<int>(
context: context,
builder: (context) {
return IconBottomSheet(
iconWidget: Padding(
padding: const EdgeInsets.all(16.0),
child: Image.asset('assets/duckling.png'),
),
//iconBackgroundColor: Colors.transparent,
//childBackgroundColor: Colors.blue,
iconShape: IconShape.circle,
iconSize: 120,
iconPadding: 20,
child: const Kid(),
);
},
);
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
const SizedBox(
height: 20,
),
ElevatedButton(
onPressed: _showBottomSheet,
child: const Text(
'Show BottomSheet',
),
)
],
),
),
);
}
}
更多关于Flutter底部弹出菜单插件icon_bottomsheet的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter底部弹出菜单插件icon_bottomsheet的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用icon_bottomsheet
插件来实现底部弹出菜单的示例代码。
首先,确保你已经在pubspec.yaml
文件中添加了icon_bottomsheet
依赖:
dependencies:
flutter:
sdk: flutter
icon_bottomsheet: ^3.0.1 # 请检查最新版本号
然后运行flutter pub get
来安装依赖。
接下来,在你的Dart文件中,你可以按照以下方式使用IconBottomSheet
:
import 'package:flutter/material.dart';
import 'package:icon_bottomsheet/icon_bottomsheet.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> {
void _showBottomSheet() {
showIconBottomSheet(
context: context,
builder: (context) => IconBottomSheet(
backgroundColor: Colors.white,
elevation: 8,
borderRadius: BorderRadius.circular(16),
items: [
IconBottomSheetItem(
icon: Icon(Icons.home),
title: 'Home',
onTap: () {
Navigator.pop(context); // 关闭底部弹出菜单
// 执行Home相关的操作
print('Home tapped');
},
),
IconBottomSheetItem(
icon: Icon(Icons.settings),
title: 'Settings',
onTap: () {
Navigator.pop(context); // 关闭底部弹出菜单
// 执行Settings相关的操作
print('Settings tapped');
},
),
IconBottomSheetItem(
icon: Icon(Icons.exit_to_app),
title: 'Logout',
onTap: () {
Navigator.pop(context); // 关闭底部弹出菜单
// 执行Logout相关的操作
print('Logout tapped');
},
),
],
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Demo'),
),
body: Center(
child: ElevatedButton(
onPressed: _showBottomSheet,
child: Text('Show Bottom Sheet'),
),
),
);
}
}
在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个按钮。点击按钮时,会显示一个底部弹出菜单,菜单项包括“Home”、“Settings”和“Logout”。每个菜单项点击时都会打印相应的信息,并且关闭底部弹出菜单。
showIconBottomSheet
函数用于显示底部弹出菜单,而IconBottomSheet
组件则定义了菜单的样式和内容。每个菜单项使用IconBottomSheetItem
来表示,包括图标、标题和点击事件处理函数。
你可以根据需要自定义菜单项的图标、标题和点击事件处理逻辑。