Не вызывается метод удаления виджета с сохранением состояния

#flutter

#flutter

Вопрос:

У меня есть список виджетов, которые я удаляю с экрана. При пролистывании я удаляю первый виджет из списка, но я понял, что метод удаления этого виджета не вызывается, поэтому AnimationContoller по-прежнему удерживается flutter и используется для последующих виджетов. Анимация для последующих виджетов завершается к моменту их вывода на передний план. Это заставляет мое приложение вести себя не так, как ожидалось. Чтобы проверить это, я печатаю строку в методе initState и dispose виджетов. initState печатает, но метод dispose этого не делает. Любая помощь, пожалуйста?

 class ProfileWidget extends StatefulWidget {

  ProfileWidget({Key key}) : super(key: key);

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

class _ProfileWidgetState extends State<ProfileWidget> with TickerProviderStateMixin {
    
  @override
  void initState() {
    super.initState();
    print("New init");

    _animationController = new AnimationController(
      vsync: this,
      duration: const Duration(milliseconds: 400),
    );

    _fadeAnimationController = new AnimationController(
      vsync: this,
      duration: const Duration(milliseconds: 200),
    );

    _fadeAnimation = new Tween(
      begin: 0.0,
      end: 1.0,
    ).animate(_fadeAnimationController);

    _fadeAnimationController.forward();

  }


  @override
  void dispose() {
    print("Disposing");

    if (_animationController != null) {
      _animationController.dispose();
    }

    if (_fadeAnimationController != null) {
      _fadeAnimationController.dispose();
    }

    super.dispose();
  }
}


  

Ответ №1:

это известная ошибка в flutter, и обсуждение продолжается: https://github.com/flutter/flutter/issues/40940
даже если вы скопируете примеры из официальных документов, он не будет вызван: https://flutter.dev/docs/cookbook/networking/web-sockets#complete-example
однако разработчики flutter утверждают, что это желаемое поведение. Пожалуйста, выразите свою поддержку в проблеме github, если вы считаете, что это должно быть исправлено.

Комментарии:

1. Спасибо. Я обязательно это сделаю.