AnimationController:我们可以将TickerProvider vsync传递给其他类吗?

AnimationController:我们可以将TickerProvider vsync传递给其他类吗?,animation,flutter,ticker,Animation,Flutter,Ticker,我在颤振中开发了一个应用程序,有很多不同的动画。我想通过分离视图、逻辑(模型组)和动画来构造代码。对于这个问题,我尝试多次为StatefulWidget的不同类中的按钮声明相同的动画 然而,我被卡住了,因为我必须向我的动画课传递一个TickerProvider,而且我没有正确的方法 构造函数动画类 AppBloc(TickerProvider tickerProvider) { banimationController = AnimationController( vsync

我在颤振中开发了一个应用程序,有很多不同的动画。我想通过分离视图、逻辑(模型组)和动画来构造代码。对于这个问题,我尝试多次为StatefulWidget的不同类中的按钮声明相同的动画

然而,我被卡住了,因为我必须向我的动画课传递一个TickerProvider,而且我没有正确的方法

构造函数动画类

AppBloc(TickerProvider tickerProvider) {
    banimationController = AnimationController(
      vsync: tickerProvider,
      duration: Duration(milliseconds: 100),
      lowerBound: 0,
      upperBound: 0.05,
    );
}
声明

AppBloc(this);
我知道这可能不是正确的方法,我写了这段代码来说明我的问题


我只想在另一个文件中分离动画声明。

TickerProvider是一个混合文件。您可以在一个类中使用带关键字的使用多个mixin。使用mixin uffTickerProvider的最佳方法是将其与关键字一起使用

示例:

  class _HomeState extends State<Home> with TickerProviderStateMixin {
  Animation<double> _animation;
  AnimationController _animationController;

  GoogleSignIn _googleSignIn;
  GoogleSignInAccount _googleSignInAccount;
  GoogleSignInAuthentication _googleSignInAuthentication;
  FirebaseAuth _auth;

 // FacebookLoginResult _facebookLoginResult;
  // FacebookLogin _facebookLogin;
   // FirebaseUser facebookUser;

  @override
  void initState() {
    super.initState();
    _animationController =
        AnimationController(vsync: this, duration: Duration(seconds: 4));
    _animation = Tween<double>(begin: -1.0, end: 0.0).animate(CurvedAnimation(
        parent: _animationController, curve: Curves.fastOutSlowIn));

    _animationController.forward();
  }

  @override
  void dispose() {
    _animationController.dispose();
    super.dispose();
  }

 @override
  Widget build(BuildContext context) {
return widget();
}
}
class\u HomeState使用TickerProviderStateMixin扩展状态{
动画(动画),;
AnimationController _AnimationController;
谷歌签名(googlesign);;
GoogleSignInAccount(GoogleSignInAccount);;
谷歌签名认证(GoogleSignInAuthentication);;
FirebaseAuth_auth;
//FacebookLoginResult _FacebookLoginResult;
//FacebookLogin\u FacebookLogin;
//FirebaseUser facebookUser;
@凌驾
void initState(){
super.initState();
_动画控制器=
AnimationController(vsync:this,duration:duration(秒数:4));
_动画=Tween(开始:-1.0,结束:0.0)。动画(曲线动画)(
父对象:_animationController,曲线:Curves.fastoutswowin);
_animationController.forward();
}
@凌驾
无效处置(){
_animationController.dispose();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回小部件();
}
}

如果以这种方式使用TickelProvider,则只需将this作为vsync的值传递

好的,我把TickerProviderStateMixin倒过来用了。。谢谢!