//Flutter决定是否更新组件主要是判断该组件是否为dirty,setState其实就是将组建标记为dirty的过程,可以直接用该组件的的context将组件标记。
class StateBuilder extends StatelessWidget {
final Widget Function(BuildContext context, void Function() rebuild)builder;
const StateBuilder(this.builder, {Key key}) : super(key: key);
@override
Widget build(BuildContext context) => builder(context, () => (context as Element).markNeedsBuild());
}
使用:
bool _withTree = true;
StateBuilder((BuildContext context, rebuild) {
return Checkbox(
value: _withTree,
onChanged: (bool value) {
_withTree = !_withTree;
rebuild();
},
);
},
)