关于页面是App的信息展示窗口,展示应用名称、版本号、版权信息,以及提供检查更新、隐私政策、用户协议等入口。虽然功能简单,但设计得当可以提升App的专业感。
请添加图片描述

功能设计

关于页面需要实现:

  • App图标和名称展示
  • 版本号显示
  • 检查更新功能
  • 隐私政策和用户协议入口
  • 版权信息

页面整体结构

首先定义关于页面的基本框架:

class AboutView extends GetView<AboutController> {
  const AboutView({super.key});

  
  Widget build(BuildContext context) {
    return Scaffold(

继承GetView自动注入AboutController控制器。
const构造函数优化widget重建性能。
build方法返回页面的完整UI结构。

      backgroundColor: AppTheme.backgroundColor,
      appBar: AppBar(title: const Text('关于')),
      body: SingleChildScrollView(
        padding: EdgeInsets.all(16.w),
        child: Column(
          children: [

Scaffold提供Material Design页面框架。
统一背景色保持视觉一致性。
SingleChildScrollView让内容可滚动。

            SizedBox(height: 32.h),
            _buildAppInfo(),
            SizedBox(height: 32.h),
            _buildMenuList(),
            SizedBox(height: 32.h),
            _buildCopyright(),

顶部留32.h的空白让内容不贴顶。
_buildAppInfo构建App信息展示区域。
_buildMenuList构建功能菜单列表。

          ],
        ),
      ),
    );
  }
}

_buildCopyright构建底部版权信息。
闭合所有括号完成页面结构。
整体布局简洁清晰。

App信息展示

展示App图标、名称、版本号和标语:

Widget _buildAppInfo() {
  return Column(
    children: [
      _buildAppIcon(),
      SizedBox(height: 20.h),
      _buildAppName(),

Column垂直排列App信息各元素。
_buildAppIcon构建App图标。
20.h间距让图标和名称有适当距离。

      SizedBox(height: 8.h),
      _buildVersionInfo(),
      SizedBox(height: 16.h),
      _buildSlogan(),
    ],
  );
}

_buildVersionInfo构建版本号标签。
_buildSlogan构建App标语。
不同间距让各元素层次分明。

App图标组件

渐变背景的App图标:

Widget _buildAppIcon() {
  return Container(
    width: 100.w,
    height: 100.w,
    decoration: BoxDecoration(
      gradient: LinearGradient(

Container作为图标容器,100.w的尺寸足够醒目。
BoxDecoration定义容器的装饰样式。
LinearGradient创建渐变背景效果。

        begin: Alignment.topLeft,
        end: Alignment.bottomRight,
        colors: [AppTheme.primaryColor, AppTheme.primaryColor.withOpacity(0.7)],
      ),
      borderRadius: BorderRadius.circular(24.r),

渐变从左上到右下,模拟光照效果。
主色到0.7透明度版本的渐变更有层次。
24.r大圆角让图标更现代。

      boxShadow: [
        BoxShadow(
          color: AppTheme.primaryColor.withOpacity(0.3),
          blurRadius: 20.r,
          offset: Offset(0, 10.h),
        ),
      ],

阴影颜色与图标颜色一致更协调。
较大的模糊半径让阴影更柔和。
向下偏移10.h模拟光照效果。

    ),
    child: Icon(Icons.data_usage, size: 56.sp, color: Colors.white),
  );
}

data_usage图标表示流量监控主题。
56.sp的图标大小与容器比例协调。
白色图标与渐变背景对比明显。

App名称组件

显示App名称:

Widget _buildAppName() {
  return Text(
    '流量监控',
    style: TextStyle(
      fontSize: 28.sp,
      fontWeight: FontWeight.bold,
      color: AppTheme.textPrimary,

Text显示App名称"流量监控"。
28.sp大字号让名称醒目突出。
bold字重强调App名称。

    ),
  );
}

主要文字颜色确保可读性。
简洁的样式让名称清晰展示。
闭合Text组件完成名称显示。

版本号标签

胶囊形状的版本号标签:

Widget _buildVersionInfo() {
  return Obx(() => Container(
    padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 6.h),
    decoration: BoxDecoration(
      color: AppTheme.primaryColor.withOpacity(0.1),

Obx监听appVersion实现响应式更新。
Container作为版本标签的容器。
浅色背景让标签柔和不突兀。

      borderRadius: BorderRadius.circular(20.r),
    ),
    child: Text(
      '版本 ${controller.appVersion.value}',
      style: TextStyle(
        fontSize: 14.sp,

20.r大圆角形成胶囊形状。
显示"版本"加版本号。
14.sp字号适合标签显示。

        color: AppTheme.primaryColor,
        fontWeight: FontWeight.w500,
      ),
    ),
  ));
}

