如何在Dart中正确使用http.get获取API数据?
修正Dart http请求的async/await问题
你的问题核心是没有正确处理异步操作:http.get()方法返回的是Future<http.Response>,这是一个异步任务的占位符,直接赋值给response的话,你拿到的不是实际的响应数据,而是这个Future对象,所以会出现错误或打印Instance of 'Future'。
下面是修正后的完整代码:
import 'dart:convert'; import 'package:http/http.dart' as http; // 添加async关键字,标记为异步函数 Future<void> fetchData() async { try { // 用await等待异步请求完成,拿到实际的Response对象 final response = await http.get(Uri.parse('https://api.example.com/data')); // 建议先检查响应状态码,确保请求成功 if (response.statusCode == 200) { final data = jsonDecode(response.body); print(data); } else { print('请求失败,状态码: ${response.statusCode}'); } } catch (e) { print('请求出错: $e'); } } void main() { fetchData(); }
关键改动说明:
- 在
fetchData函数声明后添加async,告诉Dart这是一个异步函数,内部可以使用await - 在
http.get前添加await,暂停函数执行直到异步请求完成,获取到真实的http.Response实例 - 增加了状态码检查,避免在请求失败(比如404、500)时解析无效的JSON内容导致额外错误
内容的提问来源于stack exchange,提问作者Amaal.Psau
相关产品推荐
相关产品推荐

