我在应用程序加载时从中获取部分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 [];
...
}