mirror of
https://github.com/localsend/localsend.git
synced 2026-08-07 07:14:52 +00:00
73 lines
2.1 KiB
Dart
73 lines
2.1 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:localsend_app/gen/strings.g.dart';
|
|
import 'package:localsend_app/provider/settings_provider.dart';
|
|
import 'package:localsend_app/widget/responsive_list_view.dart';
|
|
import 'package:refena_flutter/refena_flutter.dart';
|
|
|
|
class LanguagePage extends StatefulWidget {
|
|
const LanguagePage({super.key});
|
|
|
|
@override
|
|
State<LanguagePage> createState() => _LanguagePageState();
|
|
}
|
|
|
|
class _LanguagePageState extends State<LanguagePage> {
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
|
|
// ignore: discarded_futures
|
|
LocaleSettings.instance.loadAllLocales().then((_) {
|
|
setState(() {});
|
|
});
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final t = Translations.of(context);
|
|
final activeLocale = context.ref.watch(settingsProvider.select((s) => s.locale));
|
|
return Scaffold(
|
|
appBar: AppBar(
|
|
title: Text(t.settingsTab.general.language),
|
|
),
|
|
body: ResponsiveListView(
|
|
padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 20),
|
|
children: [
|
|
...[
|
|
null,
|
|
...AppLocale.values,
|
|
].map((locale) {
|
|
return ListTile(
|
|
onTap: () async {
|
|
await context.ref.notifier(settingsProvider).setLocale(locale);
|
|
if (locale == null) {
|
|
await LocaleSettings.useDeviceLocale();
|
|
} else {
|
|
await LocaleSettings.setLocale(locale);
|
|
}
|
|
},
|
|
title: Row(
|
|
children: [
|
|
Flexible(
|
|
child: Text(locale?.humanName ?? t.settingsTab.general.languageOptions.system),
|
|
),
|
|
if (locale == activeLocale) ...[
|
|
const SizedBox(width: 10),
|
|
const Icon(Icons.check_circle, color: Colors.green),
|
|
],
|
|
],
|
|
),
|
|
);
|
|
}),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
}
|
|
|
|
extension AppLocaleExt on AppLocale {
|
|
String get humanName {
|
|
return LocaleSettings.instance.translationMap[this]?.locale ?? 'Loading';
|
|
}
|
|
}
|