lives<R> method
Stream<Response<T>>
lives<
R>({ - bool onlyUpdatedData = false,
- R? source(
- R parent
)?,
})
override
Implementation
@override
Stream<Response<T>> lives<R>({
bool onlyUpdatedData = false,
Map<String, dynamic>? extra,
R? Function(R parent)? source,
}) async* {
final controller = StreamController<Response<T>>();
final response = Response<T>();
try {
if (extra != null && extra.isNotEmpty) {
final value = await input(extra);
if (value.isNotEmpty) {
final url = currentSource(source);
Timer.periodic(const Duration(milliseconds: 3000), (timer) async {
final reference = encryptor.type == ApiRequest.get
? await database.get(url, data: value)
: await database.post(url, data: value);
final data = reference.data;
final code = reference.statusCode;
if ((code == 200 || code == encryptor.status.ok) &&
data is List<dynamic>) {
List<T> result = data.map((item) {
return build(item);
}).toList();
controller.add(
response.copy(result: result),
);
} else {
final error = "Data unmodified [${reference.statusCode}]";
controller.addError(
response.copy(snapshot: reference, error: error),
);
}
});
} else {
const error = "Unacceptable request!";
controller.addError(
response.copy(error: error),
);
}
} else {
const error = "Undefined request!";
controller.addError(
response.copy(error: error),
);
}
} catch (_) {
controller.addError(_);
}
controller.stream;
}