Флаттер, второй контроллер анимации не анимация, почему? - PullRequest
0 голосов
/ 16 февраля 2020

У меня есть два контроллера анимации, использующих TickerProviderStateMixin первая анимация работает плавно, в то время как вторая не анимируется, когда я запускаю метод forward : вот их объявления:

class HomeAnimator extends StatefulWidget {
  @override
  _HomeAnimatorState createState() => _HomeAnimatorState();
}

class _HomeAnimatorState extends State<HomeAnimator>
    with TickerProviderStateMixin {
  AnimationController _controller;
  AnimationController _signupctrl;

  @override
  void initState() {
    super.initState();
    _controller =
        AnimationController(duration: Duration(milliseconds: 900), vsync: this);
    _signupctrl =
        AnimationController(duration: Duration(milliseconds: 900), vsync: this);
    // _controller.forward();
  }

  @override
  void dispose() {
    super.dispose();
    _controller.dispose();
    _signupctrl.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Dahome(controllers: [_controller,_signupctrl]);
  }
}

У меня есть два файла для различного набора анимаций:

- Mahome_EnterAnimation: при нажатии на кнопку входа вот соответствующая часть:

class EntAnime {
  EntAnime(this.controller)
      : opanime = Tween<double>(begin: 1, end: 0).animate(CurvedAnimation(
          parent: controller,
          curve: Interval(0, 0.5, curve: Curves.fastOutSlowIn),
        )),
        r_opanime = Tween<double>(begin: 0, end: 1).animate(CurvedAnimation(
          parent: controller,
          curve: Interval(0, 0.5, curve: Curves.fastOutSlowIn),
        )),
        hfact = Tween<double>(begin: 0, end: 1).animate(CurvedAnimation(
          parent: controller,
          curve: Interval(0, 0.5, curve: Curves.fastOutSlowIn),
        )),

- Mahome_SignupAnime : когда я нажимаю кнопку регистрации

class SignupAnime {
  SignupAnime(this.controller):
  qopanime = Tween<double>(begin: 0, end: 1).animate(CurvedAnimation(
          parent: controller,
          curve: Interval(0.0, 0.5, curve: Curves.fastOutSlowIn),
        )),
        qhfact = Tween<double>(begin: 0, end: 1).animate(CurvedAnimation(
          parent: controller,
          curve: Interval(0.5, 0.9, curve: Curves.fastOutSlowIn),
        ));

  final AnimationController controller;
  final Animation<double> qopanime;
  final Animation<double> qhfact;
}

Вот как я это объявил:

class Dahome extends StatefulWidget {
  Dahome({Key key, this.title, @required List<AnimationController> controllers})
      : daanime = EntAnime(controllers[0]),
        signanime = SignupAnime(controllers[1]),
        super(key: key);
  final EntAnime daanime;
  final SignupAnime signanime;
  final String title;
  Dastate createState() => Dastate(daanime, signanime);
  // @override
}

class Dastate extends State<Dahome> {
  Dastate(this.maanime, this.loganime);
  final EntAnime maanime;
  final SignupAnime loganime; 
...

Я вызывал методы пересылки двумя разными кнопками:

Первый здесь, а второй так же:

RaisedButton(
    onPressed: () => {
       maanime.controller.forward()
       },

1 Ответ

1 голос
/ 16 февраля 2020

Глупо, проблема была в виджете animatedbuilder Мне пришлось изменить параметр animation со вторым контроллером

...