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; }
额外补充
- 确保已在
pubspec.yaml中正确依赖http包,并执行过flutter pub get命令 - 原代码的
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; }
- 建议添加异常捕获,避免网络请求失败导致程序崩溃:
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
相关产品推荐
相关产品推荐

