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.

Flutter – ¿Cómo agregar y recuperar datos a/from hive?

Sé que suena simple y he revisado el ejemplo dado en la documentación. Sin embargo, de alguna manera no logro hacerlo bien.

Esto es lo que tengo:

void main() async {
  await Hive.initFlutter();
  //Hive.openBox('workoutBox');
  runApp(const MyApp());
}

...

Pantalla siguiente:

var box;
...

Intentando añadir al “box”:

Future<void> _save() async{
// save doc id somewhere
final Id = doc.id;

//box = await Hive.openBox('workoutBox');
box.put("Id", Id);
}

Intentando recuperar en otra función:

var someId = box.get("Id");

Error actual: “get” se llamó con un valor nulo

Mi confusión es, ¿dónde / cómo se declara, abre y recupera el “box” en esta situación?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que te has saltado un paso al intentar recuperar datos de una caja antes de abrirla. Aquí tienes una guía paso a paso sobre cómo declarar, abrir y obtener datos de una caja Hive en Flutter:

    1. En tu función principal, importa e inicializa Hive:
    import 'package:hive/hive.dart';
    import 'package:hive_flutter/hive_flutter.dart';
    
    void main() async {
      await Hive.initFlutter();
      runApp(const MyApp());
    }
    
    1. Declara y abre la caja Hive en tu widget de pantalla:
    class MyScreen extends StatefulWidget {
      const MyScreen({Key? key}) : super(key: key);
    
      @override
      _MyScreenState createState() => _MyScreenState();
    }
    
    class _MyScreenState extends State<myscreen> {
      late Box<string> _box;
    
      @override
      void initState() {
        super.initState();
        _openBox();
      }
    
      Future<void> _openBox() async {
        _box = await Hive.openBox<string>('workoutBox');
      }
    
      //...
    }
    
    1. Ahora puedes agregar datos a la caja usando put(), como lo hacías antes:
    Future<void> _save() async {
      final docId = doc.id;
      _box.put('id', docId);
    }
    
    1. Para recuperar los datos, puedes simplemente llamar a get() en la caja:
    var someId = _box.get('id');
    

    Asegúrate de llamar a get() o put() en la misma instancia de la caja que has declarado y abierto en el widget _MyScreenState. Con estos pasos, deberías ser capaz de recuperar datos de la caja Hive sin recibir el error “get was called on null”.

Comments are closed.