es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo guardar un tema usando un paquete Shared_Preferences

Ayúdame a descubrir dónde escribir algo en el código para que el tema se guarde después de reiniciar la aplicación. He instalado el paquete animatedthemeswitcher y no sé dónde prescribir para que se guarde el tema.

Mi código:

 @override
 Widget build(BuildContext context) {
 final isPlatformDark = WidgetsBinding.instance!.window.platformBrightness == Brightness.dark;
 final theme = isPlatformDark ? darkTheme : lightTheme;

 child: ThemeProvider(
        initTheme: theme,
        builder: (context, theme) {
          return MaterialApp(
            theme: theme,
            home: MyApp1(),
            debugShowCheckedModeBanner: false,
          );
        },
      ),
 }

Y la acción sobre el botón:

onPressed: () async {
 var brightness = ThemeProvider.of(context)!.brightness;
 ThemeSwitcher.of(context)!.changeTheme(
   theme: brightness == Brightness.light
       ? darkTheme
       : lightTheme,
   reverseAnimation:
   brightness == Brightness.dark
       ? true
       : false,
 );
 setState(() {
   toggle = !toggle;
 });
},
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para guardar el tema después de reiniciar la aplicación usando el paquete animated_theme_switcher, puedes utilizar la clase SharedPreferences del framework Flutter. Así es cómo puedes implementarlo:

    1. Importa el paquete SharedPreferences:
    import 'package:shared_preferences/shared_preferences.dart';
    
    1. Crea una variable global para almacenar la preferencia del tema:
    late SharedPreferences prefs;
    late bool isDarkTheme;
    
    1. Inicializa SharedPreferences en el método initState():
    @override
    void initState() {
        super.initState();
        initPrefs();
    }
    
    void initPrefs() async {
        prefs = await SharedPreferences.getInstance();
        isDarkTheme = prefs.getBool('isDarkTheme') ?? false;
    }
    
    1. Pasa la preferencia actual del tema al widget ThemeProvider:
    child: ThemeProvider(
        initTheme: isDarkTheme ? darkTheme : lightTheme,
        builder: (context, theme) {
            return MaterialApp(
                theme: theme,
                home: MyApp1(),
                debugShowCheckedModeBanner: false,
            );
        },
    ),
    
    1. Actualiza el método onPressed() de tu botón para guardar la preferencia actual del tema:
    onPressed: () async {
        var brightness = ThemeProvider.of(context)!.brightness;
        ThemeSwitcher.of(context)!.changeTheme(
            theme: brightness == Brightness.light ? darkTheme : lightTheme,
            reverseAnimation: brightness == Brightness.dark ? true : false,
        );
        setState(() {
            toggle = !toggle;
            prefs.setBool('isDarkTheme', brightness == Brightness.light ? true : false);
        });
    },
    

    Con estos cambios, la preferencia del tema se guardará en el almacenamiento local y se cargará cuando se reinicie la aplicación.

Comments are closed.