Flutter实战指南
上QQ阅读APP看书,第一时间看更新

2.11 在StatefulWidget中管理数据

我们已经创建了一个StatefulWidget小部件,但问题是怎样去管理和改变它内部的数据,可以用一个很简单的方式去实现它。在_MyappState中添加一个属性news,代码如下:

news是一个String类型的数组,因为Dart是强类型语言,所以需要在news的前面加类型List,这是Dart中的类型,表示数组。List可以添加泛型,这里是String泛型,表示这个数组中的内容都是String类型的,这就是_MyappState的属性。但数组是空的,下面我们给数组赋值,在中括号中输入第一条资讯'first',代码如下:

现在需要把数组转换到Card列表中并渲染到屏幕上,使用属性时不可以使用this,可以直接引用它。

这里需要调用数组的一个方法,在news后加点,有一个叫map()的方法,它允许将列表中的每一个元素转换为新元素并将其返回。

我们将在Column中的children参数列表返回一个新值,map中需要传入一个方法参数来编写转化逻辑,方法将接收一个元素,这里你可以使用等号加箭头来定义每个元素都发生了什么,代码如下:

我们需要根据元素创建Card,所以遍历news中的每一个元素,然后把它转化成Card。把Text小部件中的内容直接替换成被遍历的元素,因为它们都是String类型的数据。

有一点需要注意,需要把被遍历的元素element用小括号括起来,因为它是一个参数,因为只有一句代码,所以我们可以用=>这种方式编写。虽然跨越了几行代码也是一句代码。map()方法遍历后返回的是一个Iterable类型的数据,但是Column需要的是小部件数组,所以需要把map()方法遍历后的结果转化成List类型,我们可以通过调用tolist()方法来实现。下一节我们将学习使用按钮添加更多的Card。