Skip to content

页面状态与交互规范

本页记录当前 App 中真实存在的页面状态和交互规则,重点说明页面在正常、异常与过渡状态下如何表现。状态样本可以包含代码保留但当前入口隐藏的页面;这类页面只能用于理解实现形态,不能被理解为当前主链可达入口。

通用状态矩阵

状态当前实现形态真实示例文档说明
loading全屏 CircularProgressIndicator、Skeleton、局部 loading 按钮SplashScreenChatHistoryScreenExerciseScreenHealthOverviewScreen不同页面实现方式不统一;HealthOverviewScreen 当前入口隐藏,仅作状态实现样本
empty空图标 + 文案 + CTA 或说明ChatHistoryScreenExerciseHistoryScreen有些空态带 CTA,有些只有说明
errorSnackBar、错误页、对话框内提示PhoneInputScreenPasswordLoginScreenHealthOverviewScreenExerciseHistoryScreen当前不少错误通过 SnackBar 暴露;隐藏入口页不计入当前主链覆盖
success跳转、Banner、SnackBar、状态回写VerificationCodeScreenProfilePageExerciseExecutionScreen成功态多为短暂反馈,不一定有常驻成功页面
auth gated未登录态分流或游客态SplashScreenProfilePage一部分页面在启动时分流,一部分页面在当前页内降级
editing编辑模式复用已有流程OnboardingFlowScreen(isEditMode: true)编辑与首次建档共用同一套流程

关键页面状态说明

1. 启动与鉴权

页面主要状态说明
SplashScreeninitial / checking / resolved通过 SplashBloc 只做分流,不承载业务错误页
PhoneInputScreen表单校验失败、验证码发送中、发送成功、发送失败失败通过 AuthError SnackBar 提示
VerificationCodeScreen倒计时中、可重发、验证中、注册成功、验证失败验证成功后直接跳成功页
PasswordLoginScreen表单校验失败、登录中、登录失败、登录成功成功后依据 healthInfoCompleted 分流

2. Onboarding

维度当前实现
步骤状态当前共 7 步,currentStep 驱动
提交状态saving / submitting / completed / error
校验方式isCurrentStepValid + currentStepErrors
特点默认只在切步时重建主体内容,尽量减少输入时整页重绘

3. 首页 Dashboard

区域当前状态说明
问候语动态文案根据时间段生成“早上好/下午好/晚上好”等
今日状态卡评估摘要 / 更新入口AssessmentOverviewBloc 驱动
处方卡loading / loaded / generated / errorPrescriptionBloc 驱动
今日运动卡静态展示当前不是实时后端统计
康复知识卡静态知识池承接 rehab_knowledge_items.dart

4. Chat

区域当前状态说明
消息主列表ChatLoading / ChatMessagesLoaded / ChatErrorChatBloc 驱动
AI 正在回复isAiTyping=true仍处于同一 loaded state 中
会话抽屉loading / empty / list抽屉内通过 AnimatedSwitcher 切换
处方生成PrescriptionGenerating顶部显示生成提示条

5. Exercise

区域当前状态说明
运动中心首次加载 / 已有处方 / 无处方 / 错误 SnackBarExerciseLoaded 为主渲染态
动作执行页未开始 / 进行中 / 暂停 / 结束保存中页面内部 state + ExerciseBloc 联动
运动历史loading / loaded / empty / error / has cached result一部分中间状态会保留上次已加载结果

6. Profile / 健康总览 / 设置

页面当前状态说明
ProfilePageinitial / loading / guest / loaded / error游客态会显示登录按钮
HealthOverviewScreenskeleton / loaded / error / refresh错误态有完整页,不只是 SnackBar
SettingsScreen本地 UI state 为主多数功能有结构,但持久化仍待完善

HealthOverviewScreen 的状态实现仍有参考价值,但当前入口已隐藏。这里记录它,只说明代码中已有 skeleton / loaded / error / refresh 形态,不代表它已回到当前可达页面范围。

关键交互规则

表单类

交互当前规则真实落点
手机号输入前端先校验格式,再发请求PhoneInputScreen
密码输入密码至少 6 位PasswordLoginScreen
Onboarding 下一步当前步骤合法才允许继续OnboardingFlowScreen
Onboarding 编辑完成编辑模式下保存后 pop 返回上页并带结果ProfilePage -> OnboardingFlowScreen(isEditMode: true)

导航类

交互当前规则真实落点
返回登录退出登录后 pushAndRemoveUntil 清空栈ProfilePage
主页跨 tab 跳转通过 navigateToTab(index) 切底部栏HomeScreen / DashboardPage
详情页转场优先使用 AppTransitions.*登录、设置、运动执行、运动历史等

反馈类

交互当前规则真实落点
错误反馈轻量错误多用 SnackBarAuth、Exercise、Prescription
成功反馈成功页、SnackBar、Inline Banner 混合使用注册成功、档案保存、今日状态更新
删除确认使用 AlertDialogChat 会话删除

交接检查点

检查点应看位置判断方式
页面是否当前可达页面索引、路由文档、入口按钮不能只看 route 是否存在;隐藏入口页需要单独标注
状态是否由 BLoC 驱动lib/bloc/<feature>/ 与页面 BlocBuilder / BlocListener识别 loading / loaded / error 是否来自统一状态流
错误是否可恢复页面错误态、SnackBar、重试按钮只弹 SnackBar 的页面,通常恢复路径依赖用户再次操作
空态是否有下一步历史、会话、运动记录等列表页有 CTA 的空态可引导动作,纯说明空态只承担告知
成功后是否清栈主流程跳转表登录、建档、退出等关键动作必须确认返回栈行为
静态数据是否误写成动态Dashboard、Exercise、Settings首页统计、运动动作库、设置持久化需要按真实接入状态描述

来源锚点

  • apps/flutter_app/lib/bloc/auth/auth_state.dart
  • apps/flutter_app/lib/bloc/onboarding/onboarding_state.dart
  • apps/flutter_app/lib/bloc/chat/chat_state.dart
  • apps/flutter_app/lib/bloc/exercise/exercise_state.dart
  • apps/flutter_app/lib/bloc/profile_overview/profile_overview_state.dart
  • apps/flutter_app/lib/bloc/health_overview/health_overview_state.dart