PeriodicBindableProperty<TValue> constructor

PeriodicBindableProperty<TValue>({
  1. required Duration duration,
  2. required TValue tickToValue(
    1. int tick
    ),
  3. required TValue initial,
  4. int initialTick = 0,
  5. bool autostart = false,
  6. int? repeat,
  7. void onTick(
    1. int tick
    )?,
  8. void statusChanged(
    1. PeriodicBindableProperty<TValue>
    )?,
  9. PropertyValueChanged<TValue>? valueChanged,
})

创建具有周期性的绑定属性

duration 指定周期间隔时长

tickToValue 指定将 tick 转换为值的方法

initial 指定初始值

initialTick 指定初始 tick 值,默认为 0

autostart 是否自动开始,默认为 false

repeat 指定重复次数,其值为 null0 时为不限次数,默认为 null

onTick 指定每次 tick 的回调方法

statusChanged 指定属性状态变更后的回调方法

valueChanged 指定属性值变更后的回调方法

Implementation

PeriodicBindableProperty(
    {required Duration duration,
    required TValue Function(int tick) tickToValue,
    required TValue initial,
    int initialTick = 0,
    bool autostart = false,
    int? repeat,
    void Function(int tick)? onTick,
    void Function(PeriodicBindableProperty<TValue>)? statusChanged,
    PropertyValueChanged<TValue>? valueChanged})
    : _duration = duration,
      _initial = initial,
      _initialTick = initialTick,
      _tick = initialTick,
      _statusChanged = statusChanged,
      _value = initial,
      super(valueChanged: valueChanged) {
  var _repeat = repeat == null || repeat == 0 ? null : repeat.abs(),
      _fn = (Timer _) {
        _value = tickToValue(++_tick);
        notifyListeners();
        onTick?.call(_tick);
      };
  _callback = _repeat == null
      ? _fn
      : (Timer _) {
          _fn(_);
          if (_.tick == _repeat) stop();
        };
  if (autostart) start();
}