feat: 健康仪表盘配色调整 + 登录页品牌升级 + iOS 配置 + 隐私文案修订 + 文档清理

## UI 配色
- 健康仪表盘: 背景从蓝紫粉三色渐变改为 #4FACFE 纯色蓝, 白字清晰不抢眼
- app_colors / app_design_tokens / app_theme: 配色体系微调
- 多个 widget 和页面跟随配色更新(health_drawer/admin_drawer/doctor_drawer/enterprise_widgets 等)

## 登录页品牌升级
- 新增品牌素材: drawer_background_v2 / login_background_v2 / health_login_character_transparent
- login_page 重构, 接入新品牌视觉
- app.dart 启动流程调整

## iOS / Android 配置
- Info.plist: 权限描述调整
- AppIcon / LaunchImage: 资源更新
- AndroidManifest: 权限微调

## 隐私文案修订
- privacy.html: 蓝牙设备描述调整为"标准蓝牙血压服务", 移除未上线设备类型表述
- terms.html: 移除"在线医生咨询"相关条款, 服务范围收窄

## 通知中心
- notification_center_page: 重构通知项布局

## 其他
- 删除已完成的计划/spec 文档(ui-system-first-pass / apple-sign-in / secondary-page-color-refresh / notification-preferences-design / ui-design-system)
- 新增 native_navigation_test
- 新增 HANDOFF 交接文档
- home_message_order_test 更新
- .gitignore 调整
This commit is contained in:
MingNian
2026-07-16 22:30:23 +08:00
parent 528859686f
commit 6e5d3e64cd
44 changed files with 624 additions and 1234 deletions

View File

@@ -54,7 +54,7 @@ class AdminDrawer extends ConsumerWidget {
'系统管理员',
style: TextStyle(
fontSize: 17,
fontWeight: FontWeight.w800,
fontWeight: FontWeight.w600,
color: AppColors.textPrimary,
),
),

View File

