访问 Hive 中的框会引发错误

问题描述 投票:0回答:1

因此,我尝试通过创建一个新类型的“Empresario”对象或查找现有对象来访问 empresario 的个人资料来启动我的应用程序。

empresario 对象有一个“Empresa”对象列表,当该列表为空时,应用程序运行良好,直到我向列表中添加了一个对象,现在每次尝试访问“Empresario”时都会收到此错误盒子:

HiveError (HiveError: To use this list, you have to open the box "empresas" first.)

我也尝试打开盒子 empresas,但即使那条线也失败了。

对象的结构:

import 'package:hive/hive.dart';
import 'package:apiary/objetos/empresa.dart';

part 'empresario.g.dart';

@HiveType(typeId: 0)
class Empresario extends HiveObject {
  @HiveField(0)
  final String id;

  @HiveField(1)
  final String? nombre;

  @HiveField(2)
  final String correo;

  @HiveField(3)
  final String password;

  @HiveField(4)
  final String? telefono;

  @HiveField(5)
  final String? foto;

  @HiveField(6)
  List<Empresa>? empresas;

  Empresario({
    this.id = '',
    this.nombre,
    required this.correo,
    required this.password,
    this.telefono,
    this.foto,
    this.empresas,
  });
}

这些是应用程序停止的方法:

  Future<void> saveEmpresario(Empresario empresario) async {
    final Box<Empresario> empresarios =
        await Hive.openBox<Empresario>('empresarios');
    empresarios.add(empresario);
  }

  Future<Empresario?> findEmpresarioByCredentials(
      String correo, String password) async {
    final Box<Empresario> empresarios =
        await Hive.openBox<Empresario>('empresarios');

    final empresario = empresarios.values.firstWhereOrNull(
      (empresario) =>
          empresario.correo == correo && empresario.password == password,
    );

    return empresario;
  }

两种方法都停止于

final Box<Empresario> empresarios = await Hive.openBox<Empresario>('empresarios');

flutter dart hive
1个回答
0
投票

您需要在 main.dart 中打开一个框,如下所示:

late Box box;

void main() async {
  await init();
  runApp(MyApp());
}

Future init() async {
  await initHive();
}

Future initHive() async {
  await Hive.initFlutter();
  box = await Hive.openBox('box');
}
© www.soinside.com 2019 - 2024. All rights reserved.