Flutter 框架跨平台鸿蒙开发 - 决策硬币
运行效果图决策硬币应用是一款专注于帮助用户做出选择的心理学工具类应用,旨在通过抛硬币这一简单行为,帮助用户发现内心真正的想法。应用以金色为主色调,传递智慧、决策的品牌形象。应用的核心理念是:当硬币在空中翻转时,用户内心会希望它落在某一边,这反映了他们真正的选择。通过这一心理学原理,帮助纠结中的用户找到内心的答案。决策硬币应用通过心理学原理,为用户提供了一个发现内心真实想法的工具。应用的核心理念是:
决策硬币应用
欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net
一、项目概述
运行效果图



1.1 应用简介
决策硬币应用是一款专注于帮助用户做出选择的心理学工具类应用,旨在通过抛硬币这一简单行为,帮助用户发现内心真正的想法。应用以金色为主色调,传递智慧、决策的品牌形象。
应用的核心理念是:当硬币在空中翻转时,用户内心会希望它落在某一边,这反映了他们真正的选择。通过这一心理学原理,帮助纠结中的用户找到内心的答案。
1.2 核心功能
| 功能模块 | 功能描述 | 实现方式 |
|---|---|---|
| 抛硬币 | 输入选项并抛硬币 | 动画+随机结果 |
| 内心询问 | 询问用户希望的结果 | 选择按钮 |
| 结果展示 | 展示用户的真实想法 | 洞察文字 |
| 决策历史 | 查看历史决策记录 | 列表展示 |
| 决策智慧 | 关于选择的人生哲理 | 卡片列表 |
1.3 决策流程
| 阶段 | 步骤 | 说明 |
|---|---|---|
| 1 | 输入选项 | 输入两个纠结的选项 |
| 2 | 抛硬币 | 观看硬币翻转动画 |
| 3 | 内心询问 | 选择希望硬币落在哪一边 |
| 4 | 结果展示 | 揭示内心真正的想法 |
1.4 技术栈
| 技术领域 | 技术选型 | 版本要求 |
|---|---|---|
| 开发框架 | Flutter | >= 3.0.0 |
| 编程语言 | Dart | >= 2.17.0 |
| 设计规范 | Material Design 3 | - |
| 动画控制 | AnimationController | - |
| 目标平台 | 鸿蒙OS / Web | API 21+ |
1.5 项目结构
lib/
└── main_decision_coin.dart
├── DecisionCoinApp # 应用入口
├── CoinSide # 硬币面枚举
├── DecisionPhase # 决策阶段枚举
├── DecisionRecord # 决策记录模型
├── DecisionCoinHomePage # 主页面
└── _DecisionCoinHomePageState # 状态管理
二、系统架构
2.1 整体架构图
2.2 类图设计
2.3 页面导航流程
2.4 决策流程图
三、核心模块设计
3.1 数据模型设计
3.1.1 硬币面枚举 (CoinSide)
enum CoinSide {
heads('正面', 'A'),
tails('反面', 'B');
final String label;
final String option;
}
3.1.2 决策阶段枚举 (DecisionPhase)
enum DecisionPhase {
input, // 输入阶段
tossing, // 抛硬币阶段
asking, // 询问阶段
result, // 结果阶段
history, // 历史阶段
}
3.1.3 决策记录模型 (DecisionRecord)
class DecisionRecord {
final String id; // 唯一标识
final String optionA; // 选项A
final String optionB; // 选项B
final CoinSide? coinResult; // 硬币结果
final CoinSide? userHope; // 用户希望
final String? insight; // 洞察文字
final DateTime createdAt; // 创建时间
}
3.1.4 决策阶段分布
3.2 页面结构设计
3.2.1 主页面布局
3.2.2 决策页面结构
3.2.3 硬币动画结构
3.3 心理学原理
3.4 洞察生成机制
四、UI设计规范
4.1 配色方案
应用采用金色为主色调,传递智慧、决策的品牌形象:
| 颜色类型 | 色值 | 用途 |
|---|---|---|
| 主色 | #FFD700 (Gold) | 导航、强调元素 |
| 渐变起始 | #FFD700 | 金色渐变 |
| 渐变结束 | #FFA000 | 橙色渐变 |
| 正面颜色 | #FFD700 | 硬币正面 |
| 反面颜色 | #C0C0C0 | 硬币反面 |
| 成功色 | #4CAF50 | 结果一致 |
| 提示色 | #FF9800 | 结果不同 |
4.2 字体规范
| 元素 | 字号 | 字重 | 颜色 |
|---|---|---|---|
| 页面标题 | 28px | Bold | #FFA000 |
| 阶段标题 | 20px | Bold | #FFA000 |
| 选项文字 | 16px | Medium | #000000 |
| 洞察文字 | 14px | Italic | #424242 |
| 提示文字 | 12px | Regular | #9E9E9E |
4.3 组件规范
4.3.1 硬币组件
┌─────────────────┐
╱ ╲
│ │
│ ┌─────────┐ │
│ │ │ │
│ │ ? │ │ ← 翻转中
│ │ │ │
│ └─────────┘ │
│ │
╲ ╱
└─────────────────┘
金色渐变 + 发光效果
4.3.2 选项输入框
┌─────────────────────────────────────────────────┐
│ ┌────┐ 选项 A(正面) │
│ │ 正 │ ┌─────────────────────────────────────┐ │
│ └────┘ │ 输入你的选择... │ │
│ └─────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘
4.3.3 结果展示卡片
┌─────────────────────────────────────────────────┐
│ ✓ 命运与心意一致! │
│ │
│ 你内心真正想要的是: │
│ [选项内容] │
│ │
│ ✨ 在硬币落下的那一刻,你的心已经告诉你答案了 │
│ │
│ [再来一次] [确定选择] │
└─────────────────────────────────────────────────┘
五、核心功能实现
5.1 硬币动画实现
AnimatedBuilder(
animation: _coinAnimation,
builder: (context, child) {
final value = _coinAnimation.value;
final rotation = value * 10 * pi; // 旋转10圈
final scale = 1.0 + sin(value * pi * 4) * 0.2; // 弹跳缩放
final yOffset = sin(value * pi) * -100; // 上下浮动
return Transform.translate(
offset: Offset(0, yOffset),
child: Transform.scale(
scale: scale,
child: Transform.rotate(
angle: rotation,
child: _buildCoin(),
),
),
);
},
)
5.2 随机结果生成
void _startToss() {
setState(() {
_phase = DecisionPhase.tossing;
_coinResult = null;
_userHope = null;
});
_coinController.reset();
_coinController.forward().then((_) {
setState(() {
_coinResult = Random().nextBool() ? CoinSide.heads : CoinSide.tails;
_phase = DecisionPhase.asking;
});
});
}
5.3 内心选择处理
void _selectHope(CoinSide side) {
setState(() {
_userHope = side;
_phase = DecisionPhase.result;
});
final insight = _generateInsight();
final record = DecisionRecord(
id: DateTime.now().millisecondsSinceEpoch.toString(),
optionA: _optionAController.text.trim(),
optionB: _optionBController.text.trim(),
coinResult: _coinResult,
userHope: side,
insight: insight,
createdAt: DateTime.now(),
);
setState(() {
_history.insert(0, record);
});
}
5.4 洞察生成实现
final List<String> _insights = [
'在硬币落下的那一刻,你的心已经告诉你答案了。',
'当你希望硬币落在某一边时,那就是你内心真正的选择。',
'犹豫不决时,抛硬币不是为了决定,而是为了看清自己的内心。',
'硬币只是工具,答案一直在你心里。',
// ...
];
String _generateInsight() {
final random = Random();
return _insights[random.nextInt(_insights.length)];
}
5.5 发光动画实现
AnimatedBuilder(
animation: _glowAnimation,
builder: (context, child) {
return Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
boxShadow: [
BoxShadow(
color: color.withValues(alpha: _glowAnimation.value * 0.6),
blurRadius: 20,
spreadRadius: 5,
),
],
),
);
},
)
5.6 时间格式化实现
String get timeAgo {
final diff = DateTime.now().difference(createdAt);
if (diff.inMinutes < 1) return '刚刚';
if (diff.inMinutes < 60) return '${diff.inMinutes}分钟前';
if (diff.inHours < 24) return '${diff.inHours}小时前';
if (diff.inDays < 7) return '${diff.inDays}天前';
return '${createdAt.month}月${createdAt.day}日';
}
六、交互设计
6.1 抛硬币交互流程
6.2 阶段切换流程
6.3 结果判断逻辑
七、扩展功能规划
7.1 后续版本规划
7.2 功能扩展建议
7.2.1 更多决策工具
决策方式扩展:
- 骰子决策(多选项)
- 转盘决策
- 抽签决策
- 随机数决策
7.2.2 统计分析
数据可视化:
- 决策次数统计
- 选择倾向分析
- 时间分布图表
- 心情标签
7.2.3 社交功能
分享与互动:
- 分享决策结果
- 匿名讨论
- 决策投票
- 好友建议
八、注意事项
8.1 开发注意事项
-
动画性能:硬币动画使用AnimatedBuilder避免重建
-
状态管理:使用DecisionPhase枚举管理阶段切换
-
随机算法:使用Random().nextBool()生成随机结果
-
洞察语录:预设多条语录随机选择
8.2 常见问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 动画卡顿 | 动画时间过长 | 调整duration |
| 状态混乱 | 阶段切换错误 | 检查_phase状态 |
| 结果不显示 | 数据未传递 | 检查_userHope赋值 |
| 历史丢失 | 未正确保存 | 检查_history操作 |
8.3 使用提示
🪙 决策硬币使用指南 🪙
输入选项:在输入框中填写两个让你纠结的选择。
抛硬币:点击按钮,观察硬币翻转动画。
倾听内心:在硬币落下时,注意你的第一反应。
选择希望:选择你希望硬币落在哪一边。
发现答案:你希望的那一边,就是你内心真正的选择。
九、运行说明
9.1 环境要求
| 环境 | 版本要求 |
|---|---|
| Flutter SDK | >= 3.0.0 |
| Dart SDK | >= 2.17.0 |
| 鸿蒙OS | API 21+ |
9.2 运行命令
# 查看可用设备
flutter devices
# 运行到Web服务器
flutter run -d web-server -t lib/main_decision_coin.dart --web-port 8117
# 运行到鸿蒙设备
flutter run -d 127.0.0.1:5555 lib/main_decision_coin.dart
# 运行到Windows
flutter run -d windows -t lib/main_decision_coin.dart
# 代码分析
flutter analyze lib/main_decision_coin.dart
十、总结
决策硬币应用通过心理学原理,为用户提供了一个发现内心真实想法的工具。应用的核心理念是:当硬币在空中翻转时,用户内心会希望它落在某一边,这反映了他们真正的选择。
核心功能涵盖抛硬币、内心询问、结果展示、历史记录、决策智慧五大模块。抛硬币通过精美的动画展示硬币翻转过程;内心询问让用户选择希望的结果;结果展示揭示用户内心真正的想法;历史记录保存所有决策过程;决策智慧提供关于选择的人生哲理。
应用采用Material Design 3设计规范,以金色为主色调,界面智慧优雅。通过本应用,希望能够帮助纠结中的用户找到内心的答案,做出真正属于自己的选择。
硬币只是工具,答案一直在你心里
更多推荐
所有评论(0)