Flutter 框架跨平台鸿蒙开发 - 废话生成器
运行效果图废话生成器是一款专为职场人士打造的"专业废话"生成工具,核心定位在于帮助用户快速生成各类工作汇报、周报月报、项目总结等场景下的"标准话术"。这款应用深谙职场沟通的艺术——说了很多,又好像什么都没说。应用采用"场景模板+语气词库"的策略实现内容生成,内置6套场景模板,每套模板包含开头、中间、结尾三部分,配合4种语气风格,理论组合数约648种变体。用户只需选择场景、设定语气、输入主题,即可获
废话生成器应用
欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net
一、项目概述
运行效果图





1.1 应用简介
废话生成器是一款专为职场人士打造的"专业废话"生成工具,核心定位在于帮助用户快速生成各类工作汇报、周报月报、项目总结等场景下的"标准话术"。这款应用深谙职场沟通的艺术——说了很多,又好像什么都没说。
应用采用"场景模板+语气词库"的策略实现内容生成,内置6套场景模板,每套模板包含开头、中间、结尾三部分,配合4种语气风格,理论组合数约648种变体。用户只需选择场景、设定语气、输入主题,即可获得专属的职场废话,支持历史记录和模板库功能。
1.2 核心功能
| 功能模块 | 功能描述 | 实现方式 |
|---|---|---|
| 场景选择 | 6大场景覆盖 | ChoiceChip组件 |
| 语气设定 | 4种风格切换 | FilterChip组件 |
| 长度控制 | 4档字数选择 | SegmentedButton |
| 内容生成 | 模板替换算法 | Map数据结构 |
| 一键复制 | 剪贴板操作 | SnackBar反馈 |
| 模板库 | 6套预设模板 | 静态数据配置 |
| 历史记录 | 生成内容存档 | 内存存储 |
1.3 场景与语气
| 场景 | 图标 | 适用情境 |
|---|---|---|
| 周报 | 📅 | 每周工作总结 |
| 月报 | 📊 | 月度工作汇报 |
| 年终总结 | 📝 | 年度工作回顾 |
| 项目汇报 | 📋 | 项目进展报告 |
| 述职报告 | 🎤 | 个人工作述职 |
| 会议纪要 | 👥 | 会议内容记录 |
| 语气 | 特色词汇 | 适用场景 |
|---|---|---|
| 正式 | 系统性、全方位、多维度 | 正式汇报场合 |
| 轻松 | 挺不错、还可以、蛮好的 | 内部沟通场景 |
| 鸡血 | 全力以赴、攻坚克难、勇攀高峰 | 激励型汇报 |
| 佛系 | 随缘、淡定、从容、水到渠成 | 轻松氛围场景 |
1.4 技术栈
| 技术领域 | 技术选型 | 版本要求 |
|---|---|---|
| 开发框架 | Flutter | >= 3.0.0 |
| 编程语言 | Dart | >= 2.17.0 |
| 设计规范 | Material Design 3 | - |
| 状态管理 | setState | - |
| 目标平台 | 鸿蒙OS | API 21+ |
1.5 项目结构
lib/
└── main_nonsense.dart
├── NonsenseGeneratorApp # 应用入口
├── MainScreen # 主屏幕(底部导航)
├── GeneratePage # 生成页面
├── TemplatePage # 模板库页面
├── HistoryPage # 历史记录页面
├── SettingsPage # 设置页面
├── TemplateDetailSheet # 模板详情底部面板
├── HistoryCard # 历史记录卡片
├── HistoryDetailSheet # 历史详情底部面板
├── NonsenseItem # 数据模型
├── NonsenseGenerator # 废话生成器
└── NonsenseStorage # 存储管理器
二、系统架构
2.1 整体架构图
2.2 类图设计
2.3 生成流程
三、核心模块设计
3.1 数据模型设计
3.1.1 废话条目模型 (NonsenseItem)
class NonsenseItem {
final String id; // 唯一标识(时间戳)
final String topic; // 主题关键词
final String scene; // 使用场景
final String tone; // 语气风格
final String content; // 生成内容
final String createdAt; // 创建时间(yyyy-MM-dd HH:mm)
}
3.1.2 废话生成器 (NonsenseGenerator)
class NonsenseGenerator {
static final Map<String, Map<String, List<String>>> _templates = {
'周报': {
'开头': [
'本周主要围绕{topic}展开工作,在团队协作方面取得显著进展。',
'过去一周,我们聚焦{topic},积极推进各项任务落地。',
'本周工作以{topic}为核心,整体进展顺利。',
],
'中间': [
'通过深度思考和持续优化,我们在{topic}方面形成了系统性的解决方案。',
'针对{topic},我们进行了多维度分析和全方位评估。',
'在{topic}的推进过程中,我们注重细节把控和质量管理。',
],
'结尾': [
'下周将继续深化{topic}相关工作,确保目标达成。',
'后续将持续关注{topic},推动项目稳步前进。',
'展望未来,我们将在{topic}领域持续发力,创造更大价值。',
],
},
// ... 其他场景模板
};
static final Map<String, List<String>> _buzzwords = {
'正式': ['系统性', '全方位', '多维度', '深层次', '高质量'],
'轻松': ['挺不错', '还可以', '蛮好的', '挺顺利', '基本OK'],
'鸡血': ['全力以赴', '攻坚克难', '勇攀高峰', '创造奇迹', '引领潮流'],
'佛系': ['随缘', '淡定', '从容', '平和', '顺其自然'],
};
static String generate({
required String topic,
required String scene,
required String tone,
required int length,
});
}
3.1.3 存储管理器 (NonsenseStorage)
class NonsenseStorage {
static final List<NonsenseItem> _history = [];
static List<NonsenseItem> get history => List.unmodifiable(_history);
static void addToHistory(NonsenseItem item) {
_history.insert(0, item);
if (_history.length > 100) {
_history.removeLast();
}
}
static void clearHistory();
}
3.2 场景选择器
3.2.1 选择器设计
3.2.2 实现代码
final List<Map<String, dynamic>> _scenes = [
{'name': '周报', 'icon': Icons.calendar_view_week},
{'name': '月报', 'icon': Icons.calendar_month},
{'name': '年终总结', 'icon': Icons.summarize},
{'name': '项目汇报', 'icon': Icons.assignment},
{'name': '述职报告', 'icon': Icons.record_voice_over},
{'name': '会议纪要', 'icon': Icons.groups},
];
Wrap(
spacing: 8,
runSpacing: 8,
children: _scenes.map((scene) {
final isSelected = _selectedScene == scene['name'];
return ChoiceChip(
avatar: Icon(scene['icon'], size: 18),
label: Text(scene['name']),
selected: isSelected,
onSelected: (selected) {
if (selected) {
setState(() {
_selectedScene = scene['name'];
});
}
},
);
}).toList(),
)
3.3 语气选择器
3.3.1 选择器设计
final List<Map<String, dynamic>> _tones = [
{'name': '正式', 'desc': '严肃专业'},
{'name': '轻松', 'desc': '自然随和'},
{'name': '鸡血', 'desc': '激情澎湃'},
{'name': '佛系', 'desc': '淡定从容'},
];
Wrap(
spacing: 8,
runSpacing: 8,
children: _tones.map((tone) {
final isSelected = _selectedTone == tone['name'];
return FilterChip(
label: Text('${tone['name']} · ${tone['desc']}'),
selected: isSelected,
onSelected: (selected) {
if (selected) {
setState(() {
_selectedTone = tone['name'];
});
}
},
);
}).toList(),
)
3.4 长度控制器
3.4.1 分段按钮实现
final List<int> _lengths = [100, 200, 500, 1000];
SegmentedButton<int>(
segments: _lengths.map((length) {
return ButtonSegment(
value: length,
label: Text('$length字'),
);
}).toList(),
selected: {_selectedLength},
onSelectionChanged: (selected) {
setState(() {
_selectedLength = selected.first;
});
},
)
3.5 模板库模块
3.5.1 模板列表
| 模板名称 | 适用场景 | 标签 |
|---|---|---|
| 周报万能模板 | 每周工作总结 | 周报、通用 |
| 项目延期说明 | 优雅解释延期 | 项目、延期 |
| 加薪申请话术 | 委婉加薪请求 | 加薪、沟通 |
| 会议纪要模板 | 快速生成纪要 | 会议、纪要 |
| 年终总结框架 | 年终总结结构 | 年终、总结 |
| 需求变更说明 | 应对需求变更 | 需求、变更 |
3.5.2 模板详情面板
DraggableScrollableSheet(
initialChildSize: 0.7,
minChildSize: 0.5,
maxChildSize: 0.9,
builder: (context, scrollController) {
return TemplateDetailSheet(
template: template,
scrollController: scrollController,
);
},
)
四、UI设计规范
4.1 配色方案
应用采用浅色主题配合绿色主色调,营造专业清新的氛围:
| 颜色类型 | 色值 | 用途 |
|---|---|---|
| 主色 | #6B8E6B | AppBar、强调、按钮 |
| 背景色 | #FFFFFF | 纯白背景 |
| 表面色 | #F5F5F5 | 浅灰卡片背景 |
| 主容器色 | #E8F5E9 | 浅绿选中状态 |
| 次容器色 | #E0F2F1 | 浅青辅助色 |
4.2 字体规范
| 层级 | 字号 | 字重 | 用途 |
|---|---|---|---|
| 标题大字 | headlineSmall | Bold | 页面主标题 |
| 卡片标题 | titleMedium | Bold | 模板标题 |
| 正文 | bodyLarge | Regular | 生成内容 |
| 辅助文字 | bodySmall | Regular | 标签、时间 |
4.3 组件规范
4.3.1 生成页面布局
┌─────────────────────────────────┐
│ ━━━━━━━━━━━━━━━━━━━━━━━━━━━ │ ← 可折叠AppBar
│ ✨ 废话生成器 │
├─────────────────────────────────┤
│ 使用场景 │
│ ┌────┐ ┌────┐ ┌────┐ │
│ │📅周报│ │📊月报│ │📝年终│ │ ← ChoiceChip
│ └────┘ └────┘ └────┘ │
│ ┌────┐ ┌────┐ ┌────┐ │
│ │📋项目│ │🎤述职│ │👥会议│ │
│ └────┘ └────┘ └────┘ │
│ │
│ 语气风格 │
│ ┌──────────┐ ┌──────────┐ │
│ │正式·严肃专业│ │轻松·自然随和│ │ ← FilterChip
│ └──────────┘ └──────────┘ │
│ │
│ 生成长度 │
│ ┌────┬────┬────┬────┐ │
│ │100字│200字│500字│1000字│ │ ← SegmentedButton
│ └────┴────┴────┴────┘ │
│ │
│ 主题关键词 │
│ ┌─────────────────────────┐ │
│ │ 项目进度... ✕ │ │ ← 输入框
│ └─────────────────────────┘ │
│ │
│ ┌─────────────────────────┐ │
│ │ ✨ 生成废话 │ │ ← 主按钮
│ └─────────────────────────┘ │
│ │
│ 生成结果 │
│ ┌─────────────────────────┐ │
│ │ 本周主要围绕项目进度... │ │ ← 结果文本
│ └─────────────────────────┘ │
│ [📋复制] [↗️分享] │
└─────────────────────────────────┘
4.3.2 历史卡片
┌─────────────────────────────────┐
│ ┌──────┐ ┌──────┐ 2024-01-15│
│ │ 周报 │ │ 正式 │ │
│ └──────┘ └──────┘ │
│ 主题:项目进度 │
│ 本周主要围绕项目进度展开工作... │
└─────────────────────────────────┘
4.4 交互设计
4.4.1 操作方式
| 操作 | 手势 | 效果 |
|---|---|---|
| 选择场景 | 点击ChoiceChip | 切换场景类型 |
| 选择语气 | 点击FilterChip | 切换语气风格 |
| 选择长度 | 点击SegmentedButton | 切换字数档位 |
| 生成废话 | 点击生成按钮 | 启动生成流程 |
| 复制文本 | 点击复制按钮 | 复制到剪贴板 |
| 查看历史 | 点击历史卡片 | 打开详情面板 |
五、核心功能实现
5.1 废话生成
Future<void> _generateNonsense() async {
if (_topicController.text.isEmpty) {
_showSnackBar('请输入主题关键词');
return;
}
setState(() {
_isGenerating = true;
_generationProgress = 0;
_generatedText = null;
});
for (int i = 0; i <= 10; i++) {
await Future.delayed(const Duration(milliseconds: 100));
if (!mounted) return;
setState(() {
_generationProgress = i / 10;
});
}
final text = NonsenseGenerator.generate(
topic: _topicController.text,
scene: _selectedScene,
tone: _selectedTone,
length: _selectedLength,
);
if (!mounted) return;
setState(() {
_isGenerating = false;
_generatedText = text;
});
NonsenseStorage.addToHistory(NonsenseItem(
id: DateTime.now().millisecondsSinceEpoch.toString(),
topic: _topicController.text,
scene: _selectedScene,
tone: _selectedTone,
content: text,
createdAt: _formatDateTime(DateTime.now()),
));
}
5.2 模板替换算法
static String generate({
required String topic,
required String scene,
required String tone,
required int length,
}) {
final random = Random();
final sceneTemplates = _templates[scene] ?? _templates['周报']!;
final toneWords = _buzzwords[tone] ?? _buzzwords['正式']!;
String result = '';
// 开头
final opening = sceneTemplates['开头']![random.nextInt(sceneTemplates['开头']!.length)];
result += opening.replaceAll('{topic}', topic);
result += '\n\n';
// 中间段落(根据长度决定段落数)
final paragraphCount = length > 500 ? 4 : (length > 200 ? 2 : 1);
for (int i = 0; i < paragraphCount; i++) {
final middle = sceneTemplates['中间']![random.nextInt(sceneTemplates['中间']!.length)];
var paragraph = middle.replaceAll('{topic}', topic);
// 插入语气词
if (random.nextBool()) {
final buzzword = toneWords[random.nextInt(toneWords.length)];
paragraph = paragraph.replaceFirst(',', ',$buzzword');
}
result += paragraph;
result += '\n\n';
}
// 结尾
final ending = sceneTemplates['结尾']![random.nextInt(sceneTemplates['结尾']!.length)];
result += ending.replaceAll('{topic}', topic);
// 调整长度
if (result.length > length) {
result = result.substring(0, length);
final lastPeriod = result.lastIndexOf('。');
if (lastPeriod > length * 0.8) {
result = result.substring(0, lastPeriod + 1);
}
}
return result;
}
5.3 历史管理
static void addToHistory(NonsenseItem item) {
_history.insert(0, item);
if (_history.length > 100) {
_history.removeLast();
}
}
六、职场写作知识拓展
6.1 职场汇报的作用
6.2 汇报写作技巧
| 技巧 | 说明 |
|---|---|
| 结构清晰 | 开头-中间-结尾三段式 |
| 数据支撑 | 用数据说话,增强说服力 |
| 突出重点 | 先说结论,再展开细节 |
| 正面表达 | 用积极词汇描述工作 |
| 展望未来 | 提出下一步计划和目标 |
6.3 不同场景汇报特点
| 场景 | 篇幅 | 重点 | 语气 |
|---|---|---|---|
| 周报 | 简短 | 本周进展、下周计划 | 简洁 |
| 月报 | 中等 | 月度成果、数据分析 | 客观 |
| 年终总结 | 较长 | 年度亮点、成长收获 | 正式 |
| 项目汇报 | 中等 | 项目进展、风险问题 | 专业 |
| 述职报告 | 较长 | 个人贡献、能力提升 | 自信 |
| 会议纪要 | 简短 | 决议事项、行动项 | 精炼 |
6.4 职场沟通发展趋势
七、扩展功能规划
7.1 后续版本规划
7.2 功能扩展建议
7.2.1 智能生成功能
| 功能 | 说明 |
|---|---|
| AI大模型接入 | 接入GPT等大语言模型 |
| 语义理解 | 理解用户真实意图 |
| 个性化推荐 | 根据历史推荐模板 |
| 多轮对话 | 支持追问和修改 |
7.2.2 行业定制功能
| 功能 | 说明 |
|---|---|
| 行业模板 | 互联网、金融、制造业等 |
| 岗位模板 | 技术、产品、运营等 |
| 公司模板 | 大厂、创业公司等 |
7.2.3 协作分享功能
| 功能 | 说明 |
|---|---|
| 模板分享 | 分享自定义模板 |
| 团队协作 | 团队共享模板库 |
| 社区互动 | 用户交流社区 |
八、注意事项
8.1 开发注意事项
-
字符串插值:简单变量使用
$variable而非${variable} -
控制器释放:在dispose中释放TextEditingController
-
状态同步:弹窗使用StatefulBuilder保持状态同步
-
历史上限:历史记录限制100条,防止内存溢出
-
输入校验:生成前校验主题关键词非空
8.2 用户体验优化
✨ 用户体验建议 ✨
- 场景选择直观,图标+文字组合
- 语气风格描述清晰,降低选择成本
- 生成进度可视化,增强反馈感
- 结果支持一键复制,提升效率
8.3 常见问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 生成内容重复 | 随机种子相同 | 检查Random实例 |
| 复制不成功 | 剪贴板权限 | 添加权限声明 |
| 历史记录丢失 | 内存存储重启清空 | 迁移至持久化存储 |
| 长度不准确 | 截断位置不当 | 在句号处截断 |
九、运行说明
9.1 环境要求
| 环境 | 版本要求 |
|---|---|
| Flutter SDK | >= 3.0.0 |
| Dart SDK | >= 2.17.0 |
| 鸿蒙OS | API 21+ |
9.2 运行命令
# 查看可用设备
flutter devices
# 运行到鸿蒙设备
flutter run -d 127.0.0.1:5555 lib/main_nonsense.dart
# 运行到Windows
flutter run -d windows -t lib/main_nonsense.dart
# 代码分析
flutter analyze lib/main_nonsense.dart
十、总结
废话生成器应用通过"场景模板+语气词库"的策略,为用户提供快速生成职场废话的能力。应用内置6套场景模板,每套包含开头、中间、结尾三部分,配合4种语气风格,理论组合数约648种变体,满足不同职场场景的汇报需求。
应用采用浅色主题配合绿色主色调,营造专业清新的氛围。生成页面采用ChoiceChip展示场景选择、FilterChip展示语气风格、SegmentedButton展示长度控制,交互直观便捷。生成过程可视化,用户可以实时看到生成进度。
模板库提供6套预设模板,涵盖周报、延期说明、加薪申请、会议纪要、年终总结、需求变更等常见场景,用户可以快速查看和复制常用话术。历史记录功能保留最近100条生成记录,支持查看详情和一键清空。
应用采用Material Design 3设计规范,遵循Flutter最佳实践,代码结构清晰,易于维护和扩展。后续版本计划集成真实剪贴板、本地持久化存储、AI智能生成等功能,为用户提供更完善的职场写作体验。
废话生成器,让职场汇报更轻松!
更多推荐



所有评论(0)