Flutter使用http包调用JsonPlaceHolder接口报String无法赋值为Uri错误
问题说明
开发Flutter应用时运行代码触发编译报错,已尝试将接口地址转为String类型调整,报错仍未解决。
报错详情
错误提示:
The argument type 'String' can't be assigned to the parameter type 'Uri'
错误位置:lib/pages/loading.dart第17行,错误码标识为argument_type_not_assignable
可复现代码
import 'package:flutter/material.dart'; import 'package:http/http.dart'; import 'dart:convert'; import 'dart:core'; class Loading extends StatefulWidget { @override _LoadingState createState() => _LoadingState(); } class _LoadingState extends State<Loading> { void getData() async { Response response = await get( 'https://jsonplaceholder.typicode.com/todos/1'); print(response.body); } @override void initState() { super.initState(); getData(); } @override Widget build(BuildContext context) { return Scaffold( body: Text('loading screen'), ); } }
问题原因
0.13.0及以上版本的http包调整了网络请求方法的入参规则,get、post等请求方法不再兼容直接传入字符串格式的接口地址,强制要求入参为Uri类型。用户此前尝试将接口地址转为String类型的操作方向错误:原代码里的接口地址本身就是String类型,自然无法解决类型不匹配的问题。
解决方法
- 移除原代码中直接给
get方法传字符串地址的写法 - 用
Uri.parse()方法将字符串格式的接口地址转换为符合要求的Uri类型,再传入请求方法
修改后的核心代码片段:
void getData() async { // 转换地址类型为Uri final uri = Uri.parse('https://jsonplaceholder.typicode.com/todos/1'); Response response = await get(uri); print(response.body); }
内容的提问来源于stack exchange,提问作者Rex
相关产品推荐
相关产品推荐

