From 805f897516c66aad75f7e97d1d8aecd1ab1f1622 Mon Sep 17 00:00:00 2001 From: bhaveshpawar07 Date: Thu, 7 Jul 2022 10:44:23 +0530 Subject: [PATCH 01/10] adding extension function to buildContext to implement translation. --- lib/foundation/extensions/string_ext.dart | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/lib/foundation/extensions/string_ext.dart b/lib/foundation/extensions/string_ext.dart index ec9ec720..65d702bf 100644 --- a/lib/foundation/extensions/string_ext.dart +++ b/lib/foundation/extensions/string_ext.dart @@ -1,13 +1,29 @@ import 'package:easy_localization/easy_localization.dart' as el; +import 'package:flutter/cupertino.dart'; extension StringExt on String { bool get isBlank => trim().isEmpty; - String get tr { + // String get tr { + // try { + // return el.tr(this); + // } catch (e) { + // return this; + // } + // } +} + +/// +/// Extension on context to make sure any string that uses [tr] gets translated. +/// Not using the context won't translate the string if its [tr] is being used in non changing components eg. viewModel +/// + +extension ContextExt on BuildContext { + String tr(String key) { try { - return el.tr(this); + return el.tr(key); } catch (e) { - return this; + return key; } } } From a9179c1ab696074b886ceadec7998f56946ae6d0 Mon Sep 17 00:00:00 2001 From: bhaveshpawar07 Date: Thu, 7 Jul 2022 10:45:22 +0530 Subject: [PATCH 02/10] adding support for hindi language --- assets/translations/hi-IN.json | 10 +++++ lib/app.dart | 2 +- .../intl/translations/translation_loader.dart | 41 +++++++++++++------ 3 files changed, 39 insertions(+), 14 deletions(-) create mode 100644 assets/translations/hi-IN.json diff --git a/assets/translations/hi-IN.json b/assets/translations/hi-IN.json new file mode 100644 index 00000000..45b87c50 --- /dev/null +++ b/assets/translations/hi-IN.json @@ -0,0 +1,10 @@ +{ + "homePageTitle": "मुख्य पृष्ठ", + "searchPageTitle": "खोज", + "forecast": "पूर्वानुमान", + "favCitiesAppearHere": "आपके पसंदीदा शहरों का मौसम यहां दिखाई देगा। पसंदीदा में जोड़ने के लिए शहर खोजें।", + "startTypingToSearch": "खोजने के लिए टाइप करना प्रारंभ करें", + "searchResultsAppearHere": "खोज परिणाम यहां दिखाई देते हैं...", + "noResultsFound": "कोई परिणाम नहीं मिला...", + "dynamicTheme": "डायनामिक थीम" +} \ No newline at end of file diff --git a/lib/app.dart b/lib/app.dart index 21b06dda..64a9ab78 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -20,7 +20,7 @@ void startApp() async { await _initialiseApp(); runApp(EasyLocalization( - supportedLocales: const [Locale("en", "US")], + supportedLocales: const [Locale("en", "US"), Locale("hi", "IN")], path: "assets/translations", fallbackLocale: const Locale("en", "US"), assetLoader: const CodegenLoader(), diff --git a/lib/presentation/intl/translations/translation_loader.dart b/lib/presentation/intl/translations/translation_loader.dart index b484dbc4..586485f0 100644 --- a/lib/presentation/intl/translations/translation_loader.dart +++ b/lib/presentation/intl/translations/translation_loader.dart @@ -6,23 +6,38 @@ import 'dart:ui'; import 'package:easy_localization/easy_localization.dart' show AssetLoader; -class CodegenLoader extends AssetLoader{ +class CodegenLoader extends AssetLoader { const CodegenLoader(); @override - Future> load(String fullPath, Locale locale ) { + Future> load(String fullPath, Locale locale) { return Future.value(mapLocales[locale.toString()]); } - static const Map en_US = { - "homePageTitle": "Home", - "searchPageTitle": "Search", - "forecast": "Forecast", - "favCitiesAppearHere": "Weather for your favorite cities will appear here. Search cities to add to favorites.", - "startTypingToSearch": "Start typing to search", - "searchResultsAppearHere": "Search results appear here...", - "noResultsFound": "No results found...", - "dynamicTheme": "Dynamic Theme" -}; -static const Map> mapLocales = {"en_US": en_US}; + static const Map en_US = { + "homePageTitle": "Home", + "searchPageTitle": "Search", + "forecast": "Forecast", + "favCitiesAppearHere": + "Weather for your favorite cities will appear here. Search cities to add to favorites.", + "startTypingToSearch": "Start typing to search", + "searchResultsAppearHere": "Search results appear here...", + "noResultsFound": "No results found...", + "dynamicTheme": "Dynamic Theme" + }; + static const Map hi_IN = { + "homePageTitle": "मुख्य पृष्ठ", + "searchPageTitle": "खोज", + "forecast": "पूर्वानुमान", + "favCitiesAppearHere": + "आपके पसंदीदा शहरों का मौसम यहां दिखाई देगा। पसंदीदा में जोड़ने के लिए शहर खोजें।", + "startTypingToSearch": "खोजने के लिए टाइप करना प्रारंभ करें", + "searchResultsAppearHere": "खोज परिणाम यहां दिखाई देते हैं...", + "noResultsFound": "कोई परिणाम नहीं मिला...", + "dynamicTheme": "डायनामिक थीम" + }; + static const Map> mapLocales = { + "en_US": en_US, + "hi_IN": hi_IN + }; } From b04b5fb5196aa554b8a5d7ad6a62c503b173b5bf Mon Sep 17 00:00:00 2001 From: bhaveshpawar07 Date: Thu, 7 Jul 2022 10:46:16 +0530 Subject: [PATCH 03/10] context.tr implemented --- lib/presentation/base/widgets/appbar/app_bar_title.dart | 3 ++- .../dynamic_theme_switch/dynamic_theme_switch_content.dart | 2 +- .../destinations/weather/home/home_view_model_impl.dart | 3 +-- .../home/widgets/home_page_body/home_page_body_content.dart | 2 +- .../destinations/weather/search/search_view_model_impl.dart | 2 +- .../search/widgets/search_page_body/search_page_body.dart | 2 +- .../widgets/search_page_results/search_page_results.dart | 4 ++-- .../destinations/weather/search/search_view_model_test.dart | 5 ++--- 8 files changed, 11 insertions(+), 12 deletions(-) diff --git a/lib/presentation/base/widgets/appbar/app_bar_title.dart b/lib/presentation/base/widgets/appbar/app_bar_title.dart index bcff388b..ce137a0b 100644 --- a/lib/presentation/base/widgets/appbar/app_bar_title.dart +++ b/lib/presentation/base/widgets/appbar/app_bar_title.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_template/foundation/extensions/string_ext.dart'; import 'package:flutter_template/presentation/base/view_model_provider/base_view_model.dart'; import 'package:flutter_template/presentation/base/view_model_provider/view_model_provider_ext.dart'; import 'package:flutter_template/presentation/entity/screen/screen.dart'; @@ -19,7 +20,7 @@ class AppBarTitle, .select((state) => state.toolbar.title), ); return Text( - title, + context.tr(title), overflow: TextOverflow.ellipsis, ); } diff --git a/lib/presentation/base/widgets/theme/dynamic_theme_switch/dynamic_theme_switch_content.dart b/lib/presentation/base/widgets/theme/dynamic_theme_switch/dynamic_theme_switch_content.dart index e5ae66fe..528136e7 100644 --- a/lib/presentation/base/widgets/theme/dynamic_theme_switch/dynamic_theme_switch_content.dart +++ b/lib/presentation/base/widgets/theme/dynamic_theme_switch/dynamic_theme_switch_content.dart @@ -16,7 +16,7 @@ class DynamicThemeSwitchContent extends StatelessWidget { Widget build(BuildContext context) { return Row( children: [ - Text(LocaleKeys.dynamicTheme.tr), + Text(context.tr(LocaleKeys.dynamicTheme)), Switch( value: isDynamic, onChanged: onIsDynamicToggled, diff --git a/lib/presentation/destinations/weather/home/home_view_model_impl.dart b/lib/presentation/destinations/weather/home/home_view_model_impl.dart index acdec103..7b40de63 100644 --- a/lib/presentation/destinations/weather/home/home_view_model_impl.dart +++ b/lib/presentation/destinations/weather/home/home_view_model_impl.dart @@ -1,4 +1,3 @@ -import 'package:flutter_template/foundation/extensions/string_ext.dart'; import 'package:flutter_template/interactor/weather/favorite/favorite_weather_interactor.dart'; import 'package:flutter_template/navigation/weather/home/home_navigator.dart'; import 'package:flutter_template/presentation/destinations/weather/home/home_screen_intent.dart'; @@ -19,7 +18,7 @@ class HomeViewModelImpl extends HomeViewModel { static get _initialState => HomeScreenState( toolbar: UIToolbar( - title: LocaleKeys.homePageTitle.tr, + title: LocaleKeys.homePageTitle, hasBackButton: false, ), showLoading: false, diff --git a/lib/presentation/destinations/weather/home/widgets/home_page_body/home_page_body_content.dart b/lib/presentation/destinations/weather/home/widgets/home_page_body/home_page_body_content.dart index f7b42c7a..274d7e0c 100644 --- a/lib/presentation/destinations/weather/home/widgets/home_page_body/home_page_body_content.dart +++ b/lib/presentation/destinations/weather/home/widgets/home_page_body/home_page_body_content.dart @@ -26,7 +26,7 @@ class HomePageBodyContent extends StatelessWidget { return Padding( padding: const EdgeInsets.all(8.0), child: Text( - LocaleKeys.favCitiesAppearHere.tr, + context.tr(LocaleKeys.favCitiesAppearHere), textAlign: TextAlign.center, ), ); diff --git a/lib/presentation/destinations/weather/search/search_view_model_impl.dart b/lib/presentation/destinations/weather/search/search_view_model_impl.dart index 1011aaa2..6b5b2b94 100644 --- a/lib/presentation/destinations/weather/search/search_view_model_impl.dart +++ b/lib/presentation/destinations/weather/search/search_view_model_impl.dart @@ -51,7 +51,7 @@ class SearchViewModelImpl extends SearchViewModel { static SearchScreenState get _initialState => SearchScreenState( toolbar: UIToolbar( - title: LocaleKeys.searchPageTitle.tr, + title: LocaleKeys.searchPageTitle, hasBackButton: true, ), showLoading: false, diff --git a/lib/presentation/destinations/weather/search/widgets/search_page_body/search_page_body.dart b/lib/presentation/destinations/weather/search/widgets/search_page_body/search_page_body.dart index 507e7a6f..ce06c20d 100644 --- a/lib/presentation/destinations/weather/search/widgets/search_page_body/search_page_body.dart +++ b/lib/presentation/destinations/weather/search/widgets/search_page_body/search_page_body.dart @@ -27,7 +27,7 @@ class SearchPageBody extends HookConsumerWidget { return SearchPageBodyContent( textController: textController, - searchHint: LocaleKeys.startTypingToSearch.tr, + searchHint: context.tr(LocaleKeys.startTypingToSearch), child: const SearchPageResults(), ); } diff --git a/lib/presentation/destinations/weather/search/widgets/search_page_results/search_page_results.dart b/lib/presentation/destinations/weather/search/widgets/search_page_results/search_page_results.dart index 40a2adc7..a0893a8e 100644 --- a/lib/presentation/destinations/weather/search/widgets/search_page_results/search_page_results.dart +++ b/lib/presentation/destinations/weather/search/widgets/search_page_results/search_page_results.dart @@ -25,8 +25,8 @@ class SearchPageResults extends ConsumerWidget { searchList: searchList, searchTerm: viewModel.searchTerm, intentHandlerCallback: viewModel.onIntent, - searchResultsPlaceholder: LocaleKeys.searchResultsAppearHere.tr, - noResultsPlaceholder: LocaleKeys.noResultsFound.tr, + searchResultsPlaceholder: context.tr(LocaleKeys.searchResultsAppearHere), + noResultsPlaceholder: context.tr(LocaleKeys.noResultsFound), ); } } diff --git a/test/presentation/unit/destinations/weather/search/search_view_model_test.dart b/test/presentation/unit/destinations/weather/search/search_view_model_test.dart index b29f3d17..370ce0fe 100644 --- a/test/presentation/unit/destinations/weather/search/search_view_model_test.dart +++ b/test/presentation/unit/destinations/weather/search/search_view_model_test.dart @@ -1,6 +1,5 @@ import 'dart:async'; -import 'package:flutter_template/foundation/extensions/string_ext.dart'; import 'package:flutter_template/interactor/weather/favorite/favorite_weather_interactor.dart'; import 'package:flutter_template/interactor/weather/search/search_city_interactor.dart'; import 'package:flutter_template/navigation/weather/search/search_navigator.dart'; @@ -17,8 +16,8 @@ import 'package:mocktail/mocktail.dart'; import '../../../../../extensions/mock_extensions.dart'; import '../../../../../extensions/stream_extensions.dart'; import '../../../../../mocks/mocks.dart'; -import '../../../../base/test_helpers.dart'; import '../../../../../test_models/ui_city_models.dart'; +import '../../../../base/test_helpers.dart'; void main() { late SearchNavigator searchNavigator; @@ -48,7 +47,7 @@ void main() { SearchScreenState _getInitialState() => SearchScreenState( toolbar: UIToolbar( - title: LocaleKeys.searchPageTitle.tr, + title: LocaleKeys.searchPageTitle, hasBackButton: true, ), showLoading: false, From 77736866a621f3ec4fb10e0b2fd34a411221f3a5 Mon Sep 17 00:00:00 2001 From: bhaveshpawar07 Date: Thu, 7 Jul 2022 10:46:55 +0530 Subject: [PATCH 04/10] added a button to change app language. --- .../destinations/weather/home/home_page.dart | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lib/presentation/destinations/weather/home/home_page.dart b/lib/presentation/destinations/weather/home/home_page.dart index d7a17591..5753859f 100644 --- a/lib/presentation/destinations/weather/home/home_page.dart +++ b/lib/presentation/destinations/weather/home/home_page.dart @@ -1,3 +1,4 @@ +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_template/presentation/base/page/base_page.dart'; @@ -23,6 +24,17 @@ class HomePage extends ConsumerWidget { viewModelProvider: homeViewModelProvider, screen: homeScreen, appBarActions: () => [ + IconButton( + onPressed: () { + String locale = context.locale.toString(); + if (locale == "hi_IN") { + context.setLocale(const Locale("en", "US")); + } else { + context.setLocale(const Locale("hi", "IN")); + } + }, + icon: const Icon(Icons.language), + ), IconButton( onPressed: () { final viewModel = ref.watch(homeViewModelProvider.notifier); From 74e4ed8920e4572e0a812cbf86dad13ab2735962 Mon Sep 17 00:00:00 2001 From: bhaveshpawar07 Date: Thu, 7 Jul 2022 10:47:46 +0530 Subject: [PATCH 05/10] added reRender key, to reRender page on language change --- lib/presentation/base/page/base_page.dart | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/presentation/base/page/base_page.dart b/lib/presentation/base/page/base_page.dart index 6ad7c06c..6c1517f1 100644 --- a/lib/presentation/base/page/base_page.dart +++ b/lib/presentation/base/page/base_page.dart @@ -1,3 +1,4 @@ +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:flutter_template/foundation/extensions/theme_ext.dart'; @@ -55,7 +56,14 @@ class BasePage( onAppBarBackPressed: onAppBarBackPressed, From 707849a5b6def6dac53778e75f34d353e41ab81c Mon Sep 17 00:00:00 2001 From: bhaveshpawar07 Date: Thu, 7 Jul 2022 10:48:42 +0530 Subject: [PATCH 06/10] formatting changes. --- lib/presentation/intl/translations/translation_keys.dart | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/presentation/intl/translations/translation_keys.dart b/lib/presentation/intl/translations/translation_keys.dart index 62636592..887c9cbc 100644 --- a/lib/presentation/intl/translations/translation_keys.dart +++ b/lib/presentation/intl/translations/translation_keys.dart @@ -1,6 +1,6 @@ // DO NOT EDIT. This is code generated via package:easy_localization/generate.dart -abstract class LocaleKeys { +abstract class LocaleKeys { static const homePageTitle = 'homePageTitle'; static const searchPageTitle = 'searchPageTitle'; static const forecast = 'forecast'; @@ -9,5 +9,4 @@ abstract class LocaleKeys { static const searchResultsAppearHere = 'searchResultsAppearHere'; static const noResultsFound = 'noResultsFound'; static const dynamicTheme = 'dynamicTheme'; - } From b28b1debc4eb7acc20ec3792b719637d5fbd6868 Mon Sep 17 00:00:00 2001 From: bhaveshpawar07 Date: Thu, 7 Jul 2022 19:19:13 +0530 Subject: [PATCH 07/10] separated out the extension for context. --- lib/foundation/extensions/context_ext.dart | 17 ++++++++++++ lib/foundation/extensions/string_ext.dart | 26 ------------------- .../base/widgets/appbar/app_bar_title.dart | 2 +- .../dynamic_theme_switch_content.dart | 2 +- .../home_page_body_content.dart | 2 +- .../search_page_body/search_page_body.dart | 2 +- .../search_page_results.dart | 2 +- 7 files changed, 22 insertions(+), 31 deletions(-) create mode 100644 lib/foundation/extensions/context_ext.dart diff --git a/lib/foundation/extensions/context_ext.dart b/lib/foundation/extensions/context_ext.dart new file mode 100644 index 00000000..dd3d5871 --- /dev/null +++ b/lib/foundation/extensions/context_ext.dart @@ -0,0 +1,17 @@ +import 'package:easy_localization/easy_localization.dart' as el; +import 'package:flutter/cupertino.dart'; + +/// +/// Extension on context to make sure any string that uses [tr] gets updated when translation changes. +/// Not using the context won't translate the string if its [tr] is being used in non changing components eg. viewModel +/// + +extension ContextExt on BuildContext { + String tr(String key) { + try { + return el.tr(key); + } catch (e) { + return key; + } + } +} diff --git a/lib/foundation/extensions/string_ext.dart b/lib/foundation/extensions/string_ext.dart index 65d702bf..fdef7487 100644 --- a/lib/foundation/extensions/string_ext.dart +++ b/lib/foundation/extensions/string_ext.dart @@ -1,29 +1,3 @@ -import 'package:easy_localization/easy_localization.dart' as el; -import 'package:flutter/cupertino.dart'; - extension StringExt on String { bool get isBlank => trim().isEmpty; - - // String get tr { - // try { - // return el.tr(this); - // } catch (e) { - // return this; - // } - // } -} - -/// -/// Extension on context to make sure any string that uses [tr] gets translated. -/// Not using the context won't translate the string if its [tr] is being used in non changing components eg. viewModel -/// - -extension ContextExt on BuildContext { - String tr(String key) { - try { - return el.tr(key); - } catch (e) { - return key; - } - } } diff --git a/lib/presentation/base/widgets/appbar/app_bar_title.dart b/lib/presentation/base/widgets/appbar/app_bar_title.dart index ce137a0b..1c35d58f 100644 --- a/lib/presentation/base/widgets/appbar/app_bar_title.dart +++ b/lib/presentation/base/widgets/appbar/app_bar_title.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:flutter_template/foundation/extensions/string_ext.dart'; +import 'package:flutter_template/foundation/extensions/context_ext.dart'; import 'package:flutter_template/presentation/base/view_model_provider/base_view_model.dart'; import 'package:flutter_template/presentation/base/view_model_provider/view_model_provider_ext.dart'; import 'package:flutter_template/presentation/entity/screen/screen.dart'; diff --git a/lib/presentation/base/widgets/theme/dynamic_theme_switch/dynamic_theme_switch_content.dart b/lib/presentation/base/widgets/theme/dynamic_theme_switch/dynamic_theme_switch_content.dart index 528136e7..5b2524ee 100644 --- a/lib/presentation/base/widgets/theme/dynamic_theme_switch/dynamic_theme_switch_content.dart +++ b/lib/presentation/base/widgets/theme/dynamic_theme_switch/dynamic_theme_switch_content.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_template/foundation/extensions/string_ext.dart'; +import 'package:flutter_template/foundation/extensions/context_ext.dart'; import 'package:flutter_template/presentation/intl/translations/translation_keys.dart'; class DynamicThemeSwitchContent extends StatelessWidget { diff --git a/lib/presentation/destinations/weather/home/widgets/home_page_body/home_page_body_content.dart b/lib/presentation/destinations/weather/home/widgets/home_page_body/home_page_body_content.dart index 274d7e0c..7f4f6940 100644 --- a/lib/presentation/destinations/weather/home/widgets/home_page_body/home_page_body_content.dart +++ b/lib/presentation/destinations/weather/home/widgets/home_page_body/home_page_body_content.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import 'package:flutter_template/foundation/extensions/string_ext.dart'; +import 'package:flutter_template/foundation/extensions/context_ext.dart'; import 'package:flutter_template/presentation/base/intent/intent_handler_callback.dart'; import 'package:flutter_template/presentation/base/widgets/list/ui_list.dart'; import 'package:flutter_template/presentation/base/widgets/responsive/responsive_builder.dart'; diff --git a/lib/presentation/destinations/weather/search/widgets/search_page_body/search_page_body.dart b/lib/presentation/destinations/weather/search/widgets/search_page_body/search_page_body.dart index ce06c20d..6e8d881b 100644 --- a/lib/presentation/destinations/weather/search/widgets/search_page_body/search_page_body.dart +++ b/lib/presentation/destinations/weather/search/widgets/search_page_body/search_page_body.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; -import 'package:flutter_template/foundation/extensions/string_ext.dart'; +import 'package:flutter_template/foundation/extensions/context_ext.dart'; import 'package:flutter_template/presentation/destinations/weather/search/search_screen_intent.dart'; import 'package:flutter_template/presentation/destinations/weather/search/search_view_model.dart'; import 'package:flutter_template/presentation/destinations/weather/search/widgets/search_page_body/search_page_body_content.dart'; diff --git a/lib/presentation/destinations/weather/search/widgets/search_page_results/search_page_results.dart b/lib/presentation/destinations/weather/search/widgets/search_page_results/search_page_results.dart index a0893a8e..7438ee2a 100644 --- a/lib/presentation/destinations/weather/search/widgets/search_page_results/search_page_results.dart +++ b/lib/presentation/destinations/weather/search/widgets/search_page_results/search_page_results.dart @@ -1,6 +1,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:flutter_template/foundation/extensions/string_ext.dart'; +import 'package:flutter_template/foundation/extensions/context_ext.dart'; import 'package:flutter_template/presentation/destinations/weather/search/search_view_model.dart'; import 'package:flutter_template/presentation/destinations/weather/search/widgets/search_page_results/search_page_results_content.dart'; import 'package:flutter_template/presentation/intl/translations/translation_keys.dart'; From 7c96d5e17de8b9fb2940f83748eb848ef8d294db Mon Sep 17 00:00:00 2001 From: bhaveshpawar07 Date: Fri, 8 Jul 2022 11:50:37 +0530 Subject: [PATCH 08/10] added easyLocalization initialization for load page --- test/presentation/base/widget_tester_ext.dart | 39 ++++++++++++++----- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/test/presentation/base/widget_tester_ext.dart b/test/presentation/base/widget_tester_ext.dart index e9623f6e..b0d0ff6f 100644 --- a/test/presentation/base/widget_tester_ext.dart +++ b/test/presentation/base/widget_tester_ext.dart @@ -27,6 +27,7 @@ extension WidgetTesterExt on WidgetTester { fallbackLocale: const Locale("en", "US"), assetLoader: const CodegenLoader(), child: Builder(builder: (context) { + context.setLocale(const Locale("en", "US")); return MaterialApp( theme: material3LightTheme, debugShowCheckedModeBanner: false, @@ -34,6 +35,7 @@ extension WidgetTesterExt on WidgetTester { themeMode: ThemeMode.dark, localizationsDelegates: context.localizationDelegates, supportedLocales: context.supportedLocales, + locale: context.locale, home: ProviderScope( overrides: [ viewModelProvider.overrideWithProvider(fakeViewModelProvider), @@ -56,20 +58,37 @@ extension WidgetTesterExt on WidgetTester { devicePixelRatio: 3, ), }) async { + TestWidgetsFlutterBinding.ensureInitialized(); + SharedPreferences.setMockInitialValues({}); + await EasyLocalization.ensureInitialized(); await pumpWidget( - MediaQuery( - data: mediaQueryData, - child: MaterialApp( - useInheritedMediaQuery: true, - home: ProviderScope( - overrides: [ - viewModelProvider.overrideWithProvider(fakeViewModelProvider), - ], - child: widget, - ), + EasyLocalization( + supportedLocales: const [Locale("en", "US"), Locale("hi", "IN")], + path: "assets/translations", + fallbackLocale: const Locale("en", "US"), + assetLoader: const CodegenLoader(), + child: Builder( + builder: (context) { + context.setLocale(const Locale("en", "US")); + return MediaQuery( + data: mediaQueryData, + child: MaterialApp( + locale: context.locale, + useInheritedMediaQuery: true, + home: ProviderScope( + overrides: [ + viewModelProvider + .overrideWithProvider(fakeViewModelProvider), + ], + child: widget, + ), + ), + ); + }, ), ), ); + await pumpAndSettle(); } Future loadWidget({ From 7808a326b5e34ee2acf0f4db43584df17ba1ec2e Mon Sep 17 00:00:00 2001 From: bhaveshpawar07 Date: Fri, 8 Jul 2022 13:33:45 +0530 Subject: [PATCH 09/10] recreated images for golden tests --- .../intl/translations/translation_keys.dart | 3 +- .../intl/translations/translation_loader.dart | 51 +++++------ .../search_page_default_state.iphone11.png | Bin 5015 -> 5019 bytes .../search_page_default_state.smallPhone.png | Bin 3881 -> 3894 bytes .../search_page_favorite_icon.iphone11.png | Bin 6434 -> 6438 bytes .../search_page_favorite_icon.smallPhone.png | Bin 5322 -> 5332 bytes .../goldens/search_page_loading.iphone11.png | Bin 5659 -> 5663 bytes .../search_page_loading.smallPhone.png | Bin 4370 -> 4380 bytes .../search_page_no_results.iphone11.png | Bin 4834 -> 4837 bytes .../search_page_no_results.smallPhone.png | Bin 3765 -> 3775 bytes .../goldens/search_page_results.iphone11.png | Bin 6809 -> 6812 bytes .../search_page_results.smallPhone.png | Bin 5697 -> 5707 bytes .../search/search_page_golden_test.dart | 86 ++++++++++-------- 13 files changed, 72 insertions(+), 68 deletions(-) diff --git a/lib/presentation/intl/translations/translation_keys.dart b/lib/presentation/intl/translations/translation_keys.dart index 887c9cbc..62636592 100644 --- a/lib/presentation/intl/translations/translation_keys.dart +++ b/lib/presentation/intl/translations/translation_keys.dart @@ -1,6 +1,6 @@ // DO NOT EDIT. This is code generated via package:easy_localization/generate.dart -abstract class LocaleKeys { +abstract class LocaleKeys { static const homePageTitle = 'homePageTitle'; static const searchPageTitle = 'searchPageTitle'; static const forecast = 'forecast'; @@ -9,4 +9,5 @@ abstract class LocaleKeys { static const searchResultsAppearHere = 'searchResultsAppearHere'; static const noResultsFound = 'noResultsFound'; static const dynamicTheme = 'dynamicTheme'; + } diff --git a/lib/presentation/intl/translations/translation_loader.dart b/lib/presentation/intl/translations/translation_loader.dart index 586485f0..fe73b230 100644 --- a/lib/presentation/intl/translations/translation_loader.dart +++ b/lib/presentation/intl/translations/translation_loader.dart @@ -6,38 +6,33 @@ import 'dart:ui'; import 'package:easy_localization/easy_localization.dart' show AssetLoader; -class CodegenLoader extends AssetLoader { +class CodegenLoader extends AssetLoader{ const CodegenLoader(); @override - Future> load(String fullPath, Locale locale) { + Future> load(String fullPath, Locale locale ) { return Future.value(mapLocales[locale.toString()]); } - static const Map en_US = { - "homePageTitle": "Home", - "searchPageTitle": "Search", - "forecast": "Forecast", - "favCitiesAppearHere": - "Weather for your favorite cities will appear here. Search cities to add to favorites.", - "startTypingToSearch": "Start typing to search", - "searchResultsAppearHere": "Search results appear here...", - "noResultsFound": "No results found...", - "dynamicTheme": "Dynamic Theme" - }; - static const Map hi_IN = { - "homePageTitle": "मुख्य पृष्ठ", - "searchPageTitle": "खोज", - "forecast": "पूर्वानुमान", - "favCitiesAppearHere": - "आपके पसंदीदा शहरों का मौसम यहां दिखाई देगा। पसंदीदा में जोड़ने के लिए शहर खोजें।", - "startTypingToSearch": "खोजने के लिए टाइप करना प्रारंभ करें", - "searchResultsAppearHere": "खोज परिणाम यहां दिखाई देते हैं...", - "noResultsFound": "कोई परिणाम नहीं मिला...", - "dynamicTheme": "डायनामिक थीम" - }; - static const Map> mapLocales = { - "en_US": en_US, - "hi_IN": hi_IN - }; + static const Map en_US = { + "homePageTitle": "Home", + "searchPageTitle": "Search", + "forecast": "Forecast", + "favCitiesAppearHere": "Weather for your favorite cities will appear here. Search cities to add to favorites.", + "startTypingToSearch": "Start typing to search", + "searchResultsAppearHere": "Search results appear here...", + "noResultsFound": "No results found...", + "dynamicTheme": "Dynamic Theme" +}; +static const Map hi_IN = { + "homePageTitle": "मुख्य पृष्ठ", + "searchPageTitle": "खोज", + "forecast": "पूर्वानुमान", + "favCitiesAppearHere": "आपके पसंदीदा शहरों का मौसम यहां दिखाई देगा। पसंदीदा में जोड़ने के लिए शहर खोजें।", + "startTypingToSearch": "खोजने के लिए टाइप करना प्रारंभ करें", + "searchResultsAppearHere": "खोज परिणाम यहां दिखाई देते हैं...", + "noResultsFound": "कोई परिणाम नहीं मिला...", + "dynamicTheme": "डायनामिक थीम" +}; +static const Map> mapLocales = {"en_US": en_US, "hi_IN": hi_IN}; } diff --git a/test/presentation/goldens/destinations/weather/search/goldens/search_page_default_state.iphone11.png b/test/presentation/goldens/destinations/weather/search/goldens/search_page_default_state.iphone11.png index 8b6308523aecf73831bde4a2c334f81fabef746b..9b3782717c01025f542954ef395f83141b369a56 100644 GIT binary patch delta 2030 zcmXX`eN@s}8vdDWA7je2omEea(#NE=X6R5!fjEwRY}=G)PP4gAB_@@lSY}Rwf?|0b zrwOH&UCj(Qof=)%5pxYc4hm`slUlzN5k$c7XHY00kbKD3((c}K-hb|W-uJ!l^E~%9 z#5Tp=Nu?b=b}02*@&luKmcc4LH()V8m6rTbYGQPiw7BE`a_YPTnXvWdH=m!~nk3#S zU(EWgn%A`R!ugFij_2frkAFXxld~-*=Vr!Nt1L%cJ3jyN>}0|B$6Ab61W#BdyS$)3 z0se6HNw5)RZp_2CFW5@iW+`%!0(Q25oeAQeL}1Ihe-m3HfC1KF=GOHMVccO-pOJN@ ze+^*TBD63ESEFf@bElEn7=hnMfP&M#S`|a^jYJG7;$8Jig&!DOgE-t zgphu(b?ve*PNTvjyc;ckd%SVRuw$UEL6eWUHot_vHh;DB&p=n>B3_?i5)@LGs%U!y zrP2^9_h$Y8kp4Lj2N%YtJ99xrAjq~R8W&BA2WDP3*XU~=p~R8+m5B^-i(iXKaz6zM zPBm?2H$AewMbfTQtw>)PDt-OH{_Z?&?}3AOmw`r4@z3KgPrU~eTleq4CLPri@$MDp z^H|?C)XCosgrOXGzWOs3pU<}#3;lZMKe~O^_?P|}5iPH8#qhQi8B%#Uho_|-ATPaP z9Ll99);Bar1hd{V-Bh}?wH4~s`-tq(RoU>yg|@Ea4SQ-sBC?dP6Q|_(CTTvPsMD>~ z=9ZV2W0!Bh7%;!(6!dPK6Gfm~tfNSVqu-y`4FZvbf+0po76Y8_)QcniB)4%p&H6#n z4Wf8};_=7paRfBeK{U?(jU_01lRp|{Nc23*I0Kt(H>m}gEvvKFDkftiQ~{hh98rl; zH>b23bxu_=sD?-t?xg?G^g_y|p>eq&8xB?&%s)$4Jqf*NhBEPZgqh-($^ry6PbA%0 zRk;M*8M(qY9{PyHJBLJd)zz-(7*bJD5xu&)$gA8ZQKw1*BiQsH=)HHfC6g?f(UcNe zBZ3B4%)#ITp9DKn7R#}~1uDc$4T_}2Yes77>+8j7u;jgUZNJikM@O6bV}O!7w~0jP zgTa6*qIc|?rC8Ad7Tn?dwB=N#NYbw=5n>@*? zchSG9NV9)UF21C54XXu`<>lo@eM5kWS~%fs?-%ZU1zW?FL0F)RecVQ5heFU*{|MqWS@s9J%jNIYqIL=Gk*W4fN3XlaP1aa zJ`c>VN))5ZKD;AC@L9CYBkZT>dp2haHb(1Aa*e$ex_fkXugwFm(1k)1aSghjZP}Qj z*3ino2jspVux>+ESsv9eEs6?(lOH%_t#YxZpVC!O5s>|?2@V}hWwgJ-V#Ibu zmHPH=LV1XPgHbDP*G_UX%`XG{ksO~posm`(_7W@7`a=WHpNALhw|V#ra><-YjWQ1| zwCl)5zWh?wv(sknrTawklw2<97A_l0qyM&Rx{75kQ9P5$P=xE(?GYVCl;YMWt68(&S~*DJ3lCML+vhc)7nk)NHw()K;P zwpy7?W>GU^C2vO?Vk_49>W6{>+gt`yyJ1V`ov^~yw7JJHtldcw-+flof?K+c6r#hx zFGxNQn)>ebWN`$NR~x*xzJ(1Z&=GweYtO=)L9YH%zqp;|g+rYjub!*7n`cwl73)WI#YRvKtJlQhbfqf>; z16h>wyOHTBB<)ajk-1;mUQACE`n?Fcz$_#hdNbQClU(zO=ZMD)|W&WXhFXmnz?e}CtW5GSjP^ZJjDAd`{sWD DLo0r~ delta 2036 zcmYL}dsNbC8pnUirnZiGoOYEKg_%5?+eIC-Qioejm)&a2JvHmeye}ngUXVyZLD0%t z6Q%N$nE~6*IIW|iq^6dLX~L8OT{Q5DLW-g&KU6^EveY?y_C4qQ=Xsv@InU+ueQScM zf^HpR96EmF&<~V{x(Nv@QFEwgnyliZAE{|0qHUU!Zs*^93_bWuy3e&=>fd>N_a^tw zro@B4UWxsBXYKqG*GE6O6d$>A?Z~Y^osPSGqE2zpa%lU0pPm2uPu@%^Tk#JyQKjJA z-*j{6*>59EQnr$*)5LL2=;i7NP-ZeqqdalUG6=AFyF7Ev73g^8QF+_F%B#&>O2u>z zX8=>XR9l^vC`NGhn(Nc&LEQ#CiAzdNO=X6O`pf(z8A&S-BC5&EFnIpQw|tAXp2Q`e z>kWUQ`ZvNS=Ym4eO0BQ@M)XfYn@%YtEGmUfs6PT@-y7xYcWVf6Z>;qOjv0n=tcPZm zv8cf6ofy>eQM^XV#yPJ#5V2mXY6UV6*T6Xp1WO9Vp-kiLqW2CxtETWA@U$-4OIG`K zeKtaf=9tTblY?hmnO|n@!n@w+HIYnaSX2!>;ayZc3#&!Ti|V!&M_HbB7?zT zUVY41fXIlMxw&0d14BZJ12O|ig5kW`!D^y*2nKtAE3{2SHM$k)(s^9U2f18)n6X*{ zmSE}W{*n3?XS0*E6$v;ZL#vG2030*geCY)hjG|j#Le-9JVIdd;-}anLVBvq`(%g1n zCO)f5q_HeC!IBvTKhOZhOQm{!-kgAi+f;!#IWMs$_XH3Esj+;#a#Bs|^HM=_+QwG# zZHa&2!U$cdRw=#|2I>}L$7Zx6ct`G@J%eOve}8|Nudk?N`-F{~+QI z4--HBdYfom94QsYSU0_^t*r(5Ec)dx!|UB@1s|tg9UUF__3W7;$P9)^ihe5c^4uGW z5vIHk<(5uI(aid@P+XT)uq+|5frL~{dgu;2O!ngLUE-pGpWoPP{E?iI% zxAwK*^G9_1fgRrpo*Ik0-KXNSZi9yz=N@X#Zy0qjhJI?9kX{jh^c7nyCDr24;NbEW zyiAI+KOM`4{h0-yc(TI9lIf_`H+|tOxq;O;5UT(lbXClr0blUGa1m#5v@QwB^q;aN7v*FeJGD#JE^ z#TZK94!hx)#HpTQqJ~YDqUa`GA}PVEdBVe+WXdpEwH*sf-ZGT^Fm~k;akep>l;G3M z?ihAEc!C1_MY0w<=Az;lhRYgGf z@(XIyEX6cI#wYc~E>EXD$oMReve52*vYpj;&>hyq&D4%(7VX(Yw(V$U!pQhV$nCdS z#*XV6Cj^R?u7rk7MFR@X%nY$0E9=uXNlq2|qbNBcWv)}N+b-#+&L$?ZDdR8o{!y3C z`+s{m-5*0!1R((W>rao&`e~4KV@vrmB5E&aE{P{}s#QOIMl-;PW^8QiOZOsfjx%)w zk5}<2NXkJYLGxzs-@$?Ve#(oG79VdAQhCe$A;UK)AV+C4RoFI+(P(g?Nr*8@_AY&V z#V0IJ)`{5|!2#o99H(F$inGp1BE)O*#E7+yxF&F2lMGGX7{$h*mqs(10=!Xr>KPX7 zN8zyzv;DvmRv1Lf*5GbeezUH?|IvMp~ZuJTDrZ9f-pVM1D#4b>0ny8>aG&B_UZ$ z#I4HH5lZDTBS_%Tc6rIfSo=bFWA1Jv*w{Y#C1>E;Cruz2J20Jq0<-jNp-*ib%dROH zA0r6SJb`hvPCP+Tm!Dx3AHU`v639XuHS0gJQYM|t`f5M8RaUAF5=B!94+>QBBu3#L znf~(V)}SQVz<{&BT>_EHf$(s;yF164IZPX>UxUj#aaEx z$%PD>Q#+zit2Oi#+HFe;l34Fm>Ep38@S^H{U5r0AEPE7bd;Y%3nN%#FV;g$zrZ^og zDI90(|3jnei=keqS`{1WT2y}{rqX9K+1KvZ9qsXicyr|>;5^5Vo;t$&F6GL90sT;A A9{>OV diff --git a/test/presentation/goldens/destinations/weather/search/goldens/search_page_default_state.smallPhone.png b/test/presentation/goldens/destinations/weather/search/goldens/search_page_default_state.smallPhone.png index bea09133c3af6adc9909d55cea1b7026456278c7..21a17dd11f46e97a2245e5c071bb0fccbb60a93d 100644 GIT binary patch literal 3894 zcmeHKdr(tX9==FdP!@2@2tl4x9hp`lAOb>CvIx82L_oy{L(r5>H7XFm009XJ$O=o1 zr0p)^3xZ31AP_*1hX%q1Oyrqad4xbnYOWA@B?JfwdEE`W|LnA#w$AiV&di-}?wQ~H zopZkP{T{dYSX8+6_FdZn0I)t15q1Iq%t!#R<(}nM(~J$X@2&~Vh$q4i1I!`kS<}l$ z#KT8UTABvg^2@)OOuj!77IHG{{^Hai{jBV4mlCfJdW4fD(|p06Z>$bnT6SfAxCUXFESVd3^Em zUT_b=iEih?^s#zkS@f_C;Ol4eaVbEa(2kVn zo@QbB@rOX==Yp%|f~KnQG9J%Wzj%j1A`l2PAMSL2Q*QKED}=>t9t?cfTg00q@(1-S z??kC_@0xrHv9_QL?}5fqY$z_pjM>*Bz7IGoAjyIuB}RDSC@{i?{qtp`iw=lPP%&LsMOxO`bsbZ5!5ct)6PAR=%&I zzSxO2TY_${*PmzpUZ>S+H8TNFhJFD-oq0L~DH#>c^{guiW0PCPk6+lO4lS}V)Hl$5 zxEu~A3(`@ipYj`@y$Gtvo{?N=hv&KAAGMwzVxUk%6$bI6p|sgI)Paiu077t--Hv^c zehH~*jHX5Fg&oKae6`B-Dsn@w~@-m zUjdTJ;Oox^O7q#Xk3zv1TPtK&rtq1h9g=iO4!RoO^){wRI_u&-&VyPWLZPa@E(y7* z%RH$FPHoxvX!_PYUcF(?D@FATKuokCcP^{)u^5DJuzH;>Dlzd^o19ajdx$RMh6i80 z^75AX_`g~1PVNyRvuiBFdStC>Kha2~Esj8Fkxez>`7k08EOPJ)Qdp;pO;@0N<$$L| zjc+F^Iu#vd^{TzVZFuW>;98H%e_i}~n2{g4S|)2Z@6pWI?ARj*LZm;0X4z$%y9|aK zuf)ZvAB_gT=WtFdw&m@+kHNa_tEmA;s$)RTbt@-V_FL*-HVhSH9)jD%4@R6meVW^@ zQr$_m&#NJ(CM0-zdC@^0o$k@8pSCtGu6wONCd)P#T4!Sd#NOg?M0t+*U%pMfQTBnrEl3Jzdnh3eM&hfG1B^^LReu0%0DAH;RdC4$!>F8)9i-r7q zq*+5Cy1yTnk&)32`qOmPF^{=QkjE>w^B@;kwEfv;zbDPkBZ}7QiVE%|&W#lE_)}@C z%zh`AgD4bA9+a8n35Rb(cKM~6R;pz(OBDBm{PxGUHM~`x*+~Kjo)ozGPfPhH^}RW{ zN!AZ@-lisgRuj$mD)V5?16x}6jT?3h&2@)!up7ez9U5sYYq6zRHdKyrv#{NN6dAyU zp|WNlrVT#`wc|(X92r;VW|gnJg8h}Ed~*w~K@D+xh`1yOpY9?VzrX|^qYOo$etjio zFbWjsC>#|z60b-k3C;u^I+t2OCyA!4ddzdeTW*U?g~r)bsK?`64k6jO-SGMyF)`6p z-+N`}au%O&l;&cYzb|4DPu9-P{<9$~D~-Gq>UKMeKwE@pOweg^AVYtHpG(1jMkdL? zIhoU8FHlaGVeQp|G|bkYt)UmYp$FUJQSx?KGB{pNibAUU_SMtOEo_b=N&WEFqsVSm zi0JLs<=49z!Zlt*D(;HO;l=J0Ieu)2hDmvuA+dtL z6y zUbL|%IudEIfF$$-9~C41_;s84F9PXFiIc43AL2i3i-#+Y{mydZkQ>d*ukSoIEjP*9 i)XQ%YGVf7lf6YkERoG`Vn*M!(BY%ntV;=tE+J68fa;jSZ delta 1809 zcmZ9M4Ny~87RQ4iIE_HJ?4S_7+OB1H6%d000(s)vu@o@fMW9Q-fGMN9K|+cpgpfRn zLm6sFWGPSulQLaM5fhA1KFUV|#XK}Zz*fEz3FHwXAR$kLU_LkQ%+BoYojG&vow;-W zXa2u?PIo|Cz>RqDmxMF%=Zl**o{e*}bn((9nkBlG1SRA(-TWPA|JXkt63fm{y|*tl zwfTwr>B%pYd$UfBm8ZQM+VY3HfBYoD_wA3m(B46RKGXSL-Cx9CzB*j<@rQ5y{!Z5T z=s8U{5=GVcc79h^o>;=%RQV_+blx@{(EF_lu$S~rod%J4p^*L->c)LIgMuo1?N$4( z3l{t?Yo^3`rXRvt1%>>=oSYnXxJ)bGV&cE1kCPWL;6k{}@$8a#$FhaF^(R&E?2mHp zzS#`M0b_nKCuA_BaM#dGb%ZeUoovGVefbluG9Tj^_liMchvQ6B_`Kb857dIHKC{n$ z^hG~yGvG~77)r&J2lr9RX|NTtR_6qg*aDvE<*rgStq_)>Akut(RE?UHprrMeM4xLucyrh$spU}Fm-th&k2_m zzt%QDmB8mCLhrJW2qW-=?WjS3=lhT>o5EXM`%;ydwkhM+p`=gezM;r7eRdo3Paee~ z;615xUR|=8XXd)vS`h<;XU8#i@}~cRvPfHPm1}ih0>z&!I(3h<0)&-EQg!LpFw!VN z$c=+Xq}|K2ADc;=SG2AQLli|zH!v(p1Xn4phTPUQnu zdU-J4qC>7VG%3bKS^ct4KRpN?t_{X>&<8@3Vp$p>JR~%fLmRMez&o(1)ECh`lgy$%%LY~-g(8kttF3~P*=AeI zp`MEn|7rbm!fxtjB5<}DbHiR<473BK$>+nbg8q1YzO~gQL zDFV@)=>Sm@6;Ntuz6k}Myn5N9ca~tccEeAwJb1+#G+YImMjpe!t7f%tk6L_et5|1{ z0hNMtOonAn5O9+oJF`@0=2TR;SF8I-I@z>ZEDn6gaTf(h?hSA2mNNL)D*Q17b@TwD zSem$vA@J9a>QQ-3wG?z<+PHP@Si$mG4b}LJrif*2^5P0r?s<64gv$DaDT&he8HHFb zD8~=vHi24;AI(L{RUSjdYdqfWDu6a=-v%tNHKnx_4$uQwR zz-@Q-X*{IW4|;M@ol9t(bL}KL2rNoIx#%2NYL6;?KKZMcWLI+?o;(6yDEXV;PutUN z(CwHW+|DNPR*C8$sdUrPTFGu6NpbnpirrVgDA)?nhO|K&${vaev{UeL`D~$`Jpnf= z$LN;jVEboH0LW?;clH_=7&3<1+@8Yi_tqhWd~+qT-C;2h%x#leHM=iHzQMTN@|J3B@VIx+cU=#8ObJwbf#mED3#Lp>96HWA-BO%Fv z{>5A;Tu*3K>m247`_&jX&xMHX-oFBHTZ)=j^7tSrv(&12>{&g(MpQhH9g5Z=P~&Ut zkYOZgJvBr{HD@(+Y=40IHq1e!eANHn)4`F(V$MU=Tdb+hOA>4VeR--4a#AWrDRPSr zj9d4=L%G-vz~qj>6RZ^hShPl!?!evqYprAKO6(0{>> b^|rZDE;rm?Jqwnj94q0&b7w@Sv&;VlG=S_K diff --git a/test/presentation/goldens/destinations/weather/search/goldens/search_page_favorite_icon.iphone11.png b/test/presentation/goldens/destinations/weather/search/goldens/search_page_favorite_icon.iphone11.png index d20e4e9aaa6beccc9322edbb22360822bbb0ae62..9bda67e95d5c72065e546e7d2744215923e7063d 100644 GIT binary patch delta 3464 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 delta 3471 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 J<2ToT{y(;%9sK|R delta 3252 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 diff --git a/test/presentation/goldens/destinations/weather/search/goldens/search_page_loading.iphone11.png b/test/presentation/goldens/destinations/weather/search/goldens/search_page_loading.iphone11.png index 5ecbc4318a59fce8fb79896d2caec42a76387d69..92d1f71586b9a1b8fc77ae1af5d1f6d2b1464bfd 100644 GIT binary patch literal 5663 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 delta 2402 zcmXw&dsx!<9>+my%rsrsS?cU|)>BK@QcKjL&6?ZethK}oDr6pA;uQ%ok;~Syr&C^b z*ep$@&66f5$Vmi2F69YZhOP{#M8HT$NKhA`AaH(lp7Z_h`~Kte`981r>)W#JpW7Nf zrwo35#zi^lR9ST#=Eo!4$Cd75(sm z_c!*f!tP4WxlG-^C0+XC%CGi(oA$5ocJFWSP!UHTY-5~{PrkW+SKFUWW|*V5_xz8S z$E^0lFMHpPA2wm^4Jw0 zIVDntoqUA>MX);J9M}-^1+BZ9b94*ExHk%UVqfNX{PM~ zoNW7#)%&KC(%x2WTDYXOMpiGvhYo0$$DA~{XMCN6j^pF3LJP3PId#_T=yZKDb9{hI zc(B=)S@|dZa}~XWM4uY+ZVDKhQ5r*Jq15qpv^9_|sd9Qa%o_EXZt1Rhsvy{`)0awCFof<^3JIcyG0lSK$RhbZ;W;&L<7HEbp!L1keL*mQ+UxDmxTJ}+2Es(bO0V!>bADZ$c z$};|>e6#f4BLO{GFGjI5>mdBSNXPABbth*!hU(Xjhfl~zeK=^$C8fJ)5QkRr`-xC~ z*hPK1c_w67#K3ToikH_B)ZC_yu98V)G(B#lrvb`@`~Z!)8c+c&av|1E%31dl*)y>7v+Ka!YJwnhjZNbk)rr6TCQ9Cr7ClENya4 z=GPJxv!77pM7d6GJ-G1Ume)T^F3XRu9@=YM3ktlzVs5Sx z*O-|588U3Q!XM6dv}M%g30TZ&<#$iPmYkp(WJx&l`bWcDDuw_q(Dkk`WmhKhrXoL;oc!mE16YS88 zhU#_z;AWz1z3TCsT00UdCdvRuRtOJW?tHOuDSwTInXZtPVPs>B3 z7Xb3b`a{nLAT3AC<%0ddgrzrikbFw`rVb=7XR0V-#OF)wj zyj2>HW4&K?D0zH#B2@KO>B;3Q?vmRwk;#6w+dPCvgpP{Vg9w$&Alg=FIHlR$)$q}h z-v{>l+IxoIYjUpPe5n_|P$5<)pc8C}V1zzKiK(Hhh+}~B0K@XaU9Uloz5WT|yherm zY|Cd!fZv(7v-ckU2g{5pc#Mdf^ja zR^~Q#!3f={Op{RT{EaORW>{S&0W57r483Er!12e4om$LEyEY}Y(?1HTqOu+;c0-!j z5R|FAj9n0doyP?1f7-6vp!)-dwW8xtEoF9`rtQ`^ zotwlB2UM|TY90Ul^VfF#`JCV9eV*4(l5gHOzr4ShF~+q400@yoyS)Ga4i=MP2$&3J zA9?tryS)Yg4iI;f@dr77HM`pj*vn3yTpFK!^pB^0-kF)1F~%6zu3dB9eRSS2#yE54 z@v(C5+|QH5~x^ z#EyjL`sjT7+y6Pf{N=yeiKzhCXQuwCw(Fy_wzf8&fBwJ5FMsHlZfN|!{rj`yM?YGh z_ObxjBc>XjW5QJyS`7eu(NynvHa0fKqo4i!`23$fI!>JU*)hf#ufP8K`1EJaczg!H7-I)M zT<~^$R#(rDG5+uI+ZX=q%(&$i@3;bBhd$MIeSB`c_1O4-;^X22zz+UDo}Z4-t>f`8 zoEb-s9NDQU0oVt2^vwm=$LF@�TJ@+wpg`T_2zKzW28A+rRZ2J3TD`dsOmv>K~8K z>gxIN#FKwtObfsslzku1#>U3@^k>dg(*dwYrQbjb0Kx-6DtpwnAFZyQAJ07VuVZFr zy62spogHH&W@cQya>aS~(Rs%haKkmKv-m$c}IF2qX?DU!d*hem|t&QcCm2vj$*|EO9 zzUlFs{s+?e`T6mo4}NgG_~MIWd3kwUTw9ykVgcCyjxH>WrKP2D>eQ+6%-6rZX?!*f z&*{^r$IKYxh3|fMn(GAMCUc{`*!16cmKGPs^78Vu)&;;#9%^NIc`Pn2ZhG9N;W@gn z;PDy&o4UBRc0->7@ToSF5dlMg%}(=V$B!Q$fA~j#u&r|(K0G@%Hm*)Qetv#_tgo+6 zJpP`0?inw=^wO@)f93L(@#v$EO+0=t?7`Dde{DSdFJGH@{HH$k`{U%@OB0W`hx>mI zx4Q?6cilBs&Yhch{OsYw0Ew7nn6p>57Tv(5RZVYl~S=Fs-$w}&^w9`5oU%xr%Tx48wozK1($_kV`~aG(g0 z;U9mgslKZX#u($oi4)_22OgMs{4Gb0OmQ{9UL!nA-LF3UE8~3+{`|z_-}5u?8JFI; zG{qGGdx=MF0HlNmfYekUwY~P*Yvai${%*`{<8|JbFJBo)j?C@a_}SUnarNrt-+{5+ z`QN;JdE&8S?2SD*JUcr!cJXIu54V2}FTGmyKNF7~V~nT%;i+-Q9d}GTe%rqW=H|xL zD_15Sf92}cF?;y%#C!1eS984e)>{*=VYl~iCrvdx8yg$rx#ymr<|)}Cd$9lA412h; za&D}wO#Ve|+}u2B1CtR6KYun2&&9R1adcs!SPKCA*wKZBadB;J)8jS`&+^L3SXx?| z%Ax?cc`Yt2jg^&^O^@3&JZI0I9j8v68mCX6cIN}YPdU1{!S{`ieeBn_JnrJfwQ=<5!bEd^=}Uh;E?v5`<#8YR$Rp$Z z@Bf7@kGt^7E93YbcWimwcCPVFJB%-M~)nsXwJWV;>n5r!1~?a`{a1& zp@+6SZgq8aoH%h}%j33ljgyXDJ-0ee+_m+!?#4CR$9J}$_Hoj&Z@lq_@VpC;+LIv& zDrmeU^j*As;le~OdVKZOSI6zQ-#*ctZ?3;N(YWt_e|g-0|NUDYcmDj#V_{+IZ|>dB zHU8iSKODE+cI%eMy?o)qSeW1~!@F^f_VJzVr+u9G8ee{SqWKPrnY&NkcWt*90l>lG zQ5&(Fb-G^}nh7c(m2GG&%qP002ovPDHLkV1n>X B?G69{ delta 1806 zcmV+p2l4pjCE_KJL4S-%L_t(|obBCBjGfm(fZ;Rt*cs8WlO_)KOcF;%krkRnM0ZFP zErL*`o6-$J&^1&*HwYHA3UMh-mlbTFd-Z92Fb?S++ zdgjd3=iMsd*~I+39}#eKxNYIKS#M#C5#MUN`|cy-?z@kaO9HUVWPhDsI(BS4{`jAa zF~<1Z=f1cr-tGa=OWyIk6P*JG4vYf_4vY_d=ogD+0oa9hJUo9t9-T49c>eisj%WVq zpLcp$0CuSz4bSz_`NlWCHJ<#dzun0t0odhsEIijo=bPX9&+(Nf|7NF_17MHXk?>p} zoo|2pzs8rp{MS3N6aah7)IZgBeRS5=*2ar3{`dIhkNnaNjsN%mcz*ooN9)tx767}% zRKs)l@Zq0`&KQ4VEG{mNPk!<@Z+MQC)z$IROaC*?Z2_>0O!ZdV#fulm8*jY1tvNO} z-k#EK0N9PD`i^H~V`Dt_r=K66|Fg%&(W5^*#u(%L`Sas5pFQRF831F99r$p;JMlSt z_SG@Q|KEQ5!k?cSx81foo)HAVZ0*RW+OCh!?YAEuUwnT;d;r+N|Ht#w@wt6G@r6_4 z;K74CwIl$0z>Yq-;QIL7afkQ--0F7xS#8(H=l$=$WBm4S{l-o&3&1XwJe~T-<8$`x ztK+Gs|DjkGfL$p2KAw$@jq#b!o~o7uV3$h2ffN9Q2Y^&|t8K4(?zw*(b92+3bAEn) zjJdgS^~xa?^P1PZ=1t}uV~p2de|_q6PGauSM?QXS)|&v}*5OtglaU8B3~KJ)d+zsr zJOE_8c0H10Dlko^bf7JXmCp&WF$oQi_{=;p}v48*k*x0x_@%V*>g|WWAKJobb z?z?Zi^2#eSTmQ=CE90@p9-nypZa9NypZ(f+_Fum?@%T@F`VYoE_byL7-Wl%wGu-YO zEFC*GR?nQ7c>MhS{p0G!#>C?n78b^}YhzrxH2F2m`V4o{u6xI`I&W@nTjTfd+rPc_ z_igV-vTvK~&uw%4X_)mH%VEZ+Ul|{G=;tRM|GuAj-?;eJ#VPIx z*iGDO10W?l0HmgRtL@D<-yBar_4i|L8;|q8eEG^ac<{i?#?Q~skE>TF{|=1pu7BzB z<%!3Ru{+LS|NQ*enBmXR8E*d?UU}tNeT!^f+j`ftJOD5)KGg=Zkqxl~ ze>Fer4eVwQJ@kR`iBJ6cmd9PVur>}ITAXOjFMa7R#>I;lw><7+AA59s@Pogw<#Fd; ze|;Re>#i-2+s-xq@cj94`{Bb|9(V5CxpCykk*$xL!8JO^cej_$anfu2>R10|eCIna zOtj{$KzQE6M?d;&<99#xJ6j%i`SRs)MeyLkiPrqPr=FhZ53Jw&{ZEaDAAWetn*iX};Z_^7kq49n wlTZmh44NBbT$}YK0JwE{$CGggb{FdZ0K)~P=`(pSmH+?%07*qoM6N<$f*dL55&!@I diff --git a/test/presentation/goldens/destinations/weather/search/goldens/search_page_no_results.smallPhone.png b/test/presentation/goldens/destinations/weather/search/goldens/search_page_no_results.smallPhone.png index 76f289609221b5ac15b549f9d94cb1d04583c19d..812648252910253fb8475e3b5376a00e4b32b013 100644 GIT binary patch literal 3775 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 diff --git a/test/presentation/goldens/destinations/weather/search/goldens/search_page_results.iphone11.png b/test/presentation/goldens/destinations/weather/search/goldens/search_page_results.iphone11.png index d51a212d86d4a04ab7ec439a8d956f766111c99e..8ef68932a01cd19194b876582b4dc249c115ea22 100644 GIT binary patch literal 6812 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 O_U{SVP1||m$A1At3#Nns literal 6809 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 diff --git a/test/presentation/goldens/destinations/weather/search/goldens/search_page_results.smallPhone.png b/test/presentation/goldens/destinations/weather/search/goldens/search_page_results.smallPhone.png index be7e39e91b6f3b2693d26bc09b92fff7e319ef5d..7e3d577d68f559e30408d3bb6d7387273cf63f4a 100644 GIT binary patch delta 3560 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 VFk&h?QV{U-^FNOtVH`en`M=YL+y4Ln delta 3540 zcmb7GXU^fFuUWgb+!9t5XN- zsGvoqE=g4S3S3B{LIMed;07v7KnMY{At1pdBy33_>s)5O&8PRhAMZW)oag-i=Xsvf zz2oVQs|Nw?ci$X5cINJ^f_7DEEHTWRE40+(=RbXO=<4zC(<#ogAK$u2Y4T^@|WB@q20_aeeR_W$hrv8Eu8y!!%O|a`MJ;q=E|s? z-xM4XwZZIKUO-W-Tya5VRS(pHU|-)kJL1c7ZA-az5Ril5%S%fv$_!VMCvG+B+UOyG89s zDN1hfqnPy_NY}sU*O%E>)EN!o`s2Y~HEYHZXn>7VJXm=coSK{^;}N+< zi>daoD0COYWo$#o0O2bUpHfgTM3$y@bWPczq3b1b{TS z2q?9efmB0$Z*&GW4cBFICVvE5>bWQ1NjfpU?MNsuH~mj@u*l4QJqZ;$=YfA6eTmTX z>z<#;-@}w4wW#}4C@SU;XU^W=JtMw(VE0^rrT>LR_tJBNDaWN8AGvVsRS8@Km9X?7 zwwFyb!O*Nf(ik)}8jU5*PTUXk>p;f!2EKCr-JkWab2gJY*EYUhJY*G36?a_r4g$e} zT19K&0rq4Vd(!`}gAb$a$f(IA&ti}SGp*^^{33H}<KI%<2pYaW^qwp&i2}Q;KXXr9O$n_6sj8Xl<7ToW$etV61H+ zP^#sK(g{*Fi#0n7=Ox3aS;Zt$G!rR|L9R?$o}z4#&F2ik`o?TAI|?JT1UUCxwXVJA zP92-d3WaE=`9tn1Uu;CO5S-MlRXq$RnNqASq z(JvNboT#5_7*qj+y6^!h&M12S33=l3hZ2T)t78c$BMi4CHQc}RcsUlwy$2{%R;rDc)D|74FuO>Ebs@*gBBAFi0G%oE6=OiK>%az!5aR4!oGvC`A`PdUC z*wfDE^LWja)#f=wBJ0Cojr*&Iuo-5~U`-N%Kxozqu2?madhJwYEPJ#u+v@7R`v`PH zQr&2yHaiB%Ph_PlW-XnUJ+jG#&9!xPby=&|cqce|+@ta7Fe&OVx2cE2izaAadWwKoK?ya*Em>kll8;Q;AWf&; zFPt4a@S-*1*A}?%v%fG?)6{nt`S|?~>l!q=OHXzDqed&vwV#|F9gGvvR-{_bSf|lD z2wxz*-PeaO>PQtsvy?Q1uT1~;*ZhfwK8NqPTUAD47ZA&kYoYFWx8+s*=sWm@{4OIk zS37L-Mz!;$Bn-xIdNkgn9Kn;4N=hmM+n3`Jrjbb@1Mb=>y;;i1>N|Bn$IL4wU}u%W z`k2tt=^vyKPFsQzo#C{dIL$#@{LE5^sy?VtH3D7O7zz(a}5dFM$e3d-d>M-P?P7sl7(3A4{%?h)&4En^#n>y zr{rKTMAc)~F6V?zGc$t40GRqjVZ1wHX&YG<0vw<0jE3}>C{xyL2b@(J1ziT^xe`*E zCXTR5xw_Oq$)4y*P0zkvn(CIWNc)MFw(&27&D?KM?1F1uXF9OOi%FNGiZqXUuo(F4$JY&0?HK zZhqFVgH7QzNe+4LYKW?itHKJL&5Ja>@G)aqzwpDD;=a*ZcNK=d)Cjzvu+UZQby^uU zJ3CuZXvG-iC`4FKcsL{qOV4aYZW<8PQVoJPOJ{$vG*>bGrv3bGL!aI%D@Q(N0lu#x zy4Kyixgz1^5QWPVW_Ny;=DIs1V~cp4?2d7a5I6)m!i6(c>ph^eZkZxo(%vN@ldg0E z8RIh$Tg0Nd0{bW{qX9t+(@+APRQtpSQF?XM6@AL!D8FWvf&zPa{RNy1>%A}Lu4I%6 zFMhYstyz9uNkd41;o-ze>)z&^glMF`C0$HZjHOR@g_x;qP($CDihuUF%S6>*L;JI; zG939FbqvC&)($cqOd&%nrr8EjLN1Re8?H(Ic9HwPs`^{|QZ`!EcT_1!trP?3QO+zH z2@<26$Ls@A6v|7cy;cg4oC{T=W4NyJS)<%S1|ZED`clYD6+t5O!7lHkhp#RMtJ!t2 zr3;nFmv%WxTo;&Dn#@sK7X1y5KE%XE4EbqZn&cCc$<(ZEw^j{l^V-s~i*1AC>8+ka z%k!1^w-+83vQz>x$v(NyUD_x{#0N0Q_!83u0pu5*q!*5D(>`$X9RA52u+KkgbFa#T znevrIRf!mh$xo(P2<+pOmn$HCLQ`(+j|Ac&E4&btD?bmZ9&eT|STF;1N(EmCg32?K zUB;e90NdSejQ1Pd&+dzuT$8`vE4Lb5QHQ(TiNQ$T+@KWxql81Dvo?- z^UEc7fh_9_2(HU83#it&I;SCC?~j5OP4&zN2j&cgC{5^_k-ZrAi71_yxyJ)K5__*3P-KmzWkMdE3Kb}+IHns}9B zK9@N?eroRjAW7Fm|6fV+`!7vW3*EcmPpRL_UDohF`F-QTO-t)4uWtTgiv#7Vi`?@( TeQhfYdcHdp^9}p!6Mz2~cM$C~ diff --git a/test/presentation/goldens/destinations/weather/search/search_page_golden_test.dart b/test/presentation/goldens/destinations/weather/search/search_page_golden_test.dart index bc4b8f1a..daefa4aa 100644 --- a/test/presentation/goldens/destinations/weather/search/search_page_golden_test.dart +++ b/test/presentation/goldens/destinations/weather/search/search_page_golden_test.dart @@ -22,7 +22,8 @@ void main() { late FakeSearchViewModel fakeSearchViewModel; var fakeSearchViewModelProvider = - StateNotifierProvider.autoDispose((ref) { + StateNotifierProvider.autoDispose( + (ref) { fakeSearchViewModel = FakeSearchViewModel(SearchScreenState( toolbar: UIToolbar( title: LocaleKeys.searchPageTitle, @@ -60,7 +61,8 @@ void main() { // Then expect(find.byType(TextField), findsOneWidget); - expect(find.text(englishUS[LocaleKeys.searchResultsAppearHere]), findsOneWidget); + expect(find.text(englishUS[LocaleKeys.searchResultsAppearHere]), + findsOneWidget); expect(find.byType(SearchPageLoadingShimmer), findsNothing); }, ); @@ -74,12 +76,14 @@ void main() { await _loadPageForGolden(tester); // When - fakeSearchViewModel.setState((state) => state.copyWith(showLoading: true)); + fakeSearchViewModel + .setState((state) => state.copyWith(showLoading: true)); await tester.pump(); // Then expect(find.byType(TextField), findsOneWidget); - expect(find.text(englishUS[LocaleKeys.searchResultsAppearHere]), findsNothing); + expect(find.text(englishUS[LocaleKeys.searchResultsAppearHere]), + findsNothing); expect(find.byType(SearchPageLoadingShimmer), findsOneWidget); }, ); @@ -92,17 +96,18 @@ void main() { await _loadPageForGolden(tester); // When - fakeSearchViewModel.setState((state) => state.copyWith(showLoading: true, searchList: [ - UICity( - cityId: 1, - title: "title", - locationType: "locationType", - location: "location", - isFavourite: false, - displayTitle: '', - state: '', - ) - ])); + fakeSearchViewModel + .setState((state) => state.copyWith(showLoading: true, searchList: [ + UICity( + cityId: 1, + title: "title", + locationType: "locationType", + location: "location", + isFavourite: false, + displayTitle: '', + state: '', + ) + ])); await tester.pump(); fakeSearchViewModel.updateSearchTerm("newTerm"); fakeSearchViewModel.setState((state) => state.copyWith( @@ -113,7 +118,8 @@ void main() { // Then expect(find.byType(TextField), findsOneWidget); - expect(find.text(englishUS[LocaleKeys.searchResultsAppearHere]), findsNothing); + expect(find.text(englishUS[LocaleKeys.searchResultsAppearHere]), + findsNothing); expect(find.byType(SearchPageLoadingShimmer), findsNothing); expect(find.text(englishUS[LocaleKeys.noResultsFound]), findsOneWidget); }, @@ -127,31 +133,33 @@ void main() { await _loadPageForGolden(tester); // When - fakeSearchViewModel.setState((state) => state.copyWith(showLoading: false, searchList: [ - UICity( - cityId: 1, - title: "title", - locationType: "locationType", - location: "location", - isFavourite: false, - displayTitle: '', - state: '', - ), - UICity( - cityId: 2, - title: "title 2", - locationType: "locationType 2", - location: "location 2", - isFavourite: false, - displayTitle: '', - state: '', - ), - ])); + fakeSearchViewModel + .setState((state) => state.copyWith(showLoading: false, searchList: [ + UICity( + cityId: 1, + title: "title", + locationType: "locationType", + location: "location", + isFavourite: false, + displayTitle: '', + state: '', + ), + UICity( + cityId: 2, + title: "title 2", + locationType: "locationType 2", + location: "location 2", + isFavourite: false, + displayTitle: '', + state: '', + ), + ])); await tester.pumpAndSettle(); // Then expect(find.byType(TextField), findsOneWidget); - expect(find.text(englishUS[LocaleKeys.searchResultsAppearHere]), findsNothing); + expect(find.text(englishUS[LocaleKeys.searchResultsAppearHere]), + findsNothing); expect(find.byType(SearchPageLoadingShimmer), findsNothing); expect(find.text(englishUS[LocaleKeys.noResultsFound]), findsNothing); expect(find.byType(UICityListItem), findsNWidgets(2)); @@ -186,8 +194,8 @@ void main() { ]; // When - fakeSearchViewModel - .setState((state) => state.copyWith(showLoading: false, searchList: uiCityList)); + fakeSearchViewModel.setState((state) => + state.copyWith(showLoading: false, searchList: uiCityList)); await tester.pump(); // Then From 019aaa097c3c54b2e1e133db746b8498db8ada23 Mon Sep 17 00:00:00 2001 From: bhaveshpawar07 Date: Mon, 11 Jul 2022 13:33:21 +0530 Subject: [PATCH 10/10] moved the comment inside the function --- lib/foundation/extensions/context_ext.dart | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/foundation/extensions/context_ext.dart b/lib/foundation/extensions/context_ext.dart index dd3d5871..bb0c0ae1 100644 --- a/lib/foundation/extensions/context_ext.dart +++ b/lib/foundation/extensions/context_ext.dart @@ -1,12 +1,11 @@ import 'package:easy_localization/easy_localization.dart' as el; import 'package:flutter/cupertino.dart'; -/// -/// Extension on context to make sure any string that uses [tr] gets updated when translation changes. -/// Not using the context won't translate the string if its [tr] is being used in non changing components eg. viewModel -/// - extension ContextExt on BuildContext { + /// + /// Extension on context to make sure any string that uses [tr] gets updated when translation changes. + /// Not using the context won't translate the string if its [tr] is being used in non changing components eg. viewModel + /// String tr(String key) { try { return el.tr(key);