flutter如何获取网络权限

在Flutter项目中,如何正确配置和获取网络权限?我在AndroidManifest.xml中已经添加了<uses-permission android:name="android.permission.INTERNET"/>,但应用仍然无法访问网络。是否需要额外处理iOS的权限?在模拟器和真机测试时权限表现是否不同?求具体实现方法和常见问题排查步骤。

2 回复

在 Flutter 中获取网络权限需要两个步骤:

  1. Android 配置android/app/src/main/AndroidManifest.xml 中添加:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  1. iOS 配置ios/Runner/Info.plist 中添加:
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

配置完成后,就可以使用 httpdio 等包进行网络请求了。记得在 pubspec.yaml 中添加依赖。

注意:iOS 的 ATS 配置在生产环境中需要更严格的设置,建议只允许特定域名。

更多关于flutter如何获取网络权限的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中获取网络权限需要根据平台(Android 和 iOS)分别配置。以下是具体步骤:

Android 配置

  1. 添加网络权限

    • 打开 android/app/src/main/AndroidManifest.xml 文件。
    • <manifest> 标签内添加以下权限:
      <uses-permission android:name="android.permission.INTERNET" />
      <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
      
    • 这允许应用访问互联网并检查网络状态。
  2. 注意事项

    • 从 Android 9 (API 28) 开始,默认禁止明文流量(HTTP)。如需使用 HTTP,需在 AndroidManifest.xml<application> 标签中添加:
      android:usesCleartextTraffic="true"
      
    • 推荐使用 HTTPS 以确保安全。

iOS 配置

  1. 启用网络权限
    • 打开 ios/Runner/Info.plist 文件。
    • 添加以下键值对以允许 HTTP 请求(如果使用 HTTP):
      <key>NSAppTransportSecurity</key>
      <dict>
          <key>NSAllowsArbitraryLoads</key>
          <true/>
      </dict>
      
    • 对于生产环境,建议仅允许特定域名(更安全):
      <key>NSAppTransportSecurity</key>
      <dict>
          <key>NSExceptionDomains</key>
          <dict>
              <key>yourdomain.com</key>
              <dict>
                  <key>NSIncludesSubdomains</key>
                  <true/>
                  <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
                  <true/>
              </dict>
          </dict>
      </dict>
      

代码示例(网络请求)

配置权限后,使用 http 包进行网络请求:

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

Future<void> fetchData() async {
  try {
    final response = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/posts/1'));
    if (response.statusCode == 200) {
      print('数据: ${response.body}');
    } else {
      print('请求失败: ${response.statusCode}');
    }
  } catch (e) {
    print('错误: $e');
  }
}

总结

  • Android:修改 AndroidManifest.xml 添加权限。
  • iOS:编辑 Info.plist 配置网络安全策略。
  • 无需在 Flutter 代码中显式请求权限,但需处理网络异常(如无网络连接)。

完成配置后,应用即可正常进行网络请求。

回到顶部