| 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!);      },    );  }}
 |