大飞

大飞 关注TA

挑战一切!

大飞

大飞

关注TA

挑战一切!

  • 加入社区3,268天
  • 写了333,609字

该文章投稿至Nemo社区   Android  板块 复制链接


flutter 开篇

发布于 2019/07/07 11:47 18,202浏览 0回复 2,087

                                                  StatelessWidget和StatefulWidget的区别

            StatelessWidget面向那些始终不变的UI控件,比如标题栏中的标题;而StatefulWidget则是面向可能会改变UI状态的控件,比如有点击反馈的按钮。StatefulWidget的创建需要指定一个State,在需要更新UI的时候调用setState(VoidCallback fn),并在VoidCallback中改变一些变量数值等,组件会重新build以达到刷新状态也就是刷新UI的效果。

   import 'package:flutter/material.dart';


void main() {
runApp(new MaterialApp(
title: 'Flutter Demo',
home: new Home(),
));
}

class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
//Scaffold是Material中主要的布局组件.
return new Scaffold(
appBar: new AppBar(
leading: new IconButton(
icon: new Icon(Icons.menu),
tooltip: 'Navigation menu',
onPressed: null,
),
title: new Text('Example title'),
actions: <Widget>[
new IconButton(
icon: new Icon(Icons.search),
tooltip: 'Search',
onPressed: null,
),
],
),
//body占屏幕的大部分
body: new Center(
child: new MyButton(),
),
floatingActionButton: new FloatingActionButton(
tooltip: 'Add', // used by assistive technologies
child: new Icon(Icons.add),
onPressed: null,
),
);
}
}

class MyButton extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return new _CounterState();
}
}

class _CounterState extends State<MyButton> {
int _count = 0;

void _addCount() {
setState(() {
_count++;
});
}

void _reduceCount() {
setState(() {
_count--;
});
}

@override
Widget build(BuildContext context) {
return new Column(
children: <Widget>[
new RaisedButton(
onPressed: _addCount,
child: new Text('点击增加'),
),
new RaisedButton(
onPressed: _reduceCount,
child: new Text('点击减少'),
),
new Text('count:$_count')
],
);
}
}


效果图:



本文标签
 {{tag}}
点了个评