【发布时间】:2021-01-30 05:47:09
【问题描述】:
我正在尝试快速实现 Firebase 动态链接。但是当我单击链接时,它会调用函数但不会将我带到指定页面。
代码实现
main.dart
主条目决赛申请
void main() {
Crashlytics.instance.enableInDevMode = true;
FlutterError.onError = Crashlytics.instance.recordFlutterError;
runZoned(() {
runApp(MyApp());
}, onError: Crashlytics.instance.recordError);
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
DynamicLinks dynamicLinks = new DynamicLinks();
dynamicLinks.initDynamicLinks(context);
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
return LayoutBuilder(builder: (context, constraints) {
return OrientationBuilder(builder: (context, orientation) {
SizeConfig().init(constraints, orientation);
return MaterialApp(
title: 'APP NAME',
theme: ThemeData(
primarySwatch: Colors.orange,
brightness: Brightness.light,
),
debugShowCheckedModeBanner: false,
home:SplashScreenMain(),
);
});
});
}
}
dynamicLinkManager.dart
另一个处理动态链接的类。
class DynamicLinks {
void initDynamicLinks(BuildContext context) async{
var data = await FirebaseDynamicLinks.instance.getInitialLink();
FirebaseDynamicLinks.instance.onLink(onSuccess: (dynamicLink) async {
print("Main = ${dynamicLink}");
var deepLink = dynamicLink?.link;
final queryParams = deepLink.queryParameters;
debugPrint('DynamicLinks onLink $deepLink');
print("queryParams $queryParams");
if(DynamicLinksConst.inviteUser == deepLink.path){
print("Step 1.......Code Works");
/* THIS PART CODE IS NOT WORKING */
Login.setActiveContext(context);
Navigator.push(context,
EaseInOutSinePageRoute(
widget: SignupPage()), //MaterialPageRoute
);
}else{
Navigator.push(context,
EaseInOutSinePageRoute(
widget: LoginPage()), //MaterialPageRoute
);
}
}, onError: (e) async {
debugPrint('DynamicLinks onError $e');
});
}
}
控制台输出 这是您可以看到其返回数据由动态链接捕获的输出。 我不认为这是 firebase 动态链接的问题,感觉更像是导航器问题,但我无法在此处识别问题,因为此 导航器 在整个项目中正常工作,期望在这里。
EaseInOutSinePageRoute 只是为导航添加动画。
I/flutter ( 395): Main = Instance of 'PendingDynamicLinkData'
I/flutter ( 395): DynamicLinks onLink https://example.com/abc?para1=dataOne
I/flutter ( 395): queryParams {para1: dataOne}
I/flutter ( 395): Step 1.......Code Works
【问题讨论】:
-
这里的问题似乎与
Navigator.push()和动态链接工作正常。您能否检查它是否获得了预期的 BuildContext 来推送目标屏幕? -
@Omatt 我认为你是对的。当我删除我的 Authenticator 类时,它工作正常。 Authenticator 正在检查共享偏好中的用户数据,并在其基础上推送新页面。在启动屏幕上等待 3 秒后调用身份验证器?所以也许它覆盖了主要上下文。如何管理 main 的上下文,即使它被另一个页面调用覆盖?
标签: firebase flutter firebase-dynamic-links dynamic-links