Flutter 将转换应用于小部件而不重新绘制小部件树
假设我有这个堆栈:Flutter 将转换应用于小部件而不重新绘制小部件树,flutter,flutter-animation,Flutter,Flutter Animation,假设我有这个堆栈: 堆栈( 儿童:[ Column(//=>我想在此应用transform(更具体地说是translate) 儿童:[ //一大堆小部件 ], ), 列(//=>和 儿童:[ //一大堆小部件 ], ), ], ); 堆栈中有两列,每列中都有一棵巨大的子树 我想做的是在特定状态下移动屏幕上的列 实现这一点的一种方法是将每个列包装在AnimatedBuilder中,但这意味着在每个帧上都需要重新创建整个小部件树,这并不理想 在原生Android中,有一种方法可以满足我的需要: s
堆栈(
儿童:[
Column(//=>我想在此应用transform(更具体地说是translate)
儿童:[
//一大堆小部件
],
),
列(//=>和
儿童:[
//一大堆小部件
],
),
],
);
堆栈中有两列,每列中都有一棵巨大的子树我想做的是在特定状态下移动屏幕上的列 实现这一点的一种方法是将每个列包装在
AnimatedBuilder
中,但这意味着在每个帧上都需要重新创建整个小部件树,这并不理想
在原生Android中,有一种方法可以满足我的需要:someView.animate().translateX(100).withLayer()代码>
在颤振中是否有与此等效的方法,或其他实现此目的的方法?多亏了@pskink,这就是它的实现方式:
堆栈(
儿童:[
动画生成器(
动画:_动画,
生成器:(上下文,子对象){
返回Transform.translate(
偏移量:偏移量(_animation.value,0),
孩子:孩子,
);
},
子:列(
儿童:[
//一大堆小部件
],
),
),
...
],
);
需要更改以实现转换的小部件是transform.translate
,因此我将其放在builder
类中,而树中不受其影响的其余部分则放在AnimatedBuilder
的子属性中
然后,子对象被传递回builder
方法,在那里我可以将它赋给builder方法内部的child属性,而它不会被重建。AnimatedBuilder
具有child
property@pskink我不明白。您能详细说明一下吗?请查看AnimatedBuilder.child
属性(以及AnimatedBuilder
类)的官方文档。好的,我知道了,谢谢。我不知道我怎么会错过那个!