mirror of
https://github.com/Such-Software/hash-wallet.git
synced 2026-10-26 06:08:40 +01:00
Merge pull request #3597 from cake-tech/CW-1621-Brazillian-Locale-Fix
fix: brazillian localle bug that makes app unresponsive
This commit is contained in:
@@ -1,7 +1,15 @@
|
||||
import 'package:cake_wallet/generated/locales.dart';
|
||||
import 'package:devicelocale/devicelocale.dart';
|
||||
import "package:flutter/widgets.dart";
|
||||
import 'package:intl/intl.dart';
|
||||
|
||||
// Flutter's Material delegates match on the language subtag, so "pt_BR" must be split into two
|
||||
Locale localeFromLanguageCode(String code) {
|
||||
final parts = code.split("_");
|
||||
|
||||
return parts.length == 2 ? Locale(parts[0], parts[1]) : Locale(code);
|
||||
}
|
||||
|
||||
class LanguageService {
|
||||
static const Map<String, String> supportedLocales = {
|
||||
'en': 'English',
|
||||
@@ -85,12 +93,16 @@ class LanguageService {
|
||||
|
||||
static Future<String> localeDetection() async {
|
||||
try {
|
||||
var locale = await Devicelocale.currentLocale ?? '';
|
||||
locale = Intl.shortLocale(locale);
|
||||
|
||||
final locale = Intl.canonicalizedLocale(await Devicelocale.currentLocale ?? "");
|
||||
if (list.keys.contains(locale)) {
|
||||
return locale;
|
||||
}
|
||||
|
||||
final language = Intl.shortLocale(locale);
|
||||
if (list.keys.contains(language)) {
|
||||
return language;
|
||||
}
|
||||
|
||||
return LanguageService.defaultLocale;
|
||||
} catch (_) {
|
||||
return LanguageService.defaultLocale;
|
||||
|
||||
+3
-1
@@ -65,6 +65,7 @@ import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_daemon/flutter_daemon.dart';
|
||||
import "package:flutter_localizations/flutter_localizations.dart";
|
||||
import 'package:flutter_mobx/flutter_mobx.dart';
|
||||
import 'package:hive/hive.dart';
|
||||
import 'package:quick_actions/quick_actions.dart';
|
||||
@@ -329,6 +330,7 @@ Future<void> initialSetup({
|
||||
required int initialMigrationVersion,
|
||||
}) async {
|
||||
LanguageService.loadLocaleList();
|
||||
await GlobalMaterialLocalizations.delegate.load(const Locale("en"));
|
||||
await defaultSettingsMigration(
|
||||
secureStorage: secureStorage,
|
||||
version: initialMigrationVersion,
|
||||
@@ -426,7 +428,7 @@ class AppState extends State<App> with SingleTickerProviderStateMixin {
|
||||
themeMode: themeMode,
|
||||
localizationsDelegates: localizationDelegates,
|
||||
supportedLocales: S.delegate.supportedLocales,
|
||||
locale: Locale(appStore.settingsStore.languageCode),
|
||||
locale: localeFromLanguageCode(appStore.settingsStore.languageCode),
|
||||
onGenerateRoute: (settings) => Router.createRoute(settings),
|
||||
initialRoute: initialRoute,
|
||||
scrollBehavior: AppScrollBehavior(),
|
||||
|
||||
@@ -32,30 +32,35 @@ class ListItemSelectorWidget extends StatelessWidget {
|
||||
onTap: onTap,
|
||||
isFirstInSection: isFirstInSection,
|
||||
isLastInSection: isLastInSection,
|
||||
builder: (context, textStyle, labelStyle) {
|
||||
return Row(
|
||||
builder: (context, textStyle, labelStyle) => Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Flexible(child: Text(label, style: textStyle)),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 4.0),
|
||||
child: Row(
|
||||
spacing: 8,
|
||||
children: [
|
||||
Text(
|
||||
options[selectedIndex],
|
||||
style: labelStyle,
|
||||
),
|
||||
CakeImageWidget(
|
||||
imageUrl: "assets/new-ui/chooser.svg",
|
||||
colorFilter:
|
||||
ColorFilter.mode(theme.colorScheme.onSurfaceVariant, BlendMode.srcIn),
|
||||
),
|
||||
],
|
||||
Flexible(
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 4.0),
|
||||
child: Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
spacing: 8,
|
||||
children: [
|
||||
Flexible(
|
||||
child: Text(
|
||||
options[selectedIndex],
|
||||
style: labelStyle,
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
),
|
||||
CakeImageWidget(
|
||||
imageUrl: "assets/new-ui/chooser.svg",
|
||||
colorFilter:
|
||||
ColorFilter.mode(theme.colorScheme.onSurfaceVariant, BlendMode.srcIn),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
});
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1378,8 +1378,8 @@ abstract class SettingsStoreBase with Store {
|
||||
pinLength = defaultPinLength;
|
||||
}
|
||||
|
||||
final savedLanguageCode = sharedPreferences.getString(PreferencesKey.currentLanguageCode) ??
|
||||
await LanguageService.localeDetection();
|
||||
final savedLanguageCode =
|
||||
_offeredLanguageCode(sharedPreferences) ?? await LanguageService.localeDetection();
|
||||
final nodeId = sharedPreferences.getInt(PreferencesKey.currentNodeIdKey);
|
||||
final bitcoinElectrumServerId =
|
||||
sharedPreferences.getInt(PreferencesKey.currentBitcoinElectrumSererIdKey);
|
||||
@@ -1938,7 +1938,12 @@ abstract class SettingsStoreBase with Store {
|
||||
}
|
||||
pinCodeLength = pinLength;
|
||||
|
||||
languageCode = sharedPreferences.getString(PreferencesKey.currentLanguageCode) ?? languageCode;
|
||||
final restoredLanguageCode = _offeredLanguageCode(sharedPreferences);
|
||||
if (restoredLanguageCode == null) {
|
||||
await sharedPreferences.setString(PreferencesKey.currentLanguageCode, languageCode);
|
||||
} else {
|
||||
languageCode = restoredLanguageCode;
|
||||
}
|
||||
shouldShowYatPopup =
|
||||
sharedPreferences.getBool(PreferencesKey.shouldShowYatPopup) ?? shouldShowYatPopup;
|
||||
shouldShowDEuroDisclaimer =
|
||||
@@ -2315,6 +2320,12 @@ abstract class SettingsStoreBase with Store {
|
||||
await _sharedPreferences.setString(key, serializedData);
|
||||
}
|
||||
|
||||
static String? _offeredLanguageCode(SharedPreferences sharedPreferences) {
|
||||
final code = sharedPreferences.getString(PreferencesKey.currentLanguageCode);
|
||||
|
||||
return LanguageService.list.containsKey(code) ? code : null;
|
||||
}
|
||||
|
||||
static Future<String?> _getDeviceName() async {
|
||||
String? deviceName = '';
|
||||
final deviceInfoPlugin = DeviceInfoPlugin();
|
||||
|
||||
Reference in New Issue
Block a user