为什么我可以打印我的API响应按钮按下,但不能显示为一个窗口小部件在Flutter?我该如何修复它?

nfs0ujit  于 2023-02-25  发布在  Flutter
关注(0)|答案(1)|浏览(126)

在我的Flutter应用程序中,我尝试在initState中调用API,并且能够成功获得所需格式的响应。我知道这一点是因为当我尝试在按下按钮时打印变量时,我得到了正确的响应。但是,当我尝试在实际应用程序中显示此响应时,例如通过文本小部件或ListView,我得到了错误。
我是这么做的:
1.我在initState方法中调用了我的API,并且成功地得到了响应:

dynamic myArticles = {};
  
@override
void initState() {
    super.initState();
    getTopNews().then((value) {
      setState(() {
      myArticles = value;
    });
  });
}

1.我有一个按钮,它成功地显示了我希望从API获得的响应:

MaterialButton(
   child: Text("Click"),
   onPressed: () {
     print(myArticles["articles"][0]["description"]);
   }
)
//On clicked, the button prints out the value I want.

1.我添加了一个文本小部件的代码,它应该显示信息,我重新加载了应用程序,但是我得到了一个错误。

Text(myArticles["articles"][0]["description"]) 
// This line of code returns an error.

我从第3步得到的错误如下:

(NoSuchMethodError: The method '[]' was called on null.
Receiver: null
Tried calling: [](0))

为什么会出现此错误,如何解决?我知道我正确调用了API,并返回了正确的数据,但当我尝试在应用程序中显示相同的信息时,却出现了错误。

nfeuvbwi

nfeuvbwi1#

因为在第一次构建时,myArticles为空,myArticles["articles"]将为null。
您可以使用?进行修复:

Text(myArticles["articles"]?[0]["description"] ?? "")

相关问题