| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 | 
							- 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;
 
-         }
 
-         if (listenWhen != null && listenWhen() == false) {
 
-           return;
 
-         }
 
-         callback(_value!);
 
-       },
 
-     );
 
-   }
 
- }
 
 
  |