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 WidgetsBindingObserverdevolució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.plistiOS:

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, UIUserInterfaceStyledepende de la configuración global.

Comentarios

Entradas más populares de este blog

INSTALL ANDROID-29 UNITY

Admob Unity II