import 'package:flutter/material.dart'; import 'package:stacked/stacked.dart'; import '../../common/app_colors.dart'; import '../../common/ui_helpers.dart'; import '../../widgets/custom_small_radio_button.dart'; import '../../widgets/small_app_bar.dart'; import 'language_viewmodel.dart'; class LanguageView extends StackedView { const LanguageView({Key? key}) : super(key: key); @override LanguageViewModel viewModelBuilder( BuildContext context, ) => LanguageViewModel(); @override Widget builder( BuildContext context, LanguageViewModel viewModel, Widget? child, ) => _buildScaffoldWrapper(viewModel); Widget _buildScaffoldWrapper(LanguageViewModel viewModel) => Scaffold( backgroundColor: kcBackgroundColor, body: _buildScaffold(viewModel), ); Widget _buildScaffold(LanguageViewModel viewModel) => SafeArea(child: _buildBodyWrapper(viewModel)); Widget _buildBodyWrapper(LanguageViewModel viewModel) => Column( crossAxisAlignment: CrossAxisAlignment.start, children: _buildBodyChildren(viewModel), ); List _buildBodyChildren(LanguageViewModel viewModel) => [ verticalSpaceMedium, _buildAppBarWrapper(viewModel), _buildExpandedBody(viewModel) ]; Widget _buildExpandedBody(LanguageViewModel viewModel) => Expanded(child: _buildColumnWrapper(viewModel)); Widget _buildColumnWrapper(LanguageViewModel viewModel) => Padding( padding: const EdgeInsets.symmetric(horizontal: 15), child: _buildColumn(viewModel), ); Widget _buildColumn(LanguageViewModel viewModel) => Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: _buildColumnChildren(viewModel), ); List _buildColumnChildren(LanguageViewModel viewModel) => [ verticalSpaceMedium, _buildTitle(), verticalSpaceSmall, _buildSubTitle(), verticalSpaceMedium, _buildLanguages(viewModel) ]; Widget _buildAppBarWrapper(LanguageViewModel viewModel) => Padding( padding: const EdgeInsets.symmetric(horizontal: 15), child: _buildAppbar(viewModel), ); Widget _buildAppbar(LanguageViewModel viewModel) => SmallAppBar( title: 'Language Preference', onTap: viewModel.pop, ); Widget _buildTitle() => const Text( 'Choose your language', style: TextStyle( fontSize: 25, color: kcDarkGrey, fontWeight: FontWeight.w600, ), ); Widget _buildSubTitle() => const Text( 'You can switch languages anytime', style: TextStyle(color: kcMediumGrey), ); Widget _buildLanguages(LanguageViewModel viewModel) => ListView.builder( shrinkWrap: true, itemCount: viewModel.languages.length, physics: const NeverScrollableScrollPhysics(), itemBuilder: (context, index) => _buildLanguage( title: viewModel.languages[index]['language'], selected: viewModel .isSelectedLanguage(viewModel.languages[index]['language']), onTap: () => viewModel.setSelectedLanguage(viewModel.languages[index]), ), ); Widget _buildLanguage( {required String title, required bool selected, required GestureTapCallback onTap}) => CustomSmallRadioButton( title: title, onTap: onTap, selected: selected, ); }