【发布时间】:2021-04-04 02:53:33
【问题描述】:
我的 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 应用程序配置中缺少某些内容。 flutter.dev/desktop#setting-up-entitlements
-
哦,是的。我缺少权限@ashu
-
只需将
<key>com.apple.security.network.client</key> <true/>添加到权利文件即可解决。谢谢@阿舒
标签: macos flutter http flutter-http