request<T> method

Future<ApiResponse<T>> request<T>(
  1. String methodName,
  2. Map<String, Object> params
)

Позволяет создавать запросы к Апи Вк В T указываем возвращаемый тип результата выполнения запроса.

Implementation

Future<ApiResponse<T>> request<T>(
  String methodName,
  Map<String, Object> params,
) async {
  final langConclusion = switch (params['lang']) {
    LangApi() => (params['lang']! as LangApi).index,
    int() || String() => params['lang']!,
    _ => _language.index
  };

  params.remove('lang');

  final requestOptions = {
    'access_token': _token,
    'lang': langConclusion,
    'v': _version,
    ...params,
  };

  // ignore: unnecessary_null_checks
  final Response(:data!) = await _dio.post<Map<String, dynamic>>(
    _baseUrl + methodName,
    data: requestOptions.entries.map((e) => '${e.key}=${e.value}').join('&'),
    options: Options(contentType: 'application/x-www-form-urlencoded'),
  );

  final error = (data['error'] as Map?)?.cast<String, dynamic>();
  final response = data['response'] as Object?;

  if (error != null) {
    throw ApiException.fromJson(error);
  }

  return ApiResponse<T>(
    data: response as T,
    requestOptions: requestOptions..remove('access_token'),
  );
}