Flutter Hive错误:名为 'cartbox' 的盒子已打开,且类型为Box

移动开发 2026-07-11

我在 main.dart 打开了Hive盒子

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await Hive.initFlutter();
  Hive.registerAdapter(ProductAdapter());

  await Hive.openBox<Product>('cartbox');

  await Firebase.initializeApp();

  runApp(const MyApp());
}

然后在 CartProvider 类中访问它

final Box<Product> cartBox = Hive.box<Product>('cartbox');

我一直收到这个错误:

盒子 "cartbox" 已经打开,且类型为Box

在初始化或访问Hive盒子的方式上有什么问题吗?

解决方案

错误信息很清楚地指出,Hive盒子已经打开:

盒子 "cartbox" 已经打开,且类型为Box

我以前也遇到过这个问题,修复很简单:在尝试打开盒子之前,先检查它是否已经打开。

你可以使用 isBoxOpen 方法。在你的 main 方法中,像下面这样:

不仅仅是:

await Hive.openBox<Product>('cartbox');

使用:

if (!isBoxOpen('cartbox') {
  await Hive.openBox<Product>('cartbox');
}
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章