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 el color de mi botón favorito en la base de datos de Hive?

Estoy tratando de crear un botón favorito para mi aplicación. Su función es cambiar y guardar el color mientras el usuario lo presiona. Por lo tanto, decidí usar la base de datos hive para ello. El problema es que cuando toco el botón, el color cambia, pero cuando me muevo a otra página o reinicio/recargo la página, el color vuelve automáticamente a su valor anterior. Como soy principiante, no entiendo qué valor debo poner en la base de datos hive para guardar el color del botón. Para indicar al usuario que está marcado como favorito.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para persistir el estado del botón favorito en la base de datos de Hive, debes crear un box de Hive para almacenar el estado del botón como un valor booleano. Luego puedes recuperar este valor al iniciar la aplicación para establecer el estado inicial del botón. En tu código, ya has utilizado un box de Hive para almacenar el estado del botón, pero el problema está en el valor que estás almacenando en el box.

    Hive.box(FAVORITES_BOX).put(_isFavorite, !_isFavorite);
    

    Aquí, estás utilizando _isFavorite como la clave y luego almacenando el inverso de _isFavorite como el valor. Esto significa que estás sobrescribiendo el valor de la clave cada vez que se presiona el botón, en lugar de persistir su estado. En cambio, debes usar una clave constante para almacenar el valor de _isFavorite en el box de Hive de la siguiente manera:

    Hive.box(FAVORITES_BOX).put('isFavorite', _isFavorite);
    

    El uso de una clave constante asegura que el valor de _isFavorite se almacene en la misma clave cada vez que se presiona el botón. Luego puedes recuperar este valor del box de Hive al iniciar la aplicación llamando a Hive.box(FAVORITES_BOX).get('isFavorite', defaultValue: false); en el método build de tu widget, y establecer el valor de _isFavorite en consecuencia.

    class _p1State extends State<p1> {
      bool _isFavorite;
    
      @override
      void initState() {
        super.initState();
        _isFavorite = Hive.box(FAVORITES_BOX).get('isFavorite', defaultValue: false);
      }
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            body: Stack(
              children: <widget>[
                Image(
                  image: AssetImage("Image/Chowsun1.jpg"),
                  fit: BoxFit.cover,
                  width: double.infinity,
                  height: double.infinity,
                ),
                Align(
                  alignment: Alignment.center,
                  child: Text(
                    '   Its you ',
                    style: TextStyle(
                        fontSize: 35.0,
                        color: Colors.white,
                        fontFamily: "Explora",
                        fontWeight: FontWeight.w900),
                  ),
                ),
                Stack(
                  children: [
                    Positioned(
                      top: 90,
                      right: 20,
                      child: const Text(
                        '   1 ',
                        style: TextStyle(
                            fontSize: 25.0,
                            color: Colors.white,
                            fontFamily: "Comforter"),
                      ),
                    )
                  ],
                ),
                Align(
                  alignment: Alignment.bottomCenter,
                  child: IconButton(
                    icon: Icon(
                      Icons.favorite,
                      color: _isFavorite ? Colors.red : Colors.white,
                    ),
                    onPressed: () {
                      setState(() {
                        _isFavorite = !_isFavorite;
                      });
                      Hive.box(FAVORITES_BOX).put('isFavorite', _isFavorite);
                    },
                  ),
                )
              ],
            ),
          ),
        );
      }
    }
    

    Con las modificaciones anteriores, el estado del botón favorito debería persistirse en el box de Hive, y su valor debería recuperarse al iniciar la aplicación para establecer el estado inicial del botón.

Comments are closed.