问题描述
我正在使用 Hive
数据库并想在会话 BLoC 内打开一个 Box
(又名表)。在我看来,这比在 FutureBuilder
或类似中使用 myApp()
更合理。
现在,hive 团队建议在应用退出时关闭一个表(“在应用退出之前,你应该调用 Hive.close() 来关闭所有打开的框。”)。这样做是否有效,或者是否应该出于某种(哪个)原因在同一个小部件中打开和关闭?
class App extends StatelessWidget {
const App({
required this.authenticationRepository,required this.userRepository,required this.sessionRepository,}) : super(key: key);
final AuthenticationRepository authenticationRepository;
final UserRepository userRepository;
final SessionRepository sessionRepository;
@override
Widget build(BuildContext context) {
return RepositoryProvider.value(
value: authenticationRepository,child: MultiBlocProvider(
providers: [
BlocProvider(
create: (_) => AuthenticationBloc(
authenticationRepository: authenticationRepository,userRepository: userRepository,) ),// *** IN THE BLOC BELOW I AM opening THE Box AKA DATA TABLE WITH
// *** await Hive.openBox('problemmasterData');
BlocProvider(
create: (_) => SessionBloc()
),],child: AppView(),));
}
}
class AppView extends StatefulWidget {
@override
_AppViewState createState() => _AppViewState();
}
class _AppViewState extends State<AppView> {
@override
Widget build(BuildContext context) {
return PlatformApp(
cupertino: (_,__) => CupertinoAppData(theme: HomeThemeCupertino.lightHomeTheme),initialRoute: '/',onGenerateRoute: AppRoutes.generateRoutes,builder: (context,child) {
return BlocListener<AuthenticationBloc,AuthenticationState>(
listener: (context,state) {
switch (state.status) {
case AuthenticationStatus.authenticated:
_navigator.pushNamedAndRemoveUntil('/home',(route) => false);
break;
case AuthenticationStatus.unauthenticated:
_navigator.pushNamedAndRemoveUntil('/login',(route) => false);
break;
default:
break;
}
},child: child,);
},);
}
// *** AND HERE I WANT TO CLOSE THE Box
@override
void dispose() {
Hive.Box('problemmasterData');
super.dispose();
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)