Flutter 框架跨平台鸿蒙开发 - 卡片设计应用
运行效果图卡片设计应用是一款专注于UI卡片样式展示与定制的工具类应用,旨在帮助开发者和设计师快速预览、学习和定制各种流行的卡片设计风格。应用涵盖了当前主流的8种卡片样式,从简洁的基础卡片到炫酷的玻璃态卡片,从静态展示到动态交互,全面呈现现代UI设计的精髓。应用采用Material Design 3设计规范,提供卡片库浏览、实时自定义预览、模板参考三大核心功能模块。用户可以通过直观的滑块控件实时调整
卡片设计应用
欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net
一、项目概述
运行效果图



1.1 应用简介
卡片设计应用是一款专注于UI卡片样式展示与定制的工具类应用,旨在帮助开发者和设计师快速预览、学习和定制各种流行的卡片设计风格。应用涵盖了当前主流的8种卡片样式,从简洁的基础卡片到炫酷的玻璃态卡片,从静态展示到动态交互,全面呈现现代UI设计的精髓。
应用采用Material Design 3设计规范,提供卡片库浏览、实时自定义预览、模板参考三大核心功能模块。用户可以通过直观的滑块控件实时调整卡片参数,快速获得满意的视觉效果,并可直接查看对应的代码实现,便于在实际项目中应用。
1.2 核心功能
| 功能模块 | 功能描述 | 实现方式 |
|---|---|---|
| 卡片库 | 8种主流卡片样式展示 | ListView + 导航 |
| 卡片详情 | 样式预览与代码示例 | 动画控制器 + 代码高亮 |
| 自定义面板 | 实时参数调整 | Slider + 状态管理 |
| 模板库 | 6种场景卡片模板 | GridView布局 |
| 动画效果 | 翻转、悬浮等交互 | AnimationController |
| 代码预览 | 样式代码片段展示 | 文本渲染 |
1.3 卡片样式一览
| 序号 | 卡片类型 | 英文标识 | 设计特点 | 适用场景 |
|---|---|---|---|---|
| 1 | 基础卡片 | Basic | 简洁大方,白色背景 | 通用信息展示 |
| 2 | 渐变卡片 | Gradient | 色彩丰富,视觉冲击 | 强调性内容 |
| 3 | 玻璃态卡片 | Glassmorphism | 毛玻璃模糊,通透感 | 现代风格应用 |
| 4 | 阴影卡片 | Shadow | 多层次阴影,立体感 | 层级展示 |
| 5 | 圆角卡片 | Rounded | 圆润柔和,亲和力 | 友好型界面 |
| 6 | 边框卡片 | Border | 装饰性边框,突出感 | 重要信息框 |
| 7 | 翻转卡片 | Flip | 3D翻转动画,交互性 | 双面信息展示 |
| 8 | 悬浮卡片 | Hover | 悬浮效果,动态感 | 交互式列表 |
1.4 技术栈
| 技术领域 | 技术选型 | 版本要求 |
|---|---|---|
| 开发框架 | Flutter | >= 3.0.0 |
| 编程语言 | Dart | >= 2.17.0 |
| 设计规范 | Material Design 3 | - |
| 动画系统 | AnimationController | - |
| 图像处理 | dart:ui ImageFilter | - |
| 目标平台 | 鸿蒙OS / Web | API 21+ |
1.5 项目结构
lib/
└── main_card_design.dart
├── CardDesignApp # 应用入口
├── CardStyle # 卡片样式数据模型
├── MainPage # 主页面(底部导航)
├── CardDetailPage # 卡片详情页面
├── CustomizePage # 自定义卡片页面
├── TemplatesPage # 模板页面
└── AnimatedBuilder # 动画构建器组件
二、系统架构
2.1 整体架构图
2.2 类图设计
2.3 页面导航流程
2.4 卡片渲染流程
三、核心模块设计
3.1 数据模型设计
3.1.1 卡片样式模型 (CardStyle)
class CardStyle {
final String name; // 样式名称
final String description; // 样式描述
final IconData icon; // 样式图标
const CardStyle({
required this.name,
required this.description,
required this.icon,
});
}
3.1.2 卡片样式分布
| 分类 | 包含样式 | 特点 |
|---|---|---|
| 静态样式 | 基础、渐变、玻璃态、阴影、圆角、边框 | 无动画,纯视觉展示 |
| 动态样式 | 翻转卡片 | 自动/手动触发动画 |
| 交互样式 | 悬浮卡片 | 需要用户交互触发 |
3.2 页面结构设计
3.2.1 主页面布局
3.2.2 卡片详情页面结构
3.2.3 自定义页面结构
3.3 动画系统设计
3.3.1 动画控制器配置
class _CardDetailPageState extends State<CardDetailPage>
with TickerProviderStateMixin {
// 翻转动画控制器
late AnimationController _flipController;
// 悬浮动画控制器
late AnimationController _hoverController;
// 脉冲动画控制器
late AnimationController _pulseController;
void initState() {
super.initState();
// 翻转动画:600ms
_flipController = AnimationController(
vsync: this,
duration: const Duration(milliseconds: 600),
);
// 悬浮动画:200ms快速响应
_hoverController = AnimationController(
vsync: this,
duration: const Duration(milliseconds: 200),
);
// 脉冲动画:1000ms循环
_pulseController = AnimationController(
vsync: this,
duration: const Duration(milliseconds: 1000),
)..repeat(reverse: true);
}
}
3.3.2 动画时序图
四、UI设计规范
4.1 配色方案
应用采用靛蓝色为主色调,营造专业、现代的设计氛围:
| 颜色类型 | 色值 | 用途 |
|---|---|---|
| 主色 | #3F51B5 (Indigo) | 导航、强调元素 |
| 渐变起始色 | #7986CB (Indigo 300) | 渐变卡片背景 |
| 渐变结束色 | #AB47BC (Purple 400) | 渐变卡片背景 |
| 卡片背景 | #FFFFFF | 基础卡片背景 |
| 代码背景 | #212121 (Grey 900) | 代码预览区域 |
| 代码文字 | #69F0AE (Green A200) | 代码高亮 |
4.2 字体规范
| 元素 | 字号 | 字重 | 颜色 |
|---|---|---|---|
| 页面标题 | 20px | Medium | #000000 |
| 卡片标题 | 18px | Bold | #FFFFFF |
| 卡片描述 | 14px | Regular | #FFFFFF(80%) |
| 代码文字 | 12px | Regular | #69F0AE |
| 控制标签 | 14px | Medium | #000000 |
4.3 组件规范
4.3.1 卡片列表项
┌─────────────────────────────────────────────────┐
│ ┌──────┐ 基础卡片 > │
│ │ 📦 │ 简洁大方的基础样式 │
│ └──────┘ │
└─────────────────────────────────────────────────┘
4.3.2 卡片详情页布局
┌─────────────────────────────────────────────────┐
│ ← 基础卡片 │
├─────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ │
│ │ 卡片预览区 │ │
│ │ │ │
│ └─────────────────┘ │
│ │
├─────────────────────────────────────────────────┤
│ ● ● ● 代码示例 │
│ ┌─────────────────────────────────────────┐ │
│ │ Container( │ │
│ │ decoration: BoxDecoration( │ │
│ │ color: Colors.white, │ │
│ │ borderRadius: ... │ │
│ │ ), │ │
│ │ ) │ │
│ └─────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘
4.3.3 自定义控制面板
┌─────────────────────────────────────────────────┐
│ 卡片参数 │
│ │
│ 圆角半径 ═════════════════○═════ 12.0 │
│ 阴影模糊 ═══════════○════════════ 10.0 │
│ 卡片宽度 ═══════════════○════════ 280.0 │
│ 卡片高度 ═════════○══════════════ 180.0 │
│ │
│ 背景颜色 │
│ ⚪ ⚪ 🔵 🟢 🟣 🟠 │
└─────────────────────────────────────────────────┘
五、核心功能实现
5.1 卡片样式渲染
Widget _buildCardByStyle(int styleIndex) {
switch (styleIndex) {
case 0: return _buildBasicCard();
case 1: return _buildGradientCard();
case 2: return _buildGlassCard();
case 3: return _buildShadowCard();
case 4: return _buildRoundedCard();
case 5: return _buildBorderCard();
case 6: return _buildFlipCard();
case 7: return _buildHoverCard();
default: return _buildBasicCard();
}
}
5.2 玻璃态卡片实现
Widget _buildGlassCard() {
return Container(
decoration: BoxDecoration(
color: Colors.white.withValues(alpha: 0.15),
borderRadius: BorderRadius.circular(16),
border: Border.all(
color: Colors.white.withValues(alpha: 0.3),
width: 1,
),
),
child: ClipRRect(
borderRadius: BorderRadius.circular(16),
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 10, sigmaY: 10),
child: // 卡片内容
),
),
);
}
5.3 翻转卡片实现
Widget _buildFlipCard() {
return GestureDetector(
onTap: () {
setState(() {
_isFlipped = !_isFlipped;
if (_isFlipped) {
_flipController.forward();
} else {
_flipController.reverse();
}
});
},
child: AnimatedBuilder(
animation: _flipController,
builder: (context, child) {
final angle = _flipController.value * math.pi;
final transform = Matrix4.identity()
..setEntry(3, 2, 0.001)
..rotateY(angle);
return Transform(
transform: transform,
alignment: Alignment.center,
child: // 卡片内容
);
},
),
);
}
5.4 悬浮卡片实现
Widget _buildHoverCard() {
return MouseRegion(
onEnter: (_) => _hoverController.forward(),
onExit: (_) => _hoverController.reverse(),
child: AnimatedBuilder(
animation: _hoverController,
builder: (context, child) {
final elevation = 4 + _hoverController.value * 12;
final scale = 1 + _hoverController.value * 0.05;
final offsetY = _hoverController.value * 8;
return Transform.translate(
offset: Offset(0, -offsetY),
child: Transform.scale(
scale: scale,
child: Container(
decoration: BoxDecoration(
boxShadow: [
BoxShadow(
color: Colors.deepPurple
.withValues(alpha: 0.15 + _hoverController.value * 0.15),
blurRadius: elevation,
offset: Offset(0, elevation / 2),
),
],
),
child: // 卡片内容
),
),
);
},
),
);
}
5.5 多层阴影实现
Widget _buildShadowCard() {
return Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12),
boxShadow: [
BoxShadow(
color: Colors.indigo.withValues(alpha: 0.1),
blurRadius: 5,
offset: const Offset(0, 2),
),
BoxShadow(
color: Colors.indigo.withValues(alpha: 0.1),
blurRadius: 10,
offset: const Offset(0, 4),
),
BoxShadow(
color: Colors.indigo.withValues(alpha: 0.1),
blurRadius: 20,
offset: const Offset(0, 8),
),
BoxShadow(
color: Colors.indigo.withValues(alpha: 0.1),
blurRadius: 40,
offset: const Offset(0, 16),
),
],
),
child: // 卡片内容
);
}
六、自定义功能详解
6.1 参数调整系统
6.2 可调整参数列表
| 参数名 | 类型 | 范围 | 默认值 | 说明 |
|---|---|---|---|---|
| borderRadius | double | 0-50 | 12 | 圆角半径 |
| shadowBlur | double | 0-50 | 10 | 阴影模糊度 |
| shadowOpacity | double | 0-0.5 | 0.1 | 阴影透明度 |
| cardWidth | double | 200-350 | 280 | 卡片宽度 |
| cardHeight | double | 100-250 | 180 | 卡片高度 |
| padding | double | 8-40 | 24 | 内边距 |
| borderWidth | double | 0-5 | 0 | 边框宽度 |
6.3 预设颜色方案
final List<Color> _presetColors = [
Colors.white, // 纯白
Colors.grey.shade100, // 浅灰
Colors.blue.shade50, // 淡蓝
Colors.green.shade50, // 淡绿
Colors.purple.shade50, // 淡紫
Colors.orange.shade50, // 淡橙
];
七、模板库设计
7.1 模板类型
7.2 模板配色方案
| 模板 | 主色 | 背景色 | 用途 |
|---|---|---|---|
| 用户卡片 | Blue | Blue(10%) | 个人信息展示 |
| 商品卡片 | Orange | Orange(10%) | 电商商品展示 |
| 音乐卡片 | Purple | Purple(10%) | 音乐播放器 |
| 新闻卡片 | Teal | Teal(10%) | 新闻资讯 |
| 天气卡片 | Amber | Amber(10%) | 天气预报 |
| 社交卡片 | Pink | Pink(10%) | 社交动态 |
八、扩展功能规划
8.1 后续版本规划
8.2 功能扩展建议
8.2.1 代码导出功能
增强代码实用性:
- 一键复制代码片段
- 导出完整组件文件
- 生成主题配置代码
8.2.2 图片导出功能
可视化输出支持:
- 导出PNG格式图片
- 自定义导出尺寸
- 透明背景支持
8.2.3 更多卡片样式
持续丰富样式库:
- 新拟态卡片 (Neumorphism)
- 渐变边框卡片
- 动态背景卡片
- 3D透视卡片
九、注意事项
9.1 开发注意事项
-
动画控制器管理:页面销毁时必须释放控制器
-
ImageFilter导入:玻璃态效果需要导入dart:ui
-
MouseRegion兼容:悬浮效果在移动端需降级处理
-
性能优化:大量卡片使用ListView.builder
9.2 常见问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| Icons.hover不存在 | 图标名称错误 | 使用Icons.control_camera |
| ImageFilter未定义 | 缺少导入 | import ‘dart:ui’ show ImageFilter |
| 动画卡顿 | 控制器未释放 | dispose中调用dispose() |
| 玻璃态效果不显示 | BackdropFilter位置错误 | 包裹在ClipRRect内 |
9.3 设计建议
🎨 设计小贴士 🎨
卡片设计应遵循"少即是多"的原则。
阴影层次感比单一阴影更有质感。
渐变色彩过渡要自然流畅。
动画时长控制在200-600ms之间。
圆角半径与整体风格保持一致。
十、运行说明
10.1 环境要求
| 环境 | 版本要求 |
|---|---|
| Flutter SDK | >= 3.0.0 |
| Dart SDK | >= 2.17.0 |
| 鸿蒙OS | API 21+ |
10.2 运行命令
# 查看可用设备
flutter devices
# 运行到Web服务器
flutter run -d web-server -t lib/main_card_design.dart --web-port 8087
# 运行到鸿蒙设备
flutter run -d 127.0.0.1:5555 lib/main_card_design.dart
# 运行到Windows
flutter run -d windows -t lib/main_card_design.dart
# 代码分析
flutter analyze lib/main_card_design.dart
十一、总结
卡片设计应用通过系统化的卡片样式展示、实时参数调整和代码示例预览,为开发者和设计师提供了一个高效的学习和参考工具。应用涵盖了8种主流卡片设计风格,从简洁的基础卡片到炫酷的玻璃态卡片,从静态展示到动态交互,全面呈现了现代UI设计的核心要素。
核心功能涵盖卡片库浏览、实时自定义预览、模板参考三大模块。卡片库提供了8种精心设计的卡片样式,每种样式都配有详细的代码示例;自定义面板支持7项参数的实时调整,用户可以快速获得满意的视觉效果;模板库提供了6种常见场景的卡片模板,便于在实际项目中参考应用。
通过本应用,希望能够帮助开发者快速掌握卡片设计的核心技巧,提升UI设计能力,在实际项目中创造出更加精美的用户界面。
设计之美,尽在卡片之间
更多推荐

所有评论(0)