现在我正在尝试将现有反应式 Angular 应用程序(基于 RxJS)的逻辑移植到 Flutter。我在 dart Streams API 方面遇到了很多问题,它的行为似乎与其他 Rx 实现有很大不同。
主要区别在于:
null/void值处理publish, refcount, shareReplay)?
我目前正在尝试访问 Flutter 中需要 JWT 访问令牌进行授权的 Web API。访问令牌在一定时间后过期。
可以使用单独的刷新令牌请求新的访问令牌。现在,只要请求返回 401 响应,就会执行此访问令牌刷新。之后,应使用新的访问令牌重试失败的请求。
我在这最后一步遇到了麻烦。好像http.BaseRequest只能发送一次。我将如何使用新令牌重试 http 请求?
正如dart http readme 中所建议的,我创建了一个子类http.BaseClient来添加授权行为。这是一个简化版本:
import 'dart:async';
import 'package:http/http.dart' as http;
class AuthorizedClient extends http.BaseClient {
AuthorizedClient(this._authService) : _inner = http.Client();
final http.Client _inner;
final AuthService _authService;
Future<http.StreamedResponse> send(http.BaseRequest request) async {
final token = await _authService.getAccessToken();
request.headers['Authorization'] = 'Bearer $token';
final response = await _inner.send(request);
if (response.statusCode == 401) {
final newToken = await _authService.refreshAccessToken();
request.headers['Authorization'] = 'Bearer $newToken'; …Run Code Online (Sandbox Code Playgroud) 我的问题是:如何创建一个“监视”并对点击手势做出反应而不消耗它们的小部件?
我想创建一个TextField在聚焦时在字段下方的弹出窗口中显示自动完成建议的窗口(类似于 Google 搜索)。
当用户点击屏幕外部时,覆盖层应该关闭TextField,但不消耗点击事件。
例如,如果用户在建议叠加层可见时点击复选框,则叠加层应关闭并且复选框应切换。
我查看了 Flutter 的源代码DropdownButton,它在 a 中显示下拉项列表PopupRoute,可以通过点击屏幕来关闭该列表。在内部,PopupRoute创建一个屏幕填充ModalBarrier,用 a 捕获点击事件GestureDetector(但它消耗手势事件并且不传递它们)。