flutter中页面事件通知LiveData

Android中的LiveData可以在activity可见时回调,那我们可以根据生命周期函数自己创建在页面可见时的回调

因为flutter没有resume,pause,要先看下如何添加这两个生命周期文章在这里,有了这两个生命函数才能实现LiveData

typedef CallBack =void Function(T data);

class LiveDataCallBack {

final boolstick;

  intversion = -1;

  final LifecycleStatestate;

  final CallBackcallBack;

  LiveDataCallBack(

{this.stick:true, this.state, @required this.callBack});

}

class LiveData {

T_data;

  int_version = -1;

  List>_listeners = [];

  void removeListeners(LiveDataCallBack liveDataCallBack) {

_listeners.remove(liveDataCallBack);

  }

void addListeners(LiveDataCallBack listener) {

if (listener ==null || listener.callBack ==null) {

return;

    }

_listeners.add(listener);

    if (!listener.stick) {

listener.version =_version;

    }

if (listener.state ==null) {

_sendListener(listener);

return;

    }

listener.state.addListener((event) {

if (event == Event.ON_DISPOSE) {

_listeners.remove(listener);

return;

      }

if (event == Event.ON_PAUSE) {

return;

      }

_sendListener(listener);

    });

  }

_sendListener(LiveDataCallBack listener) {

if (listener.version >=_version) {

return;

    }

listener.version =_version;

    listener.callBack(_data);

  }

set data(T data) {

if (_data == data) {

return;

    }

_data = data;

    _version++;

    _dispatchingValue();

  }

void _dispatchingValue() {

_listeners.forEach((element) {

if (element.state ==null || element.state.isActive()) {

_sendListener(element);

      }

});

  }

}

LiveDataCallBack 第一个参数是否粘性数据,默认true,如何有数据在监听时立刻得到,第二个是我们添加生命周期,第三个是回调函数,如何生命周期函数不传在回调处使用setState在页面不处于显示时会报错,结构很简单

你可能感兴趣的:(flutter中页面事件通知LiveData)