参数类型“字符串”不能分配给 uri.encodeFull() 中的参数类型“Uri”

Posted

技术标签:

【中文标题】参数类型“字符串”不能分配给 uri.encodeFull() 中的参数类型“Uri”【英文标题】:The argument type 'String' can't be assigned to the parameter type 'Uri' in uri.encodeFull() 【发布时间】:2021-06-26 07:50:50 【问题描述】:
import 'package:weathertempo/model/forecastModel.dart';
import 'package:weathertempo/util/forecast_util.dart';
import 'package:http/http.dart';

class Network 
  Future<WeatherForecastModel> getWeatherForecast(String cityName) async 
       String url =
        "http://api.openweathermap.org/data/2.5/forecast/daily?q=" +
            cityName +
            '&APPID=' +
            Util.appId +
            '&units=metric';

    // Uri.parse(finalUrl);

    final response = await get(Uri.encodeFull(url));
  

当我尝试 uri.encodeFull(url) 时,错误出现在最后一行的第三行,它给了我上述错误,但是当我将 url 的类型转换为 Uri 时,它一直给我同样的错误。我什至还尝试了 uri.parse() 函数,如评论中所示我不知道这里有什么问题,如果有人知道,请随时回答。

【问题讨论】:

Uri.encodeFullString 作为参数并返回Stringhttp.get 现在需要 Uri 参数(请参阅 ***.com/q/66473263)。您需要致电get(Uri.parse(url)) @jamesdlin 好的,让我试试 【参考方案1】:

您无法在类定义中访问url。你可以在initState()initialize它。

String url = "http://api.openweathermap.org/data/2.5/forecast/daily?q=" +
    cityName +
    '&APPID=' +
    Util.appId +
    '&units=metric';

@override
void initState() 
  super.initState();
  var uri = Uri.encodeFull(url);

使用类似的方式

【讨论】:

【参考方案2】:

正如@jamesdlin 先生所说,你需要这样的东西:

Future<String> getWeatherForecast(String cityName) async 
  final url = 'http://api.openweathermap.org/...';
  final response = await get(Uri.parse(Uri.encodeFull(url)));
  //...

【讨论】:

以上是关于参数类型“字符串”不能分配给 uri.encodeFull() 中的参数类型“Uri”的主要内容,如果未能解决你的问题,请参考以下文章

参数类型“字符串”不能分配给参数类型“对象?函数(对象?,对象?)?

参数类型“对象?”不能分配给参数类型“字符串”

错误:参数类型“字符串?”不能分配给参数类型“字符串”

错误:参数类型“对象?”不能分配给参数类型“字符串”

“数字”类型的参数不能分配给“数字和字符串”类型的参数

参数类型“字符串”不能分配给 uri.encodeFull() 中的参数类型“Uri”