Skip to content

核心页面详解

本页聚焦真正参与当前交付闭环的页面。每个页面至少说明:

  • 页面入口
  • 用户动作
  • 数据来源 / 状态源
  • 关键跳转
  • 当前状态边界

截图用于识别页面布局与状态,表格用于定位代码入口、状态源和跳转结果。

1. 启动与鉴权

启动页 SplashScreen

启动页负责登录态检查和启动分流,是所有用户进入 App 后首先看到的界面。

启动页
启动页
项目内容
入口MaterialApp.home
作用App 启动时检查登录态,决定进入主页或登录页
状态源SplashBloc,状态为 initial / checking / resolved
关键跳转homelogin 两个目标,通过 Navigator.pushReplacement 分流
当前状态边界只承担启动分流,不承载业务错误页

启动页不会让用户手动选择路径。它只读取登录态并替换当前路由:已登录进入主容器,未登录进入手机号输入页。

手机号输入页 PhoneInputScreen

手机号输入页是未登录用户的默认入口,验证码登录与密码登录分支都从这里开始。

手机号输入页
手机号输入页
项目内容
入口启动页未登录分支
主要功能输入手机号、发送验证码、切换到密码登录
状态源AuthBloc
关键动作发送验证码成功后跳转 VerificationCodeScreen;可转到 PasswordLoginScreen
页面状态表单校验失败、发送中、发送成功、AuthError SnackBar

手机号页承担鉴权分支选择。验证码发送成功后保留返回上一页的能力;密码登录作为并行分支进入独立页面,不改变手机号页自身状态。

验证码页 VerificationCodeScreen

验证码页承接短信分支,完成 6 位验证码校验、本地倒计时和注册完成跳转。

验证码页
验证码页
项目内容
入口手机号输入页发送验证码成功后
主要功能输入 6 位验证码、倒计时、重新发送、完成注册
状态源AuthBloc + 本地 5 分钟倒计时
关键动作注册成功后进入 RegistrationSuccessScreen
页面状态倒计时中 / 可重发 / 验证中 / 注册成功 / AuthError

验证码页有两个容易误读的点:倒计时是页面本地状态;注册成功后的成功页点击“开始使用”会进入建档流程。

密码登录页 PasswordLoginScreen

密码登录页是短信登录之外的并行入口,登录成功后会根据建档状态决定进入主页还是建档流程。

密码登录页
密码登录页
项目内容
入口手机号输入页“使用密码登录”
主要功能手机号 + 密码登录
状态源AuthBloc
关键动作登录成功后根据 healthInfoCompleted 决定去 HomeScreen 还是 OnboardingFlowScreen
页面状态表单校验失败、登录中、登录失败、登录成功后清空栈跳转

密码登录是当前最明确的建档分流入口。登录成功后使用 pushAndRemoveUntil 清空鉴权页面栈,避免用户从主页返回到登录页。

密码注册页 PasswordRegisterScreen

密码注册页用于创建新账户,承载手机号密码注册和密码强度提示,是密码登录分支的补充页。

密码注册页
密码注册页
项目内容
入口密码登录页“创建新账户”
主要功能手机号密码注册、密码强度提示、创建账户
状态源AuthBloc
关键动作注册成功后清空栈进入 OnboardingFlowScreen
页面状态表单校验、密码强度反馈、提交中、错误提示

密码注册与短信验证码注册都会在注册完成后进入建档链路,但承接页面不同:密码注册直接进入 OnboardingFlowScreen,短信验证码注册先进入 RegistrationSuccessScreen,再由成功页进入 OnboardingFlowScreen

2. 健康档案与资料

建档流程入口 OnboardingFlowScreen

建档流程入口是首次登录与后续档案编辑共用的页面容器,7 步流程都从这里展开。

健康档案入口页
建档流程入口
项目内容
入口首次登录未完成健康信息;我的页编辑健康档案
主要功能7 步完成或编辑健康档案
状态源OnboardingBloc,状态包括 initial / inProgress / saving / submitting / completed / error
步骤结构欢迎、基本信息、癌症档案、健康指标、疾病史、手术史、头像上传
页面状态步骤切换、校验失败、保存中、提交中、错误提示

建档流程同时服务首次建档和个人中心编辑。首次建档完成后进入完成页;编辑模式保存成功后返回个人中心,并带回 saved / warning 结果供资料页刷新或提示。

首次建档页 OnboardingFlowScreen(基本信息步骤)

首次建档页展示了基本信息步骤的真实表单形态,是读者理解分步建档体验的关键页面。

