forked from baron/baron-sso
52 lines
1.3 KiB
Dart
52 lines
1.3 KiB
Dart
import 'package:easy_localization/easy_localization.dart' hide tr;
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:userfront/i18n.dart';
|
|
import '../services/web_window.dart';
|
|
import 'locale_storage.dart';
|
|
import 'locale_utils.dart';
|
|
|
|
class LocaleGate extends StatefulWidget {
|
|
const LocaleGate({super.key, required this.localeCode, required this.child});
|
|
|
|
final String localeCode;
|
|
final Widget child;
|
|
|
|
@override
|
|
State<LocaleGate> createState() => _LocaleGateState();
|
|
}
|
|
|
|
class _LocaleGateState extends State<LocaleGate> {
|
|
@override
|
|
void didChangeDependencies() {
|
|
super.didChangeDependencies();
|
|
_applyLocale();
|
|
}
|
|
|
|
@override
|
|
void didUpdateWidget(LocaleGate oldWidget) {
|
|
super.didUpdateWidget(oldWidget);
|
|
if (oldWidget.localeCode != widget.localeCode) {
|
|
_applyLocale();
|
|
}
|
|
}
|
|
|
|
Future<void> _applyLocale() async {
|
|
final normalized = normalizeLocaleCode(widget.localeCode);
|
|
LocaleStorage.write(normalized);
|
|
webWindow.setTitle(
|
|
tr('ui.userfront.app_title'),
|
|
);
|
|
if (context.locale.languageCode == normalized) {
|
|
return;
|
|
}
|
|
await context.setLocale(Locale(normalized));
|
|
webWindow.setTitle(
|
|
tr('ui.userfront.app_title'),
|
|
);
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) => widget.child;
|
|
}
|