DengQN·一个普通程序员;
Flutter的stateful widget
2018-09-30 17:00 60
#更新#界面#里面#数据#需要#不可#变#重写#添加#获取

Flutter的stateful widget

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

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

demo

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

preview

preview

class MyApp extends StatelessWidget{

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

State

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

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


class ContentWidget extends StatefulWidget{

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

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

class ContentWidgetState extends State<ContentWidget> {
  @override
  void initState() {
    
  }
  @override
  Widget build(BuildContext context) {
    return null;
  }
}

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

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


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( (){} )来 通知界面的更新。

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

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