diff --git a/lib/logic/locale_logic.dart b/lib/logic/locale_logic.dart index ebbe61f4..414d6f30 100644 --- a/lib/logic/locale_logic.dart +++ b/lib/logic/locale_logic.dart @@ -11,6 +11,8 @@ class LocaleLogic { bool get isLoaded => _strings != null; + bool get isEnglish => strings.localeName == 'en'; + Future load() async { final localeCode = await findSystemLocale(); Locale locale = Locale(localeCode.split('_')[0]); diff --git a/lib/ui/app_scaffold.dart b/lib/ui/app_scaffold.dart index 32241cd5..9824c777 100644 --- a/lib/ui/app_scaffold.dart +++ b/lib/ui/app_scaffold.dart @@ -5,15 +5,6 @@ class WondersAppScaffold extends StatelessWidget with GetItMixin { WondersAppScaffold({Key? key, required this.child}) : super(key: key); final Widget child; - Future _handleSwapLocale() async { - final currentLocale = settingsLogic.currentLocale.value; - final newLocale = Locale(currentLocale == 'en' ? 'zh' : 'en'); - settingsLogic.currentLocale.value = newLocale.languageCode; - await localeLogic.refreshIfChanged(newLocale); - wondersLogic.init(); - timelineLogic.init(); - } - @override Widget build(BuildContext context) { Animate.defaultDuration = $styles.times.fast; @@ -31,24 +22,6 @@ class WondersAppScaffold extends StatelessWidget with GetItMixin { ), ), ), - - //TODO: just some test UI to check swapping behavior, need to get finalized design and location - Align( - alignment: Alignment.topRight, - child: SafeArea( - child: TextButton( - onPressed: _handleSwapLocale, - child: Container( - decoration: BoxDecoration( - color: $styles.colors.greyStrong.withOpacity(.7), - borderRadius: BorderRadius.all(Radius.circular($styles.corners.md)), - ), - padding: EdgeInsets.all($styles.insets.sm), - child: Text($strings.localeSwapButton, style: $styles.text.btn.copyWith(color: $styles.colors.white)), - ), - ), - ), - ), ], ); } diff --git a/lib/ui/common/controls/locale_button.dart b/lib/ui/common/controls/locale_button.dart new file mode 100644 index 00000000..76b262e5 --- /dev/null +++ b/lib/ui/common/controls/locale_button.dart @@ -0,0 +1,32 @@ +import 'package:flutter/src/foundation/key.dart'; +import 'package:flutter/src/widgets/container.dart'; +import 'package:flutter/src/widgets/framework.dart'; +import 'package:wonders/common_libs.dart'; + +class LocaleButton extends StatelessWidget { + const LocaleButton({Key? key}) : super(key: key); + + Future _handleSwapLocale() async { + final currentLocale = settingsLogic.currentLocale.value; + final newLocale = Locale(currentLocale == 'en' ? 'zh' : 'en'); + settingsLogic.currentLocale.value = newLocale.languageCode; + await localeLogic.refreshIfChanged(newLocale); + wondersLogic.init(); + timelineLogic.init(); + } + + @override + Widget build(BuildContext context) { + return TextButton( + onPressed: _handleSwapLocale, + child: Container( + decoration: BoxDecoration( + color: $styles.colors.greyStrong.withOpacity(.7), + borderRadius: BorderRadius.all(Radius.circular($styles.corners.md)), + ), + padding: EdgeInsets.all($styles.insets.sm), + child: Text($strings.localeSwapButton, style: $styles.text.btn.copyWith(color: $styles.colors.white)), + ), + ); + } +} diff --git a/lib/ui/screens/artifact/artifact_search/widgets/_results_grid.dart b/lib/ui/screens/artifact/artifact_search/widgets/_results_grid.dart index d2c89da2..ee891aca 100644 --- a/lib/ui/screens/artifact/artifact_search/widgets/_results_grid.dart +++ b/lib/ui/screens/artifact/artifact_search/widgets/_results_grid.dart @@ -31,11 +31,10 @@ class _ResultsGrid extends StatelessWidget { } Widget _buildLanguageMessage(BuildContext context) { - bool isEnglish = localeLogic.strings.localeName == 'en'; return ValueListenableBuilder( valueListenable: settingsLogic.hasDismissedSearchMessage, builder: (_, value, __) { - if (isEnglish || value) return SizedBox(); + if (localeLogic.isEnglish || value) return SizedBox(); return AppBtn.basic( onPressed: () => settingsLogic.hasDismissedSearchMessage.value = true, semanticLabel: $strings.resultsSemanticDismiss, diff --git a/lib/ui/screens/editorial/widgets/_scrolling_content.dart b/lib/ui/screens/editorial/widgets/_scrolling_content.dart index 9acf8a99..de320a02 100644 --- a/lib/ui/screens/editorial/widgets/_scrolling_content.dart +++ b/lib/ui/screens/editorial/widgets/_scrolling_content.dart @@ -28,8 +28,7 @@ class _ScrollingContent extends StatelessWidget { final String dropChar = value.substring(0, 1); final textScale = MediaQuery.of(context).textScaleFactor; final double dropCapWidth = StringUtils.measure(dropChar, dropStyle).width * textScale; - final bool isEnglish = localeLogic.strings.localeName == 'en'; //TODO EC: Helper method for localLogic.isEnglish? - final bool skipCaps = !isEnglish || MediaQuery.of(context).accessibleNavigation; + final bool skipCaps = !localeLogic.isEnglish || MediaQuery.of(context).accessibleNavigation; return Semantics( label: value, child: !skipCaps diff --git a/lib/ui/screens/home_menu/home_menu.dart b/lib/ui/screens/home_menu/home_menu.dart index 99ffbe1a..fbdf1d9a 100644 --- a/lib/ui/screens/home_menu/home_menu.dart +++ b/lib/ui/screens/home_menu/home_menu.dart @@ -4,6 +4,7 @@ import 'package:wonders/common_libs.dart'; import 'package:wonders/logic/data/wonder_data.dart'; import 'package:wonders/ui/common/app_backdrop.dart'; import 'package:wonders/ui/common/app_icons.dart'; +import 'package:wonders/ui/common/controls/locale_button.dart'; import 'package:wonders/ui/screens/home_menu/about_dialog_content.dart'; class HomeMenu extends StatelessWidget { @@ -75,7 +76,17 @@ class HomeMenu extends StatelessWidget { ), ), ), - ) + ), + Positioned( + right: -$styles.insets.xs, + top: $styles.insets.xs, + child: SafeArea( + child: Padding( + padding: EdgeInsets.symmetric(horizontal: $styles.insets.lg), + child: LocaleButton(), + ), + ), + ), ], ); } diff --git a/lib/ui/screens/intro/intro_screen.dart b/lib/ui/screens/intro/intro_screen.dart index d0afe413..0e7bf99a 100644 --- a/lib/ui/screens/intro/intro_screen.dart +++ b/lib/ui/screens/intro/intro_screen.dart @@ -2,6 +2,7 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:wonders/common_libs.dart'; import 'package:wonders/ui/common/app_icons.dart'; import 'package:wonders/ui/common/controls/app_page_indicator.dart'; +import 'package:wonders/ui/common/controls/locale_button.dart'; import 'package:wonders/ui/common/static_text_scale.dart'; import 'package:wonders/ui/common/themed_text.dart'; import 'package:wonders/ui/common/utils/app_haptics.dart'; @@ -137,6 +138,12 @@ class _IntroScreenState extends State { child: _buildNavText(context), ), ), + + Positioned( + right: 0, + top: 0, + child: LocaleButton(), + ), ]); return DefaultTextColor(