macos - SocketException:在 macOS 上使用颤振应用程序连接失败(操作系统错误:不允许操作,errno = 1)
问题描述
我的 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-data。MyDataLoader
小部件加载时出现以下错误:
[错误:flutter/lib/ui/ui_dart_state.cc(177)] 未处理的异常:SocketException:连接失败(操作系统错误:不允许操作,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 环境访问互联网?
解决方案
macOS 需要您请求特定权限才能访问网络。为此,请打开macos/Runner/DebugProfile.entitlements并添加以下键值对。
<key>com.apple.security.network.client</key>
<true/>
然后在macos/Runner/Release.entitlements中做同样的事情。
您可以在 Flutter文档的桌面支持中阅读更多相关信息。
推荐阅读
- flutter - 如何绘制垂直链接以连接颤动中的领先图标
- active-directory - Azure AD DS 策略是否应用于无需连接到域网络的用户?
- git - Git“自动打包”似乎已从分支中删除了所有提交
- python - Python 与 Mysql:从 DB 中并行获取可用资源
- node.js - crontab 中的节点版本不一致
- python - discord.py on_member_update 在一台服务器上
- laravel - 如何显示每个类别的图像。谷歌云端硬盘
- telegram - Telethon,我可以登录多个客户端吗?电报限制是多少?
- r - 分类模型基准精度
- vim - 当我通过 ssh 远程执行 vim 时会发生什么?