在开发个人中心的过程中,在子Widget需要播放一个动画,而在兄弟组件中有个隔三秒换文字的组件,两个都需要进行ui的更新,当两个的刷新撞上,动画出现了肉眼可见的不正常波动,开始考虑的将刷新统一放在父组件中进行SetState,其实是没用的,并不能解决问题,主要的目的应该在于不能影响到动画的播放的帧。
在flutter实战上看到了Builder组件,普通的子组件方法中setState,其中的context是build方法的context,刷新的会是整个组件,而使用Builder组件嵌套一下,子组件使用的是Builder组件的Context,刷新的范围仅仅局限于Builder及子组件。参考Builder组件的源码,Builder
在build
方法中获取当前context后将构建方法代理到了builder
回调,也就使用的Builder范围内的Context来进行刷新。
范例:
import 'package:flutter/material.dart';
void main(){
runApp(MaterialApp(home: MyApp(),));
}
class MyApp extends S