私のFlutterアプリには、次のコードがありますMyDataLoader
。main.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。
変更を有効にするには、アプリを停止して再起動する必要があります。
参照権利の設定ドキュメントに記載されています。