findOne method

  1. @protected
  2. @visibleForTesting
Future<T?> findOne(
  1. dynamic model, {
  2. bool? remote,
  3. Map<String, dynamic>? params,
  4. Map<String, String>? headers,
  5. OnData<T?>? onSuccess,
  6. OnDataError<T?>? onError,
})
inherited

Implementation

@protected
@visibleForTesting
Future<T?> findOne(
  final dynamic model, {
  bool? remote,
  Map<String, dynamic>? params,
  Map<String, String>? headers,
  OnData<T?>? onSuccess,
  OnDataError<T?>? onError,
}) async {
  _assertInit();
  if (model == null) {
    throw AssertionError('Model must be not null');
  }
  remote ??= _remote;

  params = await defaultParams & params;
  headers = await defaultHeaders & headers;

  final id = _resolveId(model);

  if (!shouldLoadRemoteOne(id, remote, params, headers)) {
    final key = graph.getKeyForId(internalType, id,
        keyIfAbsent: model is T ? model._key : null);
    if (key == null) {
      return null;
    }
    final newModel = localAdapter.findOne(key);
    newModel?._initialize(adapters, save: true);
    return newModel;
  }

  return await sendRequest(
    baseUrl.asUri / urlForFindOne(id, params) & params,
    method: methodForFindOne(id, params),
    headers: headers,
    requestType: DataRequestType.findOne,
    key: StringUtils.typify(internalType, id),
    onSuccess: (data) {
      final model = data != null
          ? deserialize(data as Map<String, dynamic>).model
          : null;
      return onSuccess?.call(model) ?? model;
    },
    onError: onError,
  );
}