我正在使用firebase_dynamic_links:^0.5.0在flutter应用程序中实现设置密码功能。当管理员创建用户时,用户会收到一封电子邮件。在这封邮件中有一个动态链接。点击后,用户将被重定向到1。应用商店/播放商店,如果他/她没有应用。2.如果应用程序已经安装,则打开应用程序中的设置密码屏幕。firebase_dynamic_links提供了两种方法:-1.getInitiallInka future检索打开应用程序的链接。2.onlink一个回调来监听当应用程序处于活动状态或后台时打开的链接。
当应用程序处于kill状态并且链接被按下时,一切都很顺利,但是当应用程序在后台时,导航就不工作了。
void main() => runApp(MaterialApp(
theme: new ThemeData(
primaryColor: Colours.appThemeColour,
),
onGenerateRoute: (RouteSettings settings) {
switch (settings.name) {
case '/': return new MyCustomRoute(
builder: (_) => new SplashScreen(),
settings: settings,
);
case '/setpassword': return new MyCustomRoute(
builder: (_) => new SetPassword(settings.arguments),
settings: settings,
);
...
}
}
)
);
class SplashScreen extends StatefulWidget {
@override
_SplashScreenState createState() => new _SplashScreenState();
}
class _SplashScreenState extends State<SplashScreen> {
Uri deepLink;
_handleDeepLink(Uri deepLink) async{
if (deepLink != null) {
print("querParam=${deepLink.queryParameters["token"]}");
if(deepLink.queryParameters["otp"].toString()=="1"){
if(deepLink.queryParameters["token"]!=null){
String _status =await _networkUtil.verifyUser(deepLink.queryParameters["token"].toString());
Navigator.of(context).pushReplacementNamed('/setpassword',arguments: _status );
}else{
Navigator.of(context).pushReplacementNamed('/setpassword',arguments: "unknownError" );
}
}
else{
if(deepLink.queryParameters["token"]!=null){
String _status =await _networkUtil.verifyUser(deepLink.queryParameters["token"].toString());
SchedulerBinding.instance.addPostFrameCallback((_) {
Navigator.of(context).pushReplacementNamed('/resetpassword');
});
}else{
Navigator.of(context).pushReplacementNamed('/resetpassword');
}
}
}
}
}
initDynamicLinks() async {
final PendingDynamicLinkData data = await FirebaseDynamicLinks.instance.getInitialLink();
final Uri deepLink = data?.link;
if (deepLink != null) {
_handleDeepLink(deepLink);
}
FirebaseDynamicLinks.instance.onLink(
onSuccess: (PendingDynamicLinkData dynamicLink) async {
final Uri deepLink = dynamicLink?.link;
_handleDeepLink(deepLink);
},
onError: (OnLinkErrorException e) async {
print('onLinkError');
print(e.message);
}
);
}
@override
initState(){
initDynamicLinks().then((){
...
});
}
E/flutter(25703):[错误:flutter/lib/ui/ui_dart_state.cc(148)]未处理得异常:NoSuchMethoderRror:调用方法“祖先StateOfType”时为NULL.E/flutter(25703):接收器:空E/flutter(25703):尝试调用:祖先StateOfType(“TypeMatcher”的实例)E/flutter(25703):#0 object.nosuchMethod(dart:core-patch/object_patch.dart:50:5)
这就是图书馆本身的问题。因为您访问的context
在当前是不可访问的。因此,我建议您在MaterialApp
或CupertinoApp
中创建全局导航器状态
class MyApp extends StatefulWidget {
@override
State<StatefulWidget> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final _navigatorKey = GlobalKey<NavigatorState>();
@override
Widget build(BuildContext context) {
return MaterialApp(
key: _navigatorKey,
home: Container(),
);
}
}
我有以下超文本标记语言片段: 有2个IMG标签,然后是ID标签。我正在尝试定位第一个IMG标签。我想从使用XPATH的ID标记开始。 我的XPath正在查找两个IMG标记。我只想要第一个IMG标签。我的XPath是: 如何使用祖先定位第一个IMG标签,因为我想从ID标签开始?
获取值GSON
问题内容: 像这样:类具有一个称为sayHello()的方法。当该类的实例调用sayHello()时,另一个类中的方法会在调用sayHello()之前自动调用。 示例代码可以像这样: 输出结果: 似乎可以通过使用代理模式来完成。但我希望它可以更简单。 使用注释: 然后将MethodListener注释放在Person类中的方法sayHello()上, 调用具有MethodListener批注的方法
我一直在学习如何构建一个类似Instagram的社交媒体应用程序的教程,尽管我的代码与教程中的代码相同,但当我试图显示用户的帖子时,我得到了这个错误: building FutureBuilder(脏,状态:_FutureBuilderState#0C840)引发了以下NosuchMethodeRor:方法“[]”是在NULL上调用的。接收者:null尝试调用: