这是我在课堂上使用的简单动画
controller = AnimationController(vsync: this, duration: Duration(milliseconds: 200));
offset = Tween<Offset>(begin: Offset.zero, end: Offset(0.0, -1.0)).animate(controller);
controller.forward();
因为我只能在班级内部管理forward
,reverse
之类的动画控制器,而我尝试将此控制器移至班级外部,就像另一个班级为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 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;
}
答案 0 :(得分:2)
您可以使用GlobalKey。
首先,您需要像这样实例化并存储它
final key = GlobalKey<NotificationBarState>()
,然后需要将其传递给NotificationBar
构造函数,并使用密钥调用super
。然后,您可以通过调用key.currentState.someMethod()
来访问该州及其成员。
但是,对于我来说,整个想法并不像 Flutter方式。我建议在NotificationBarState内订阅一些流或changeNotifier并触发动画作为对新事件或通知的反应