首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >org-dartlang-debug:synthetic_debug_expression:1:1:错误: Getter未找到:&NoSuchMethodError (NoSuchMethodError:方法'[]‘)被调用为null

org-dartlang-debug:synthetic_debug_expression:1:1:错误: Getter未找到:&NoSuchMethodError (NoSuchMethodError:方法'[]‘)被调用为null
EN

Stack Overflow用户
提问于 2021-11-21 14:59:20
回答 1查看 185关注 0票数 0

我正在开发一个简单的在线字典移动应用程序。直到有一天,我决定在DictionayAPI提供的API上搜索"pick“这个应用程序。当我搜索"pick“时被调用的API是。我创建了几个类来存储API中的数据,如下所示:

代码语言:javascript
复制
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的实例,当应该有一个列表时,我就这样使用列表理解;

代码语言:javascript
复制
property: [ for(int counter = 0; counter < (JSON_objectContainingList == null ? 1 : JSON_objectContainingList.length); counter++) JSON_objectContainingList[counter]]

问题在于它部分工作,我的实际程序(函数如下所示):

代码语言:javascript
复制
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“的整数,它说:

代码语言:javascript
复制
syndex
org-dartlang-debug:synthetic_debug_expression:1:1: Error: Getter not found: 'syndex'.
syndex
^^^^^^

在最后一个错误(第四个列表理解)之后,又出现了另一个错误。

代码语言:javascript
复制
Word(
    name: dictResponse[0]["meanings"][mindex]
        ["definitions"][dindex]["antonym"][aindex],
)

上面写着

代码语言:javascript
复制
Exception has occurred.
NoSuchMethodError (NoSuchMethodError: The method '[]' was called on null.
Receiver: null
Tried calling: [](0))
EN

回答 1

Stack Overflow用户

发布于 2021-11-23 08:03:45

每当您使用以下内容时,都会发生此错误

代码语言:javascript
复制
data["fieldName"]

在这里,如果data 是空,那么您将得到这种错误类型。

所以,你必须使用空检查,像这样,

代码语言:javascript
复制
if(data!=null){
//DO Something
}
else{
print("data is NULL");
}

因此,根据第二个错误,似乎三个整数mindex,dindex and aindex。因此,它们中的一个在某个时候等于0,而您得到的错误是一个或多个字段为null,

代码语言:javascript
复制
meanings, definitions, antonym

所以,你应该这样做

代码语言:javascript
复制
(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);
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70055676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档