flutter适配openHarmony 底部工作表
Flutter底部工作表(BottomSheet)使用指南 本文介绍了Flutter中BottomSheet的两种实现方式:模态底部工作表(showModalBottomSheet)和持久底部工作表(BottomSheet)。通过4个典型示例展示了不同场景下的应用: 基础底部工作表 - 最简单的底部面板实现 菜单底部工作表 - 使用ListTile创建菜单选项 表单底部工作表 - 包含文本输入的表
案例概述
BottomSheet 是从屏幕底部滑出的面板。它常用于显示菜单、选项、表单等内容。Flutter 提供了两种 BottomSheet:模态底部工作表(showModalBottomSheet)和持久底部工作表(BottomSheet)。本案例展示了如何使用 BottomSheet。
核心概念
1. 模态底部工作表
showModalBottomSheet 显示一个模态的底部工作表,用户必须与其交互才能返回。
2. 持久底部工作表
BottomSheet 是一个持久的底部工作表,可以与主内容共存。
3. 自定义内容
可以在底部工作表中放置任何 Widget。
代码详解
示例 1:基础底部工作表
class BasicBottomSheetExample extends StatelessWidget {
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () {
showModalBottomSheet(
context: context,
builder: (context) => Container(
padding: const EdgeInsets.all(16),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
const Text('底部工作表'),
const SizedBox(height: 16),
ElevatedButton(
onPressed: () => Navigator.pop(context),
child: const Text('关闭'),
),
],
),
),
);
},
child: const Text('显示底部工作表'),
);
}
}
代码解释: 这是最基础的底部工作表。showModalBottomSheet 显示一个模态的底部面板。
示例 2:菜单底部工作表
class MenuBottomSheetExample extends StatelessWidget {
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () {
showModalBottomSheet(
context: context,
builder: (context) => Column(
mainAxisSize: MainAxisSize.min,
children: [
ListTile(
leading: const Icon(Icons.edit),
title: const Text('编辑'),
onTap: () => Navigator.pop(context),
),
ListTile(
leading: const Icon(Icons.delete),
title: const Text('删除'),
onTap: () => Navigator.pop(context),
),
ListTile(
leading: const Icon(Icons.share),
title: const Text('分享'),
onTap: () => Navigator.pop(context),
),
],
),
);
},
child: const Text('显示菜单'),
);
}
}
代码解释: 这个示例展示了菜单式的底部工作表。通过 ListTile 显示菜单项。
示例 3:表单底部工作表
class FormBottomSheetExample extends StatefulWidget {
State<FormBottomSheetExample> createState() => _FormBottomSheetExampleState();
}
class _FormBottomSheetExampleState extends State<FormBottomSheetExample> {
late TextEditingController _controller;
void initState() {
super.initState();
_controller = TextEditingController();
}
void dispose() {
_controller.dispose();
super.dispose();
}
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () {
showModalBottomSheet(
context: context,
builder: (context) => Padding(
padding: const EdgeInsets.all(16),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
TextField(
controller: _controller,
decoration: const InputDecoration(
hintText: '输入内容',
border: OutlineInputBorder(),
),
),
const SizedBox(height: 16),
ElevatedButton(
onPressed: () => Navigator.pop(context),
child: const Text('提交'),
),
],
),
),
);
},
child: const Text('显示表单'),
);
}
}
代码解释: 这个示例展示了表单式的底部工作表。在底部工作表中放置 TextField。
示例 4:自定义底部工作表
class CustomBottomSheetExample extends StatelessWidget {
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () {
showModalBottomSheet(
context: context,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(top: Radius.circular(16)),
),
builder: (context) => Container(
padding: const EdgeInsets.all(16),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Container(
width: 40,
height: 4,
decoration: BoxDecoration(
color: Colors.grey,
borderRadius: BorderRadius.circular(2),
),
),
const SizedBox(height: 16),
const Text('自定义底部工作表'),
const SizedBox(height: 16),
ElevatedButton(
onPressed: () => Navigator.pop(context),
child: const Text('关闭'),
),
],
),
),
);
},
child: const Text('显示自定义工作表'),
);
}
}
代码解释: 这个示例展示了自定义样式的底部工作表。通过 shape 参数添加圆角。
示例 5:选择底部工作表
class SelectBottomSheetExample extends StatelessWidget {
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () {
showModalBottomSheet(
context: context,
builder: (context) => Column(
mainAxisSize: MainAxisSize.min,
children: [
const Padding(
padding: EdgeInsets.all(16),
child: Text('选择选项'),
),
...List.generate(3, (index) {
return ListTile(
title: Text('选项 $index'),
onTap: () => Navigator.pop(context, index),
);
}),
],
),
);
},
child: const Text('显示选择'),
);
}
}
代码解释: 这个示例展示了选择式的底部工作表。用户可以选择一个选项。
高级话题
1. 动态/响应式设计
根据屏幕大小调整底部工作表。
2. 动画与过渡
自定义底部工作表动画。
3. 搜索/过滤/排序
在底部工作表中实现搜索。
4. 选择与批量操作
支持多选。
5. 加载与缓存
显示加载状态。
6. 键盘导航
支持键盘快捷键。
7. 无障碍支持
提供无障碍支持。
8. 样式自定义
自定义样式。
9. 数据持久化/导出
保存状态。
10. 单元测试与集成测试
测试功能。
PC 端适配要点
- 根据屏幕大小调整工作表大小
- 支持 ESC 键关闭
- 提供清晰的操作按钮
实际应用场景
- 菜单选项:显示操作菜单
- 选择器:选择选项
- 表单输入:输入信息
- 内容展示:展示详细内容
扩展建议
- 学习高级底部工作表库
- 研究性能优化
- 探索自定义动画
- 集成表单库
总结
底部工作表是展示内容和获取用户输入的有效方式。通过灵活使用 showModalBottomSheet,可以创建各种底部工作表效果。
欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐

所有评论(0)