Fixes crashing disposed listeners on a bunch of widgets (#164)

pull/180/head
Guilherme C. Matuella 4 years ago committed by GitHub
parent 60127aeb04
commit 451dffc4cd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 31
      lib/widgets/controller.dart

@ -32,6 +32,13 @@ class QuillController extends ChangeNotifier {
Style toggledStyle = Style();
bool ignoreFocusOnTextChange = false;
/// Controls whether this [QuillController] instance has already been disposed
/// of
///
/// This is a safe approach to make sure that listeners don't crash when
/// adding, removing or listeners to this instance.
bool _isDisposed = false;
// item1: Document state before [change].
//
// item2: Change delta applied to the document.
@ -183,9 +190,31 @@ class QuillController extends ChangeNotifier {
notifyListeners();
}
@override
void addListener(VoidCallback listener) {
// By using `_isDisposed`, make sure that `addListener` won't be called on a
// disposed `ChangeListener`
if (!_isDisposed) {
super.addListener(listener);
}
}
@override
void removeListener(VoidCallback listener) {
// By using `_isDisposed`, make sure that `removeListener` won't be called
// on a disposed `ChangeListener`
if (!_isDisposed) {
super.removeListener(listener);
}
}
@override
void dispose() {
document.close();
if (!_isDisposed) {
document.close();
}
_isDisposed = true;
super.dispose();
}

Loading…
Cancel
Save