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

Flutter中http.get(url)调用报错,如何不改变功能修复?

修复方案

你遇到的核心问题是**http.get()方法要求传入Uri类型参数,而非直接的字符串URL**,这是http包更新后的参数规范。以下是不改变原有功能的修复代码:

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

Future<List<Articles>?> getNews() async {
  String url = "https://jsonplaceholder.typicode.com/posts";
  // 修复URL参数:将字符串转为Uri对象
  final response = await http.get(Uri.parse(url));

  // 保留原代码判断逻辑(注:该逻辑在实际场景中存在不合理性,仅按需求保留)
  if (response.body.isEmpty) {
    final responseJson = json.decode(response.body);
    News news = News.fromJson(responseJson);
    return news.articles;
  }
  return null;
}

额外补充

  1. 确保已在pubspec.yaml中正确依赖http包,并执行过flutter pub get命令
  2. 原代码的if (response.body.isEmpty)逻辑存在明显问题:仅在响应体为空时才尝试解析,这会导致正常响应无法处理。如果你的真实需求是响应体非空且请求成功时解析,建议修改判断条件:
if (response.statusCode == 200 && response.body.isNotEmpty) {
  final responseJson = json.decode(response.body);
  News news = News.fromJson(responseJson);
  return news.articles;
}
  1. 建议添加异常捕获,避免网络请求失败导致程序崩溃:
Future<List<Articles>?> getNews() async {
  try {
    String url = "https://jsonplaceholder.typicode.com/posts";
    final response = await http.get(Uri.parse(url));

    if (response.statusCode == 200 && response.body.isNotEmpty) {
      final responseJson = json.decode(response.body);
      News news = News.fromJson(responseJson);
      return news.articles;
    }
  } catch (e) {
    print("请求失败: $e");
  }
  return null;
}

内容的提问来源于stack exchange,提问作者Serdar Bilgili

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 14:39:25