// 未分类
Flutter的stateful widget
发布 2018-09-30 · 永久链接
no excerpt about this article
## Flutter的stateful widget
在flutte里面的widget,分为stateless和stateful两种,不过他们的相同点是,他们都是不可变的(immutable)。
在StatelessWidget里面通过重写`build`方法来返回界面等。
## demo
关于StateFulWidget,写了个简单的demo ----> [传送门](https://gitee.com/someonedeng/NoWayFlutter.git)
#### preview

``` dart
class MyApp extends StatelessWidget{
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: 'NoWay',
home: new ContentWidget()
);
}
}
```
## State
因为Widget都是不可变的,而想要让界面动态的发生变化,比如,ListView添加了数据后需要更新。
就要使用State来保存和操控Widget(`StatefulWidget`)的状态。
``` dart
class ContentWidget extends StatefulWidget{
@override
State createState() {
return new ContentWidgetState();
}
}
```
通过重写createState的方式来获取Widget的State对象。
``` dart
class ContentWidgetState extends State {
@override
void initState() {
}
@override
Widget build(BuildContext context) {
return null;
}
}
```
在state里面描述了怎么创建StatefulWidget的view。
更重要的是,widget的更新。比如,通过点击一个按钮后,添加数据到listView的数据里边,需要对View更新,
``` dart
class StateA extends State{
@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( (){} )`来 通知界面的更新。
调用界面更新最好是异步的,不然好像会报错。。
``` dart
Future fs = 某些地方获取到的,文件、网络等;
fs.then((str){
setState(() {
// do your job here
});
});
```