如何解决Dart XMLHttpRequest 错误故障排除 - 适用于 Flutter 移动设备,不适用于 Flutter Web
我对 Dart 还很陌生,我很难解决这个出现在此处的大量问题中的错误:
Error: XMLHttpRequest error.
我的真实场景是一个 Flutter 网络应用程序,它应该会命中 Google Cloud Function,但本着 MWE 的精神,我用这个 Dart 复制了这个问题:
import 'dart:developer';
import 'dart:convert';
import 'package:http/http.dart' as http;
Future<void> main() async {
final response = await http.post(
Uri.https(
//'jsonplaceholder.typicode.com','albums'),'my-region-my-project.cloudfunctions.net','/remainingTrigger'),headers: <String,String>{
//'Content-Type': 'application/json; '
// 'charset=UTF-8','Content-Type': 'application/json'
},body: jsonEncode(<String,String>{
//'title': 'test','ingredients': 'test',}),);
log('response was ${response.body}');
}
headers
注释似乎没有任何区别,但如果我翻转其他注释,它与 JSONPlaceholder 一起工作正常。如果我在终端中使用 curl
命中我的 Cloud Function
$ curl -X POST -H "Content-Type: application/json" -d '{"ingredients": "test"}' https://my-region-my-project.cloudfunctions.net/remainingTrigger
{"key":"value","otherKey":"otherValue"}
它工作正常。我最初确实遇到了 CORS 问题(我的 Cloud Function 日志显示为 417),但在我添加之后
from flask import abort
def entryPoint(request):
if request.method == 'OPTIONS':
headers = {
'Access-Control-Allow-Origin': '*','Access-Control-Allow-Methods': 'POST','Access-Control-Allow-Headers': 'Content-Type','Access-Control-Max-Age': '3600'
}
return ('',204,headers)
...
headers = {
'Access-Control-Allow-Origin': '*'
}
...
return (expectedOutput,200)
...
else:
return abort(417)
Cloud Function 日志开始显示正常行为(先是 204,然后是 200)。如果 Cloud Function 说一切正常,而 Dart 不同意,这是否排除了 CORS 作为罪魁祸首?我只处理过一次 CORS,但我非常相似地设置了 Cloud Function,Web 开发人员能够与它进行良好的交互。
回溯对我来说是希腊语;有人对辨别导致错误的 XMLHttpRequest
类型的问题有什么建议吗?
我主要在运行在 Windows 10 Home(http: ^0.13.1
、Dart SDK 2.12.2、Flutter 2.0.4、Android SDK 29.0.2)上的 Android Studio 4.1.3(Chrome 模拟器)中解决这个问题,但是还构建并部署了一次到我的网站,但遇到了同样的错误 (Safari)。我正在 Big Sur 11.0.1 上从 Docker 容器部署 Cloud Function(Python 3.8 运行时),但我认为这没有什么不同。
更新 1
令我惊讶的是,当我在 Android Studio 的 Android 模拟器(Pixel 3、API 30、Android 11.0)中尝试我的代码时,这运行良好。只是 Flutter web 尝试失败了(我现在已经通过 Android Studio 尝试了 Chrome 和 Edge,以及生产中的 Safari)。还有其他人看到这种行为吗?
更新 2
我也在供应商的 API 中看到了这种行为,因此它不是特定于我的 Google Cloud Function。 Flutter for web 和 JSONPlaceholder API 的结合是否有什么特别之处?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。