主色调文字与浅色背景协调。
w500字重让版本号稍微加粗。
整体设计简洁专业。

App标语

一句话说明App的核心价值:

Widget _buildSlogan() {
  return Text(
    '智能监控,轻松管理流量',
    style: TextStyle(
      fontSize: 14.sp,
      color: AppTheme.textSecondary,
    ),
  );
}

标语简洁说明App的核心功能。
14.sp字号作为辅助信息。
次要颜色让标语不会太突出。

功能菜单列表

包含检查更新、评分、分享等功能入口:

Widget _buildMenuList() {
  return Container(
    decoration: BoxDecoration(
      color: Colors.white,
      borderRadius: BorderRadius.circular(16.r),
      boxShadow: [

Container作为菜单列表的容器。
白色背景与页面灰色背景对比。
16.r圆角保持视觉一致。

        BoxShadow(
          color: Colors.black.withOpacity(0.03),
          blurRadius: 10.r,
          offset: Offset(0, 4.h),
        ),
      ],
    ),

轻微阴影让卡片有悬浮感。
透明度0.03的阴影非常柔和。
向下偏移4.h模拟光照效果。

    child: Column(
      children: [
        _buildMenuItem(
          icon: Icons.system_update,
          iconColor: AppTheme.primaryColor,
          title: '检查更新',

Column垂直排列所有菜单项。
第一项是检查更新功能。
使用主色调的更新图标。

          trailing: Obx(() => controller.hasUpdate.value
              ? Container(
                  padding: EdgeInsets.symmetric(horizontal: 8.w, vertical: 2.h),
                  decoration: BoxDecoration(
                    color: Colors.red,

Obx监听hasUpdate状态。
有更新时显示红色NEW标签。
小内边距让标签紧凑。

                    borderRadius: BorderRadius.circular(10.r),
                  ),
                  child: Text(
                    'NEW',
                    style: TextStyle(fontSize: 10.sp, color: Colors.white, fontWeight: FontWeight.bold),
                  ),
                )

10.r圆角让标签更圆润。
白色加粗文字在红色背景上醒目。
10.sp小字号适合标签。

              : Icon(Icons.chevron_right, color: AppTheme.textSecondary)),
          onTap: () => controller.checkUpdate(),
        ),
        Divider(height: 1, indent: 72.w),

无更新时显示右箭头图标。
点击调用checkUpdate方法。
分隔线从图标右侧开始。

        _buildMenuItem(
          icon: Icons.star_rate,
          iconColor: Colors.orange,
          title: '给个好评',
          onTap: () => controller.rateApp(),
        ),

评分功能用橙色星星图标。
点击跳转到应用商店评分页。
颜色区分让菜单更有层次。

        Divider(height: 1, indent: 72.w),
        _buildMenuItem(
          icon: Icons.share,
          iconColor: AppTheme.wifiColor,
          title: '分享给朋友',
          onTap: () => controller.shareApp(),
        ),

分享功能用绿色分享图标。
点击调用系统分享功能。
分隔线保持视觉一致。

        Divider(height: 1, indent: 72.w),
        _buildMenuItem(
          icon: Icons.privacy_tip,
          iconColor: Colors.purple,
          title: '隐私政策',
          onTap: () => _showPrivacyPolicy(),
        ),

隐私政策用紫色图标。
点击显示隐私政策内容。
不同颜色增加视觉区分度。

        Divider(height: 1, indent: 72.w),
        _buildMenuItem(
          icon: Icons.description,
          iconColor: Colors.teal,
          title: '用户协议',
          onTap: () => _showUserAgreement(),
        ),

用户协议用青色图标。
点击显示用户协议内容。
颜色选择与功能语义相关。

        Divider(height: 1, indent: 72.w),
        _buildMenuItem(
          icon: Icons.code,
          iconColor: Colors.grey,
          title: '开源许可',
          onTap: () => _showOpenSourceLicenses(),
        ),
      ],
    ),
  );
}

开源许可用灰色代码图标。
点击显示开源许可信息。
闭合Column和Container完成菜单列表。

菜单项组件

通用的菜单项组件:

