import 'package:easy_localization/easy_localization.dart'; 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/translations/locale_keys.g.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/views/onboarding/onboarding_viewmodel.dart'; import 'package:yimaru_app/ui/widgets/large_app_bar.dart'; import '../../../widgets/custom_dropdown.dart'; class OccupationFormScreen extends ViewModelWidget { const OccupationFormScreen({super.key}); void _pop(OnboardingViewModel viewModel) { viewModel.resetOccupationFormScreen(); viewModel.goBack(); } Future _next(OnboardingViewModel viewModel) async { FocusManager.instance.primaryFocus?.unfocus(); Map data = { 'occupation': viewModel.selectedOccupation?.code }; viewModel.addUserData(data); viewModel.next(); } @override Widget build(BuildContext context, OnboardingViewModel viewModel) => _buildScaffoldWrapper(viewModel); Widget _buildScaffoldWrapper(OnboardingViewModel viewModel) => Scaffold( backgroundColor: kcBackgroundColor, body: _buildScaffold(viewModel), ); Widget _buildScaffold(OnboardingViewModel viewModel) => Column( crossAxisAlignment: CrossAxisAlignment.start, children: _buildScaffoldChildren(viewModel), ); List _buildScaffoldChildren(OnboardingViewModel viewModel) => [ _buildAppBar(viewModel), verticalSpaceMedium, _buildExpandedBody(viewModel) ]; Widget _buildExpandedBody(OnboardingViewModel viewModel) => Expanded(child: _buildBodyWrapper(viewModel)); Widget _buildBodyWrapper(OnboardingViewModel viewModel) => Padding( padding: const EdgeInsets.symmetric(horizontal: 15), child: _buildBody(viewModel), ); Widget _buildBody(OnboardingViewModel viewModel) => Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: _buildBodyChildren(viewModel), ); List _buildBodyChildren(OnboardingViewModel viewModel) => [_buildColumnScroller(viewModel), _buildContinueButtonWrapper(viewModel)]; Widget _buildColumnScroller(OnboardingViewModel viewModel) => SingleChildScrollView( child: _buildUpperColumn(viewModel), ); Widget _buildUpperColumn(OnboardingViewModel viewModel) => Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: _buildUpperColumnChildren(viewModel), ); List _buildUpperColumnChildren(OnboardingViewModel viewModel) => [ verticalSpaceMedium, _buildTitle(), verticalSpaceSmall, _buildSubtitle(), verticalSpaceLarge, _buildOccupationDropdown(viewModel), ]; Widget _buildAppBar(OnboardingViewModel viewModel) => LargeAppBar( showBackButton: true, showLanguageSelection: true, onPop: () => _pop(viewModel), onLanguage: () async => await viewModel.navigateToLanguage(), language: viewModel.selectedLanguage['code'] == 'am' ? 'አማ' : viewModel.selectedLanguage['code'], ); Widget _buildTitle() => Text( LocaleKeys.your_occupation.tr(), style: style25DG600, ); Widget _buildSubtitle() => Text( LocaleKeys.occupation_for_personalization.tr(), style: style14MG400, ); Widget _buildOccupationDropdown(OnboardingViewModel viewModel) => CustomDropdownPicker( icon: _buildSearchIcon(), hint: LocaleKeys.select_occupation.tr(), selectedItem: viewModel.selectedOccupation, items: (value, props) => viewModel.occupations, onChanged: (value) => viewModel.setSelectedOccupation(value)); Icon _buildSearchIcon() => const Icon( Icons.search, color: kcPrimaryColor, ); Widget _buildContinueButtonWrapper(OnboardingViewModel viewModel) => Padding( padding: const EdgeInsets.only(bottom: 50), child: _buildContinueButton(viewModel), ); Widget _buildContinueButton(OnboardingViewModel viewModel) => CustomElevatedButton( height: 55, borderRadius: 12, foregroundColor: kcWhite, text: LocaleKeys.cont.tr(), onTap: viewModel.selectedOccupation != null ? () => _next(viewModel) : null, backgroundColor: viewModel.selectedOccupation != null ? kcPrimaryColor : kcPrimaryColor.withOpacity(0.1), ); }