如何解决在 BLoC 中打开数据库表,在 MyApp 中处理 - 这是否有效?
我正在使用 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 举报,一经查实,本站将立刻删除。