Widget _buildMenuItem({
  required IconData icon,
  required Color iconColor,
  required String title,
  Widget? trailing,
  required VoidCallback onTap,
}) {

接收图标、颜色、标题、尾部组件、点击回调。
required标记必需参数。
trailing可选,默认显示右箭头。

  return ListTile(
    contentPadding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 8.h),
    leading: Container(
      width: 44.w,
      height: 44.w,

ListTile是Flutter内置的列表项组件。
contentPadding设置内边距。
leading放置图标容器。

      decoration: BoxDecoration(
        color: iconColor.withOpacity(0.1),
        borderRadius: BorderRadius.circular(12.r),
      ),
      child: Icon(icon, color: iconColor, size: 24.sp),
    ),

图标背景用对应颜色的浅色版本。
12.r圆角让图标容器更圆润。
图标颜色与背景色系一致。

    title: Text(
      title,
      style: TextStyle(fontSize: 15.sp, fontWeight: FontWeight.w500),
    ),
    trailing: trailing ?? Icon(Icons.chevron_right, color: AppTheme.textSecondary),
    onTap: onTap,
  );
}

标题用15.sp字号,w500稍微加粗。
trailing默认显示右箭头。
onTap处理点击事件。

版权信息

页面底部的版权信息:

Widget _buildCopyright() {
  return Column(
    children: [
      Text(
        '© 2025 流量监控',
        style: TextStyle(fontSize: 13.sp, color: AppTheme.textSecondary),
      ),

Column垂直排列版权信息。
显示版权年份和App名称。
13.sp小字号作为辅助信息。

      SizedBox(height: 4.h),
      Text(
        'All Rights Reserved',
        style: TextStyle(fontSize: 12.sp, color: AppTheme.textSecondary),
      ),
      SizedBox(height: 16.h),

英文版权声明。
12.sp更小字号作为次要信息。
间距16.h后显示社交图标。

      Row(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          _buildSocialIcon(Icons.language, () {}),
          SizedBox(width: 24.w),
          _buildSocialIcon(Icons.email, () {}),

Row居中排列社交媒体图标。
官网、邮箱、代码仓库三个入口。
24.w间距让图标不会太挤。

          SizedBox(width: 24.w),
          _buildSocialIcon(Icons.code, () {}),
        ],
      ),
    ],
  );
}

代码图标链接到代码仓库。
闭合Row和Column完成版权区域。
整体设计简洁专业。

社交图标组件

圆形的社交媒体图标:

Widget _buildSocialIcon(IconData icon, VoidCallback onTap) {
  return GestureDetector(
    onTap: onTap,
    child: Container(
      width: 40.w,
      height: 40.w,

GestureDetector处理点击事件。
Container作为图标容器。
40.w的尺寸适合点击。

      decoration: BoxDecoration(
        color: Colors.grey.shade100,
        shape: BoxShape.circle,
      ),
      child: Icon(icon, color: AppTheme.textSecondary, size: 20.sp),
    ),
  );
}

浅灰色背景与页面协调。
BoxShape.circle创建圆形容器。
次要颜色的图标不会太突出。

Controller实现

控制器管理关于页面的状态和逻辑:

class AboutController extends GetxController {
  final appVersion = '1.0.0'.obs;
  final buildNumber = '100'.obs;
  final hasUpdate = false.obs;

  
  void onInit() {

appVersion存储App版本号。
buildNumber存储构建号。
hasUpdate标记是否有新版本。

    super.onInit();
    getAppInfo();
  }

  void getAppInfo() async {
    appVersion.value = '1.0.0';
    buildNumber.value = '100';
  }

onInit初始化时获取App信息。
实际项目中使用package_info_plus包。
模拟数据用于演示。

  void checkUpdate() async {
    Get.dialog(
      Center(child: CircularProgressIndicator()),
      barrierDismissible: false,
    );
    
    await Future.delayed(const Duration(seconds: 2));

显示加载对话框。
barrierDismissible禁止点击外部关闭。
模拟网络请求延迟。

    Get.back();
    
    if (hasUpdate.value) {
      _showUpdateDialog();
    } else {
      Get.snackbar('检查更新', '当前已是最新版本');
    }
  }

关闭加载对话框。
有更新时显示更新对话框。
无更新时显示snackbar提示。

