亲子故事共创应用
欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net
一、项目概述
运行效果图






1.1 应用简介
亲子故事共创是一款亲子教育类应用,核心理念是"父母孩子一起创作专属故事书"。通过角色设定、剧情分支、插图生成的完整创作流程,让家长和孩子共同参与故事创作,最终生成可打印的专属故事书。
每个孩子都是天生的故事家,他们拥有无穷的想象力和创造力。本应用为亲子互动提供了一个创意平台,让家长引导孩子发挥想象力,在创作过程中增进亲子感情,培养孩子的表达能力、逻辑思维和创造力。
1.2 核心功能
| 功能模块 | 功能描述 | 实现方式 |
|---|---|---|
| 主题选择 | 选择故事背景主题 | 6种故事主题 |
| 角色设定 | 创造故事角色 | 类型+形象+特点 |
| 剧情分支 | 选择故事发展方向 | 双选项分支系统 |
| 插图生成 | 为故事配图 | Emoji表情插图 |
| 故事书架 | 管理创作的故事 | 网格展示+时间排序 |
| 分享导出 | 打印和分享故事 | 打印/PDF/分享 |
1.3 故事主题
| 序号 | 主题 | Emoji | 颜色 | 典型元素 |
|---|---|---|---|---|
| 1 | 冒险故事 | 🗺️ | #2196F3 | 探险、寻宝、旅行 |
| 2 | 童话故事 | 🧚 | #E91E63 | 魔法、精灵、城堡 |
| 3 | 科幻故事 | 🚀 | #9C27B0 | 太空、未来、科技 |
| 4 | 动物故事 | 🦁 | #4CAF50 | 森林、动物、自然 |
| 5 | 侦探故事 | 🔍 | #FF9800 | 解谜、推理、冒险 |
| 6 | 友情故事 | 💝 | #00BCD4 | 朋友、帮助、成长 |
1.4 角色类型
| 序号 | 类型 | Emoji | 颜色 | 角色定位 |
|---|---|---|---|---|
| 1 | 主角 | 🦸 | #F44336 | 故事核心人物 |
| 2 | 助手 | 🧙 | #4CAF50 | 帮助主角的人 |
| 3 | 反派 | 👿 | #9C27B0 | 制造冲突的人 |
| 4 | 朋友 | 👦 | #2196F3 | 主角的伙伴 |
| 5 | 宠物 | 🐕 | #FF9800 | 忠诚的伙伴 |
| 6 | 智者 | 👴 | #00BCD4 | 提供智慧的人 |
1.5 技术栈
| 技术领域 | 技术选型 | 版本要求 |
|---|---|---|
| 开发框架 | Flutter | >= 3.0.0 |
| 编程语言 | Dart | >= 2.17.0 |
| 设计规范 | Material Design 3 | - |
| 状态管理 | setState | - |
| 动画控制 | AnimationController | - |
| 目标平台 | 鸿蒙OS / Web | API 21+ |
二、项目结构
lib/
├── main_story_cocreation.dart # 应用主入口
│ ├── StoryCoCreationApp # 根应用组件
│ ├── StoryTheme # 故事主题枚举
│ ├── CharacterType # 角色类型枚举
│ ├── StoryCharacter # 故事角色模型
│ ├── StoryBranch # 剧情分支模型
│ ├── StoryBook # 故事书模型
│ ├── StoryPage # 故事页模型
│ ├── StoryCoCreationHomePage # 主页面
│ ├── StoryCreationPage # 创作页面
│ └── StoryViewPage # 阅读页面
三、数据模型
3.1 StoryTheme 枚举
dart
enum StoryTheme {
adventure('冒险故事', '🗺️', Color(0xFF2196F3)),
fairy('童话故事', '🧚', Color(0xFFE91E63)),
scifi('科幻故事', '🚀', Color(0xFF9C27B0)),
animal('动物故事', '🦁', Color(0xFF4CAF50)),
mystery('侦探故事', '🔍', Color(0xFFFF9800)),
friendship('友情故事', '💝', Color(0xFF00BCD4));
final String label;
final String emoji;
final Color color;
}
3.2 CharacterType 枚举
dart
enum CharacterType {
hero('主角', '🦸', Color(0xFFF44336)),
helper('助手', '🧙', Color(0xFF4CAF50)),
villain('反派', '👿', Color(0xFF9C27B0)),
friend('朋友', '👦', Color(0xFF2196F3)),
pet('宠物', '🐕', Color(0xFFFF9800)),
wise('智者', '👴', Color(0xFF00BCD4));
final String label;
final String emoji;
final Color color;
}
3.3 StoryCharacter 模型
dart
class StoryCharacter {
final String id; // 唯一标识
final String name; // 角色名称
final CharacterType type; // 角色类型
final String emoji; // 角色形象
final String trait; // 角色特点
final Color color; // 主题颜色
}
3.4 StoryBranch 模型
dart
class StoryBranch {
final String id; // 唯一标识
final String text; // 情景描述
final String choiceA; // 选项A
final String choiceB; // 选项B
final String resultA; // 选择A的结果
final String resultB; // 选择B的结果
final String emoji; // 情景插图
}
3.5 StoryBook 模型
dart
class StoryBook {
final String id; // 唯一标识
final String title; // 故事标题
final StoryTheme theme; // 故事主题
final List<StoryCharacter> characters; // 角色列表
final List<StoryPage> pages; // 页面列表
final DateTime createdAt; // 创建时间
final String coverEmoji; // 封面插图
}
3.6 StoryPage 模型
dart
class StoryPage {
final String content; // 页面内容
final String emoji; // 页面插图
final int pageNumber; // 页码
}
四、核心功能实现
4.1 创作流程控制
dart
class _StoryCreationPageState extends State<StoryCreationPage> {
int _currentStep = 0; // 当前步骤
StoryTheme? _selectedTheme; // 选定主题
final List<StoryCharacter> _characters = []; // 角色列表
final List<StoryPage> _pages = []; // 页面列表
void _nextStep() {
// 验证当前步骤
if (_currentStep == 0 && _selectedTheme == null) {
// 提示选择主题
return;
}
if (_currentStep == 1 && _characters.isEmpty) {
// 提示添加角色
return;
}
if (_currentStep == 2 && _pages.isEmpty) {
// 提示创建故事
return;
}
// 进入下一步或完成
if (_currentStep < 3) {
setState(() => _currentStep++);
} else {
_completeStory();
}
}
}
4.2 剧情分支生成
dart
StoryBranch _generateStoryBranch() {
final branches = [
StoryBranch(
text: '主角来到了一个分岔路口...',
choiceA: '向左走',
choiceB: '向右走',
resultA: '左边是一片神秘的森林...',
resultB: '右边是一条小溪...',
emoji: '🛤️',
),
// 更多分支...
];
return branches[Random().nextInt(branches.length)];
}
4.3 分支选择处理
dart
void _selectBranch(StoryBranch branch, bool isChoiceA) {
setState(() {
_pages.add(StoryPage(
content: isChoiceA ? branch.resultA : branch.resultB,
emoji: branch.emoji,
pageNumber: _pages.length + 1,
));
});
}
4.4 故事完成处理
dart
void _completeStory() {
final book = StoryBook(
id: DateTime.now().millisecondsSinceEpoch.toString(),
title: _titleController.text,
theme: _selectedTheme!,
characters: _characters,
pages: _pages,
createdAt: DateTime.now(),
coverEmoji: _pages.isNotEmpty ? _pages.first.emoji : '📖',
);
widget.onComplete(book);
Navigator.pop(context);
}
五、界面设计
5.1 页面结构
| 页面 | 功能 | 设计要点 |
|---|---|---|
| 首页 | 快速入口和最近创作 | 渐变背景 + 横向滚动 |
| 故事书架 | 管理所有故事书 | 网格布局 + 封面展示 |
| 创作工坊 | 创作流程引导 | 步骤卡片 + 一键开始 |
| 创作页面 | 分步创作流程 | 步骤指示 + 表单输入 |
| 阅读页面 | 故事书阅读 | 翻页效果 + 页码指示 |
5.2 创作流程设计
| 步骤 | 内容 | 交互方式 |
|---|---|---|
| 步骤1 | 选择故事主题 | 卡片选择 |
| 步骤2 | 设定故事角色 | 弹窗表单 |
| 步骤3 | 编写故事剧情 | 分支选择 |
| 步骤4 | 完成创作 | 标题输入 + 预览 |
5.3 配色方案
| 元素 | 颜色值 | 用途 |
|---|---|---|
| 主色调 | #E91E63 | 品牌色、按钮 |
| 背景渐变 | #FCE4EC → #F48FB1 | 首页背景 |
| 卡片背景 | #FFFFFF | 内容卡片 |
| 主题色 | 各主题独立颜色 | 主题区分 |
六、动画效果
6.1 浮动动画
dart
_floatController = AnimationController(
vsync: this,
duration: const Duration(seconds: 3),
)..repeat(reverse: true); // 往返浮动效果
6.2 动画应用
| 动画类型 | 效果描述 | 应用场景 |
|---|---|---|
| 浮动动画 | 上下缓慢浮动 | 开始创作按钮 |
| 渐变背景 | 多色渐变过渡 | 页面背景 |
| 页面切换 | 索引堆栈切换 | 步骤切换 |
七、运行与调试
7.1 运行命令
bash
# 运行应用
flutter run -d harmonyos lib/main_story_cocreation.dart
# 代码分析
flutter analyze lib/main_story_cocreation.dart
# 构建HAP包
flutter build hap --target lib/main_story_cocreation.dart
7.2 调试要点
| 调试项 | 检查内容 | 解决方案 |
|---|---|---|
| 创作流程 | 步骤切换是否正常 | 验证 _currentStep 逻辑 |
| 角色添加 | 角色数据是否正确 | 检查表单输入 |
| 故事保存 | 故事书是否正确保存 | 验证 onComplete 回调 |
八、扩展方向
8.1 功能扩展
| 扩展功能 | 实现思路 | 技术要点 |
|---|---|---|
| 真实插图 | AI生成插图 | 图像生成API |
| 语音朗读 | 故事语音播放 | TTS语音合成 |
| 数据持久化 | 保存故事数据 | SharedPreferences |
| 云端同步 | 多设备同步 | 云存储服务 |
| 打印功能 | 生成PDF打印 | PDF生成库 |
| 模板系统 | 预设故事模板 | 模板配置文件 |
8.2 内容扩展
| 扩展项 | 优化方案 | 预期效果 |
|---|---|---|
| 更多主题 | 增加故事主题 | 更丰富的选择 |
| 分支深度 | 多层剧情分支 | 更复杂的故事 |
| 角色互动 | 角色对话系统 | 更生动的剧情 |
九、使用场景
9.1 亲子互动时光
家长可以在睡前或周末,和孩子一起使用本应用创作故事。通过讨论故事主题、设计角色、选择剧情走向,增进亲子互动,培养孩子的想象力和表达能力。
9.2 幼儿园教学活动
幼儿园老师可以将本应用作为创意写作教学的辅助工具,引导孩子们一起创作班级故事,培养团队合作精神和创造力。
9.3 儿童生日礼物
家长可以将和孩子一起创作的故事书打印出来,作为独特的生日礼物或纪念品,记录孩子的成长和想象力。
十、总结
亲子故事共创应用通过完整的创作流程,为家长和孩子提供了一个共同创作故事的平台。应用采用Flutter框架开发,使用分步骤引导的方式,让创作过程简单有趣。
核心亮点包括:
- 主题丰富:6种故事主题,满足不同喜好
- 角色定制:6种角色类型,自由设定形象和特点
- 分支剧情:双选项分支系统,故事走向由你决定
- 插图配图:Emoji表情插图,生动有趣
- 故事书架:管理所有创作的故事,随时回顾
- 分享导出:支持打印和分享,留下美好回忆
该应用为亲子互动提供了一个创意平台,让家长和孩子在共同创作中增进感情,培养孩子的创造力和表达能力,留下珍贵的亲子时光记忆。