firebase - Flutter:基于流式数据库值在页面之间导航的最佳架构
问题描述
我的应用程序是结合 Provider 和 Bloc 模式构建的,但正在朝着完整的 BLoC 发展。我正在寻找构建解决方案的最佳方法,基本上只是在哪里放置此代码以及最佳实践。
我正在构建一个预订应用程序,我的用户有一个名为currentBookingId
. 当此值为 null 时,用户可以完全自由地使用该应用程序。但是,当用户进行预订时,我会将他们发送到一个details
页面。
使用 Firebase 和流,哪里是监听此字段更改并导航到相应页面的最佳位置?他们还需要在打开应用程序时直接进入此页面。
目前,它只是在我的根HomeScreen
小部件中,它增加了膨胀和复杂性。这就是我的做法:
@override
void initState() {
super.initState();
final database = Provider.of<DatabaseService>(context, listen: false);
_userStream = database.userStream.listen((user) {
final wasOnTrip = [some logic];
final isOnTrip = [some other logic];
setState(() => _user = user);
if (!wasOnTrip && isOnTrip) {
_navigateToCurrentTrip();
} else if (wasOnTrip && !isOnTrip) {
_navigateHome();
}
});
}
void _navigateToCurrentTrip() {
Navigator.of(context).pushNamedAndRemoveUntil(tripDetailsRoute,
(route) => route.isCurrent && route.settings.name == tripDetailsRoute
? false : true);
}
void _navigateHome() {
Navigator.of(context).popUntil((route) => route.isFirst);
}
解决方案
我应该更深入地研究文档。在两个页面上添加 Bloc Listener 效果很好,并且易于实现。 https://bloclibrary.dev/#/recipesflutternavigation?id=ui-layer-1
推荐阅读
- react-native - 无法使用`apollo-upload-client`将图像上传到graphql服务器`graphql-upload`
- python - 问题打印添加到数据库的记录数
- android - Ionic 5 + VSCode:android 设备的未绑定断点(可以使用 chrome)
- python - 尽快检索 RSS 提要中最新帖子的标题
- c# - 从 DisplayTemplates 调用 EditorTemplates
- sql - 如何在sql中的一个表中插入与另一个表完全相同但只有一列不同的行?
- java - Eclipse 错误 包 javax.xml.datatype 可以从多个模块访问:
, java.xml - 拆分打包 - python - 如何在 jupyter notebook 中导入两个或多个包?
- android - 如何实现带有底部导航的导航组件?
- javascript - Chrome 扩展在页面加载期间显示中间页面