  void _showUpdateDialog() {
    Get.dialog(
      AlertDialog(
        title: Row(
          children: [
            Icon(Icons.system_update, color: AppTheme.primaryColor),

AlertDialog显示更新信息。
标题包含图标和文字。
主色调图标与App风格一致。

            SizedBox(width: 8.w),
            Text('发现新版本'),
          ],
        ),
        content: Column(
          mainAxisSize: MainAxisSize.min,
          crossAxisAlignment: CrossAxisAlignment.start,

间距8.w让图标和文字不挤。
Column垂直排列更新内容。
mainAxisSize.min让对话框高度自适应。

          children: [
            Text('版本 1.1.0', style: TextStyle(fontWeight: FontWeight.bold)),
            SizedBox(height: 8.h),
            Text('更新内容:'),
            Text('• 新增流量预测功能'),

显示新版本号。
列出更新内容。
使用项目符号让内容清晰。

            Text('• 优化界面显示'),
            Text('• 修复已知问题'),
          ],
        ),
        actions: [
          TextButton(onPressed: () => Get.back(), child: Text('稍后更新')),

继续列出更新内容。
actions放置操作按钮。
稍后更新按钮关闭对话框。

          ElevatedButton(onPressed: () {}, child: Text('立即更新')),
        ],
      ),
    );
  }

立即更新按钮触发下载。
ElevatedButton更醒目。
闭合对话框完成更新提示。

  void rateApp() {
    Get.snackbar('感谢支持', '正在跳转到应用商店...');
  }

  void shareApp() {
    Get.snackbar('分享', '正在打开分享面板...');
  }
}

rateApp跳转到应用商店评分。
shareApp调用系统分享功能。
实际项目中使用对应的插件实现。

隐私政策页面

显示隐私政策内容:

void _showPrivacyPolicy() {
  Get.to(() => Scaffold(
    appBar: AppBar(title: Text('隐私政策')),
    body: SingleChildScrollView(
      padding: EdgeInsets.all(16.w),

Get.to跳转到新页面。
AppBar设置页面标题。
SingleChildScrollView让内容可滚动。

      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Text(
            '隐私政策',
            style: TextStyle(fontSize: 20.sp, fontWeight: FontWeight.bold),
          ),

Column垂直排列政策内容。
crossAxisAlignment让内容左对齐。
标题用20.sp大字号加粗。

          SizedBox(height: 8.h),
          Text(
            '更新日期:2025年1月1日',
            style: TextStyle(fontSize: 13.sp, color: AppTheme.textSecondary),
          ),
          SizedBox(height: 16.h),

显示政策更新日期。
次要颜色作为辅助信息。
间距16.h后显示正文内容。

          _buildPolicySection('信息收集', '我们收集的信息包括:设备信息、网络使用数据等,用于提供流量监控服务。'),
          _buildPolicySection('信息使用', '收集的信息仅用于提供和改进服务,不会出售给第三方。'),
          _buildPolicySection('信息保护', '我们采用行业标准的安全措施保护您的信息安全。'),

_buildPolicySection构建政策章节。
分别说明信息收集、使用、保护。
每个章节包含标题和内容。

          _buildPolicySection('用户权利', '您有权访问、更正或删除您的个人信息。'),
        ],
      ),
    ),
  ));
}

用户权利章节说明用户的权益。
闭合Column、ScrollView、Scaffold。
完整的隐私政策页面。

政策章节组件

通用的政策章节组件:

Widget _buildPolicySection(String title, String content) {
  return Padding(
    padding: EdgeInsets.only(bottom: 16.h),
    child: Column(
      crossAxisAlignment: CrossAxisAlignment.start,

Padding添加底部间距。
Column垂直排列标题和内容。
crossAxisAlignment让内容左对齐。

      children: [
        Text(
          title,
          style: TextStyle(fontSize: 16.sp, fontWeight: FontWeight.w600),
        ),
        SizedBox(height: 8.h),

标题用16.sp字号,w600加粗。
间距8.h后显示内容。
标题突出显示章节主题。

        Text(
          content,
          style: TextStyle(fontSize: 14.sp, color: AppTheme.textSecondary, height: 1.6),
        ),
      ],
    ),
  );
}

内容用14.sp字号,次要颜色。
height: 1.6增加行高提升可读性。
整体设计清晰易读。

写在最后

关于页面虽然功能简单,但是App的重要组成部分。通过精心设计的布局、完善的功能入口、专业的版权信息,可以提升App的整体品质感。

可以继续优化的方向:

  • 添加更新日志展示
  • 支持在线客服入口
  • 添加常见问题FAQ
  • 支持意见反馈功能

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