live<R> method
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;
}