live<R> method

  1. @override
Stream<Response<T>> live<R>(
  1. String id, {
  2. Map<String, dynamic>? extra,
  3. R? source(
    1. R parent
    )?,
})
override

Implementation

@override
Stream<Response<T>> live<R>(
  String id, {
  Map<String, dynamic>? extra,
  R? Function(R parent)? source,
}) {
  final controller = StreamController<Response<T>>();
  final response = Response<T>();
  try {
    if (id.isNotEmpty) {
      final url = currentUrl(id, source);
      Timer.periodic(const Duration(milliseconds: 3000), (timer) async {
        final reference = await database.get(url);
        final data = reference.data;
        final code = reference.statusCode;
        if ((code == 200 || code == api.status.ok) && data is Map) {
          final result = build(data);
          controller.add(
            response.copy(data: result),
          );
        } else {
          final error = "Data unmodified [${reference.statusCode}]";
          controller.addError(
            response.copy(snapshot: reference, error: error),
          );
        }
      });
    } else {
      final error = "Undefined ID [$id]";
      controller.addError(
        response.copy(error: error),
      );
    }
  } catch (_) {
    controller.addError(_);
  }
  return controller.stream;
}