style: 淡薰紫 Lavender Breeze + UI修复

- 主色改淡薰紫 #8B9CF7 + 白底 清新风格
- 每个智能体卡不同淡色调
- 删除欢迎卡底部"或直接对我说"
- 运动创建/打卡接入 API
- 全项目薄荷绿→淡紫替换
This commit is contained in:
MingNian
2026-06-03 20:46:39 +08:00
parent f46c30f8e7
commit f6c1ea7ec9
18 changed files with 306 additions and 254 deletions

View File

@@ -51,7 +51,7 @@ class ExercisePlanPage extends ConsumerWidget {
onPressed: () => _createDefaultPlan(ref, context),
icon: const Icon(Icons.add),
label: const Text('创建本周计划'),
backgroundColor: const Color(0xFF14B8A6),
backgroundColor: const Color(0xFF8B9CF7),
),
body: plan.when(
data: (data) {
@@ -82,7 +82,7 @@ class ExercisePlanPage extends ConsumerWidget {
}),
]);
},
loading: () => const Center(child: CircularProgressIndicator(color: Color(0xFF14B8A6))),
loading: () => const Center(child: CircularProgressIndicator(color: Color(0xFF8B9CF7))),
error: (_, __) => _empty(context, '运动计划', '暂无运动计划,点击右下角创建'),
),
);
@@ -94,7 +94,7 @@ class ExercisePlanPage extends ConsumerWidget {
margin: const EdgeInsets.all(16),
padding: const EdgeInsets.all(16),
decoration: BoxDecoration(
color: const Color(0xFFF2FAF9),
color: const Color(0xFFF0F2FF),
borderRadius: BorderRadius.circular(20),
),
child: Column(children: [
@@ -105,7 +105,7 @@ class ExercisePlanPage extends ConsumerWidget {
width: 60,
height: 60,
decoration: BoxDecoration(
color: const Color(0xFF14B8A6),
color: const Color(0xFF8B9CF7),
borderRadius: BorderRadius.circular(30),
),
child: Center(
@@ -123,7 +123,7 @@ class ExercisePlanPage extends ConsumerWidget {
child: FractionallySizedBox(
widthFactor: progress / 100,
child: Container(
decoration: BoxDecoration(color: const Color(0xFF14B8A6), borderRadius: BorderRadius.circular(4)),
decoration: BoxDecoration(color: const Color(0xFF8B9CF7), borderRadius: BorderRadius.circular(4)),
),
),
),
@@ -152,7 +152,7 @@ class ExercisePlanPage extends ConsumerWidget {
if (!context.mounted) return;
ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
content: Text('运动计划已创建 ✅'),
backgroundColor: Color(0xFF14B8A6),
backgroundColor: Color(0xFF8B9CF7),
));
}
@@ -199,21 +199,21 @@ class _ExercisePlanItem extends StatelessWidget {
color: isToday ? const Color(0xFFFEFCE8) : Colors.white,
borderRadius: BorderRadius.circular(16),
border: isToday ? Border.all(color: const Color(0xFFFCD34D), width: 2) : null,
boxShadow: [BoxShadow(color: const Color(0xFF14B8A6).withAlpha(8), blurRadius: 4, offset: const Offset(0, 2))],
boxShadow: [BoxShadow(color: const Color(0xFF8B9CF7).withAlpha(8), blurRadius: 4, offset: const Offset(0, 2))],
),
child: Row(children: [
Container(
width: 40,
height: 40,
decoration: BoxDecoration(
color: isDone ? const Color(0xFFDCFCE7) : isRest ? const Color(0xFFF3F4F6) : const Color(0xFFF2FAF9),
color: isDone ? const Color(0xFFDCFCE7) : isRest ? const Color(0xFFF3F4F6) : const Color(0xFFF0F2FF),
borderRadius: BorderRadius.circular(12),
),
child: isDone
? const Icon(Icons.check, size: 20, color: Color(0xFF43A047))
: isRest
? const Icon(Icons.coffee, size: 20, color: Color(0xFF999999))
: const Icon(Icons.directions_run, size: 20, color: Color(0xFF14B8A6)),
: const Icon(Icons.directions_run, size: 20, color: Color(0xFF8B9CF7)),
),
const SizedBox(width: 12),
Expanded(
@@ -235,7 +235,7 @@ class _ExercisePlanItem extends StatelessWidget {
onPressed: onCheckIn,
child: const Text('打卡'),
style: ElevatedButton.styleFrom(
backgroundColor: const Color(0xFF14B8A6),
backgroundColor: const Color(0xFF8B9CF7),
foregroundColor: Colors.white,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)),
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10),
@@ -257,7 +257,7 @@ class FollowUpListPage extends ConsumerWidget {
floatingActionButton: FloatingActionButton(
onPressed: () => _showAddDialog(context),
child: const Icon(Icons.add),
backgroundColor: const Color(0xFF14B8A6),
backgroundColor: const Color(0xFF8B9CF7),
),
body: ListView(children: _mockFollowUps.map((item) => _FollowUpItem(item: item)).toList()),
);
@@ -284,7 +284,7 @@ class FollowUpListPage extends ConsumerWidget {
Navigator.pop(ctx);
ScaffoldMessenger.of(context).showSnackBar(const SnackBar(
content: Text('复查提醒已添加 ✅'),
backgroundColor: Color(0xFF14B8A6),
backgroundColor: Color(0xFF8B9CF7),
));
},
child: const Text('保存'),
@@ -314,7 +314,7 @@ class _FollowUpItem extends StatelessWidget {
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(16),
boxShadow: [BoxShadow(color: const Color(0xFF14B8A6).withAlpha(10), blurRadius: 4, offset: const Offset(0, 2))],
boxShadow: [BoxShadow(color: const Color(0xFF8B9CF7).withAlpha(10), blurRadius: 4, offset: const Offset(0, 2))],
),
child: Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
Row(children: [
@@ -513,7 +513,7 @@ class _HealthCalendarPageState extends ConsumerState<HealthCalendarPage> {
return Container(
decoration: isToday ? BoxDecoration(
color: const Color(0xFF14B8A6),
color: const Color(0xFF8B9CF7),
borderRadius: BorderRadius.circular(20),
) : null,
child: Stack(
@@ -555,7 +555,7 @@ class _HealthCalendarPageState extends ConsumerState<HealthCalendarPage> {
Color _getEventColor(String type) {
switch (type) {
case 'medication': return const Color(0xFF14B8A6);
case 'medication': return const Color(0xFF8B9CF7);
case 'exercise': return const Color(0xFF43A047);
case 'followup': return const Color(0xFFF59E0B);
default: return Colors.grey;
@@ -564,7 +564,7 @@ class _HealthCalendarPageState extends ConsumerState<HealthCalendarPage> {
Widget _buildLegend() {
final items = [
{'color': const Color(0xFF14B8A6), 'label': '用药提醒'},
{'color': const Color(0xFF8B9CF7), 'label': '用药提醒'},
{'color': const Color(0xFF43A047), 'label': '运动计划'},
{'color': const Color(0xFFF59E0B), 'label': '复查随访'},
];