blob: 5e2c26a8808a883b85ffcbb23552162d237d73bc [file] [log] [blame]
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:flutter/animation.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
test('Disposing controller removes listeners to avoid memory leaks', () {
final _TestAnimationController controller = _TestAnimationController(
duration: const Duration(milliseconds: 100),
vsync: const TestVSync(),
);
int statusListener = 0;
int listener = 0;
controller.addListener(() {
listener++;
});
controller.addStatusListener((AnimationStatus _) {
statusListener++;
});
expect(statusListener, 0);
expect(listener, 0);
controller.publicNotifyListeners();
controller.publicNotifyStatusListeners(AnimationStatus.completed);
expect(statusListener, 1);
expect(listener, 1);
controller.dispose();
controller.publicNotifyListeners();
controller.publicNotifyStatusListeners(AnimationStatus.completed);
expect(statusListener, 1);
expect(listener, 1);
});
}
class _TestAnimationController extends AnimationController {
_TestAnimationController({
super.duration,
required super.vsync,
});
void publicNotifyListeners() {
super.notifyListeners();
}
void publicNotifyStatusListeners(AnimationStatus status) {
super.notifyStatusListeners(status);
}
}