1. 运动详情页面整体设计思路
在健康管理类应用中,运动详情页面承担着记录、展示和激励用户运动行为的重要功能。一个好的运动详情页面需要同时满足数据展示的完整性和界面交互的友好性。
1.1 核心功能需求分析
运动详情页面的核心功能模块包括:
- 当前运动卡片:展示最近一次运动的详细信息
- 统计数据汇总:提供周期性的运动数据概览
- 历史记录列表:按时间顺序展示用户的运动轨迹
- 辅助激励模块:包括目标进度、类型分布等增强用户粘性的设计
1.2 技术选型考量
选择Flutter框架实现跨平台运动详情页面主要基于以下考虑:
- 跨平台一致性:Flutter的Skia渲染引擎可以确保在OpenHarmony和其他平台上保持完全一致的UI表现
- 开发效率:Widget的声明式UI开发模式适合构建这种数据展示型页面
- 性能表现:Flutter的60fps渲染性能可以保证运动数据动画的流畅性
- 社区生态:丰富的第三方包支持各种图表和交互效果的实现
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 页面结构与布局实现
2.1 基础页面框架
运动详情页采用典型的Scaffold结构,包含AppBar和Body两部分:
dart复制class ExerciseDetailPage extends StatelessWidget {
const ExerciseDetailPage({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: const Color(0xFFFAFAFC),
appBar: AppBar(
backgroundColor: Colors.transparent,
leading: IconButton(
icon: Icon(Icons.arrow_back_ios_rounded, size: 20.w),
onPressed: () => Get.back()
),
title: Text('运动详情', style: TextStyle(
fontSize: 17.sp,
fontWeight: FontWeight.w600
)),
centerTitle: true,
),
body: SingleChildScrollView(
padding: EdgeInsets.all(20.w),
child: Column(
children: [
_buildCurrentCard(),
SizedBox(height: 20.h),
_buildStatsRow(),
SizedBox(height: 20.h),
_buildHistory(),
],
),
),
);
}
}
关键设计点:
- 使用
SingleChildScrollView确保内容可滚动- 采用响应式单位
.w和.h适配不同屏幕- 统一的边距和间距系统(20.w)保持视觉一致性
2.2 响应式布局方案
针对不同尺寸设备的适配策略:
- 字体大小:使用
.sp单位自动根据系统字体设置调整 - 边距间距:通过
.w和.h单位按屏幕比例缩放 - 元素尺寸:关键组件使用
double.infinity填充可用宽度 - 断点处理:通过
LayoutBuilder检测屏幕宽度变化布局
3. 核心组件实现细节
3.1 当前运动卡片设计
运动卡片采用渐变背景增强视觉冲击力:
dart复制Widget _buildCurrentCard() {
return Container(
width: double.infinity,
padding: EdgeInsets.all(24.w),
decoration: BoxDecoration(
gradient: const LinearGradient(
colors: [Color(0xFF00C9A7), Color(0xFF4ECDC4)]
),
borderRadius: BorderRadius.circular(24.r),
),
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(Icons.directions_run_rounded, size: 28.w, color: Colors.white70),
SizedBox(width: 8.w),
Text('跑步', style: TextStyle(
fontSize: 16.sp,
color: Colors.white70
