当用户更改系统语言时是否可以收听?当用户更改语言时,我需要清除一些列表。现在我正在检测中的语言void main()
启动时运行。
void main() async {
// Firebase Push Notifications initialization
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
FirebaseMessaging.onBackgroundMessage(backgroundHandler);
detectLanguageChange();
WidgetsBinding.instance.addObserver(this);
runApp(const MyApp());
}
class _MyAppState extends State<MyApp> with WidgetsBindingObserver {
@override
void initState() {
super.initState();
WidgetsBinding.instance!.addObserver(this);
}
@override
void didChangeLocales(List<Locale>? locales) {
// TODO: implement didChangeLocales
super.didChangeLocales(locales);
print("Locales changed");
}
每次语言更改时都需要运行“DetectLanguage”。
可以创建一个有状态的小部件来充当WidgetsBindingObserver
并接收区域设置更改didChangeLocales
打回来。
让我提供一个最小的示例小部件:
import 'package:flutter/material.dart';
class LocaleListenerWidget extends StatefulWidget {
final Locale defaultLocale;
final Widget? child;
const LocaleListenerWidget({super.key, this.defaultLocale = const Locale('en_US'), this.child});
@override
State<LocaleListenerWidget> createState() => _LocaleListenerWidgetState();
}
class _LocaleListenerWidgetState extends State<LocaleListenerWidget>
with WidgetsBindingObserver {
@override
void initState() {
WidgetsBinding.instance.addObserver(this);
super.initState();
}
@override
void didChangeLocales(List<Locale>? locales) {
super.didChangeLocales(locales);
// Here locales is a list of all the locales enabled on the device.
// Like: [Locale('en_US'), Locale('ar_SA')]
// The first locale is the phone's main locale, but in reality you should
// traverse until you find a supported locale.
final currentLocale = locales?.first ?? widget.defaultLocale;
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
Widget build(BuildContext context) {
return widget.child ?? const SizedBox.shrink();
}
}
然后你只需要把这个小部件放在树中足够高的位置即可。例如进入你的MaterialApp
's builder
:
void main() {
runApp(MaterialApp(builder: (context, child) => const LocaleListenerWidget(child: child)));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)