上QQ阅读APP看书,第一时间看更新
2.12 在StatefulWidget小部件中添加数据
触发按钮的单击事件能做一些事情,这里单击按钮需要改变news这个列表数据。当数据发生变化时,build()方法将会再次被执行,此时它将使用的是更新后的news数组列表,进而更新Card并渲染到屏幕上。
理论上,如果增加news数组列表中的数据,将会获得更多的Card,所以在按钮单击事件这里可以给news数组列表添加新的值。因为news数组列表是一个字符串列表,所以可以添加一个新的字符串'second',代码如下:
保存后,单击按钮却什么都没有发生。实际上我们改变了news,可以在这里打印出来,代码如下:
这只是一个debug方法,Visual Studio Code在底部的控制台会打印出日志,单击按钮,控制台已经打印出来first和second了,如图2.20所示。
图2.20 打印news数组
但是我们只看见一个Card,这是因为我们在这里改变了数据,但是Flutter识别不出来,默认Flutter只关注属性这里的数据,当属性数据发生变化时,必须告诉Flutter在StatefulWidget中已改变了属性数据。
要实现这样的效果需要调用一个特殊的方法setState(),它是Flutter包提供的,需要接收一个方法参数,在这个方法中编写改变数据的方法,然后重新渲染App。这里添加news的数据,代码如下:
保存一下,单击按钮会看到第二个卡片出现了。
下一节我们再创建一个StatelessWidget,看看小部件之间如何交互。