import 'package:flutter/material.dart'; import 'package:stacked/stacked.dart'; import 'package:yimaru_app/ui/common/app_colors.dart'; import 'package:yimaru_app/ui/common/ui_helpers.dart'; import 'package:yimaru_app/ui/widgets/custom_elevated_button.dart'; import 'package:yimaru_app/ui/widgets/large_app_bar.dart'; import '../assessment_viewmodel.dart'; class RetakeAssessmentScreen extends ViewModelWidget { const RetakeAssessmentScreen({super.key}); @override Widget build(BuildContext context, AssessmentViewModel viewModel) => _buildScaffoldWrapper(viewModel); Widget _buildScaffoldWrapper(AssessmentViewModel viewModel) => Scaffold( backgroundColor: kcBackgroundColor, body: _buildScaffold(viewModel), ); Widget _buildScaffold(AssessmentViewModel viewModel) => Column( crossAxisAlignment: CrossAxisAlignment.start, children: _buildScaffoldChildren(viewModel), ); List _buildScaffoldChildren(AssessmentViewModel viewModel) => [_buildAppBar(viewModel), _buildExpandedBody(viewModel)]; Widget _buildExpandedBody(AssessmentViewModel viewModel) => Expanded(child: _buildBodyWrapper(viewModel)); Widget _buildBodyWrapper(AssessmentViewModel viewModel) => Padding( padding: const EdgeInsets.symmetric(horizontal: 15), child: _buildBody(viewModel), ); Widget _buildBody(AssessmentViewModel viewModel) => Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: _buildBodyChildren(viewModel), ); List _buildBodyChildren(AssessmentViewModel viewModel) => [_buildUpperColumn(viewModel), _buildLowerColumn(viewModel)]; Widget _buildUpperColumn(AssessmentViewModel viewModel) => Column( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.stretch, children: _buildUpperColumnChildren(viewModel), ); List _buildUpperColumnChildren(AssessmentViewModel viewModel) => [ verticalSpaceLarge, _buildIcon(), verticalSpaceMedium, _buildTitle(), verticalSpaceSmall, _buildSubTitle(), ]; Widget _buildAppBar(AssessmentViewModel viewModel) => LargeAppBar( showBackButton: false, showLanguageSelection: true, onLanguage: () async => await viewModel.navigateToLanguage(), ); Widget _buildIcon() => const Icon( Icons.warning_amber_rounded, size: 100, color: kcPrimaryColor, ); Widget _buildTitle() => const Text( 'We didn’t get enough from your assessment', textAlign: TextAlign.center, style: TextStyle( fontSize: 25, color: kcDarkGrey, fontWeight: FontWeight.w600, ), ); Widget _buildSubTitle() => const Text( 'Your assessment wasn’t long enough for us to analyze your speaking level. You can retake the call to get accurate results ', textAlign: TextAlign.center, style: TextStyle(color: kcMediumGrey), ); Widget _buildLowerColumn(AssessmentViewModel viewModel) => Column( mainAxisSize: MainAxisSize.min, children: _buildLowerColumnChildren(viewModel), ); List _buildLowerColumnChildren(AssessmentViewModel viewModel) => [ _buildContinueButton(viewModel), verticalSpaceSmall, _buildSkipButtonWrapper(viewModel) ]; Widget _buildContinueButton(AssessmentViewModel viewModel) => CustomElevatedButton( height: 55, safe: false, borderRadius: 12, text: 'Retake Assessment', onTap: () => viewModel.next(), foregroundColor: kcWhite, backgroundColor: kcPrimaryColor, ); Widget _buildSkipButtonWrapper(AssessmentViewModel viewModel) => Padding( padding: const EdgeInsets.only(bottom: 50), child: _buildSkipButton(viewModel), ); Widget _buildSkipButton(AssessmentViewModel viewModel) => CustomElevatedButton( height: 55, text: 'Skip', borderRadius: 12, borderColor: kcPrimaryColor, onTap: () => viewModel.next(), backgroundColor: kcWhite, foregroundColor: kcPrimaryColor, ); }