Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

15.6.1 localeResolutionCallback错误 #211

Open
Skilling-Kiss opened this issue Dec 26, 2023 · 0 comments
Open

15.6.1 localeResolutionCallback错误 #211

Skilling-Kiss opened this issue Dec 26, 2023 · 0 comments

Comments

@Skilling-Kiss
Copy link

flutter sdk:3.16.3
dart:3.2.3
使用localization及intl
当前版本回调中的_locale包含languageCode及countryCode(ex:'zh_CN')
而supportedLocales只包含languageCode(ex:'zh')
所以supportedLocales.contains(_locale)永远会返回false

更改后的代码应该类似这样
因为使用这个回调实际上没有跟随系统这一功能,而是固定只能选择所提供的语言

localeResolutionCallback: (locale, supportedLocales) {
            if (controller.locale == null) {
              if (locale != null &&
                  supportedLocales.contains(Locale(locale.languageCode))) {
                controller.locale = locale;
              } else {
                controller.locale = const Locale('en', 'US');
              }
            }
            return controller.locale;
          },

最后一点,按本应用的逻辑实际根本用不上这个回调
因为本身语言就是通过locale来提供的,当为空的时候会默认使用supportedLocales里符合条件的语言
flutter官网所说:
MaterialApp 的 [supportedLocales]参数限制了本地化设置的更改。当用户更改设备上的语言设置时,只有在 [supportedLocales]参数列表中包含了用户更改的本地化语言设置的情况下,应用程序的 Localizations widget 才会生效。如果找不到与设备本地化完全匹配的语言,则会使用与 [languageCode]匹配的第一个受支持的语言。如果仍然找不到,则使用 supportedLocales 列表中的第一个元素。

localeResolutionCallback及localeListResolutionCallback的适用情况个人认为应该是在同一个语言或地区下去区分更加细分的维度
比如,应用只提供了'zh_CN',未提供'zh_TW',台湾没有完全符合的,但是因为是中国所以会匹配到'zh_CN',这时如果不想让用户使用'zh_CN',所以手动返回'en_US'来显示。

仅提出个人意见,不知道对不对

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant