微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Dart XMLHttpRequest 错误故障排除 - 适用于 Flutter 移动设备,不适用于 Flutter Web

如何解决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 举报,一经查实,本站将立刻删除。