From b85ea5fb7f64da71d16329cc41ff70e6508e638e Mon Sep 17 00:00:00 2001 From: Achintha Isuru Date: Thu, 19 Feb 2026 15:49:56 -0500 Subject: [PATCH] feat: Refactor LanguageSelectionPage to use StatelessWidget and improve localization handling --- .../client/reports/analysis_output.txt | Bin 75444 -> 0 bytes .../pages/language_selection_page.dart | 36 ++++++++---------- 2 files changed, 16 insertions(+), 20 deletions(-) delete mode 100644 apps/mobile/packages/features/client/reports/analysis_output.txt diff --git a/apps/mobile/packages/features/client/reports/analysis_output.txt b/apps/mobile/packages/features/client/reports/analysis_output.txt deleted file mode 100644 index e9cdc3824ef709b45d8cdbad68533c51b133156b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75444 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�-68Y@5W~mdTK||SX}VivjPB*;ej<2x5}$QLCbOy`p7-fx^5T1A?LB~9lF0|XOm4h`Z$w5t zu2|3W$4ax4S(999C2M4K4`;Kgyj*+)t-pEN03o*DN(Z9mia5 zo;r@X+0MyK*)` zZF@@e?^$iKLaQ15i5Hf+gJToi?3gwGCchjnby=LWoE=P>QO!I*ud4$WtTF2MP_4M;Sur`fW_59aF>aqH!IscU_^=%h{*dBeQ zqUId|W+9cAwTScjQ1z(xu7F5w^)e0B#dRyq=uc*FU*qso?aJ7XK#sO#2B0mw<`I(X zfb&YMRBbZf4pY5QiPcd}P#?{zq}-2f>ixH+ay3pb=fA zUMDgCZi5`__vNEQ^MWqoDZYGkR(aN5be65{_aKUExlJSh@6d@y43}A_UG#uAp|q{7 zVBge8bo}MZBVtJA=eSkgE^SipX46i6!u~bLg1XkDUE{}&HSNY{?+cBMUoXjRUzklK zIWbGCr8{b=EC-?4Uy*l{_PmtGOGLn8zs;6-pCtWc~jlXk3ZL^t?F+&np7A1=Dm*psOxyQJ(x)?Bb*B5T6bJaIbEi7~x_VoEudBH4KhF14pC+UjiJ^ig(-q!a`YUVc^6=F76Gxew}Qu9Q8 zwLYE**H}j<3rI&oeggoA44f0r(oM zKQO;0hnHTyZ$TE^;$5D*Xd6DOn|B^3ZM979eCrRf*Lv=J{VKZnN2n zOS7BGlVo`~z3$s}QaKVW59cuPZHZMPxj5n5KKIomu9`=2e5`oo$n#n~c}Pva)zOX| zS%G!%IKKa-;>|xO)_kdGEYbAS6tSNw0!`$dxVwFOt2>`=JiEHDR~|1Il}g&nD-WOh zYUNq_c{uB8o`}s~lJqM1y;Qkl>U(h?%;aXSq#j5jUnxU2p55QYm`*;;$-0!e<~$dx zt+F3BfrGoItiS&{5OS^V!v+dtC{=|O=}`WW}JwxjLR8&3@DqwR6LUCAPl5{GX8m{Lz!;+}1J z^VBP24_dEfki6(qGNtY2UXT)rW{={0q^s;ntFHYZ+mM*yR;uZ}maRBa{P4W`LZ2?z z+KhO%R-OAH#TLB+mi8W35K{~MR5m6a)#8eZWj5wK1+XZ)OD%ubo3B6Vsl_Vy<@G02 zfamj8NjCgY>kq8LChEiXaj$RXX|u9o(>yse#~!OQ0eMwT$gZC1`Bb+$_AW#liM`pn zsmQD@Nq+ghU|3H1Hd9$h4^q~={dGjhMXQO7c;?HbV_RzK^7IVVvv|WEohz*tI}a^# zojN2DDAHvz zqnny$UpfYj-3?8{o~-?9(WY;U&6}xY-WK1`(OyjhR^)H{Eq$^Vars-4^#D>^H5>71 Z%0jw7v%@3nXUjs$Or^Rdf|M-8{{arThN}Po diff --git a/apps/mobile/packages/features/staff/profile_sections/onboarding/profile_info/lib/src/presentation/pages/language_selection_page.dart b/apps/mobile/packages/features/staff/profile_sections/onboarding/profile_info/lib/src/presentation/pages/language_selection_page.dart index 95ec18b1..01b902c5 100644 --- a/apps/mobile/packages/features/staff/profile_sections/onboarding/profile_info/lib/src/presentation/pages/language_selection_page.dart +++ b/apps/mobile/packages/features/staff/profile_sections/onboarding/profile_info/lib/src/presentation/pages/language_selection_page.dart @@ -9,19 +9,23 @@ import 'package:flutter_modular/flutter_modular.dart'; /// Displays available languages and allows the user to select their preferred /// language. Changes are applied immediately via [LocaleBloc] and persisted. /// Shows a snackbar when the language is successfully changed. -class LanguageSelectionPage extends StatefulWidget { +class LanguageSelectionPage extends StatelessWidget { /// Creates a [LanguageSelectionPage]. const LanguageSelectionPage({super.key}); - @override - State createState() => _LanguageSelectionPageState(); -} + String _getLocalizedLanguageName(AppLocale locale) { + switch (locale) { + case AppLocale.en: + return 'English'; + case AppLocale.es: + return 'Español'; + } + } -class _LanguageSelectionPageState extends State { - void _showLanguageChangedSnackbar(String languageName) { + void _showLanguageChangedSnackbar(BuildContext context, String languageName) { UiSnackbar.show( context, - message: 'Language changed to $languageName', + message: '${t.settings.change_language}: $languageName', type: UiSnackbarType.success, ); @@ -33,7 +37,7 @@ class _LanguageSelectionPageState extends State { Widget build(BuildContext context) { return Scaffold( appBar: UiAppBar( - title: 'Select Language', + title: t.settings.change_language, showBackButton: true, bottom: PreferredSize( preferredSize: const Size.fromHeight(1.0), @@ -46,17 +50,9 @@ class _LanguageSelectionPageState extends State { return ListView( padding: const EdgeInsets.all(UiConstants.space5), children: [ - _buildLanguageOption( - context, - label: 'English', - locale: AppLocale.en, - ), + _buildLanguageOption(context, locale: AppLocale.en), const SizedBox(height: UiConstants.space4), - _buildLanguageOption( - context, - label: 'Español', - locale: AppLocale.es, - ), + _buildLanguageOption(context, locale: AppLocale.es), ], ); }, @@ -67,9 +63,9 @@ class _LanguageSelectionPageState extends State { Widget _buildLanguageOption( BuildContext context, { - required String label, required AppLocale locale, }) { + final String label = _getLocalizedLanguageName(locale); // Check if this option is currently selected. final AppLocale currentLocale = LocaleSettings.currentLocale; final bool isSelected = currentLocale == locale; @@ -79,7 +75,7 @@ class _LanguageSelectionPageState extends State { // Only proceed if selecting a different language if (currentLocale != locale) { Modular.get().add(ChangeLocale(locale.flutterLocale)); - _showLanguageChangedSnackbar(label); + _showLanguageChangedSnackbar(context, label); } }, borderRadius: BorderRadius.circular(UiConstants.radiusMdValue),