#
前言
帮助中心页面为用户提供常见问题解答和使用指南,帮助用户快速上手应用。好的帮助中心能减少用户的困惑,提升使用体验。
这篇文章会讲解帮助中心页面的实现,包括常见问题列表和问答展示等核心功能。
页面整体结构
帮助中心页面展示多个常见问题,每个问题包含标题和答案。
dart
class HelpPage extends StatelessWidget {
const HelpPage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: const Color(0xFFFAFAFC),
appBar: AppBar(
backgroundColor: Colors.transparent,
leading: IconButton(
icon: Icon(Icons.arrow_back_ios_rounded, size: 20.w),
onPressed: () => Get.back()
),
title: Text('帮助中心', style: TextStyle(fontSize: 17.sp, fontWeight: FontWeight.w600)),
centerTitle: true,
),
body: SingleChildScrollView(
padding: EdgeInsets.all(20.w),
child: Column(
children: [
_buildFaqItem('如何记录健康数据?', '点击底部导航栏的"记录"按钮,选择要记录的数据类型,输入数值后保存即可。'),
_buildFaqItem('数据会自动同步吗?', '开启自动同步后,您的数据会自动备份到云端,换设备后可以恢复。'),
_buildFaqItem('如何设置提醒?', '进入"我的"-"提醒设置",可以为不同的健康指标设置定时提醒。'),
_buildFaqItem('如何导出数据?', '进入"我的"-"数据导出",可以选择导出全部或部分数据。'),
],
),
),
);
}
}
页面使用统一的浅灰色背景,多个问答卡片垂直排列。
问答卡片组件
问答卡片展示问题标题和答案内容。
dart
Widget _buildFaqItem(String question, String answer) {
return Container(
margin: EdgeInsets.only(bottom: 12.h),
padding: EdgeInsets.all(16.w),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(16.r)
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Icon(Icons.help_outline_rounded, size: 20.w, color: const Color(0xFF6C63FF)),
SizedBox(width: 10.w),
Expanded(
child: Text(question, style: TextStyle(
fontSize: 15.sp,
fontWeight: FontWeight.w600,
color: const Color(0xFF1A1A2E)
))
),
],
),
SizedBox(height: 10.h),
Padding(
padding: EdgeInsets.only(left: 30.w),
child: Text(answer, style: TextStyle(
fontSize: 13.sp,
color: Colors.grey[600],
height: 1.5
)),
),
],
),
);
}
问题标题前面有一个紫色的问号图标,答案内容缩进显示,和问题形成视觉层次。答案文字使用 1.5 的行高,让阅读更舒适。
可展开的问答卡片
如果问题较多,可以使用可展开的卡片节省空间:
dart
class ExpandableFaqItem extends StatefulWidget {
final String question;
final String answer;
const ExpandableFaqItem({
super.key,
required this.question,
required this.answer,
});
@override
State<ExpandableFaqItem> createState() => _ExpandableFaqItemState();
}
class _ExpandableFaqItemState extends State<ExpandableFaqItem> {
bool _isExpanded = false;
@override
Widget build(BuildContext context) {
return Container(
margin: EdgeInsets.only(bottom: 12.h),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(16.r),
),
child: Column(
children: [
GestureDetector(
onTap: () => setState(() => _isExpanded = !_isExpanded),
child: Padding(
padding: EdgeInsets.all(16.w),
child: Row(
children: [
Icon(
Icons.help_outline_rounded,
size: 20.w,
color: const Color(0xFF6C63FF)
),
SizedBox(width: 10.w),
Expanded(
child: Text(widget.question, style: TextStyle(
fontSize: 15.sp,
fontWeight: FontWeight.w600,
color: const Color(0xFF1A1A2E),
)),
),
Icon(
_isExpanded
? Icons.keyboard_arrow_up_rounded
: Icons.keyboard_arrow_down_rounded,
size: 24.w,
color: Colors.grey[400],
),
],
),
),
),
if (_isExpanded)
Padding(
padding: EdgeInsets.fromLTRB(46.w, 0, 16.w, 16.h),
child: Text(widget.answer, style: TextStyle(
fontSize: 13.sp,
color: Colors.grey[600],
height: 1.5,
)),
),
],
),
);
}
}
点击问题标题可以展开或收起答案,右边的箭头图标指示当前状态。
问题分类
如果问题较多,可以按类别分组:
dart
Widget _buildFaqCategory(String category, List<Map<String, String>> faqs) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: EdgeInsets.only(left: 4.w, bottom: 12.h, top: 8.h),
child: Text(category, style: TextStyle(
fontSize: 14.sp,
fontWeight: FontWeight.w600,
color: Colors.grey[600],
)),
),
...faqs.map((faq) => _buildFaqItem(faq['question']!, faq['answer']!)),
SizedBox(height: 8.h),
],
);
}
分类标题用灰色小字显示,和问答卡片形成区分。
搜索功能
可以添加搜索功能,帮助用户快速找到需要的答案:
dart
Widget _buildSearchBar() {
return Container(
margin: EdgeInsets.only(bottom: 20.h),
padding: EdgeInsets.symmetric(horizontal: 16.w),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12.r),
),
child: TextField(
decoration: InputDecoration(
hintText: '搜索问题',
hintStyle: TextStyle(
fontSize: 14.sp,
color: Colors.grey[400],
),
border: InputBorder.none,
icon: Icon(Icons.search_rounded, size: 20.w, color: Colors.grey[400]),
),
onChanged: (value) {
// 搜索问题
},
),
);
}
搜索框放在页面顶部,用户可以输入关键词搜索相关问题。
联系客服入口
如果用户找不到答案,可以联系客服:
dart
Widget _buildContactSupport() {
return Container(
margin: EdgeInsets.only(top: 20.h),
padding: EdgeInsets.all(16.w),
decoration: BoxDecoration(
color: const Color(0xFF6C63FF).withOpacity(0.08),
borderRadius: BorderRadius.circular(16.r),
),
child: Row(
children: [
Icon(Icons.headset_mic_outlined, size: 24.w, color: const Color(0xFF6C63FF)),
SizedBox(width: 12.w),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('没有找到答案?', style: TextStyle(
fontSize: 14.sp,
fontWeight: FontWeight.w500,
color: const Color(0xFF1A1A2E),
)),
SizedBox(height: 2.h),
Text('联系客服获取帮助', style: TextStyle(
fontSize: 12.sp,
color: Colors.grey[500],
)),
],
),
),
Icon(Icons.chevron_right_rounded, size: 20.w, color: const Color(0xFF6C63FF)),
],
),
);
}
联系客服入口用淡紫色背景突出显示,点击可以跳转到客服页面或拨打客服电话。
使用指南
除了常见问题,还可以添加使用指南:
dart
Widget _buildGuideSection() {
final guides = [
{'title': '快速入门', 'icon': Icons.rocket_launch_outlined},
{'title': '记录数据', 'icon': Icons.edit_note_rounded},
{'title': '查看统计', 'icon': Icons.bar_chart_rounded},
{'title': '设置目标', 'icon': Icons.flag_outlined},
];
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: EdgeInsets.only(left: 4.w, bottom: 12.h),
child: Text('使用指南', style: TextStyle(
fontSize: 14.sp,
fontWeight: FontWeight.w600,
color: Colors.grey[600],
)),
),
GridView.count(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
crossAxisCount: 2,
mainAxisSpacing: 12.h,
crossAxisSpacing: 12.w,
childAspectRatio: 2,
children: guides.map((guide) => Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12.r),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(
guide['icon'] as IconData,
size: 20.w,
color: const Color(0xFF6C63FF)
),
SizedBox(width: 8.w),
Text(guide['title'] as String, style: TextStyle(
fontSize: 13.sp,
color: const Color(0xFF1A1A2E),
)),
],
),
)).toList(),
),
],
);
}
使用指南用网格布局展示,每个指南是一个可点击的卡片,点击后跳转到详细的使用说明。
反馈功能
可以添加问题反馈功能:
dart
Widget _buildFeedbackButton() {
return Container(
margin: EdgeInsets.only(top: 20.h),
child: GestureDetector(
onTap: () {
// 打开反馈页面
_showFeedbackDialog();
},
child: Container(
padding: EdgeInsets.symmetric(vertical: 14.h),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12.r),
border: Border.all(color: const Color(0xFF6C63FF).withOpacity(0.3)),
),
child: Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(Icons.feedback_outlined, size: 18.w, color: const Color(0xFF6C63FF)),
SizedBox(width: 8.w),
Text('提交反馈', style: TextStyle(
fontSize: 14.sp,
color: const Color(0xFF6C63FF),
fontWeight: FontWeight.w500,
)),
],
),
),
),
),
);
}
void _showFeedbackDialog() {
Get.dialog(
AlertDialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(20.r),
),
title: Text('提交反馈', style: TextStyle(
fontSize: 17.sp,
fontWeight: FontWeight.w600,
color: const Color(0xFF1A1A2E),
)),
content: TextField(
maxLines: 4,
decoration: InputDecoration(
hintText: '请描述您遇到的问题或建议...',
hintStyle: TextStyle(
fontSize: 14.sp,
color: Colors.grey[400],
),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(12.r),
borderSide: BorderSide(color: Colors.grey[300]!),
),
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(12.r),
borderSide: const BorderSide(color: Color(0xFF6C63FF)),
),
),
),
actions: [
TextButton(
onPressed: () => Get.back(),
child: Text('取消', style: TextStyle(
fontSize: 14.sp,
color: Colors.grey[600],
)),
),
TextButton(
onPressed: () {
Get.back();
Get.snackbar(
'感谢反馈',
'我们会尽快处理您的问题',
snackPosition: SnackPosition.TOP,
backgroundColor: const Color(0xFF00C9A7),
colorText: Colors.white,
);
},
child: Text('提交', style: TextStyle(
fontSize: 14.sp,
color: const Color(0xFF6C63FF),
fontWeight: FontWeight.w600,
)),
),
],
),
);
}
反馈功能让用户可以提交问题或建议,提交后显示感谢提示。
常见问题数据
常见问题可以从配置文件或服务器获取:
dart
final List<Map<String, String>> _faqs = [
{
'question': '如何记录健康数据?',
'answer': '点击底部导航栏的"记录"按钮,选择要记录的数据类型,输入数值后保存即可。',
},
{
'question': '数据会自动同步吗?',
'answer': '开启自动同步后,您的数据会自动备份到云端,换设备后可以恢复。',
},
{
'question': '如何设置提醒?',
'answer': '进入"我的"-"提醒设置",可以为不同的健康指标设置定时提醒。',
},
{
'question': '如何导出数据?',
'answer': '进入"我的"-"数据导出",可以选择导出全部或部分数据。',
},
{
'question': '如何修改个人信息?',
'answer': '进入"我的"-"编辑资料",可以修改昵称、性别、身高、体重等信息。',
},
{
'question': '健康报告多久更新一次?',
'answer': '健康报告每周自动更新一次,您也可以手动刷新获取最新报告。',
},
];
问题数据可以根据用户反馈不断更新和完善。
小结
帮助中心页面通过常见问题列表,为用户提供快速的问题解答。
核心设计要点包括:问答卡片使用问号图标标识问题,答案缩进显示形成层次,联系客服入口放在底部作为兜底方案。这些设计让用户能快速找到需要的帮助,提升使用体验。
欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net