我什至不确定这是否一定是个问题,但这不是我所期望的,也不是我试图做的。因此,我的主应用程序看起来像这样:
@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('/'));
但是,导航到另一个页面后,我的窗口小部件树如下所示:
在这种情况下,我真正想要的是让MealPlanWeeklyView页面显示Homepage小部件的位置。
此外,如果我随后导航回主页,则会看到类似以下的内容:
我了解到这是因为导航器处于MaterialApp级别,因此向其推新路线正好符合其设计意图。但是,有什么方法可以做我想做的事吗?因此,当从HomePage导航到另一个页面时,基本上只是将窗口小部件树中的HomePage换成我要导航到的那个窗口小部件?