get<TModel extends RestModel> method
Future<List<TModel> >
get<TModel extends RestModel>({
- Query? query,
- ModelRepository<
RestModel> ? repository,
Query
's providerArgs
can extend the get functionality:
'request'
(RestRequest
) Specifies configurable information about the request like HTTP method or top level key (however, when defined,['request'].topLevelKey
is prioritized). Note that when no key is defined, the first value is returned regardless of the first key (in the example,{"id"...}
).
Implementation
@override
Future<List<TModel>> get<TModel extends RestModel>({query, repository}) async {
final adapter = modelDictionary.adapterFor[TModel]!;
final fromAdapter = adapter.restRequest != null ? adapter.restRequest!(query, null).get : null;
final request = (query?.providerArgs['request'] as RestRequest?) ?? fromAdapter;
final url = request?.url;
if (url == null) return <TModel>[];
final resp = await _brickRequestToHttpRequest(
request!,
QueryAction.get,
query: query,
);
if (statusCodeIsSuccessful(resp.statusCode)) {
final topLevelKey = request.topLevelKey;
final parsed = convertJsonFromGet(resp.body, topLevelKey);
final body = parsed is Iterable ? parsed : [parsed];
final results = body
.where((msg) => msg != null)
.map((msg) {
return adapter.fromRest(msg, provider: this, repository: repository);
})
.toList()
.cast<Future<TModel>>();
return await Future.wait<TModel>(results);
} else {
logger.warning('#get: url=$url statusCode=${resp.statusCode} body=${resp.body}');
throw RestException(resp);
}
}