gpt4 book ai didi

Flutter 从课外管理动画 Controller

转载 作者:IT老高 更新时间:2023-10-28 12:46:31 29 4
gpt4 key购买 nike

这是我在类里面使用的简单动画

controller = AnimationController(vsync: this, duration: Duration(milliseconds: 200));

offset = Tween<Offset>(begin: Offset.zero, end: Offset(0.0, -1.0)).animate(controller);
controller.forward();

因为我只能在类内管理动画 Controller ,例如 forwardreverse,我尝试将此 Controller 移动到类外,就像另一个类一样 NotificationBarController,有没有人可以帮我实现这个解决方案?

例如

controller = NotificationBarController();
controller.forward();

源代码

class NotificationBar extends StatefulWidget {
final Widget contentWidget;
final Widget barWidget;

NotificationBar({@required this.contentWidget, @required this.barWidget});

@override
State<StatefulWidget> createState() => NotificationBarState();
}

class NotificationBarState extends State<NotificationBar> with SingleTickerProviderStateMixin {
AnimationController controller;
Animation<Offset> offset;

@override
void initState() {
super.initState();

controller = AnimationController(vsync: this, duration: Duration(milliseconds: 200));
// offset = Tween<Offset>(begin: Offset.zero, end: Offset(1.0, 0.0)).animate(controller); from right
offset = Tween<Offset>(begin: Offset.zero, end: Offset(0.0, -1.0)).animate(controller);
controller.forward();
}

@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
),
);
}
}

我厌倦了实现它的类(class),但这是错误的

class NotificationBarController  extends ChangeNotifier {
NotificationBarController({@required TickerProvider vsync}): _animationController = AnimationController(vsync: vsync);

Animation<double> get animation => _animationController?.view ?? kAlwaysCompleteAnimation;

Animation<double> get state => _animationController?.view ?? kAlwaysCompleteAnimation;

}

最佳答案

您可以使用 GlobalKey。首先,您需要像这样实例化和存储它 final key = GlobalKey<NotificationBarState>() ,那么您需要将其传递给 NotificationBar构造函数调用 super用 key 。然后您可以通过调用 key.currentState.someMethod() 访问状态及其成员。 .

然而,整个想法对我来说并不像 Flutter 方式。我建议订阅 NotificationBarState 中的一些流或 changeNotifier 并触发动画作为对新事件或通知的 react

关于Flutter 从课外管理动画 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56923999/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com