本文主要是介绍6、Flutter - 状态管理 StatelessWidget 和 StatefulWidget,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
状态管理 StatelessWidget 和 StatefulWidget
详细代码参见Demo
Demo地址 -> flutter_testdemo2
创建一个
state_mag_demo.dart 的文件
import 'package:flutter/material.dart';
widget 继承自 StatelessWidget 或 StatefulWidget
StatelessWidget 无状态 里面的数据是静态的,也就是创建出来之后是不能改变的
StatelessWidget 只渲染一次,如下点击count 加了之后不会去调用build 去渲染页面
当我们想实现一个动态改变的页面时,使用 StatelessWidget 是我法满足我们需要的
例如如下代码。我们添加一个button。然后点击改变 count 的值,页面是的Text 是不会改变的,因为 StatelessWidget build 只执行一次,不会去重新渲染页面
class StateManagerDemo extends StatelessWidget {int count = 0;@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('StateManagerDemo'),),body: Center(child: Chip(label: Text('$count')),),floatingActionButton: FloatingActionButton(child: Icon(Icons.add),onPressed: () {count += 1;print('count = $count');},));}
}
可以使用 StatefulWidget 有状态的
有状态,这是一个树状结构,如果变化的话通知 StatefulWidget 将会从头到尾全部重新渲染
所以不要什么都用 StatefulWidget
State 用来管理状态的 ,
State<StateManagerDemo2> 泛型用来关联 StateManagerDemo2
// 有状态,这是一个树状结构,如果变化的话通知 StatefulWidget 将会从头到尾全部重新渲染
//所以不要什么都用 StatefulWidget
class StateManagerDemo2 extends StatefulWidget {@override_StateManagerDemo2State createState() => _StateManagerDemo2State();
}//State 用来管理状态的
//State<StateManagerDemo2> 泛型用来关联 StateManagerDemo2
class _StateManagerDemo2State extends State<StateManagerDemo2> {int count = 0;@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('StateManagerDemo'),),body: Center(child: Chip(label: Text('$count')),),floatingActionButton: FloatingActionButton(child: Icon(Icons.add),onPressed: () {setState(() {//当发生变化的时候去重新buildcount += 1;});print('count = $count');},));}
}
有状态
StatefulWidget
State build 去渲染界面
setState(() { 有变化时去通知 StatefulWidget 重新build 渲染一下界面。是增量的
Widget 有点类似于 iOS中的 view
写在widget里的需要用widget去关联
如果直接写在state里的可以直接拿到
上面的 int count = 0;要是写到 StatefulWidget 中,在State 中用的话需要widget.count 去访问
这篇关于6、Flutter - 状态管理 StatelessWidget 和 StatefulWidget的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!