Flutter for OpenHarmony生活助手App实战:关于页面与应用信息实现
,Text('应用介绍',),Text('生活助手是一款集健康管理、记账、待办事项等功能于一体的生活管理应用。帮助你更好地规划和管理日常生活,养成良好的生活习惯。',),],),卡片的样式卡片用白色背景,圆角12,和应用的其他卡片保持一致。内边距20,让内容不会太挤。标题的样式"应用介绍"这个标题用16号字,加粗,黑色。让用户知道下面是什么内容。介绍文字的样式介绍文字用14号字,行高1.5,深灰色

说起关于页面,很多人觉得这是个可有可无的功能,无非就是显示个版本号、联系方式。但我自己做过几个App后发现,关于页面其实很重要。它是应用的名片,展示应用的基本信息,也是用户联系开发者的入口。一个好的关于页面,能提升应用的专业度和可信度。
为什么关于页面不可或缺
在开始写代码之前,我先想清楚了关于页面的价值。
第一个是信息透明。用户有权知道自己在用什么应用,版本是多少,开发者是谁。这些信息应该公开透明,让用户放心使用。
第二个是问题反馈。用户遇到问题时,需要一个渠道联系开发者。关于页面提供邮箱、官网、客服电话等联系方式,方便用户反馈。
第三个是法律合规。应用商店要求应用提供隐私政策、用户协议等法律文件。关于页面是放置这些文件的合适位置。
第四个是品牌展示。关于页面是展示应用品牌的窗口。应用图标、名称、介绍,这些都是品牌的一部分。一个精心设计的关于页面,能提升品牌形象。
功能设计的思路
在设计这个功能时,我考虑了以下几个方面。
简洁明了
关于页面不需要太复杂,信息要简洁明了。用户打开这个页面,一眼就能看到想要的信息。
层次分明
信息要分组展示,比如应用信息一组,联系方式一组。这样看起来更清晰,不会乱。
视觉统一
关于页面的设计风格要和整个应用保持一致。颜色、字体、圆角,这些细节都要统一。
可点击的链接
邮箱、官网、电话这些联系方式应该是可点击的。点击邮箱打开邮件应用,点击官网打开浏览器,点击电话拨打电话。
页面整体结构
先看页面的基本框架:
class AboutPage extends StatelessWidget {
const AboutPage({super.key});
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('关于'),
),
body: SingleChildScrollView(
padding: EdgeInsets.all(16.w),
child: Column(
children: [
SizedBox(height: 40.h),
_buildAppIcon(),
SizedBox(height: 20.h),
_buildAppName(),
SizedBox(height: 8.h),
_buildVersion(),
SizedBox(height: 40.h),
_buildInfoCard(),
SizedBox(height: 20.h),
_buildContactCard(),
],
),
),
);
}
}
StatelessWidget的选择
这里用了StatelessWidget,因为关于页面只是展示信息,没有用户交互导致的状态变化。所有信息都是静态的,不需要管理状态。
页面布局的六个部分
页面分成六块:应用图标、应用名称、版本号、应用介绍卡片、联系方式卡片。这个顺序是经过考虑的,从视觉焦点到详细信息,符合用户的阅读习惯。
外层用SingleChildScrollView包裹,这样内容超出屏幕时可以滚动。虽然关于页面内容不多,但加上滚动总是好的。
应用图标的设计
页面顶部是一个大大的应用图标:
Widget _buildAppIcon() {
return Container(
width: 100.w,
height: 100.w,
decoration: BoxDecoration(
color: Colors.blue,
borderRadius: BorderRadius.circular(20.r),
),
child: Icon(Icons.apps, size: 60.sp, color: Colors.white),
);
}
图标的大小
图标大小是100x100,比较大,很醒目。这是页面的视觉焦点,用户第一眼就会看到。
圆角的设计
图标用了圆角矩形,圆角半径是20。这是现代应用图标的标准样式,看起来更柔和。
颜色的选择
图标背景用蓝色,和应用的主题色一致。里面的图标用白色,形成对比。
实际项目中,应该用应用的真实图标,而不是Icons.apps这个占位图标。可以用Image.asset加载本地图片。
应用名称和版本号
图标下方是应用名称和版本号:
Widget _buildAppName() {
return Text(
'生活助手',
style: TextStyle(fontSize: 24.sp, fontWeight: FontWeight.bold),
);
}
Widget _buildVersion() {
return Text(
'Version 2.1.3',
style: TextStyle(fontSize: 14.sp, color: Colors.grey),
);
}
名称的样式
应用名称用24号大字,加粗,黑色。这是页面的标题,要醒目。
版本号的样式
版本号用14号小字,灰色。这是辅助信息,不需要太醒目。
版本号的格式
版本号用"Version X.Y.Z"的格式,这是国际通用的格式。X是主版本号,Y是次版本号,Z是修订号。
实际项目中,版本号应该从package_info_plus包读取,而不是硬编码:
Future<String> _getVersion() async {
final packageInfo = await PackageInfo.fromPlatform();
return 'Version ${packageInfo.version}';
}
应用介绍卡片
名称和版本号下方是应用介绍卡片:
Widget _buildInfoCard() {
return Container(
padding: EdgeInsets.all(20.w),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12.r),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'应用介绍',
style: TextStyle(fontSize: 16.sp, fontWeight: FontWeight.bold),
),
SizedBox(height: 12.h),
Text(
'生活助手是一款集健康管理、记账、待办事项等功能于一体的生活管理应用。帮助你更好地规划和管理日常生活,养成良好的生活习惯。',
style: TextStyle(fontSize: 14.sp, height: 1.5, color: Colors.grey[700]),
),
],
),
);
}
卡片的样式
卡片用白色背景,圆角12,和应用的其他卡片保持一致。内边距20,让内容不会太挤。
标题的样式
"应用介绍"这个标题用16号字,加粗,黑色。让用户知道下面是什么内容。
介绍文字的样式
介绍文字用14号字,行高1.5,深灰色。行高1.5让文字不会太挤,阅读起来更舒服。
介绍内容的撰写
介绍要简洁明了,一两句话说清楚应用是做什么的,有什么价值。不要写太长,用户没耐心看。
这段介绍突出了应用的核心功能(健康管理、记账、待办事项)和核心价值(规划和管理日常生活,养成良好习惯)。
联系方式卡片
应用介绍卡片下方是联系方式卡片:
Widget _buildContactCard() {
return Container(
padding: EdgeInsets.all(20.w),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12.r),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'联系我们',
style: TextStyle(fontSize: 16.sp, fontWeight: FontWeight.bold),
),
SizedBox(height: 12.h),
_buildContactItem(Icons.email, '邮箱', 'support@lifehelper.com'),
_buildContactItem(Icons.language, '官网', 'www.lifehelper.com'),
_buildContactItem(Icons.phone, '客服', '400-123-4567'),
],
),
);
}
Widget _buildContactItem(IconData icon, String label, String value) {
return Padding(
padding: EdgeInsets.only(bottom: 12.h),
child: Row(
children: [
Icon(icon, size: 20.sp, color: Colors.blue),
SizedBox(width: 12.w),
Text(
'$label: ',
style: TextStyle(fontSize: 14.sp, color: Colors.grey),
),
Text(
value,
style: TextStyle(fontSize: 14.sp),
),
],
),
);
}
联系方式的三种类型
提供了三种联系方式:
- 邮箱:用户可以发邮件反馈问题或建议
- 官网:用户可以访问官网了解更多信息
- 客服电话:用户可以打电话咨询
这三种方式覆盖了不同的用户需求。有人喜欢发邮件,有人喜欢打电话,有人喜欢看官网。
图标的选择
每种联系方式有自己的图标:
- 邮箱:
Icons.email,信封图标 - 官网:
Icons.language,地球图标 - 客服:
Icons.phone,电话图标
这些图标都是蓝色,和应用的主题色一致。大小20,不会太大也不会太小。
文字的布局
每个联系方式是一行,包含图标、标签、值三个部分。标签用灰色,值用黑色,形成层次关系。
可点击的联系方式
联系方式应该是可点击的,点击后执行相应的操作:
Widget _buildContactItem(IconData icon, String label, String value, VoidCallback onTap) {
return GestureDetector(
onTap: onTap,
child: Padding(
padding: EdgeInsets.only(bottom: 12.h),
child: Row(
children: [
Icon(icon, size: 20.sp, color: Colors.blue),
SizedBox(width: 12.w),
Text(
'$label: ',
style: TextStyle(fontSize: 14.sp, color: Colors.grey),
),
Expanded(
child: Text(
value,
style: TextStyle(
fontSize: 14.sp,
decoration: TextDecoration.underline,
color: Colors.blue,
),
),
),
],
),
),
);
}
下划线的添加
可点击的文字加上下划线,用蓝色显示,让用户知道这是个链接。这是网页的标准做法,用户很熟悉。
点击事件的处理
点击邮箱,打开邮件应用:
Future<void> _launchEmail(String email) async {
final uri = Uri(scheme: 'mailto', path: email);
if (await canLaunchUrl(uri)) {
await launchUrl(uri);
}
}
点击官网,打开浏览器:
Future<void> _launchWebsite(String url) async {
final uri = Uri.parse('https://$url');
if (await canLaunchUrl(uri)) {
await launchUrl(uri);
}
}
点击电话,拨打电话:
Future<void> _launchPhone(String phone) async {
final uri = Uri(scheme: 'tel', path: phone);
if (await canLaunchUrl(uri)) {
await launchUrl(uri);
}
}
这些功能需要用到url_launcher包。
法律文件的链接
关于页面还应该包含隐私政策和用户协议的链接:
_buildLegalLinks() {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextButton(
onPressed: () {
// 打开隐私政策页面
},
child: const Text('隐私政策'),
),
Text('|', style: TextStyle(color: Colors.grey)),
TextButton(
onPressed: () {
// 打开用户协议页面
},
child: const Text('用户协议'),
),
],
);
}
这两个链接通常放在页面底部,用小字显示。点击后跳转到对应的法律文件页面。
应用信息的获取
实际项目中,应用信息应该动态获取,而不是硬编码。可以用package_info_plus包:
Future<void> _loadAppInfo() async {
final packageInfo = await PackageInfo.fromPlatform();
setState(() {
_appName = packageInfo.appName;
_version = packageInfo.version;
_buildNumber = packageInfo.buildNumber;
_packageName = packageInfo.packageName;
});
}
这样获取的信息是准确的,不会因为手动更新忘记改代码。
版本更新检查
关于页面还可以加个"检查更新"按钮,让用户主动检查是否有新版本:
ElevatedButton(
onPressed: () async {
await _checkForUpdate();
},
child: const Text('检查更新'),
)
Future<void> _checkForUpdate() async {
// 从服务器获取最新版本号
final latestVersion = await _fetchLatestVersion();
final currentVersion = await _getCurrentVersion();
if (_isNewerVersion(latestVersion, currentVersion)) {
// 有新版本,提示用户更新
_showUpdateDialog(latestVersion);
} else {
// 已是最新版本
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('已是最新版本')),
);
}
}
开发者信息
如果是个人开发者,可以在关于页面加上开发者信息,比如名字、头像、个人网站:
Widget _buildDeveloperInfo() {
return Container(
padding: EdgeInsets.all(20.w),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12.r),
),
child: Row(
children: [
CircleAvatar(
radius: 30.r,
backgroundImage: AssetImage('assets/developer_avatar.png'),
),
SizedBox(width: 16.w),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'开发者',
style: TextStyle(fontSize: 12.sp, color: Colors.grey),
),
Text(
'张三',
style: TextStyle(fontSize: 16.sp, fontWeight: FontWeight.bold),
),
],
),
],
),
);
}
这样能让应用更有人情味,用户知道背后是个真实的人在维护。
致谢信息
如果应用用了开源库或第三方服务,可以在关于页面加上致谢信息:
Widget _buildAcknowledgements() {
return Container(
padding: EdgeInsets.all(20.w),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12.r),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'致谢',
style: TextStyle(fontSize: 16.sp, fontWeight: FontWeight.bold),
),
SizedBox(height: 12.h),
Text(
'本应用使用了以下开源项目:\n• Flutter\n• fl_chart\n• get\n• shared_preferences',
style: TextStyle(fontSize: 14.sp, color: Colors.grey[700]),
),
],
),
);
}
这是对开源社区的尊重,也是开源协议的要求。
实际使用体验
这个关于页面我自己看了很多次,感觉设计得还不错。信息简洁明了,一眼就能看到想要的内容。
应用图标、名称、版本号放在最上面,很醒目。应用介绍和联系方式分成两个卡片,层次分明。
联系方式可以点击,很方便。想发邮件反馈问题,点一下邮箱就打开了邮件应用。想看官网,点一下就打开了浏览器。
整个页面的设计风格和应用保持一致,颜色、字体、圆角都统一。看起来很专业,不像是随便做的。
可以改进的地方
如果要做得更完善,可以考虑以下几点。
更新日志
可以加个"更新日志"按钮,点击后显示历史版本的更新内容。这样用户能知道每个版本都改了什么。
评分和反馈
可以加个"给我们评分"按钮,引导用户去应用商店评分。好评对应用的推广很重要。
社交媒体链接
如果应用有官方微博、微信公众号、Twitter等社交媒体账号,可以在关于页面加上链接。
彩蛋
可以在关于页面藏个彩蛋,比如连续点击应用图标10次,显示一个隐藏功能或开发者的话。这种小惊喜能增加用户的好感。
多语言支持
如果应用支持多语言,关于页面的文字也应该翻译。特别是应用介绍,要让不同语言的用户都能看懂。
小结
今天实现了关于页面与应用信息功能,用到了卡片布局、图标、文字样式等组件。核心是展示应用的基本信息和联系方式,让用户了解应用,方便反馈问题。
这个功能虽然简单,但很重要。它是应用的名片,展示应用的专业度和可信度。一个好的关于页面,能提升用户对应用的信任。
在实现过程中,我特别注重信息的组织。应用图标、名称、版本号、介绍、联系方式,这些信息按重要程度排列,符合用户的阅读习惯。联系方式可以点击,方便用户操作。整个页面的设计风格统一,看起来很专业。
欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net
更多推荐

所有评论(0)