Yimaru-Mobile/lib/ui/views/onboarding/onboarding_view.dart

110 lines
4.0 KiB
Dart

import 'package:flutter/material.dart';
import 'package:stacked/stacked.dart';
import 'package:stacked/stacked_annotations.dart';
import 'package:yimaru_app/ui/views/onboarding/screens/age_group_form_screen.dart';
import 'package:yimaru_app/ui/views/onboarding/screens/birthday_form_screen.dart';
import 'package:yimaru_app/ui/views/onboarding/screens/challenge_form_screen.dart';
import 'package:yimaru_app/ui/views/onboarding/screens/country_region_form_screen.dart';
import 'package:yimaru_app/ui/views/onboarding/screens/educational_background_form_screen.dart';
import 'package:yimaru_app/ui/views/onboarding/screens/full_name_form_screen.dart';
import 'package:yimaru_app/ui/views/onboarding/screens/gender_form_screen.dart';
import 'package:yimaru_app/ui/views/onboarding/screens/language_goal_form_screen.dart';
import 'package:yimaru_app/ui/views/onboarding/screens/learning_goal_form_screen.dart';
import 'package:yimaru_app/ui/views/onboarding/screens/occupation_form_screen.dart';
import 'package:yimaru_app/ui/views/onboarding/screens/topic_form_screen.dart';
import '../../common/validators/form_validator.dart';
import 'onboarding_viewmodel.dart';
import 'onboarding_view.form.dart';
@FormView(fields: [
FormTextField(name: 'answer', validator: FormValidator.validateForm),
FormTextField(name: 'fullName', validator: FormValidator.validateForm),
FormTextField(name: 'challenge', validator: FormValidator.validateForm),
FormTextField(name: 'occupation', validator: FormValidator.validateForm),
FormTextField(name: 'languageGoal', validator: FormValidator.validateForm),
FormTextField(name: 'topic', validator: FormValidator.validateForm),
])
class OnboardingView extends StackedView<OnboardingViewModel>
with $OnboardingView {
const OnboardingView({Key? key}) : super(key: key);
void _initFormFields() {
answerController.text = 'Book';
}
@override
void onViewModelReady(OnboardingViewModel viewModel) {
_initFormFields();
syncFormWithViewModel(viewModel);
super.onViewModelReady(viewModel);
}
@override
OnboardingViewModel viewModelBuilder(
BuildContext context,
) =>
OnboardingViewModel();
@override
Widget builder(
BuildContext context,
OnboardingViewModel viewModel,
Widget? child,
) =>
_buildOnboardingScreensWrapper(viewModel);
Widget _buildOnboardingScreensWrapper(OnboardingViewModel viewModel) =>
PopScope(
canPop: false,
onPopInvokedWithResult: (value, data) => viewModel.pop(),
child: _buildOnboardingScreens(viewModel));
Widget _buildOnboardingScreens(OnboardingViewModel viewModel) => IndexedStack(
index: viewModel.currentPage,
children: _buildScreens(),
);
List<Widget> _buildScreens() => [
_buildFullNameForm(),
_buildGenderForm(),
_buildBirthdayForm(),
_buildAgeGroupForm(),
_buildEducationalBackgroundForm(),
_buildOccupationForm(),
_buildCountryRegionForm(),
_buildLearningGoalForm(),
_buildLanguageGoalForm(),
_buildChallengeForm(),
_buildTopicForm(),
];
Widget _buildFullNameForm() =>
FullNameFormScreen(fullNameController: fullNameController);
Widget _buildGenderForm() => const GenderFormScreen();
Widget _buildBirthdayForm() => const BirthdayFormScreen();
Widget _buildAgeGroupForm() => const AgeGroupFormScreen();
Widget _buildEducationalBackgroundForm() =>
const EducationalBackgroundFormScreen();
Widget _buildOccupationForm() =>
OccupationFormScreen(occupationController: occupationController);
Widget _buildCountryRegionForm() => const CountryRegionFormScreen();
Widget _buildLearningGoalForm() => const LearningGoalFormScreen();
Widget _buildLanguageGoalForm() =>
LanguageGoalFormScreen(languageGoalController: languageGoalController);
Widget _buildChallengeForm() =>
ChallengeFormScreen(challengeController: challengeController);
Widget _buildTopicForm() => TopicFormScreen(topicController: topicController);
}