Flutter for OpenHarmony 看书管理记录App实战:个人中心实现

个人中心是用户的主页,展示用户信息和各种功能入口。这个页面是"我的"Tab 的主要内容,用户可以从这里进入各种管理页面。

做这个页面的时候,我把功能入口按类别分组,用户可以快速找到想要的功能。顶部是用户信息和阅读统计,下面是功能菜单。

依赖引入

dart 复制代码
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import '../../app/routes/app_routes.dart';

导入必要的依赖包,app_routes 用于页面跳转。

页面主体结构

dart 复制代码
class ProfilePage extends StatelessWidget {
  const ProfilePage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: const Color(0xFFFDF8F3),
      body: SingleChildScrollView(
        child: Column(
          children: [
            _buildHeader(),
            _buildStatsRow(),
            SizedBox(height: 16.h),
            _buildMenuSection('阅读管理', [
              _buildMenuItem(Icons.menu_book, '我的书籍', () => Get.toNamed(AppRoutes.bookList)),
              _buildMenuItem(Icons.collections_bookmark, '我的书架', () => Get.toNamed(AppRoutes.bookshelf)),
              _buildMenuItem(Icons.edit_note, '读书笔记', () => Get.toNamed(AppRoutes.noteList)),
              _buildMenuItem(Icons.bookmark_add, '想读清单', () => Get.toNamed(AppRoutes.wishlist)),
            ]),

页面没有 AppBar,因为它是 Tab 页面的一部分。内容从头部开始,包括用户信息、统计数据、功能菜单。

更多菜单分组

dart 复制代码
            SizedBox(height: 12.h),
            _buildMenuSection('数据统计', [
              _buildMenuItem(Icons.bar_chart, '阅读统计', () => Get.toNamed(AppRoutes.statistics)),
              _buildMenuItem(Icons.flag, '阅读目标', () => Get.toNamed(AppRoutes.readingGoal)),
              _buildMenuItem(Icons.history, '阅读记录', () => Get.toNamed(AppRoutes.readingRecord)),
            ]),
            SizedBox(height: 12.h),
            _buildMenuSection('分类管理', [
              _buildMenuItem(Icons.label, '标签管理', () => Get.toNamed(AppRoutes.tagManage)),
              _buildMenuItem(Icons.person, '作者管理', () => Get.toNamed(AppRoutes.authorManage)),
              _buildMenuItem(Icons.business, '出版社管理', () => Get.toNamed(AppRoutes.publisherManage)),
            ]),
            SizedBox(height: 12.h),
            _buildMenuSection('其他', [
              _buildMenuItem(Icons.cloud_upload, '数据备份', () => Get.toNamed(AppRoutes.dataBackup)),
              _buildMenuItem(Icons.settings, '设置', () => Get.toNamed(AppRoutes.settings)),
              _buildMenuItem(Icons.info_outline, '关于我们', () => Get.toNamed(AppRoutes.about)),
            ]),
            SizedBox(height: 30.h),
          ],
        ),
      ),
    );
  }

功能菜单分四组:阅读管理、数据统计、分类管理、其他。

头部用户信息

dart 复制代码
  Widget _buildHeader() {
    return Container(
      padding: EdgeInsets.only(top: 60.h, bottom: 24.h),
      decoration: const BoxDecoration(
        gradient: LinearGradient(
          colors: [Color(0xFF5B4636), Color(0xFF8B7355)],
        ),
      ),
      child: Column(
        children: [
          CircleAvatar(
            radius: 40.r,
            backgroundColor: Colors.white,
            child: Icon(Icons.person, size: 40.sp, color: const Color(0xFF5B4636)),
          ),
          SizedBox(height: 12.h),
          Text('阅读达人', style: TextStyle(
            color: Colors.white,
            fontSize: 20.sp,
            fontWeight: FontWeight.bold,
          )),
          SizedBox(height: 4.h),
          Text('书中自有黄金屋', style: TextStyle(
            color: Colors.white70,
            fontSize: 13.sp,
          )),
        ],
      ),
    );
  }

头部用渐变背景,显示用户头像、昵称、签名。头像用圆形,里面是人物图标。

阅读统计行

