feat: language setting

This commit is contained in:
cialloo
2024-07-21 18:00:43 +08:00
committed by Cialloo
parent df5d8c187a
commit bdd4fc946e
2 changed files with 27 additions and 0 deletions

View File

@@ -45,12 +45,15 @@ class _MainAppState extends State<MainApp> {
SharedPrefSingleton().appTheme ? ThemeMode.light : ThemeMode.dark; SharedPrefSingleton().appTheme ? ThemeMode.light : ThemeMode.dark;
ThemeMode get getCurrentTheme => _themeMode; ThemeMode get getCurrentTheme => _themeMode;
Locale? _locale;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return MaterialApp( return MaterialApp(
theme: ThemeData(), theme: ThemeData(),
darkTheme: ThemeData.dark(), darkTheme: ThemeData.dark(),
themeMode: _themeMode, themeMode: _themeMode,
locale: _locale,
localizationsDelegates: AppLocalizations.localizationsDelegates, localizationsDelegates: AppLocalizations.localizationsDelegates,
supportedLocales: AppLocalizations.supportedLocales, supportedLocales: AppLocalizations.supportedLocales,
home: const Scaffold( home: const Scaffold(
@@ -59,6 +62,12 @@ class _MainAppState extends State<MainApp> {
); );
} }
void changeLocale(Locale locale) {
setState(() {
_locale = locale;
});
}
void changeTheme(ThemeMode mode) { void changeTheme(ThemeMode mode) {
mode == ThemeMode.light mode == ThemeMode.light
? SharedPrefSingleton().setAppTheme(true).then((onValue) { ? SharedPrefSingleton().setAppTheme(true).then((onValue) {

View File

@@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:winui_n2n/main.dart';
import 'package:winui_n2n/shared_pref_singleton.dart'; import 'package:winui_n2n/shared_pref_singleton.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart';
@@ -30,6 +31,23 @@ class _SettingPageState extends State<SettingPage> {
), ),
], ],
), ),
DropdownButton<Locale>(
value: Localizations.localeOf(context),
items:
AppLocalizations.supportedLocales.map<DropdownMenuItem<Locale>>(
(e) {
return DropdownMenuItem(
value: e,
child: Text(e.toString()),
);
},
).toList(),
onChanged: (value) {
setState(() {
MainApp.of(context).changeLocale(value!);
});
},
),
ElevatedButton( ElevatedButton(
onPressed: () { onPressed: () {
ScaffoldMessenger.of(context) ScaffoldMessenger.of(context)