错误:Unhandled Exception: HiveError: You need to initialize Hive or provide a path to store the box.
本质上,我的依赖项中有这些,所以一切都应该很好。
hive: ^1.4.4+1
hive_flutter: ^0.3.1
path_provider: ^1.6.27
Run Code Online (Sandbox Code Playgroud)
我的文件中也有import 'package:hive/hive.dart';
和
import 'package:path_provider/path_provider.dart';
所以我只有
void doSomething() async {
final documentDirectory = await getApplicationDocumentsDirectory();
Hive.init(documentDirectory.path);
}
Run Code Online (Sandbox Code Playgroud)
叫。
我不明白。我想我所做的一切都是正确的。如果您还需要其他东西,请告诉我。
Hive在 Android 或 iOS 上运行时需要初始化,因此可以使用如下函数:
Future<Box> openHiveBox(String boxName) async {
if (!kIsWeb && !Hive.isBoxOpen(boxName))
Hive.init((await getApplicationDocumentsDirectory()).path);
return await Hive.openBox(boxName);
}
Run Code Online (Sandbox Code Playgroud)
您需要导入path_provider才能访问getApplicationDocumentsDirectory()
在 flutter 应用程序的 main 函数上尝试以下代码:
import 'package:path_provider/path_provider.dart';
import 'package:hive/hive.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final appDocumentDirectory = await getApplicationDocumentsDirectory();
Hive.init(appDocumentDirectory.path);
}
Run Code Online (Sandbox Code Playgroud)
小智 0
目前,path_provider 不支持 WEB。您可以在这里看到它:path_provider。
您必须使用另一个目录用于 WEB。如果您使用 BLOC 作为状态管理,您可以执行以下操作:
if (!kIsWeb) {
// if android or tablet
HydratedBloc.storage = await HydratedStorage.build(
storageDirectory: await getApplicationDocumentsDirectory(),
);
} else {
// if web
HydratedBloc.storage = await HydratedStorage.build(
storageDirectory: HydratedStorage.webStorageDirectory,
);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14870 次 |
| 最近记录: |