mirror of
https://github.com/stonega/tsacdop
synced 2025-02-18 04:20:37 +01:00
Save language settings permanent.
This commit is contained in:
parent
9033181fcf
commit
da4a31a81e
@ -36,6 +36,7 @@ const String rewindSecondsKey = 'rewindSecondsKey';
|
|||||||
const String playerHeightKey = 'playerHeightKey';
|
const String playerHeightKey = 'playerHeightKey';
|
||||||
const String speedKey = 'speedKey';
|
const String speedKey = 'speedKey';
|
||||||
const String skipSilenceKey = 'skipSilenceKey';
|
const String skipSilenceKey = 'skipSilenceKey';
|
||||||
|
const String localeKey = 'localeKey';
|
||||||
|
|
||||||
class KeyValueStorage {
|
class KeyValueStorage {
|
||||||
final String key;
|
final String key;
|
||||||
|
@ -4,6 +4,7 @@ import 'package:intl/intl.dart';
|
|||||||
import 'package:url_launcher/url_launcher.dart';
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
|
||||||
import '../generated/l10n.dart';
|
import '../generated/l10n.dart';
|
||||||
|
import '../local_storage/key_value_storage.dart';
|
||||||
import '../util/extension_helper.dart';
|
import '../util/extension_helper.dart';
|
||||||
|
|
||||||
class LanguagesSetting extends StatefulWidget {
|
class LanguagesSetting extends StatefulWidget {
|
||||||
@ -22,6 +23,20 @@ class _LanguagesSettingState extends State<LanguagesSetting> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_setLocale(Locale locale, {bool systemDefault = false}) async {
|
||||||
|
var localeStorage = KeyValueStorage(localeKey);
|
||||||
|
if (systemDefault) {
|
||||||
|
await localeStorage.saveStringList([]);
|
||||||
|
} else {
|
||||||
|
await localeStorage
|
||||||
|
.saveStringList([locale.languageCode, locale.countryCode]);
|
||||||
|
}
|
||||||
|
await S.load(locale);
|
||||||
|
if (mounted) {
|
||||||
|
setState(() {});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final s = context.s;
|
final s = context.s;
|
||||||
@ -44,66 +59,43 @@ class _LanguagesSettingState extends State<LanguagesSetting> {
|
|||||||
children: [
|
children: [
|
||||||
ListTile(
|
ListTile(
|
||||||
title: Text(s.systemDefault),
|
title: Text(s.systemDefault),
|
||||||
onTap: () async {
|
onTap: () =>
|
||||||
await S.load(Locale(Intl.systemLocale));
|
_setLocale(Locale(Intl.systemLocale), systemDefault: true),
|
||||||
setState(() {});
|
|
||||||
},
|
|
||||||
contentPadding: const EdgeInsets.only(left: 75, right: 20),
|
contentPadding: const EdgeInsets.only(left: 75, right: 20),
|
||||||
trailing: Radio<Locale>(
|
trailing: Radio<Locale>(
|
||||||
value: Locale(Intl.systemLocale),
|
value: Locale(Intl.systemLocale),
|
||||||
groupValue: Locale(Intl.getCurrentLocale()),
|
groupValue: Locale(Intl.getCurrentLocale()),
|
||||||
onChanged: (locale) async {
|
onChanged: (locale) =>
|
||||||
await S.load(locale);
|
_setLocale(locale, systemDefault: true)),
|
||||||
setState(() {});
|
|
||||||
}),
|
|
||||||
),
|
),
|
||||||
Divider(height: 2),
|
Divider(height: 2),
|
||||||
ListTile(
|
ListTile(
|
||||||
title: Text('English'),
|
title: Text('English'),
|
||||||
onTap: () async {
|
onTap: () => _setLocale(Locale('en')),
|
||||||
await S.load(Locale('en'));
|
contentPadding: const EdgeInsets.only(left: 75, right: 20),
|
||||||
setState(() {});
|
trailing: Radio<Locale>(
|
||||||
},
|
value: Locale('en'),
|
||||||
contentPadding: const EdgeInsets.only(left: 75, right: 20),
|
groupValue: Locale(Intl.getCurrentLocale()),
|
||||||
trailing: Radio<Locale>(
|
onChanged: _setLocale)),
|
||||||
value: Locale('en'),
|
|
||||||
groupValue: Locale(Intl.getCurrentLocale()),
|
|
||||||
onChanged: (locale) async {
|
|
||||||
await S.load(locale);
|
|
||||||
setState(() {});
|
|
||||||
}),
|
|
||||||
),
|
|
||||||
Divider(height: 2),
|
Divider(height: 2),
|
||||||
ListTile(
|
ListTile(
|
||||||
title: Text('简体中文'),
|
title: Text('简体中文'),
|
||||||
onTap: () async {
|
onTap: () => _setLocale(Locale('zh_Hans')),
|
||||||
await S.load(Locale('zh_Hans'));
|
contentPadding: const EdgeInsets.only(left: 75, right: 20),
|
||||||
setState(() {});
|
trailing: Radio<Locale>(
|
||||||
},
|
|
||||||
contentPadding: const EdgeInsets.only(left: 75, right: 20),
|
|
||||||
trailing: Radio<Locale>(
|
|
||||||
value: Locale('zh_Hans'),
|
value: Locale('zh_Hans'),
|
||||||
groupValue: Locale(Intl.getCurrentLocale()),
|
groupValue: Locale(Intl.getCurrentLocale()),
|
||||||
onChanged: (locale) async {
|
onChanged: _setLocale,
|
||||||
await S.load(locale);
|
)),
|
||||||
setState(() {});
|
|
||||||
}),
|
|
||||||
),
|
|
||||||
Divider(height: 2),
|
Divider(height: 2),
|
||||||
ListTile(
|
ListTile(
|
||||||
title: Text('LE françAIS'),
|
title: Text('Français'),
|
||||||
onTap: () async {
|
onTap: () => _setLocale(Locale('fr')),
|
||||||
await S.load(Locale('fr'));
|
|
||||||
setState(() {});
|
|
||||||
},
|
|
||||||
contentPadding: const EdgeInsets.only(left: 75, right: 20),
|
contentPadding: const EdgeInsets.only(left: 75, right: 20),
|
||||||
trailing: Radio<Locale>(
|
trailing: Radio<Locale>(
|
||||||
value: Locale('fr'),
|
value: Locale('fr'),
|
||||||
groupValue: Locale(Intl.getCurrentLocale()),
|
groupValue: Locale(Intl.getCurrentLocale()),
|
||||||
onChanged: (locale) async {
|
onChanged: _setLocale),
|
||||||
await S.load(locale);
|
|
||||||
setState(() {});
|
|
||||||
}),
|
|
||||||
),
|
),
|
||||||
Divider(height: 2),
|
Divider(height: 2),
|
||||||
//ListTile(
|
//ListTile(
|
||||||
|
@ -5,6 +5,8 @@ import 'package:connectivity/connectivity.dart';
|
|||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_downloader/flutter_downloader.dart';
|
import 'package:flutter_downloader/flutter_downloader.dart';
|
||||||
|
import 'package:intl/intl.dart';
|
||||||
|
import 'package:tsacdop/generated/l10n.dart';
|
||||||
import 'package:workmanager/workmanager.dart';
|
import 'package:workmanager/workmanager.dart';
|
||||||
|
|
||||||
import '../local_storage/key_value_storage.dart';
|
import '../local_storage/key_value_storage.dart';
|
||||||
@ -100,6 +102,7 @@ class SettingState extends ChangeNotifier {
|
|||||||
var autoDownloadStorage = KeyValueStorage(autoDownloadNetworkKey);
|
var autoDownloadStorage = KeyValueStorage(autoDownloadNetworkKey);
|
||||||
var fastForwardSecondsStorage = KeyValueStorage(fastForwardSecondsKey);
|
var fastForwardSecondsStorage = KeyValueStorage(fastForwardSecondsKey);
|
||||||
var rewindSecondsStorage = KeyValueStorage(rewindSecondsKey);
|
var rewindSecondsStorage = KeyValueStorage(rewindSecondsKey);
|
||||||
|
var localeStorage = KeyValueStorage(localeKey);
|
||||||
|
|
||||||
Future initData() async {
|
Future initData() async {
|
||||||
await _getTheme();
|
await _getTheme();
|
||||||
@ -108,6 +111,11 @@ class SettingState extends ChangeNotifier {
|
|||||||
await _getRealDark();
|
await _getRealDark();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Locale _locale;
|
||||||
|
|
||||||
|
/// Load locale.
|
||||||
|
Locale get locale => _locale;
|
||||||
|
|
||||||
/// Spp thememode. default auto.
|
/// Spp thememode. default auto.
|
||||||
ThemeMode _theme;
|
ThemeMode _theme;
|
||||||
ThemeMode get theme => _theme;
|
ThemeMode get theme => _theme;
|
||||||
@ -253,6 +261,7 @@ class SettingState extends ChangeNotifier {
|
|||||||
@override
|
@override
|
||||||
void addListener(VoidCallback listener) {
|
void addListener(VoidCallback listener) {
|
||||||
super.addListener(listener);
|
super.addListener(listener);
|
||||||
|
_getLocale();
|
||||||
_getAutoUpdate();
|
_getAutoUpdate();
|
||||||
_getDownloadUsingData();
|
_getDownloadUsingData();
|
||||||
_getSleepTimerData();
|
_getSleepTimerData();
|
||||||
@ -331,6 +340,17 @@ class SettingState extends ChangeNotifier {
|
|||||||
await fastForwardSecondsStorage.getInt(defaultValue: 30);
|
await fastForwardSecondsStorage.getInt(defaultValue: 30);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future _getLocale() async {
|
||||||
|
var localeString = await localeStorage.getStringList();
|
||||||
|
if (localeString.isEmpty) {
|
||||||
|
_locale = Locale(Intl.systemLocale);
|
||||||
|
} else {
|
||||||
|
_locale = Locale(localeString.first, localeString[1]);
|
||||||
|
}
|
||||||
|
await S.load(_locale);
|
||||||
|
print(_locale.toString());
|
||||||
|
}
|
||||||
|
|
||||||
Future _saveAccentSetColor() async {
|
Future _saveAccentSetColor() async {
|
||||||
await accentStorage
|
await accentStorage
|
||||||
.saveString(_accentSetColor.toString().substring(10, 16));
|
.saveString(_accentSetColor.toString().substring(10, 16));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user