Flutter:使用导航器后,窗口小部件树中的多个页面窗口小部件

时间:2020-06-05 00:01:37

标签: flutter

我什至不确定这是否一定是个问题,但这不是我所期望的,也不是我试图做的。因此,我的主应用程序看起来像这样:

@override
  Widget build(BuildContext context) {
    SystemChrome.setPreferredOrientations([
      DeviceOrientation.portraitUp,
      DeviceOrientation.portraitDown,
    ]);
    return new MaterialApp(
        title: 'My Cool App',
        debugShowCheckedModeBanner: false,
        navigatorKey: GetIt.instance<NavigatorService>().navigatorKey,
        theme: theme,
        home: BlocBuilder<AuthBloc, AuthState>(builder: (context, state) {
          styleInitializer.runOnce(() => Styles.init(context));
          return FutureBuilder<void>(
              future: styleInitializer.future,
              builder:
                  (BuildContext context, AsyncSnapshot<void> stylesSnapshot) {
                if (ConnectionState.done == stylesSnapshot.connectionState) {
                  if (state is UserAuthenticated) {
                    AppUser user = state.user;
                    sessionInitializer
                        .runOnce(() => SessionInitializer.initSession());
                    return _buildSessionLoadBuilder(user);
                  } else {
                    return LoginSignUpPage();
                  }
                } else {
                  return Center(
                    child: SpinKitThreeBounce(color: AppColors.DARK_BLUE),
                  );
                }
              });
        }),
        routes: {
        ...
        },
        navigatorObservers: [
          FirebaseAnalyticsObserver(analytics: _analytics)
        ]);
  }

  FutureBuilder _buildSessionLoadBuilder(AppUser user) {
    return FutureBuilder<void>(
        future: sessionInitializer.future,
        builder: (BuildContext context, AsyncSnapshot<void> sessionSnapshot) {
          if (ConnectionState.done == sessionSnapshot.connectionState) {
            if (DynamicLinkState.isPresent()) {
              return ImportListPage(token: DynamicLinkState.getToken());
            } else if (_deepLink != null) {
              return ImportListPage(token: _deepLink.queryParameters['token']);
            } else {
              if (user.isNew) {
                return UserProfilePage();
              } else {
                return HomePage();
              }
            }
          } else {
            return Center(
              child: SpinKitThreeBounce(color: AppColors.DARK_BLUE),
            );
          }
        });
  }

从主页上,我可以导航到几个不同的地方。

导航时,我这样做的是:

navigator.pushNamedAndRemoveUntil(<routeName>, RouteUtils.withName('/'));

但是,导航到另一个页面后,我的窗口小部件树如下所示:

enter image description here

在这种情况下,我真正想要的是让MealPlanWeeklyView页面显示Homepage小部件的位置。

此外,如果我随后导航回主页,则会看到类似以下的内容:

enter image description here

我了解到这是因为导航器处于MaterialApp级别,因此向其推新路线正好符合其设计意图。但是,有什么方法可以做我想做的事吗?因此,当从HomePage导航到另一个页面时,基本上只是将窗口小部件树中的HomePage换成我要导航到的那个窗口小部件?

0 个答案:

没有答案