flutter - 在 BLoC 中打开数据库表,在 MyApp 中处理 - 这有效吗?
问题描述
我正在使用Hive
数据库并想box
在会话 BLoC 中打开一个(又名表)。在我看来,这比使用FutureBuilder
inmyApp()
或类似的更合理。
现在,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();
}
}
解决方案
推荐阅读
- python-3.x - 如何从 Flask 中的 jinja 模板创建 PDF 文件?[标记为 pythonanywhere 的问题]
- firebase - 如何更新 firebase 数组中的地图数据?(扑)
- java - 当我已经导入了它们所在的包时,为什么还需要导入枚举类才能使用它们?[爪哇]
- r - 你可以在不声明的情况下命名一个变量吗?
- javascript - 重新渲染平面列表没有自动上传项目
- php - php cURL PATCH 请求返回数据但不更新字段
- mysql - MySQL中的迭代一个周期移位连接
- apache-kafka - 跳窗是什么意思?
- ios - 如何在没有 xcode 的 react-native ios 中禁用应用程序旋转?
- java - python中带有中断的线程睡眠(来自java的端口)