「这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战」。
- 我们在学习flutter中知道flutter页面渲染是通过
不断替换原有的组件
,用新的组件进行替换,而不是在原有基础上更改,那么对于某些组件或者我们要实现一些功能要记录我们要的数据
,比如我们的输入框输入状态等。
1. stateful展示
我们使用快捷键stf
通过复写
createState()
控制组件的状态,
class _statefulDemoState extends State<statefulDemo> {
@override
Widget build(BuildContext context) {
return Container();
}
}
状态管理者
,我们代码写在里面,我们创建flutter
工程时候就是有默认的
class _statefulDemoState extends State<statefulDemo> {
int count = 0;
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
title: const Text('StatefulDemo'),
),
body: Center(
child: Chip(
label: Text('$count'),
),
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: () {
}),
),
);
}
}
我们定义count
,Chip
组件类似label
,默认是圆形,floatingActionButton
组件是悬浮按钮,
我们点击
增加count
,实现按钮的点击事件,通过setState
实现
onPressed: () {
setState(() {
count++;
});
}),
这样我们组件会刷新所有有关count的组件
了
2. listView展示
我们定义一个数组存放我们的数据
,
class listDemo extends StatelessWidget {
List datas = ['金樽清酒斗十千,玉盘珍羞直万钱,\n',
'停杯投箸不能食,拔剑四顾心茫然.\n',
'欲渡黄河冰塞川,将登太行雪满山.\n',
'闲来垂钓碧溪上,忽复乘舟梦日边.\n',
'行路难!行路难!多歧路,今安在?\n',
'长风破浪会有时,直挂云帆济沧海.\n'];
@override
Widget build(BuildContext context) {
return ListView.builder(
padding: EdgeInsets.all(70),
itemBuilder:
(BuildContext context, int index){
return Text(datas[index]);
},
itemCount: count,
);
}
}
itemCount
关联我们的listView
,我们修改count的时候这样就会刷新所有count的widget
我们点击的时候刷新listview的count
,也是动态变化我的体现。
List datas = [
'第${count-1}行诗\n',
'金樽清酒斗十千,玉盘珍羞直万钱,\n',
'停杯投箸不能食,拔剑四顾心茫然.\n',
'欲渡黄河冰塞川,将登太行雪满山.\n',
'闲来垂钓碧溪上,忽复乘舟梦日边.\n',
'行路难!行路难!多歧路,今安在?\n',
'长风破浪会有时,直挂云帆济沧海.\n'];
我们添加个标题在数组中,这样明显一点,同时文本居中显示
Widget build(BuildContext context) {
return ListView.builder(
padding: EdgeInsets.all(70),
itemBuilder:
(BuildContext context, int index){
return Text(datas[index],
textAlign: TextAlign.center,
);
},
itemCount: count,
);
}
以上就是一个简单的例子,说明stateful
在flutter
中的表现,后面的学习我们在根据例子详细说明。