addChangeListener method

Future<ListenerToken> addChangeListener (dynamic callback(QueryChange))

Adds a query change listener and posts changes to callback.

Returns the listener token object for removing the listener.

Implementation

Future<ListenerToken> addChangeListener(Function(QueryChange) callback) async {
  var token = ListenerToken();
  tokens[token] =
      _stream.where((data) => data["query"] == queryId).listen((data) {
    Map<String, dynamic> qcJson = data;
    final List<dynamic> resultList = qcJson["results"];

    ResultSet result;

    if (resultList != null) {
      List<Result> results = List<Result>();
      for (dynamic result in resultList) {
        Result newResult = Result();
        newResult.setMap(result["map"]);
        newResult.setList(result["list"]);
        results.add(newResult);
      }
      result = ResultSet(results);
    }

    String error = qcJson["error"];

    callback(QueryChange(query: this, results: result, error: error));
  });

  if (tokens[token] == null) {
    // Listener didn't subscribe to stream
    tokens.remove(token);
    return null;
  }

  return token;
}