卡片设计应用


欢迎加入开源鸿蒙跨平台社区:
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 整体架构图

Animation System

Data Layer

Presentation Layer

主页面
MainPage

卡片库页

自定义页

模板页

卡片详情页
CardDetailPage

CardStyle
样式模型

预设颜色列表

代码片段库

翻转动画
_flipController

悬浮动画
_hoverController

脉冲动画
_pulseController

2.2 类图设计

uses

uses

uses

CardDesignApp

+Widget build()

CardStyle

+String name

+String description

+IconData icon

MainPage

-int _currentIndex

-List<CardStyle> _cardStyles

+Widget build()

-Widget _buildGalleryPage()

-Widget _buildCustomizePage()

-Widget _buildTemplatesPage()

CardDetailPage

+int styleIndex

-AnimationController _flipController

-AnimationController _hoverController

-AnimationController _pulseController

-bool _isFlipped

+Widget build()

-Widget _buildCardByStyle()

-String _getCodeSnippet()

CustomizePage

-double _borderRadius

-double _shadowBlur

-double _cardWidth

-double _cardHeight

-Color _backgroundColor

+Widget build()

-Widget _buildPreviewCard()

-Widget _buildControls()

TemplatesPage

+Widget build()

-Widget _buildTemplateCard()

AnimatedBuilder

+Widget Function builder

+Widget child

+Widget build()

2.3 页面导航流程

卡片库

自定义

模板

应用启动

主页面

底部导航

卡片列表页

自定义页面

模板页面

点击卡片

卡片详情页

查看样式预览

查看代码示例

返回卡片库

调整参数

实时预览

浏览模板

2.4 卡片渲染流程

渲染引擎 动画控制器 详情页 用户 渲染引擎 动画控制器 详情页 用户 alt [翻转卡片] [悬浮卡片] [静态卡片] 选择卡片样式 获取样式索引 初始化控制器 点击卡片 触发翻转动画 更新旋转角度 展示翻转效果 鼠标悬停 启动悬浮动画 更新缩放和阴影 展示悬浮效果 直接渲染 展示静态效果

三、核心模块设计

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 卡片样式分布
63% 25% 13% 卡片样式类型分布 静态样式 动态样式 交互样式
分类 包含样式 特点
静态样式 基础、渐变、玻璃态、阴影、圆角、边框 无动画,纯视觉展示
动态样式 翻转卡片 自动/手动触发动画
交互样式 悬浮卡片 需要用户交互触发

3.2 页面结构设计

3.2.1 主页面布局

MainPage

IndexedStack

卡片库页

自定义页

模板页

NavigationBar

卡片库 Tab

自定义 Tab

模板 Tab

3.2.2 卡片详情页面结构

CardDetailPage

AppBar

ScrollView

卡片预览区

代码预览区

根据样式索引渲染

动画控制器管理

代码窗口样式

语法高亮显示

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 动画时序图
0 ms 60 ms 120 ms 180 ms 240 ms 300 ms 360 ms 420 ms 480 ms 540 ms 600 ms 660 ms 720 ms 780 ms 840 ms 900 ms 960 ms 正向翻转 鼠标进入 脉冲周期1 保持状态 反向翻转 脉冲周期2 鼠标离开 脉冲周期3 翻转动画 悬浮动画 脉冲动画 卡片动画时序

四、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 参数调整系统

滑块调整

颜色选择

用户操作

参数类型

数值参数

颜色参数

圆角半径

阴影模糊

卡片尺寸

内边距

边框宽度

背景颜色

边框颜色

阴影颜色

setState更新

实时预览刷新

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 后续版本规划

2024-01-07 2024-01-14 2024-01-21 2024-01-28 2024-02-04 2024-02-11 2024-02-18 2024-02-25 2024-03-03 2024-03-10 2024-03-17 8种卡片样式 自定义面板 代码预览 更多卡片样式 代码复制功能 导出PNG图片 自定义主题 收藏功能 云端同步 V1.0 基础版本 V1.1 增强版本 V1.2 进阶版本 卡片设计应用开发计划

8.2 功能扩展建议

8.2.1 代码导出功能

增强代码实用性:

  • 一键复制代码片段
  • 导出完整组件文件
  • 生成主题配置代码
8.2.2 图片导出功能

可视化输出支持:

  • 导出PNG格式图片
  • 自定义导出尺寸
  • 透明背景支持
8.2.3 更多卡片样式

持续丰富样式库:

  • 新拟态卡片 (Neumorphism)
  • 渐变边框卡片
  • 动态背景卡片
  • 3D透视卡片

九、注意事项

9.1 开发注意事项

  1. 动画控制器管理:页面销毁时必须释放控制器

  2. ImageFilter导入:玻璃态效果需要导入dart:ui

  3. MouseRegion兼容:悬浮效果在移动端需降级处理

  4. 性能优化:大量卡片使用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设计能力,在实际项目中创造出更加精美的用户界面。

设计之美,尽在卡片之间

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