首次建档页
首次建档页
项目内容
入口建档流程第 2 步
主要功能填写昵称、姓名、性别、生日、身份证等基本信息
状态源OnboardingBloc
页面状态分步校验、上一步 / 下一步切换

该步骤代表建档流程的真实表单密度:身份证、生日、性别等字段会参与分步校验,不能把建档理解成单页资料补充。

建档完成页 OnboardingCompleteScreen

建档完成页用于收口首次建档流程,提示用户接下来可以开始使用 AI 和运动康复能力。

建档完成页
建档完成页
项目内容
入口首次建档提交成功后
主要功能展示建档完成结果、提示可用能力、进入主页
状态源页面本地状态 + AuthApiClient.completeHealthInfo()
关键动作标记健康信息完成后清栈进入 HomeScreen

完成页会尝试调用后端标记健康信息完成。当前实现即使标记调用失败,也会进入主页;这属于交接时需要关注的产品与数据一致性边界。

个人信息页 PersonalInfoScreen

个人信息页承接从我的页进入的资料查看与编辑需求,当前以详情视图和局部编辑能力为主。

个人信息页
个人信息页
项目内容
入口我的页 -> 个人信息
主要功能查看和修改个人资料,返回后刷新 ProfileOverviewBloc
数据来源ProfileOverviewBloc 相关资料与表单
关键动作保存返回后刷新 profile overview

个人信息页不是首次建档流程的一部分。它承接已登录用户的资料查看与局部编辑,返回后由上层个人中心触发 profile overview 刷新。

3. 主页与首页

主页框架 HomeScreen

主页框架同时承载底部四栏和顶部首页/日历双层结构,是当前产品的主业务容器。

主页框架
主页框架
项目内容
入口登录完成后的默认主容器
主要功能承载底部 4 栏:首页 / AI助手 / 健身 / 我的
数据来源 / 状态源ProfileOverviewBlocAssessmentOverviewBlocPrescriptionBlocExerciseBloc
关键动作切回首页时触发 profile、assessment、prescription 刷新;切到健身时加载当前处方
页面特点首页 tab 内部还有 首页 / 日历 顶层 tab

主页框架有两层切换:底部四栏切主业务,首页内部 tab 切 Dashboard 与 Calendar。底部切换不压入新路由栈,因此用户在四个主业务页之间切换时不会形成详情页式返回链。

日历页 CalendarScreen

日历页是首页内部的第二个顶层 tab,负责按月展示运动记录并支持按日查看详情。

日历页
日历页
项目内容
入口HomeScreen 顶层 tab 第二个
主要功能按月查看运动记录,按日查看详情
状态源CalendarBloc
关键动作翻月加载月数据,选日期更新当天明细,下拉刷新
页面状态CalendarLoading / CalendarLoaded / CalendarError

日历页属于首页栏内部页面。翻月和选日期会改变日历状态,但不会离开 HomeScreen 主容器。

4. AI 咨询

Chat 主界面 ChatScreen

Chat 主界面承担 AI 咨询、消息输入、历史会话抽屉和处方生成入口,是当前 AI 能力最直接的使用界面。

对话页
Chat 主界面
项目内容
入口底部 AI助手 tab
主要功能消息列表、消息输入、生成运动康复方案、历史会话抽屉
状态源ChatBlocPrescriptionBloc
关键动作处方生成后把处方卡以消息形式插入对话流
页面状态ChatLoadingChatMessagesLoadedChatError、AI typing、处方生成中

Chat 页面同时承担问答和处方生成入口。生成处方不是简单跳转动作,而是通过 PrescriptionBloc 与对话流联动,结果以处方卡形式进入当前会话。

聊天历史页 ChatHistoryScreen

聊天历史页用于查看消息历史、空态和错误重试,是 Chat 主界面的历史补充页。

对话历史页
聊天历史页
项目内容
入口命名路由 /chat/history
主要功能历史消息列表、空态、错误重试
状态源ChatBloc
页面状态加载中、空数据、错误、已加载

聊天历史有两种阅读入口:Chat 主界面内的历史会话抽屉,以及 /chat/history 命名路由。前者服务会话切换,后者服务独立历史页展示。

5. 运动中心

运动中心 ExerciseScreen

运动中心聚合了当前处方、静态动作库、开始执行和历史入口,是运动康复闭环的总入口。

