SocketException: 接続に失敗しました (OS エラー: 操作は許可されていません、errno = 1) macOS 上の Flutter アプリで質問する

SocketException: 接続に失敗しました (OS エラー: 操作は許可されていません、errno = 1) macOS 上の Flutter アプリで質問する

私のFlutterアプリには、次のコードがありますMyDataLoadermain.dart

コード:

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;

class MyDataLoader extends StatefulWidget {
  @override
  _MyDataLoaderState createState() => _MyDataLoaderState();
}

class _MyDataLoaderState extends State<MyDataLoader> {
  void getData() async {
    final response = await http.get('https://jsonplaceholder.typicode.com/albums/1');
    print(response);
  }

  @override
  void initState() {
    super.initState();
    getData();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Text('MyDataLoader screen'),
    );
  }
}

質問:
上記のコードはhttps://flutter.dev/docs/cookbook/networking/fetch-dataMyDataLoaderウィジェットが読み込まれると、次のエラーが表示されます。

[ERROR:flutter/lib/ui/ui_dart_state.cc(177)] 未処理の例外: SocketException: 接続に失敗しました (OS エラー: 操作は許可されていません、errno = 1)、アドレス = jsonplaceholder.typicode.com、ポート = 443

上記のエラーは、もちろん、ウィジェットの読み込み時に呼び出される次のコード行が原因です。

最終応答 = http.get('https://jsonplaceholder.typicode.com/albums/1'); を待機します。

しかし、開くとhttps://jsonplaceholder.typicode.com/albums/1ブラウザで、応答で受け取ると予想されるダミーの JSON が含まれていることがわかります。これは、インターネットに適切に接続されていることを意味します。

私はアプリをmacOS Big Sur バージョン 11.1

何が間違っているのでしょうか?いくつかの権限を宣言するアプリが macOS 環境からインターネットにアクセスできるようにするにはどうすればいいですか?

ベストアンサー1

macOSでは、ネットワークにアクセスするために特定の権限を要求する必要があります。そのためには、macos/ランナー/デバッグプロファイル.entitlements次のキーと値のペアを追加します。

<key>com.apple.security.network.client</key>
<true/>

次に同じことをmacos/ランナー/リリース.entitlements

変更を有効にするには、アプリを停止して再起動する必要があります。

参照権利の設定ドキュメントに記載されています。

おすすめ記事