Мое приложение содержит пару страниц. В панели приложений у меня есть самодельный виджет с сохранением состояния и значком, который показывает количество новых сообщений. Когда я проведу пальцем, чтобы обновить данные, значок запустит небольшую анимацию, если значение значка будет изменено.
Проблема в том, что значение значка исходит из модели с областью видимости. Как запустить анимацию из класса модели Scoped. Я попытался позволить классу модели с областью видимости держать в руках animationController и функцию. Работает на первом и втором экране. Но когда я возвращаюсь на первую страницу снова и тяну, чтобы обновить. Это как анимация контроллера в плохом состоянии.
Код в модели объема:
Function _runNotificationAnimation;
set runNotificationAnimation(Function fun) => _runNotificationAnimation = fun;
void _setNotificationCount(int count) {
_notificationCount = count;
if (count > 0 && _runNotificationAnimation != null) {
_runNotificationAnimation();
}
notifyListeners();
}
функция запуска анимации
runAnim() {
setState(() {
controller.reset();
controller.forward(from: 0.0);
});
}
Ошибка от флаттера:
[VERBOSE-2: shell.cc (184)] Ошибка дротика: необработанное исключение:
NoSuchMethodError: Метод 'stop' был вызван с нулевым значением.
Получатель: ноль
Пробный вызов: остановка (отменено: правда)
0 Object.noSuchMethod (dart: core / runtime / libobject_patch.dart: 50: 5)
1 AnimationController.stop (пакет: flutter / src / animation / animation_controller.dart: 650: 13)
2 AnimationController.value = (пакет: flutter / src / animation / animation_controller.dart: 349: 5)
3 AnimationController.reset (пакет: flutter / src / animation / animation_controller.dart: 370: 5)
4 NotificationIconState.runAnim (пакет: volvopenta / widgets / notificaton_icon.dart: 38: 16)
5 SettingsModel._setNotificationCount (пакет: volvopenta / scoped-models / settings-model.dart: 57: 7)
6 SettingsModel.updateAppData (пакет: volvopenta / scoped-models / settings-model.dart: 185: 5)
7 MyMachines.build ... (пакет: volvopenta / pages / fleet.dart: 83: 27)
8 <...>