运动中心页
运动中心
项目内容
入口底部 健身 tab
主要功能4 个 tab:我的计划 / 有氧运动 / 抗阻训练 / 柔韧训练
状态源ExerciseBloc
数据来源当前处方 + 静态动作库
关键动作开始运动、恢复未完成运动、查看运动历史、无处方时跳到 AI 助手生成方案
页面状态ExerciseLoaded 为主,错误通过 SnackBar 提示

运动中心既展示当前处方,也包含静态动作库。点击动作前会检查是否存在未完成运动记录;存在时恢复上次执行,不存在时创建新的执行流程。

运动执行页 ExerciseExecutionScreen

运动执行页承接具体动作的进行中状态,负责视频、计时、卡路里和结束动作的控制。

运动执行页
运动执行页
项目内容
入口运动中心选择动作后进入
主要功能视频或占位、计时、卡路里、暂停/继续、完成、退出确认
状态源ExerciseBloc
关键动作创建 active sport log、实时更新卡路里、保存运动日志、跳转反馈页
页面状态未开始 / 进行中 / 暂停 / 保存完成 / 出错

执行页是运动闭环里最强状态页面。完成后会用 pushReplacement 进入反馈页,避免用户通过返回键回到已经结束的执行态。

运动反馈页 ExerciseFeedbackScreen

运动反馈页用于收集本次执行的完成情况和感受,是执行完成后的收口页。

运动反馈页
运动反馈页
项目内容
入口运动执行完成后
主要功能填写完成情况、感受反馈和备注
状态源ExerciseBloc 反馈提交流程
关键动作提交反馈并完成本次运动闭环

反馈页提交成功后会展示已记录状态,并在短暂延迟后自动返回运动中心所在的主容器。提交失败时保留在当前页,便于用户重试或修改备注。

运动历史页 ExerciseHistoryScreen

运动历史页承接结果回看和记录检索,帮助用户按时间回顾过往执行情况。

运动历史页
运动历史页
项目内容
入口运动中心右上角历史按钮
主要功能历史列表、下拉刷新、无限滚动、详情弹窗
状态源ExerciseHistoryBloc
页面状态加载中、空态、错误、有缓存结果的过渡态

运动历史页支持列表滚动、下拉刷新和详情弹窗。详情弹窗关闭只退出弹窗,不离开历史页。

6. 我的与设置

我的页 ProfilePage

我的页集中提供个人资料、健康档案、今日状态、设置和退出登录等入口,是用户资料与配置的聚合页。

我的页
我的页
项目内容
入口底部 我的 tab
主要功能资料概览、个人信息、健康档案、今日状态、设置、帮助、关于、退出登录
状态源ProfileOverviewBloc
页面状态initial / loading / guest / loaded / error

我的页是资料与配置入口,不是主业务执行页。个人信息、健康档案编辑和设置都会从这里进入;帮助、关于使用弹窗;退出登录会清 token 并清空栈回到手机号输入页。

设置页 SettingsScreen

设置页负责通知、显示、隐私与帮助相关选项,使用本地设置模型保存用户偏好。

设置页
设置页
项目内容
入口我的页 -> 设置
主要功能通知、声音、振动、语言、字体大小、隐私、版本、帮助、反馈、用户协议
数据来源本地 UserSettings state + SharedPreferences + PackageInfo
当前状态边界设置偏好保存到本地 fitdoc_user_settings;通知权限、账号安全等系统级能力仍需按具体平台能力接入

设置页当前以本地偏好为主,通知、声音、振动、语言和字体等设置会随页面操作写入本地存储。涉及系统权限、远端账号策略或隐私合规的能力,需要结合平台权限与后端策略继续接入。

7. 代码保留但入口隐藏的页面

健康总览 HealthOverviewScreen

项目内容
当前状态页面与路由仍存在,但当前入口已隐藏
主要功能健康分数、陪伴状态、资料摘要、趋势图、推荐
状态源HealthOverviewBloc

周报页 WeeklyReportScreen

项目内容
当前状态页面与路由仍存在,但当前入口已隐藏
主要功能选择时间范围、生成周报、图表预览、导出与分享
状态源WeeklyReportBloc

来源锚点

  • apps/flutter_app/lib/screens/splash/splash_screen.dart
  • apps/flutter_app/lib/screens/registration/
  • apps/flutter_app/lib/screens/onboarding/
  • apps/flutter_app/lib/screens/home/
  • apps/flutter_app/lib/screens/chat/
  • apps/flutter_app/lib/screens/exercise/
  • apps/flutter_app/lib/screens/profile/
  • apps/flutter_app/lib/screens/settings/