首页 > 解决方案 > 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);
  }

标签: firebaseflutterdart

解决方案


我应该更深入地研究文档。在两个页面上添加 Bloc Listener 效果很好,并且易于实现。 https://bloclibrary.dev/#/recipesflutternavigation?id=ui-layer-1


推荐阅读