SocketException:与 macOS 上的 flutter 应用程序连接失败(操作系统错误:不允许操作,errno = 1)

问题描述 投票:0回答: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:连接失败(操作系统错误:不允许操作, 错误号= 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 http flutter-http
1个回答
291
投票

macOS 需要您请求特定的权利才能访问网络。为此,请打开 macos/Runner/DebugProfile.entitlements 并添加以下键值对。

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

然后在 macos/Runner/Release.entitlements 中执行相同的操作。

您需要停止并重新启动应用程序才能使更改生效。

另请参阅文档中的设置权利

© www.soinside.com 2019 - 2024. All rights reserved.