73 lines
2.4 KiB
Dart
73 lines
2.4 KiB
Dart
import 'package:ainoval/screens/next_outline/next_outline_screen.dart';
|
|
import 'package:ainoval/utils/web_theme.dart';
|
|
import 'package:flutter/material.dart';
|
|
|
|
/// 剧情推演视图 - 全局通用组件
|
|
///
|
|
/// 此组件作为剧情推演功能的顶级容器,负责:
|
|
/// 1. 提供统一的主题样式和布局约束
|
|
/// 2. 在编辑器中嵌入剧情推演功能
|
|
/// 3. 管理与外部组件的交互回调
|
|
///
|
|
/// 设计原则:
|
|
/// - 使用纯黑白配色方案,保持现代简洁的视觉风格
|
|
/// - 采用全局主题WebTheme进行样式统一
|
|
/// - 提供合理的布局间距,避免界面拥挤或臃肿
|
|
/// - 支持响应式设计,适配不同屏幕尺寸
|
|
class NextOutlineView extends StatelessWidget {
|
|
/// 小说ID - 用于标识当前编辑的小说
|
|
final String novelId;
|
|
|
|
/// 小说标题 - 用于显示上下文信息
|
|
final String novelTitle;
|
|
|
|
/// 切换到写作模式回调 - 用于在推演完成后返回编辑器
|
|
final VoidCallback onSwitchToWrite;
|
|
|
|
/// 跳转到添加模型页面的回调 - 用于配置AI模型
|
|
final VoidCallback? onNavigateToAddModel;
|
|
|
|
/// 跳转到配置特定模型页面的回调 - 用于模型参数调整
|
|
final Function(String configId)? onConfigureModel;
|
|
|
|
const NextOutlineView({
|
|
Key? key,
|
|
required this.novelId,
|
|
required this.novelTitle,
|
|
required this.onSwitchToWrite,
|
|
this.onNavigateToAddModel,
|
|
this.onConfigureModel,
|
|
}) : super(key: key);
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Container(
|
|
// 使用主题定义的纯净背景色,确保视觉统一
|
|
decoration: BoxDecoration(
|
|
color: WebTheme.getSurfaceColor(context),
|
|
),
|
|
child: Column(
|
|
children: [
|
|
// 主内容区域 - 使用Expanded确保占据所有可用空间
|
|
Expanded(
|
|
child: Container(
|
|
// 设置最大宽度,防止在超宽屏幕上内容过于分散
|
|
constraints: const BoxConstraints(
|
|
maxWidth: 1400, // 合理的最大宽度约束
|
|
),
|
|
margin: const EdgeInsets.symmetric(horizontal: 16), // 左右边距
|
|
child: NextOutlineScreen(
|
|
novelId: novelId,
|
|
novelTitle: novelTitle,
|
|
onSwitchToWrite: onSwitchToWrite,
|
|
onNavigateToAddModel: onNavigateToAddModel,
|
|
onConfigureModel: onConfigureModel,
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
}
|