syncWith method

DisposeHandler syncWith(
  1. ChangeNotifier notifier,
  2. ValueChanged<T> onChanged, {
  3. required T getValue(),
  4. required void setValue(
    1. T
    ),
})

将 Stream 与 ChangeNotifier 同步 notifier 监听器 onChanged 值改变时的回调 getValue 获取当前值的方法 setValue 设置新值的方法

Implementation

DisposeHandler syncWith(
  ChangeNotifier notifier,
  ValueChanged<T> onChanged, {
  required T Function() getValue,
  required void Function(T) setValue,
}) {
  // 使用 distinct() 避免重复值触发更新
  final subscription = distinct().listen((newValue) {
    // 只有当值真正改变时才更新
    if (getValue() != newValue) {
      setValue(newValue);
    }
  });

  // 监听器回调
  void listener() {
    try {
      onChanged(getValue());
    } catch (error, stackTrace) {
      RxLogger.logError(error, stackTrace);
    }
  }

  notifier.addListener(listener);

  // 返回取消监听的方法
  return () {
    try {
      notifier.removeListener(listener);
      subscription.cancel();
    } catch (error, stackTrace) {
      RxLogger.logError(error, stackTrace);
    }
  };
}