304 lines
11 KiB
Dart
304 lines
11 KiB
Dart
import '../models/conversation_scenario.dart';
|
|
|
|
/// 对话场景静态数据
|
|
class ScenarioData {
|
|
static final List<ConversationScenario> _scenarios = [
|
|
ConversationScenario(
|
|
id: 'restaurant_ordering',
|
|
title: 'Ordering Food at Restaurant',
|
|
subtitle: '餐厅点餐对话',
|
|
description: '学习在餐厅点餐的常用英语表达,包括询问菜单、下订单、特殊要求等。',
|
|
duration: '10分钟',
|
|
level: 'B1',
|
|
type: ScenarioType.restaurant,
|
|
objectives: [
|
|
'学会阅读英文菜单',
|
|
'掌握点餐的基本表达',
|
|
'学会提出特殊要求',
|
|
'了解餐厅服务流程',
|
|
],
|
|
keyPhrases: [
|
|
'I\'d like to order...',
|
|
'What do you recommend?',
|
|
'Could I have the menu, please?',
|
|
'I\'m allergic to...',
|
|
'Could you make it less spicy?',
|
|
'Check, please.',
|
|
],
|
|
steps: [
|
|
ScenarioStep(
|
|
stepNumber: 1,
|
|
title: '入座问候',
|
|
description: '服务员引导您入座并提供菜单',
|
|
role: 'npc',
|
|
content: 'Good evening! Welcome to our restaurant. How many people are in your party?',
|
|
options: [
|
|
'Just one, please.',
|
|
'Table for two, please.',
|
|
'We have a reservation under Smith.',
|
|
],
|
|
correctOption: null,
|
|
),
|
|
ScenarioStep(
|
|
stepNumber: 2,
|
|
title: '查看菜单',
|
|
description: '服务员询问您是否需要时间看菜单',
|
|
role: 'npc',
|
|
content: 'Here\'s your table. Would you like to see the menu, or do you need a few minutes?',
|
|
options: [
|
|
'Could I have the menu, please?',
|
|
'I need a few minutes to decide.',
|
|
'What do you recommend?',
|
|
],
|
|
correctOption: null,
|
|
),
|
|
ScenarioStep(
|
|
stepNumber: 3,
|
|
title: '点餐',
|
|
description: '服务员准备为您点餐',
|
|
role: 'npc',
|
|
content: 'Are you ready to order, or would you like to hear about our specials?',
|
|
options: [
|
|
'I\'d like to hear about the specials.',
|
|
'I\'m ready to order.',
|
|
'Could you give me a few more minutes?',
|
|
],
|
|
correctOption: null,
|
|
),
|
|
ScenarioStep(
|
|
stepNumber: 4,
|
|
title: '下订单',
|
|
description: '告诉服务员您想要什么',
|
|
role: 'user',
|
|
content: 'What would you like to order?',
|
|
options: [
|
|
'I\'d like the grilled salmon, please.',
|
|
'Could I have the pasta with marinara sauce?',
|
|
'I\'ll have the chicken Caesar salad.',
|
|
],
|
|
correctOption: null,
|
|
),
|
|
ScenarioStep(
|
|
stepNumber: 5,
|
|
title: '特殊要求',
|
|
description: '提出任何特殊的饮食要求',
|
|
role: 'npc',
|
|
content: 'How would you like that cooked? Any special requests?',
|
|
options: [
|
|
'Medium rare, please.',
|
|
'Could you make it less spicy?',
|
|
'I\'m allergic to nuts, please make sure there are none.',
|
|
],
|
|
correctOption: null,
|
|
),
|
|
],
|
|
createdAt: DateTime.now(),
|
|
),
|
|
ConversationScenario(
|
|
id: 'job_interview',
|
|
title: 'Job Interview Practice',
|
|
subtitle: '工作面试练习',
|
|
description: '模拟真实的英语工作面试场景,练习自我介绍、回答常见问题和提问技巧。',
|
|
duration: '15分钟',
|
|
level: 'B2',
|
|
type: ScenarioType.interview,
|
|
objectives: [
|
|
'掌握自我介绍技巧',
|
|
'学会回答常见面试问题',
|
|
'练习询问公司信息',
|
|
'提高面试自信心',
|
|
],
|
|
keyPhrases: [
|
|
'Tell me about yourself.',
|
|
'What are your strengths?',
|
|
'Why do you want this job?',
|
|
'Where do you see yourself in 5 years?',
|
|
'Do you have any questions for us?',
|
|
'Thank you for your time.',
|
|
],
|
|
steps: [
|
|
ScenarioStep(
|
|
stepNumber: 1,
|
|
title: '面试开始',
|
|
description: '面试官欢迎您并开始面试',
|
|
role: 'npc',
|
|
content: 'Good morning! Please have a seat. Thank you for coming in today.',
|
|
options: [
|
|
'Good morning! Thank you for having me.',
|
|
'Hello! I\'m excited to be here.',
|
|
'Thank you for the opportunity.',
|
|
],
|
|
correctOption: null,
|
|
),
|
|
ScenarioStep(
|
|
stepNumber: 2,
|
|
title: '自我介绍',
|
|
description: '面试官要求您进行自我介绍',
|
|
role: 'npc',
|
|
content: 'Let\'s start with you telling me a little bit about yourself.',
|
|
options: [
|
|
'I have 5 years of experience in marketing...',
|
|
'I\'m a recent graduate with a degree in...',
|
|
'I\'m currently working as a... and looking for new challenges.',
|
|
],
|
|
correctOption: null,
|
|
),
|
|
ScenarioStep(
|
|
stepNumber: 3,
|
|
title: '优势询问',
|
|
description: '面试官询问您的优势',
|
|
role: 'npc',
|
|
content: 'What would you say are your greatest strengths?',
|
|
options: [
|
|
'I\'m very detail-oriented and organized.',
|
|
'I work well under pressure and meet deadlines.',
|
|
'I\'m a strong team player with good communication skills.',
|
|
],
|
|
correctOption: null,
|
|
),
|
|
ScenarioStep(
|
|
stepNumber: 4,
|
|
title: '职业规划',
|
|
description: '面试官询问您的职业规划',
|
|
role: 'npc',
|
|
content: 'Where do you see yourself in five years?',
|
|
options: [
|
|
'I see myself in a leadership role, managing a team.',
|
|
'I want to become an expert in my field.',
|
|
'I hope to have grown professionally and taken on more responsibilities.',
|
|
],
|
|
correctOption: null,
|
|
),
|
|
ScenarioStep(
|
|
stepNumber: 5,
|
|
title: '提问环节',
|
|
description: '面试官询问您是否有问题',
|
|
role: 'npc',
|
|
content: 'Do you have any questions about the company or the position?',
|
|
options: [
|
|
'What does a typical day look like in this role?',
|
|
'What are the opportunities for professional development?',
|
|
'What do you enjoy most about working here?',
|
|
],
|
|
correctOption: null,
|
|
),
|
|
],
|
|
createdAt: DateTime.now(),
|
|
),
|
|
ConversationScenario(
|
|
id: 'business_meeting',
|
|
title: 'Business Meeting Discussion',
|
|
subtitle: '商务会议讨论',
|
|
description: '参与英语商务会议,学习表达观点、提出建议和进行专业讨论。',
|
|
duration: '20分钟',
|
|
level: 'C1',
|
|
type: ScenarioType.business,
|
|
objectives: [
|
|
'学会在会议中表达观点',
|
|
'掌握商务讨论技巧',
|
|
'练习提出建议和反对意见',
|
|
'提高商务英语水平',
|
|
],
|
|
keyPhrases: [
|
|
'I\'d like to propose...',
|
|
'From my perspective...',
|
|
'I agree with your point, however...',
|
|
'Could we consider...',
|
|
'Let\'s move on to the next item.',
|
|
'To summarize...',
|
|
],
|
|
steps: [
|
|
ScenarioStep(
|
|
stepNumber: 1,
|
|
title: '会议开始',
|
|
description: '会议主持人开始会议并介绍议程',
|
|
role: 'npc',
|
|
content: 'Good morning, everyone. Let\'s begin today\'s meeting. Our main agenda is to discuss the new marketing strategy.',
|
|
options: [
|
|
'Good morning! I\'m looking forward to the discussion.',
|
|
'Thank you for organizing this meeting.',
|
|
'I have some ideas I\'d like to share.',
|
|
],
|
|
correctOption: null,
|
|
),
|
|
ScenarioStep(
|
|
stepNumber: 2,
|
|
title: '观点表达',
|
|
description: '主持人邀请您分享观点',
|
|
role: 'npc',
|
|
content: 'What are your thoughts on our current marketing approach?',
|
|
options: [
|
|
'I think we should focus more on digital marketing.',
|
|
'From my perspective, we need to target younger demographics.',
|
|
'I believe our current strategy is effective, but we could improve...',
|
|
],
|
|
correctOption: null,
|
|
),
|
|
ScenarioStep(
|
|
stepNumber: 3,
|
|
title: '建议提出',
|
|
description: '有人提出了一个建议,您需要回应',
|
|
role: 'npc',
|
|
content: 'I propose we increase our social media budget by 30%. What do you think?',
|
|
options: [
|
|
'That\'s an interesting proposal. Could we see some data first?',
|
|
'I agree, but we should also consider the ROI.',
|
|
'I have some concerns about that approach.',
|
|
],
|
|
correctOption: null,
|
|
),
|
|
ScenarioStep(
|
|
stepNumber: 4,
|
|
title: '讨论深入',
|
|
description: '深入讨论具体实施方案',
|
|
role: 'npc',
|
|
content: 'How do you suggest we implement this new strategy?',
|
|
options: [
|
|
'We could start with a pilot program.',
|
|
'I recommend we form a dedicated team.',
|
|
'Let\'s set clear milestones and deadlines.',
|
|
],
|
|
correctOption: null,
|
|
),
|
|
ScenarioStep(
|
|
stepNumber: 5,
|
|
title: '会议总结',
|
|
description: '总结会议要点和下一步行动',
|
|
role: 'npc',
|
|
content: 'Let\'s summarize what we\'ve discussed and assign action items.',
|
|
options: [
|
|
'I can take responsibility for the market research.',
|
|
'Should we schedule a follow-up meeting?',
|
|
'I\'ll prepare a detailed proposal by next week.',
|
|
],
|
|
correctOption: null,
|
|
),
|
|
],
|
|
createdAt: DateTime.now(),
|
|
),
|
|
];
|
|
|
|
/// 获取所有场景
|
|
static List<ConversationScenario> getAllScenarios() {
|
|
return List.from(_scenarios);
|
|
}
|
|
|
|
/// 根据ID获取场景
|
|
static ConversationScenario? getScenarioById(String id) {
|
|
try {
|
|
return _scenarios.firstWhere((scenario) => scenario.id == id);
|
|
} catch (e) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/// 根据类型获取场景
|
|
static List<ConversationScenario> getScenariosByType(ScenarioType type) {
|
|
return _scenarios.where((scenario) => scenario.type == type).toList();
|
|
}
|
|
|
|
/// 根据难度级别获取场景
|
|
static List<ConversationScenario> getScenariosByLevel(String level) {
|
|
return _scenarios.where((scenario) => scenario.level == level).toList();
|
|
}
|
|
} |