Flutter的stateful widget

Flutter 的 stateful widget

在 flutte 里面的 widget，分为 stateless 和 stateful 两种，不过他们的相同点是，他们都是不可变的（immutable）。

在 StatelessWidget 里面通过重写build方法来返回界面等。

demo

关于 StateFulWidget, 写了个简单的 demo ----> 传送门

preview

Copy
class MyApp extends StatelessWidget{

@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'NoWay',
home: new ContentWidget()
);
}
}

State

因为 Widget 都是不可变的，而想要让界面动态的发生变化，比如，ListView 添加了数据后需要更新。

就要使用 State 来保存和操控 Widget（StatefulWidget）的状态。

Copy

class ContentWidget extends StatefulWidget{

@override
State<StatefulWidget> createState() {
return new ContentWidgetState();
}
}

通过重写 createState 的方式来获取 Widget 的 State 对象。

Copy
class ContentWidgetState extends State<ContentWidget> {
@override
void initState() {

}
@override
Widget build(BuildContext context) {
return null;
}
}

在 state 里面描述了怎么创建 StatefulWidget 的 view。

更重要的是，widget 的更新。比如，通过点击一个按钮后，添加数据到 listView 的数据里边，需要对 View 更新，

Copy

class StateA extends State<ContentWidget>{
@override
Widget build(BuildContext context) {
// TODO: implement build
return new Scaffold(
appBar: new AppBar(
actions: [
new IconButton(
new Icon(Icons.add),
onPressed: (){ addData() },
)
]
),
);
}
// add data to a list
void addData() {
setState(() {
// do your job here
});
}
}

这时候需要调用setState( (){} )来 通知界面的更新。

调用界面更新最好是异步的，不然好像会报错。。

Copy
Future<String> fs = 某些地方获取到的，文件、网络等;
fs.then((str){
setState(() {
// do your job here
});
});