马良AI写作初始化仓库

This commit is contained in:
邓滨杰
2025-09-10 00:07:52 +08:00
parent 3c06bb1a03
commit 39c0f8840f
1309 changed files with 318528 additions and 0 deletions

View File

@@ -0,0 +1,120 @@
import 'package:ainoval/blocs/editor_version_bloc.dart';
import 'package:ainoval/config/app_config.dart';
import 'package:ainoval/ui/dialogs/scene_history_dialog.dart';
import 'package:ainoval/utils/logger.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
/// 编辑器工具栏中添加版本历史按钮
Widget buildToolbarVersionHistoryButton(BuildContext context) {
// 获取当前编辑器的场景信息
final novelId = getCurrentNovelId(context);
final chapterId = getCurrentChapterId(context);
final sceneId = getCurrentSceneId(context);
// 如果没有有效的场景ID则禁用按钮
final bool isEnabled = novelId.isNotEmpty &&
chapterId.isNotEmpty &&
sceneId.isNotEmpty;
return IconButton(
icon: const Icon(Icons.history),
tooltip: '版本历史',
onPressed: isEnabled ? () => _showHistoryDialog(
context,
novelId,
chapterId,
sceneId
) : null,
);
}
/// 添加版本保存功能
Future<void> saveVersionWithHistory(
BuildContext context,
String content,
{String reason = '手动保存'}
) async {
// 获取当前编辑器的场景信息
final novelId = getCurrentNovelId(context);
final chapterId = getCurrentChapterId(context);
final sceneId = getCurrentSceneId(context);
if (novelId.isEmpty || chapterId.isEmpty || sceneId.isEmpty) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('无法识别当前编辑的场景'))
);
return;
}
// 使用版本控制Bloc保存版本
context.read<EditorVersionBloc>().add(EditorVersionSave(
novelId: novelId,
chapterId: chapterId,
sceneId: sceneId,
content: content,
userId: AppConfig.userId ?? 'system',
reason: reason,
));
// 显示保存提示
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('已保存当前版本'))
);
}
/// 显示历史版本对话框
void _showHistoryDialog(
BuildContext context,
String novelId,
String chapterId,
String sceneId
) {
showDialog(
context: context,
builder: (context) => SceneHistoryDialog(
novelId: novelId,
chapterId: chapterId,
sceneId: sceneId,
),
).then((restoredScene) {
// 如果恢复了历史版本,更新编辑器内容
if (restoredScene != null) {
updateEditorContent(context, restoredScene.content);
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('已恢复到历史版本'))
);
}
});
}
/// 获取当前编辑的小说ID
String getCurrentNovelId(BuildContext context) {
// 从编辑器状态中获取当前小说ID
// 实际应用中需要替换为真实实现
return '1'; // 使用样例ID方便测试
}
/// 获取当前编辑的章节ID
String getCurrentChapterId(BuildContext context) {
// 从编辑器状态中获取当前章节ID
// 实际应用中需要替换为真实实现
return 'chapter_1'; // 使用样例ID方便测试
}
/// 获取当前编辑的场景ID
String getCurrentSceneId(BuildContext context) {
// 从编辑器状态中获取当前场景ID
// 实际应用中需要替换为真实实现
return '1234567890'; // 使用样例ID方便测试
}
/// 更新编辑器内容
void updateEditorContent(BuildContext context, String content) {
// 更新编辑器内容的实现
AppLogger.i('Ui/screens/editor_screen', '更新编辑器内容: $content');
// 实际应用中需要调用编辑器的更新方法
// TODO: 实现真实的编辑器内容更新逻辑
}