You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart调用NewsAPI报Invalid internet address错误但接口可用怎么办

问题原因
  • 移动端未配置网络权限:Android/iOS应用默认禁止网络访问,未声明权限时会触发域名解析失败
  • 运行环境DNS异常:模拟器、真机或本地开发设备的DNS缓存损坏,或当前使用的DNS服务器无法解析newsapi.org域名
  • 代理/VPN规则不匹配:运行环境开启了代理或VPN,但Dart进程/应用未适配对应代理规则,导致域名路由失败
  • URL构造隐性问题:字符串形式的URL中存在不可见特殊字符,Uri.parse解析后域名信息异常
  • 网络权限拦截:桌面端未授予Dart进程/代码编辑器网络权限,或防火墙、安全软件拦截了请求
解决方案
  1. 补全移动端网络权限
    • Android端:在android/app/src/main/AndroidManifest.xml的manifest标签内添加网络权限声明:
    <uses-permission android:name="android.permission.INTERNET" />
    
    • iOS端:在ios/Runner/Info.plist的dict标签内添加网络访问配置:
    <key>NSAppTransportSecurity</key>
    <dict>
       <key>NSAllowsArbitraryLoads</key>
       <true/>
    </dict>
    
  2. 修复DNS解析问题
    • 先在运行环境的自带浏览器中打开请求URL,确认能正常返回JSON数据,排除运行环境本身的网络故障
    • 切换网络(如WiFi换手机热点)后重试,或手动修改hosts文件绑定newsapi.org的可用IP
  3. 排查代理/VPN干扰
    • 暂时关闭运行环境的代理、VPN后重试请求
    • 必须使用代理的场景,需在Dart代码中显式配置网络代理规则
  4. 优化URI构造逻辑
    改用Uri.https构造方法手动拼接参数,避免字符串URL的隐性字符问题,修改后的请求代码如下:
    class News {
      List<ArticleModel> news = [];
    
      Future<void> getNews() async {
        // 改用Uri构造方法避免字符串解析问题
        final uri = Uri.https('newsapi.org', '/v2/top-headlines', {
          'country': 'us',
          'category': 'business',
          'apiKey': 'd2c9e9553c4647f3add970ed74a812ee'
        });
    
        var response = await http.get(uri);
    
        var jsonData = jsonDecode(response.body);
    
        if (jsonData['status'] == "ok") {
          jsonData["articles"].forEach((element) {
            if (element['urlToImage'] != null && element['description'] != null) {
              ArticleModel articleModel = ArticleModel(
                title: element['title'],
                author: element['author'],
                description: element['description'],
                urlToImage: element['urlToImage'],
                // publshedAt: DateTime.parse(element['publishedAt']),
                content: element["content"],
                url: element["url"],
              );
              news.add(articleModel);
            }
          });
        }
      }
    }
    
  5. 解除网络拦截
    桌面端运行时可先暂时关闭防火墙、安全软件,或将Dart进程、代码编辑器加入网络访问白名单后重试。

内容的提问来源于stack exchange,提问作者Osama Sayed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 00:36:05