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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 05:15:07