我正在开发一个简单的在线字典移动应用程序。直到有一天,我决定在DictionayAPI提供的API上搜索"pick“这个应用程序。当我搜索"pick“时被调用的API是这。我创建了几个类来存储API中的数据,如下所示:
class Word {
final String name;
bool isFavourite;
Word({required this.name, this.isFavourite = false});
}
class Phonetics {
String text;
String audio;
Phonetics({required this.text, required this.audio});
}
class Meanings {
Meanings({required this.partOfSpeech, required this.definitions});
String partOfSpeech;
List<Definitions> definitions;
}
class Definitions {
Definitions(
{required this.definition,
required this.example,
required this.synonyms,
required this.antonyms});
String definition;
String example;
List<Word>? synonyms;
List<Word>? antonyms;
}
class DictData {
Word word;
Phonetics phonetics;
String origin;
List<Meanings> meanings;
DictData(
{required this.word,
required this.phonetics,
required this.origin,
required this.meanings});
}我为它创建了一个未来函数,在未来的函数中,我创建了一个类DictData的实例,当应该有一个列表时,我就这样使用列表理解;
property: [ for(int counter = 0; counter < (JSON_objectContainingList == null ? 1 : JSON_objectContainingList.length); counter++) JSON_objectContainingList[counter]]问题在于它部分工作,我的实际程序(函数如下所示):
Future<DictData> dictionaryCall({required String userInputWord}) async {
var url =
Uri.https('api.dictionaryapi.dev', '/api/v2/entries/en/' + userInputWord);
var response = await http.get(url);
if (response.statusCode == 200) {
var dictResponse = convert.jsonDecode(response.body);
DictData object = DictData(
word: Word(name: dictResponse[0]["word"]),
phonetics: Phonetics(
text: dictResponse[0]["phonetics"][0]["text"] as String,
audio: dictResponse[0]["phonetics"][0]["audio"] as String),
origin: dictResponse[0]["origin"] ?? "",
meanings: [
for (int mindex = 0;
mindex <
(dictResponse[0]["meanings"] == null
? 1
: dictResponse[0]["meanings"].length);
mindex++)
Meanings(
partOfSpeech: dictResponse[0]["meanings"][mindex]
["partOfSpeech"],
definitions: [
for (int dindex = 0;
dindex <
(dictResponse[0]["meanings"][mindex]["definitions"] ==
null
? 1
: dictResponse[0]["meanings"][mindex]
["definitions"]
.length);
dindex++)
Definitions(
definition: dictResponse[0]["meanings"][mindex]
["definitions"][dindex]["definition"],
example: dictResponse[0]["meanings"][mindex]
["definitions"][dindex]["example"] ??
"",
synonyms: [
for (int syndex = 0;
syndex <
(dictResponse[0]["meanings"][mindex]
["definitions"][dindex]
["synonyms"] ==
null
? 1
: dictResponse[0]["meanings"][mindex]
["definitions"][dindex]
["synonyms"]
.length);
syndex++)
Word(
name: dictResponse[0]["meanings"][mindex]
["definitions"][dindex]["synonyms"][syndex],
)
],
antonyms: [
for (int aindex = 0;
aindex <
(dictResponse[0]["meanings"][mindex]
["definitions"][dindex]
["antonyms"] ==
null
? 1
: dictResponse[0]["meanings"][mindex]
["definitions"][dindex]
["antonyms"]
.length);
aindex++)
Word(
name: dictResponse[0]["meanings"][mindex]
["definitions"][dindex]["antonym"][aindex],
)
])
])
]);
return Future.value(object);
} else {
throw Exception("Something went wrong, please try again later");
}
}在第一个列表理解中,有一个名为"mindex“的整数变量作为该特定列表的计数器,当我在VS Code中调试它时,"mindex”确实有效。转到第二个列表理解,有另一个名为"dindex“的整数变量,它在那里工作得很好,这并不令人惊讶。问题是关于第三个列表的理解,有一个名为"syndex“的整数,它说:
syndex
org-dartlang-debug:synthetic_debug_expression:1:1: Error: Getter not found: 'syndex'.
syndex
^^^^^^在最后一个错误(第四个列表理解)之后,又出现了另一个错误。
Word(
name: dictResponse[0]["meanings"][mindex]
["definitions"][dindex]["antonym"][aindex],
)上面写着
Exception has occurred.
NoSuchMethodError (NoSuchMethodError: The method '[]' was called on null.
Receiver: null
Tried calling: [](0))发布于 2021-11-23 08:03:45
每当您使用以下内容时,都会发生此错误
data["fieldName"]在这里,如果data 是空,那么您将得到这种错误类型。
所以,你必须使用空检查,像这样,
if(data!=null){
//DO Something
}
else{
print("data is NULL");
}因此,根据第二个错误,似乎三个整数mindex,dindex and aindex。因此,它们中的一个在某个时候等于0,而您得到的错误是一个或多个字段为null,
meanings, definitions, antonym所以,你应该这样做
(a[0]!=null && a[0]["field"]!=null && a[0]["field"][mindex]!=null]...) ? //and so on
Word(
name: dictResponse[0]["meanings"][mindex]
["definitions"][dindex]["antonym"][aindex],
) :
Word(//do something else);https://stackoverflow.com/questions/70055676
复制相似问题