在 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 (将#修改为@)