Flutter Web アプリで投稿リクエストを作成しようとしている Google Cloud Functions の関数があります。Python で投稿リクエストをテストしたところ、次のリクエストで動作しました。
params = {'input_key':'input_value'}
headers = {"Content-Type": "application/json"}
r = requests.post("https://us-central1-lucid-bond-261904.cloudfunctions.net/cloudFunction", data=jason.dumps(params), headers=headers)
しかし、http パッケージを使用して Flutter Web アプリから同じリクエストを実行しようとすると、XMLHttpRequest エラーが発生し続けます。フラッター Web アプリでの http リクエストは次のとおりです。
String path = "https://us-central1-lucid-bond-261904.cloudfunctions.net/cloudFunction";
Map params = {'input_key':'input_value'}
var response = await http.post(path, body: json.encode(params), headers: <String, String>{'Content-Type': 'application/json'});
クラウド関数が最初に行うことは、ログに「こんにちは」を出力することであるため、クラウド関数が正常にトリガーされることはわかっています。コンテンツタイプの選択方法に誤りがあるようです。コンテンツ タイプが「application/json; charset=utf-8」に変更される可能性があることを暗示するこのスレッドを読みましたが、dart io パッケージが機能しないため、指定された修正は Flutter Web には適用されません。フラッターウェブ。では、コンテンツ タイプを正しく指定するにはどうすればよいでしょうか。または、この状況で使用するより良いフラッター パッケージはありますか?
Flutter で返されるエラーは次のとおりです。
Error: XMLHttpRequest error.
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 264:20 get current
packages/http/src/browser_client.dart 84:22
そして、Cloud Function のエラー
line 99, in cloudFunction shop_name = inputs_dict['input_key'] TypeError: 'NoneType' object is not subscriptable
編集: Postman から同じ投稿リクエストを実行しようとしたところ、正常に機能しました。ただし、フラッターアプリからはまだ機能していません。Google Cloud Function で CORS などを有効にする必要がありますか?