1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- 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);
- },
- );
- }
- }
- class Notifier extends ChangeNotifier {
- void notify() {
- notifyListeners();
- }
- }
|