Flutter en iOS: themeMode no cambia a modo oscuro si se usa `ThemeMode.system`
En mi caso, una aplicación simple debería usar automáticamente el tema (claro u oscuro) del sistema para diseñar la interfaz de usuario. De forma predeterminada, esto debería funcionar cuando se usa ThemeMode.system
(consulte la documentación de flutter ). Pero no fue así.
Los temas se han definido de la siguiente manera:
1 2 3 4 5 6 | return MaterialApp( themeMode: ThemeMode.system, theme: ThemeData( ... ), darkTheme: ThemeData( ...), ... ); |
Además, nunca se llamó a la WidgetsBindingObserver
devolución de llamada. didChangePlatformBrightness()
Se definió de la siguiente manera:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 dieciséis 17 18 19 20 21 | class MyHomePageState extends State<MyHomePage> with WidgetsBindingObserver { @override void initState() { super .initState(); WidgetsBinding.instance.addObserver( this ); } @override void dispose() { WidgetsBinding.instance.removeObserver( this ); super .dispose(); } @override void didChangePlatformBrightness() { print(WidgetsBinding.instance.window.platformBrightness); // > should print Brightness.light / Brightness.dark when you switch super .didChangePlatformBrightness(); } } |
Después de horas y días de búsqueda, resultó que se estableció la siguiente definición en info.plist
iOS:
1 2 | < key >UIUserInterfaceStyle</ key > < string >Light</ string > |
Eliminar esta línea resolvió el problema. Esta configuración establece el tema de las aplicaciones en Claro, lo que da como resultado un valor constante incluso si el usuario cambió el brillo a oscuro. Sin esta línea, UIUserInterfaceStyle
depende de la configuración global.
Comentarios
Publicar un comentario