flutter - 如果 HTTP 调用成功,Flutter 会在屏幕上导航
问题描述
[关闭]
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart';
import 'package:http/http.dart' as http;
import 'package:uni_links/uni_links.dart';
class AuthWaitScreen extends StatefulWidget {
const AuthWaitScreen({Key? key}) : super(key: key);
@override
_AuthWaitScreenState createState() => _AuthWaitScreenState();
}
class _AuthWaitScreenState extends State<AuthWaitScreen>
with SingleTickerProviderStateMixin {
Uri? _initialUri;
Uri? _latestUri;
Object? _err;
String? userId;
String? token;
StreamSubscription? _sub;
@override
void initState() {
super.initState();
_handleIncomingLinks();
}
void confirm(String userId, String token) async {
final url = Uri.parse(
'https://api-staging.xxxx.us.org/1.0/auth/attendee/token');
http.post(
url,
headers: {
'Accept': 'application/json',
},
body: {"userid": userId, "cryptostring": token},
).then((res) {
print(res.statusCode);
print(res.body);
});
}
void _handleIncomingLinks() {
if (!kIsWeb) {
// It will handle app links while the app is already started - be it in
// the foreground or in the background.
_sub = uriLinkStream.listen((Uri? uri) {
if (!mounted) return;
setState(() {
userId = uri.toString().split("/")[3];
token = uri.toString().split("/")[4];
_latestUri = uri;
_err = null;
});
confirm(userId!, token!);
}, onError: (Object err) {
if (!mounted) return;
print('got err: $err');
setState(() {
_latestUri = null;
if (err is FormatException) {
_err = err;
} else {
_err = null;
}
});
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Column(
children: [
Container(
child: ElevatedButton(
child: Text('Button'),
onPressed: () {
Navigator.of(context).pop();
},
),
),
],
),
),
);
}
}
嗨,我正在构建一个电子邮件身份验证应用程序,这是waiting_screen.dart
文件,如果功能确认工作(状态代码 200),屏幕的目的是将用户重定向到另一个屏幕。我将解释代码是如何工作的:
- 我正在使用 uni_links 包(基本上,如果用户单击电子邮件链接,它会使用我们的用户 ID 和令牌重定向到我们的应用程序)
- 我用 userId 和 token 调用了另一个端点来获取 token 和过期日期
- 如果呼叫成功,我如何将其导航到其他页面?
现在的问题是我需要导航上下文,那么它是如何工作的呢?
解决方案
推荐阅读
- java - 尝试验证空字段时,应用程序崩溃并出现错误“无法执行 android:onClick 的方法”
- flutter - 文本字段颤动的默认值?
- python - 自动安装 GFortran 和 Python3
- php - 如何在 MYSQL 中创建子查询
- javascript - 如何在 React 中导入 JS 脚本,类似于它在 HTML 中的完成方式
- django - 在 Django 返回对象中获取最新 ID 是不可迭代的
- powershell - 如何在 Powershell 中加速 Get-ChildItem
- ios - 在运行时在 tableview 单元格中添加子视图并展开 tableview 单元格的最佳方法
- json - 无法将 json 映射到 golang 结构
- javascript - 我想通过 url 在 php 登陆页面中嵌入视频