gets<R> method

  1. @override
Future<Response<T>> gets<R>({
  1. bool onlyUpdatedData = false,
  2. Map<String, dynamic>? extra,
  3. R? source(
    1. R parent
    )?,
})
override

Implementation

@override
Future<Response<T>> gets<R>({
  bool onlyUpdatedData = false,
  Map<String, dynamic>? extra,
  R? Function(R parent)? source,
}) async {
  final response = Response<T>();
  try {
    final value = await input(extra);
    if (value.isNotEmpty) {
      final url = currentSource(source);
      final reference = encryptor.type == ApiRequest.get
          ? await database.get(url, data: value)
          : await database.post(url, data: value);
      final code = reference.statusCode;
      if (code == 200 || code == encryptor.status.ok) {
        final data = await encryptor.output(reference.data);
        if (data is Map<String, dynamic> || data is List<dynamic>) {
          List<T> result = [];
          if (data is Map) {
            result = [build(data)];
          } else {
            result = data.map((item) {
              return build(item);
            }).toList();
          }
          return response.copy(result: result);
        } else {
          const error = "Data unmodified!";
          return response.copy(snapshot: data, error: error);
        }
      } else {
        final error = "Unacceptable response [${reference.statusCode}]";
        return response.copy(error: error);
      }
    } else {
      const error = "Unacceptable request!";
      return response.copy(error: error);
    }
  } catch (_) {
    return response.copy(error: _.toString());
  }
}