mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2025-07-31 21:11:35 +00:00

* fix: limit length when renaming views * chore: clean up database listeners * fix: dispose of controllers properly * fix: dispose of resources properly * fix: deleting filters with same name * chore: extend DatabaseTabBarItemBuilder * fix: null check on null value
51 lines
1023 B
Dart
51 lines
1023 B
Dart
import 'package:flutter/material.dart';
|
|
|
|
abstract class Comparable<T> {
|
|
bool compare(T? previous, T? current);
|
|
}
|
|
|
|
class ObjectComparable<T> extends Comparable<T> {
|
|
@override
|
|
bool compare(T? previous, T? current) {
|
|
return previous == current;
|
|
}
|
|
}
|
|
|
|
class PublishNotifier<T> extends ChangeNotifier {
|
|
T? _value;
|
|
Comparable<T>? comparable = ObjectComparable();
|
|
|
|
PublishNotifier({this.comparable});
|
|
|
|
set value(T newValue) {
|
|
if (comparable != null) {
|
|
if (comparable!.compare(_value, newValue)) {
|
|
_value = newValue;
|
|
notifyListeners();
|
|
}
|
|
} else {
|
|
_value = newValue;
|
|
notifyListeners();
|
|
}
|
|
}
|
|
|
|
T? get currentValue => _value;
|
|
|
|
void addPublishListener(void Function(T) callback,
|
|
{bool Function()? listenWhen}) {
|
|
super.addListener(
|
|
() {
|
|
if (_value == null) {
|
|
return;
|
|
} else {}
|
|
|
|
if (listenWhen != null && listenWhen() == false) {
|
|
return;
|
|
}
|
|
|
|
callback(_value as T);
|
|
},
|
|
);
|
|
}
|
|
}
|