From 20505eafcf727dc1f56ebce590ea0c50fc3f9310 Mon Sep 17 00:00:00 2001 From: stonegate Date: Thu, 13 Aug 2020 17:58:24 +0800 Subject: [PATCH] Fixed language bug. --- lib/settings/languages.dart | 54 ++++++++++++++++++++++++++----------- 1 file changed, 38 insertions(+), 16 deletions(-) diff --git a/lib/settings/languages.dart b/lib/settings/languages.dart index 4c53eb8..6591e44 100644 --- a/lib/settings/languages.dart +++ b/lib/settings/languages.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:intl/intl.dart'; +import 'package:intl/intl_standalone.dart'; import 'package:url_launcher/url_launcher.dart'; import '../generated/l10n.dart'; @@ -27,14 +28,34 @@ class _LanguagesSettingState extends State { var localeStorage = KeyValueStorage(localeKey); if (systemDefault) { await localeStorage.saveStringList([]); + await findSystemLocale(); + var systemLanCode; + final list = Intl.systemLocale.split('_'); + if (list.length == 2) { + systemLanCode = list.first; + } else if (list.length == 3) { + systemLanCode = '${list[0]}_${list[1]}'; + } else { + systemLanCode = 'en'; + } + await S.load(Locale(systemLanCode)); + if (mounted) { + setState(() {}); + } } else { await localeStorage .saveStringList([locale.languageCode, locale.countryCode]); + await S.load(locale); + if (mounted) { + setState(() {}); + } } - await S.load(locale); - if (mounted) { - setState(() {}); - } + } + + @override + void initState() { + super.initState(); + findSystemLocale(); } @override @@ -58,21 +79,22 @@ class _LanguagesSettingState extends State { child: Column( children: [ ListTile( - title: Text(s.systemDefault), + title: Text( + s.systemDefault, + style: TextStyle( + color: Intl.systemLocale.contains(Intl.getCurrentLocale()) + ? context.accentColor + : null), + ), onTap: () => _setLocale(Locale(Intl.systemLocale), systemDefault: true), - contentPadding: const EdgeInsets.only(left: 75, right: 20), - trailing: Radio( - value: Locale(Intl.systemLocale), - groupValue: Locale(Intl.getCurrentLocale()), - onChanged: (locale) => - _setLocale(locale, systemDefault: true)), + contentPadding: const EdgeInsets.only(left: 70, right: 20), ), Divider(height: 2), ListTile( title: Text('English'), onTap: () => _setLocale(Locale('en')), - contentPadding: const EdgeInsets.only(left: 75, right: 20), + contentPadding: const EdgeInsets.only(left: 70, right: 20), trailing: Radio( value: Locale('en'), groupValue: Locale(Intl.getCurrentLocale()), @@ -81,7 +103,7 @@ class _LanguagesSettingState extends State { ListTile( title: Text('简体中文'), onTap: () => _setLocale(Locale('zh_Hans')), - contentPadding: const EdgeInsets.only(left: 75, right: 20), + contentPadding: const EdgeInsets.only(left: 70, right: 20), trailing: Radio( value: Locale('zh_Hans'), groupValue: Locale(Intl.getCurrentLocale()), @@ -91,7 +113,7 @@ class _LanguagesSettingState extends State { ListTile( title: Text('Français'), onTap: () => _setLocale(Locale('fr')), - contentPadding: const EdgeInsets.only(left: 75, right: 20), + contentPadding: const EdgeInsets.only(left: 70, right: 20), trailing: Radio( value: Locale('fr'), groupValue: Locale(Intl.getCurrentLocale()), @@ -101,7 +123,7 @@ class _LanguagesSettingState extends State { ListTile( title: Text('Español'), onTap: () => _setLocale(Locale('es')), - contentPadding: const EdgeInsets.only(left: 75, right: 20), + contentPadding: const EdgeInsets.only(left: 70, right: 20), trailing: Radio( value: Locale('es'), groupValue: Locale(Intl.getCurrentLocale()), @@ -111,7 +133,7 @@ class _LanguagesSettingState extends State { ListTile( onTap: () => _launchUrl( 'mailto:?subject=Tsacdop localization project'), - contentPadding: const EdgeInsets.only(left: 75, right: 20), + contentPadding: const EdgeInsets.only(left: 70, right: 20), title: Align( alignment: Alignment.centerLeft, child: Image(