Flutter的setState
刷新是重新刷新整个布局的,要想局部刷新,目前有3个方法可以实现,一个是通过GlobalKey
来实现,不过官方建议少用GlobalKey
,所以下面只介绍剩余2种方法.
一、StreamBuilder
1、注册监听控制器
int value = 0;
final StreamController<int> _streamController = StreamController();
2、包裹要更新的组件
StreamBuilder(
stream: _streamController.stream,
initialData: value,
builder: (BuildContext context, AsyncSnapshot snapshot) {
return Text('局部更新的组件');
},
3、执行刷新
_streamController.add(a);
4、注意销毁
_streamController.close();
二、StatefulBuilder
1、声明一个控制对象
final StateSetter mSetter;
2、包裹要更新的组件
StatefulBuilder(
builder: (BuildContext context, StateSetter setState) {
mSetter = setState;
return Text("局部刷新的组件");
},
),
3、执行刷新
this.mSetter(() {});
2种刷新方法各有优势,不过现在更好的局部刷新方式我觉得用GetX框架实现更为方便.