空字符串的颤振抛出错误,即使我使用 await 等待其他函数先发送数据



我在应用程序加载时从中获取部分URL,然后将其发送到searchSingleMovie函数以调用API以获取更多信息。 我的问题是我正在使用 Future 并等待,但我仍然不断收到错误。我知道为什么会发生错误(因为字符串的值在开始时为 null(,但我不知道如何解决这个问题。我不认为我可以同时使用两个等待。 任何帮助将不胜感激。代码和错误给出如下:

Future<List<void>> getSingleMovie(String url,String item) async {
var response = await http.get( Uri.encodeFull(url), //error here, url is null first
headers: {'Accept': 'application/json'});
/decode and store the first 20 corresponding movie info in each variable
setState(() {
var urlData = json.decode(response.body);
for(int i = 0; i < 20; i++) {
if(urlData['results'][i]['poster_path'] == item) {
picURL = urlData['results'][i]['poster_path'];
title = urlData['results'][i]['title'];
releaseDate = urlData['results'][i]['release_date'];
description = urlData['results'][i]['overview'];
id = urlData['results'][i]['id'];
rating = urlData['results'][i]['vote_average'].toDouble();
}
}
});

这是错误:

E/flutter (19426): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: NoSuchMethodError: The getter 'length' was called on null.
E/flutter (19426): Receiver: null
E/flutter (19426): Tried calling: length
E/flutter (19426): #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:53:5)
E/flutter (19426): #1      _Uri._uriEncode (dart:core-patch/uri_patch.dart:46:23)
E/flutter (19426): #2      Uri.encodeFull (dart:core/uri.dart:1150:17)
E/flutter (19426): #3      HomePageState.getSingleMovie (package:showgrabber/view/HomePage.dart:105:39)
E/flutter (19426): #4      HomePageState.initState (package:showgrabber/view/HomePage.dart:97:10)
E/flutter (19426): #5      StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:4355:58)
E/flutter (19426): #6      ComponentElement.mount (package:flutter/src/widgets/framework.dart:4201:5)
E/flutter (19426): #7      Element.inflateWidget (package:flutter/src/widgets/framework.dart:3194:14)```

问题是这个位:

Uri.encodeFull(url)

你说你知道url进入这个电话是空的。Uri.encodeFull获取一个字符串并将其转换为转义且 URL 安全的字符串以用作Uri对象,并且在传递 null 值时将引发错误。因此,您实际上是在搬起石头砸自己的脚。

从你的代码中不清楚你对url的最终目标是什么,所以我只能说确保它不是空的:

Future<List<void>> getSingleMovie(String url,String item) async {
if (url == null) return [];
...
}

最新更新