From 315e8f9598a84d131c0cc3507a7930c79ae557cb Mon Sep 17 00:00:00 2001 From: Achintha Isuru Date: Sun, 1 Mar 2026 12:33:42 -0500 Subject: [PATCH] feat: Implement rapid order creation with voice and text input in client mobile app --- apps/mobile/apps/client/lib/main.dart | 7 +- apps/mobile/apps/staff/lib/main.dart | 7 +- .../design_system/lib/src/ui_icons.dart | 3 + .../personal_info_page/language_selector.dart | 74 +++++++++++-------- 4 files changed, 55 insertions(+), 36 deletions(-) diff --git a/apps/mobile/apps/client/lib/main.dart b/apps/mobile/apps/client/lib/main.dart index 301ade92..f696a7c3 100644 --- a/apps/mobile/apps/client/lib/main.dart +++ b/apps/mobile/apps/client/lib/main.dart @@ -102,8 +102,10 @@ class AppWidget extends StatelessWidget { >( builder: (BuildContext context, core_localization.LocaleState state) { - return core_localization.TranslationProvider( - child: MaterialApp.router( + return KeyedSubtree( + key: ValueKey(state.locale), + child: core_localization.TranslationProvider( + child: MaterialApp.router( debugShowCheckedModeBanner: false, title: "KROW Client", theme: UiTheme.light, @@ -117,6 +119,7 @@ class AppWidget extends StatelessWidget { GlobalCupertinoLocalizations.delegate, ], ), + ), ); }, ), diff --git a/apps/mobile/apps/staff/lib/main.dart b/apps/mobile/apps/staff/lib/main.dart index 5557a971..a50744c9 100644 --- a/apps/mobile/apps/staff/lib/main.dart +++ b/apps/mobile/apps/staff/lib/main.dart @@ -79,8 +79,10 @@ class AppWidget extends StatelessWidget { >( builder: (BuildContext context, core_localization.LocaleState state) { - return core_localization.TranslationProvider( - child: MaterialApp.router( + return KeyedSubtree( + key: ValueKey(state.locale), + child: core_localization.TranslationProvider( + child: MaterialApp.router( title: "KROW Staff", theme: UiTheme.light, routerConfig: Modular.routerConfig, @@ -93,6 +95,7 @@ class AppWidget extends StatelessWidget { GlobalCupertinoLocalizations.delegate, ], ), + ), ); }, ), diff --git a/apps/mobile/packages/design_system/lib/src/ui_icons.dart b/apps/mobile/packages/design_system/lib/src/ui_icons.dart index f9d97f3e..ddf7068d 100644 --- a/apps/mobile/packages/design_system/lib/src/ui_icons.dart +++ b/apps/mobile/packages/design_system/lib/src/ui_icons.dart @@ -288,4 +288,7 @@ class UiIcons { /// Microphone icon static const IconData microphone = _IconLib.mic; + + /// Language icon + static const IconData language = _IconLib.languages; } diff --git a/apps/mobile/packages/features/staff/profile_sections/onboarding/profile_info/lib/src/presentation/widgets/personal_info_page/language_selector.dart b/apps/mobile/packages/features/staff/profile_sections/onboarding/profile_info/lib/src/presentation/widgets/personal_info_page/language_selector.dart index 34c1ccd4..63837b3d 100644 --- a/apps/mobile/packages/features/staff/profile_sections/onboarding/profile_info/lib/src/presentation/widgets/personal_info_page/language_selector.dart +++ b/apps/mobile/packages/features/staff/profile_sections/onboarding/profile_info/lib/src/presentation/widgets/personal_info_page/language_selector.dart @@ -1,5 +1,7 @@ +import 'package:core_localization/core_localization.dart'; import 'package:design_system/design_system.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_modular/flutter_modular.dart'; import 'package:krow_core/core.dart'; import 'package:staff_profile_info/src/presentation/widgets/personal_info_page/field_label.dart'; @@ -14,41 +16,49 @@ class LanguageSelector extends StatelessWidget { @override Widget build(BuildContext context) { - final String currentLocale = Localizations.localeOf(context).languageCode; - final String languageName = currentLocale == 'es' ? 'Español' : 'English'; + return BlocBuilder( + bloc: Modular.get(), + buildWhen: (LocaleState previous, LocaleState current) => + previous.locale != current.locale, + builder: (BuildContext context, LocaleState state) { + final String currentLocale = state.locale.languageCode; + final String languageName = + currentLocale == 'es' ? 'Español' : 'English'; - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - spacing: UiConstants.space3, - children: [ - const FieldLabel(text: 'Language'), + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + spacing: UiConstants.space3, + children: [ + const FieldLabel(text: 'Language'), - GestureDetector( - onTap: enabled ? () => Modular.to.toLanguageSelection() : null, - child: Row( - children: [ - const Icon( - UiIcons.settings, - size: 18, - color: UiColors.iconSecondary, + GestureDetector( + onTap: enabled ? () => Modular.to.toLanguageSelection() : null, + child: Row( + children: [ + const Icon( + UiIcons.language, + size: 18, + color: UiColors.iconSecondary, + ), + const SizedBox(width: UiConstants.space3), + Expanded( + child: Text( + languageName, + style: UiTypography.body2r.textPrimary, + ), + ), + if (enabled) + const Icon( + UiIcons.chevronRight, + size: 16, + color: UiColors.iconSecondary, + ), + ], ), - const SizedBox(width: UiConstants.space3), - Expanded( - child: Text( - languageName, - style: UiTypography.body2r.textPrimary, - ), - ), - if (enabled) - const Icon( - UiIcons.chevronRight, - size: 16, - color: UiColors.iconSecondary, - ), - ], - ), - ), - ], + ), + ], + ); + }, ); } }