@@ -49,17 +49,17 @@ class AiMarkdownView extends StatelessWidget {
p: AppTextStyles.chatBody,
a: AppTextStyles.chatBody.copyWith(
color: AppColors.primary,
fontWeight: FontWeight.w800,
fontWeight: FontWeight.w600,
decoration: TextDecoration.underline,
decorationColor: AppColors.primary,
),
strong: AppTextStyles.chatBody.copyWith(fontWeight: FontWeight.w800),
strong: AppTextStyles.chatBody.copyWith(fontWeight: FontWeight.w600),
h1: AppTextStyles.chatTitle.copyWith(fontSize: 20),
h2: AppTextStyles.chatTitle.copyWith(fontSize: 20),
h3: AppTextStyles.chatTitle.copyWith(fontSize: 19),
listBullet: AppTextStyles.chatBody.copyWith(
fontSize: 21,
fontWeight: FontWeight.w900,
fontWeight: FontWeight.w700,
),
listBulletPadding: const EdgeInsets.only(right: 8),
blockquote: AppTextStyles.chatBody.copyWith(

View File

@@ -84,7 +84,7 @@ class AppGradientOutlineButton extends StatelessWidget {
child: AppGradientText(
label,
gradient: gradient,
style: const TextStyle(fontSize: 16, fontWeight: FontWeight.w800),
style: const TextStyle(fontSize: 16, fontWeight: FontWeight.w600),
),
),
),

View File

@@ -133,7 +133,7 @@ class _MetricCard extends StatelessWidget {
value,
style: const TextStyle(
fontSize: 36,
fontWeight: FontWeight.w900,
fontWeight: FontWeight.w700,
color: AppColors.textPrimary,
height: 1,
),

View File

@@ -155,7 +155,7 @@ class _DrawerHeader extends StatelessWidget {
name,
style: const TextStyle(
fontSize: 17,
fontWeight: FontWeight.w800,
fontWeight: FontWeight.w600,
color: AppColors.textPrimary,
),
overflow: TextOverflow.ellipsis,

View File

@@ -135,7 +135,7 @@ class _HeaderStat extends StatelessWidget {
style: const TextStyle(
color: AppColors.textPrimary,
fontSize: 17,
fontWeight: FontWeight.w900,
fontWeight: FontWeight.w700,
),
),
const SizedBox(height: 2),
@@ -146,7 +146,7 @@ class _HeaderStat extends StatelessWidget {
style: const TextStyle(
color: AppColors.textSecondary,
fontSize: 12,
fontWeight: FontWeight.w800,
fontWeight: FontWeight.w600,
),
),
],

View File

@@ -76,7 +76,7 @@ class _DrawerHero extends StatelessWidget {
children: [
Positioned.fill(
child: Image.asset(
'assets/branding/drawer_background_v1.png',
'assets/branding/drawer_background_v2.png',
fit: BoxFit.cover,
alignment: Alignment.topLeft,
),
@@ -88,9 +88,9 @@ class _DrawerHero extends StatelessWidget {
begin: Alignment.topCenter,
end: Alignment.bottomCenter,
colors: [
Colors.white.withValues(alpha: 0.12),
Colors.white.withValues(alpha: 0.35),
Colors.white.withValues(alpha: 0.82),
Colors.white.withValues(alpha: 0.06),
Colors.white.withValues(alpha: 0.18),
Colors.white.withValues(alpha: 0.78),
],
stops: const [0.0, 0.58, 1.0],
),
@@ -169,7 +169,7 @@ class _AccountHeader extends StatelessWidget {
overflow: TextOverflow.ellipsis,
style: const TextStyle(
fontSize: 22,
fontWeight: FontWeight.w900,
fontWeight: FontWeight.w700,
color: AppColors.textPrimary,
),
),
@@ -214,9 +214,9 @@ class _HealthDashboard extends StatelessWidget {
),
titleColor: Colors.white,
backgroundGradient: const LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [Color(0xFF60A5FA), Color(0xFF8B5CF6), Color(0xFFF472B6)],
begin: Alignment.centerLeft,
end: Alignment.centerRight,
colors: [Color(0xFF4FACFE), Color(0xFF00F2FE)],
),
child: latestHealth.when(
data: (data) => _DashboardMetrics(data: data, ref: ref),
@@ -335,7 +335,7 @@ class _MetricTile extends StatelessWidget {
textAlign: TextAlign.center,
style: const TextStyle(
fontSize: 26,
fontWeight: FontWeight.w900,
fontWeight: FontWeight.w700,
color: Colors.white,
),
),
@@ -355,7 +355,7 @@ class _MetricTile extends StatelessWidget {
info.label,
style: const TextStyle(
fontSize: 14,
fontWeight: FontWeight.w800,
fontWeight: FontWeight.w600,
color: Colors.white,
),
),
@@ -485,8 +485,8 @@ class _NavTile extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.start,
children: [
Container(
width: 52,
height: 52,
width: 48,
height: 48,
decoration: BoxDecoration(
gradient: LinearGradient(
begin: Alignment.topLeft,
@@ -496,13 +496,13 @@ class _NavTile extends StatelessWidget {
borderRadius: AppRadius.mdBorder,
boxShadow: [
BoxShadow(
color: _colors.last.withValues(alpha: 0.18),
blurRadius: 10,
offset: const Offset(0, 5),
color: _colors.last.withValues(alpha: 0.10),
blurRadius: 6,
offset: const Offset(0, 3),
),
],
),
child: Icon(item.icon, color: Colors.white, size: 26),
child: Icon(item.icon, color: Colors.white, size: 24),
),
const SizedBox(height: 6),
Text(
@@ -512,7 +512,7 @@ class _NavTile extends StatelessWidget {
textAlign: TextAlign.center,
style: const TextStyle(
fontSize: 14,
fontWeight: FontWeight.w800,
fontWeight: FontWeight.w600,
color: AppColors.textPrimary,
height: 1.1,
),
@@ -548,7 +548,7 @@ class _LightSection extends StatelessWidget {
title,
style: const TextStyle(
fontSize: 18,
fontWeight: FontWeight.w800,
fontWeight: FontWeight.w600,
color: AppColors.textPrimary,
),
),
@@ -605,7 +605,7 @@ class _Panel extends StatelessWidget {
title,
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.w800,
fontWeight: FontWeight.w600,
color: titleColor,
),
),
@@ -651,7 +651,7 @@ class _TextAction extends StatelessWidget {
label,
style: TextStyle(
fontSize: 12,
fontWeight: FontWeight.w900,
fontWeight: FontWeight.w700,
color: light ? Colors.white : Color(0xFF6D28D9),
),
),
@@ -829,7 +829,7 @@ class _HistorySectionState extends ConsumerState<_HistorySection> {
_expanded ? '收起' : '显示全部',
style: const TextStyle(
fontSize: 12,
fontWeight: FontWeight.w800,
fontWeight: FontWeight.w600,
color: AppColors.textSecondary,
),
),
@@ -867,7 +867,7 @@ class _HistorySectionState extends ConsumerState<_HistorySection> {
),
child: Text(
_clearing ? '清空中' : '清空全部',
style: const TextStyle(fontSize: 13, fontWeight: FontWeight.w800),
style: const TextStyle(fontSize: 13, fontWeight: FontWeight.w600),
),
);
}
@@ -1026,7 +1026,7 @@ class _HistoryActionButton extends StatelessWidget {
label,
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w800,
fontWeight: FontWeight.w600,
color: onTap == null ? AppColors.textHint : color,
),
),
@@ -1080,7 +1080,7 @@ class _DrawerHistoryTile extends StatelessWidget {
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontSize: 15,
fontWeight: FontWeight.w800,
fontWeight: FontWeight.w600,
color: selected
? AppColors.textSecondary
: AppColors.textPrimary,