如何在 Flutter 中重建 AnimatedWidget
How to rebuild an AnimatedWidget in Flutter
我是 Flutter 新手。
我有一个 AnimatedWidget,基本上可以将输入文本字段从屏幕的隐藏区域切换到可见部分,但是在某些情况下我需要重新加载视图。
据我所知,AnimatedWidget 以某种方式扩展了 StatefulWidget,但是无法调用 setState。
谢谢
class MyState extends State<MyPage> with TickerProviderStateMixin {
AnimationController controller;
@override
void initState() {
controller = AnimationController(duration: const Duration(milliseconds: 500), vsync: this);
loadDbData();
super.initState();
}
@override
Widget build(BuildContext context) {
final colorTween =
ColorTween(begin: Theme.of(context).primaryColor, end: Theme.of(context).primaryColorDark)
.animate(controller);
return AnimatedBuilder(
animation: colorTween,
builder: (buildContext, child) {
return Container(
color: colorTween.value,
);
});
}
对于启动动画,您可以使用:
controller.forward();
controller.forward(from: 0.5);
controller.reverse();
或者你可以这样设置监听器:
colorTween.addStatusListener((status) {
if (status == AnimationStatus.completed) {
controller.reverse();
} else if (status == AnimationStatus.dismissed) {
controller.forward();
}
});
希望是你需要的
我是 Flutter 新手。
我有一个 AnimatedWidget,基本上可以将输入文本字段从屏幕的隐藏区域切换到可见部分,但是在某些情况下我需要重新加载视图。
据我所知,AnimatedWidget 以某种方式扩展了 StatefulWidget,但是无法调用 setState。
谢谢
class MyState extends State<MyPage> with TickerProviderStateMixin {
AnimationController controller;
@override
void initState() {
controller = AnimationController(duration: const Duration(milliseconds: 500), vsync: this);
loadDbData();
super.initState();
}
@override
Widget build(BuildContext context) {
final colorTween =
ColorTween(begin: Theme.of(context).primaryColor, end: Theme.of(context).primaryColorDark)
.animate(controller);
return AnimatedBuilder(
animation: colorTween,
builder: (buildContext, child) {
return Container(
color: colorTween.value,
);
});
}
对于启动动画,您可以使用:
controller.forward();
controller.forward(from: 0.5);
controller.reverse();
或者你可以这样设置监听器:
colorTween.addStatusListener((status) {
if (status == AnimationStatus.completed) {
controller.reverse();
} else if (status == AnimationStatus.dismissed) {
controller.forward();
}
});
希望是你需要的