dart 复制代码
  Widget _buildStatsRow() {
    return Container(
      margin: EdgeInsets.all(16.w),
      padding: EdgeInsets.all(16.w),
      decoration: BoxDecoration(
        color: Colors.white,
        borderRadius: BorderRadius.circular(16.r),
      ),
      child: Row(
        mainAxisAlignment: MainAxisAlignment.spaceAround,
        children: [
          _buildStatItem('86', '已读'),
          Container(width: 1, height: 40.h, color: Colors.grey[200]),
          _buildStatItem('12', '在读'),
          Container(width: 1, height: 40.h, color: Colors.grey[200]),
          _buildStatItem('156', '笔记'),
        ],
      ),
    );
  }

统计行显示三个数据:已读书籍数、在读书籍数、笔记数。用竖线分隔。

统计项组件

dart 复制代码
  Widget _buildStatItem(String value, String label) {
    return Column(
      children: [
        Text(value, style: TextStyle(
          fontSize: 20.sp,
          fontWeight: FontWeight.bold,
          color: const Color(0xFF5B4636),
        )),
        SizedBox(height: 4.h),
        Text(label, style: TextStyle(
          color: Colors.grey[600],
          fontSize: 12.sp,
        )),
      ],
    );
  }

每个统计项是数值在上、标签在下的布局。数值用主题色加粗。

菜单分组组件

dart 复制代码
  Widget _buildMenuSection(String title, List<Widget> items) {
    return Container(
      margin: EdgeInsets.symmetric(horizontal: 16.w),
      decoration: BoxDecoration(
        color: Colors.white,
        borderRadius: BorderRadius.circular(16.r),
      ),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Padding(
            padding: EdgeInsets.all(16.w),
            child: Text(title, style: TextStyle(
              fontSize: 14.sp,
              fontWeight: FontWeight.bold,
              color: const Color(0xFF3D2914),
            )),
          ),
          ...items,
        ],
      ),
    );
  }

每个菜单分组是一个白色卡片,有标题和菜单项列表。

菜单项组件

dart 复制代码
  Widget _buildMenuItem(IconData icon, String title, VoidCallback onTap) {
    return InkWell(
      onTap: onTap,
      child: Padding(
        padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 14.h),
        child: Row(
          children: [
            Icon(icon, color: const Color(0xFF5B4636), size: 22.sp),
            SizedBox(width: 14.w),
            Expanded(child: Text(title, style: TextStyle(fontSize: 14.sp))),
            Icon(Icons.chevron_right, color: Colors.grey[400], size: 20.sp),
          ],
        ),
      ),
    );
  }
}

每个菜单项有图标、标题、箭头。点击跳转到对应的页面。

功能入口设计

个人中心作为功能入口,需要考虑:

分类清晰:相关功能放在一起,方便用户查找。

图标直观:每个功能有对应的图标,一眼就能认出。

层级合理:常用功能放在前面,不常用的放后面。

用户信息展示

用户信息区域可以扩展:

显示真实头像(需要用户上传)。

显示阅读等级或成就。

显示加入天数。

小结

个人中心页面作为用户的主页,展示用户信息和各种功能入口。头部用渐变背景突出用户信息,统计行展示阅读数据。

功能菜单按类别分组,用户可以快速找到想要的功能。每个菜单项有图标和箭头,点击跳转到对应页面。

下一篇会讲关于我们页面的实现,展示App的信息和相关链接。


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

相关推荐
To_OC7 小时前
LC 131 分割回文串:刚学回溯时,我连怎么切字符串都想不明白
javascript·算法·leetcode
爱写代码的森8 小时前
鸿蒙三方库 | harmony-utils之ImageUtil图片保存到本地详解
服务器·华为·harmonyos·鸿蒙·huawei
灯澜忆梦8 小时前
GO_并发编程---定时器
开发语言·后端·golang
-银雾鸢尾-9 小时前
C#中的StringBuilder相关方法
开发语言·c#
To_OC9 小时前
LC 42 接雨水:暴力超时卡半天?前后缀数组一用就通了
javascript·算法·leetcode
GitLqr9 小时前
玩转 WebSocket:从原理到 Flutter 实战
websocket·网络协议·flutter
小林ixn9 小时前
从 ??= 到 onKeyDown:一个 React 组件的“自我修养”
前端·javascript·react.js
-银雾鸢尾-9 小时前
C#中结构体与类的区别;抽象类与接口的区别
开发语言·c#
世人万千丶9 小时前
参数管理_Flutter在鸿蒙平台路由参数最佳实践
学习·flutter·华为·harmonyos·鸿蒙
এ慕ོ冬℘゜10 小时前
前端实战:jQuery 多条件联合搜索(标题模糊查询 + 日历时间段筛选)
前端·javascript·jquery