我想解决的问题:
我的应用程序使用GoRouter需要能够从main()路由到具有名称的路由。由于大多数路由都是'context.go'格式,因此我无法在main中执行。
背景:
我的应用程序使用GoRouter。 GetX让我定义命名路由并从main()传递参数的便捷性非常完美。
但是,GetX和GoRouter最终会给我带来问题。 GoRouter最终在应用程序的其他部分没有上下文。
如果有一种简单共存的方法,我会持开放态度。
我使用GetIt包的服务定位器模式与navigatorKey相关联。当我测试时它可以工作--但这涉及创建两个MaterialApps。
然而,此应用程序使用似乎不使用navigatorKey的GoRouter。
我想从main()进入特定路线。与Navigator 2.0 for MaterialApp一样,服务定位器模式似乎可以像GoRouter一样工作--但我找不到如何执行的示例。
更详细的上下文信息:
以下是我当前在main()中所拥有的。
您可以看到我面临的关键挑战是数据参数的侦听器位于main中(我从第三方SDK获取了此内容--我不需要它在main中,但它需要在应用程序状态无关的情况下进行侦听)。
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
FFAppState(); // Initialize FFAppState
GetSocial.addOnInitializedListener(() => {
// GetSocial SDK is ready to use
});
setupLocator();
runApp(MyApp());
locator<LandingPageData>().referralID = "defaultReferralID";
registerListeners();
}
void registerListeners() {
Invites.setOnReferralDataReceivedListener((received) {
globalReferralData = received;
print(globalReferralData);
print(globalReferralData.linkParams);
print("listener - socialdata");
String passedReferralID =
globalReferralData.linkParams['referralID'].toString();
String passedCreatorID =
globalReferralData.linkParams['creatorID'].toString();
String passedCampaignID =
globalReferralData.linkParams['\$campaign_id'].toString();
print(passedReferralID);
print(passedCreatorID);
print(passedCampaignID);
// How can I route to a named Route?
locator<LandingPageData>().referralID = passedReferralID;
locator<LandingPageData>().creatorID = passedCreatorID;
locator<LandingPageData>().campaignID = passedCampaignID;
});
}
以下是locator.service.dart的外观:
final locator = GetIt.instance;
class NavigationService {
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
// final GlobalKey<ScaffoldMessengerState> navigatorKey = GlobalKey<ScaffoldMessengerState>();
}
当我能够将navigatorKey附加并从侦听器内导航时,上述内容是有效的。但由于应用程序的其余部分使用GoRouter,这似乎不起作用。