238 lines
11 KiB
Dart
238 lines
11 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:stacked/stacked.dart';
|
|
import 'package:stacked/stacked_annotations.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/duolingo_view.form.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_assessments_screens.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_finish_screen.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_intro_screen.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_listening_assessment_1_question.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_listening_assessment_1_review.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_listening_assessment_2_question.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_listening_assessment_2_review.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_listening_assessment_3_question.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_retake_screen.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_speaking_assessment_1_answer.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_speaking_assessment_1_question.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_speaking_assessment_1_review.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_speaking_assessment_2_answer.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_speaking_assessment_2_question.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_speaking_assessment_2_review.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_speaking_assessment_3_answer.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_speaking_assessment_3_question.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_speaking_assessment_3_review.dart'
|
|
hide DuolingoSpeakingAssessment2Question;
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_speaking_assessment_4_answer.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_speaking_assessment_4_question.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_speaking_assessment_4_review.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_writing_assessment_1_question.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_writing_assessment_1_review.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_writing_assessment_2_answer.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_writing_assessment_2_question.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_writing_assessment_2_review.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_writing_assessment_3_question.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_writing_assessment_3_review.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_writing_assessment_4_question.dart';
|
|
import 'package:yimaru_app/ui/views/duolingo/screens/duolingo_writing_assessment_4_review.dart';
|
|
|
|
import '../../common/app_colors.dart';
|
|
import '../../common/validators/form_validator.dart';
|
|
import 'duolingo_viewmodel.dart';
|
|
|
|
@FormView(fields: [
|
|
FormTextField(name: 'assessment', validator: FormValidator.validateForm),
|
|
])
|
|
class DuolingoView extends StackedView<DuolingoViewModel> with $DuolingoView {
|
|
const DuolingoView({Key? key}) : super(key: key);
|
|
|
|
Widget _buildQuestionScreen(DuolingoViewModel viewModel) {
|
|
if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Speak About the Photo') {
|
|
return const DuolingoSpeakingAssessment1Question();
|
|
} else if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Read, Then Speak') {
|
|
return const DuolingoSpeakingAssessment2Question();
|
|
} else if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Speaking Sample') {
|
|
return const DuolingoSpeakingAssessment3Question();
|
|
} else if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Interactive Speaking') {
|
|
return const DuolingoSpeakingAssessment4Question();
|
|
} else if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Write About the Photo') {
|
|
return DuolingoWritingAssessment1Question(
|
|
assessmentController: assessmentController);
|
|
} else if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Writing Sample') {
|
|
return DuolingoWritingAssessment2Question(
|
|
assessmentController: assessmentController);
|
|
} else if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Interactive Writing Part 1') {
|
|
return DuolingoWritingAssessment3Question(
|
|
assessmentController: assessmentController);
|
|
} else if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Interactive Writing Part 2') {
|
|
return DuolingoWritingAssessment4Question(
|
|
assessmentController: assessmentController);
|
|
} else if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Listen and Type') {
|
|
return DuolingoListeningAssessment1Question(
|
|
assessmentController: assessmentController);
|
|
} else if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Interactive Listening - Part 1') {
|
|
return DuolingoListeningAssessment2Question(
|
|
assessmentController: assessmentController);
|
|
} else if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Interactive Listening - Part 2') {
|
|
return DuolingoListeningAssessment3Question(
|
|
assessmentController: assessmentController);
|
|
}
|
|
|
|
return Container();
|
|
}
|
|
|
|
Widget _buildAnswerScreen(DuolingoViewModel viewModel) {
|
|
if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Speak About the Photo') {
|
|
return const DuolingoSpeakingAssessment1Answer();
|
|
} else if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Read, Then Speak') {
|
|
return const DuolingoSpeakingAssessment2Answer();
|
|
} else if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Speaking Sample') {
|
|
return const DuolingoSpeakingAssessment3Answer();
|
|
} else if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Interactive Speaking') {
|
|
return const DuolingoSpeakingAssessment4Answer();
|
|
} else if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Write About the Photo') {
|
|
return Container();
|
|
} else if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Writing Sample') {
|
|
return DuolingoWritingAssessment2Answer(
|
|
assessmentController: assessmentController);
|
|
} else if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Interactive Writing Part 1') {
|
|
return Container();
|
|
} else if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Interactive Writing Part 2') {
|
|
return Container();
|
|
} else if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Listen and Type') {
|
|
return Container();
|
|
} else if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Interactive Listening - Part 1') {
|
|
return Container();
|
|
}
|
|
|
|
return Container();
|
|
}
|
|
|
|
Widget _buildReviewScreen(DuolingoViewModel viewModel) {
|
|
if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Speak About the Photo') {
|
|
return const DuolingoSpeakingAssessment1Review();
|
|
} else if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Read, Then Speak') {
|
|
return const DuolingoSpeakingAssessment2Review();
|
|
} else if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Speaking Sample') {
|
|
return const DuolingoSpeakingAssessment3Review();
|
|
} else if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Interactive Speaking') {
|
|
return const DuolingoSpeakingAssessment4Review();
|
|
} else if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Write About the Photo') {
|
|
return DuolingoWritingAssessment1Review(
|
|
assessmentController: assessmentController);
|
|
} else if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Writing Sample') {
|
|
return DuolingoWritingAssessment2Review(
|
|
assessmentController: assessmentController);
|
|
} else if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Interactive Writing Part 1') {
|
|
return DuolingoWritingAssessment3Review(
|
|
assessmentController: assessmentController);
|
|
} else if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Interactive Writing Part 2') {
|
|
return DuolingoWritingAssessment4Review(
|
|
assessmentController: assessmentController);
|
|
} else if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Listen and Type') {
|
|
return DuolingoListeningAssessment1Review(
|
|
assessmentController: assessmentController);
|
|
} else if (viewModel.selectedAssessment['intro_title'] ==
|
|
'Interactive Listening - Part 1') {
|
|
return DuolingoListeningAssessment2Review(
|
|
assessmentController: assessmentController);
|
|
}
|
|
|
|
return Container();
|
|
}
|
|
|
|
@override
|
|
DuolingoViewModel viewModelBuilder(BuildContext context) =>
|
|
DuolingoViewModel();
|
|
|
|
@override
|
|
Widget builder(
|
|
BuildContext context,
|
|
DuolingoViewModel viewModel,
|
|
Widget? child,
|
|
) =>
|
|
_buildScaffoldWrapper(viewModel);
|
|
|
|
Widget _buildScaffoldWrapper(DuolingoViewModel viewModel) => PopScope(
|
|
canPop: true,
|
|
onPopInvokedWithResult: (value, data) {
|
|
if (!value) return;
|
|
WidgetsBinding.instance.addPostFrameCallback((_) => viewModel.goBack());
|
|
},
|
|
child: _buildScaffold(viewModel));
|
|
|
|
Widget _buildScaffold(DuolingoViewModel viewModel) => Scaffold(
|
|
backgroundColor: kcBackgroundColor,
|
|
body: _buildBody(viewModel),
|
|
);
|
|
|
|
Widget _buildBody(DuolingoViewModel viewModel) => IndexedStack(
|
|
index: viewModel.currentIndex, children: _buildScreens(viewModel));
|
|
|
|
List<Widget> _buildScreens(DuolingoViewModel viewModel) => [
|
|
_buildDuolingoAssessmentsScreen(),
|
|
_buildDuolingoIntroScreen(viewModel),
|
|
_buildDuolingoQuestionScreen(viewModel),
|
|
_buildDuolingoAnswerScreen(viewModel),
|
|
_buildDuolingoReviewScreen(viewModel),
|
|
_buildDuolingoRetakeScreen(viewModel),
|
|
_buildDuolingoFinishScreen(viewModel),
|
|
];
|
|
|
|
Widget _buildDuolingoAssessmentsScreen() =>
|
|
const DuolingoAssessmentsScreens();
|
|
|
|
Widget _buildDuolingoIntroScreen(DuolingoViewModel viewModel) =>
|
|
DuolingoIntroScreen(
|
|
type: viewModel.selectedAssessment['type'],
|
|
title: viewModel.selectedAssessment['intro_title'],
|
|
subtitle: viewModel.selectedAssessment['intro_subtitle']);
|
|
|
|
Widget _buildDuolingoQuestionScreen(DuolingoViewModel viewModel) =>
|
|
_buildQuestionScreen(viewModel);
|
|
|
|
Widget _buildDuolingoAnswerScreen(DuolingoViewModel viewModel) =>
|
|
_buildAnswerScreen(viewModel);
|
|
|
|
Widget _buildDuolingoReviewScreen(DuolingoViewModel viewModel) =>
|
|
_buildReviewScreen(viewModel);
|
|
|
|
Widget _buildDuolingoRetakeScreen(DuolingoViewModel viewModel) =>
|
|
DuolingoRetakeScreen(
|
|
title: viewModel.selectedAssessment['outro_title'],
|
|
subtitle: viewModel.selectedAssessment['outro_subtitle']);
|
|
|
|
Widget _buildDuolingoFinishScreen(DuolingoViewModel viewModel) =>
|
|
DuolingoFinishScreen(
|
|
title: viewModel.selectedAssessment['outro_title'],
|
|
subtitle: viewModel.selectedAssessment['outro_subtitle']);
|
|
}
|