1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/trevor-retrofit.dart

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Получение исходного HTTP-ответа

Future<String> postUrlEncodedFormData(@Field() String hello);

Получение задачи по идентификатору

  Future<HttpResponse<Task>> getTask(@Path('id') String id);

  Future<HttpResponse<List<Task>>> getTasks();

HTTP-заголовок

  • Добавление HTTP-заголовка из параметра метода:
  Future<Task> getTasks(@Header('Content-Type') String contentType);
  • Статические HTTP-заголовки:
import 'package:dio/dio.dart' hide Headers;

// ...

@GET('/tasks')
@Headers(<String, dynamic>{
    'Content-Type': 'application/json',
    'Custom-Header': 'Your header',
})
Future<Task> getTasks();

Обработка ошибок

Для перехвата исключений и неудачных ответов следует использовать catchError(Object). Детальную информацию об ответе можно получить через DioError.response.

client.getTask('2').then((it) {
  logger.i(it);
}).catchError((obj) {
    // ошибка не 200 идёт сюда.
    switch (obj.runtimeType) {
        case DioException:
            // пример получения кода ошибки и сообщения о неудачном ответе
            final res = (obj as DioException).response;
            logger.e('Got error : ${res.statusCode} -> ${res.statusMessage}');
            break;
        default:
            break;
    }
});

Относительный baseUrl API

Если вы хотите использовать относительное значение baseUrl в аннотации RestApi класса RestClient, вам необходимо указать baseUrl в dio.options.baseUrl.

@RestApi(baseUrl: '/tasks')
abstract class RestClient {
  factory RestClient(Dio dio, {String? baseUrl}) = _RestClient;

  @GET('{id}')
  Future<HttpResponse<Task>> getTask(@Path('id') String id);

  @GET('')
  Future<HttpResponse<List<Task>>> getTasks();
}

dio.options.baseUrl = 'https://5d42a6e2bc64f90014a56ca0.mockapi.io/api/v1';
final client = RestClient(dio);

Поддержка нескольких конечных точек

Если вы хотите использовать несколько конечных точек для вашего RestClient, вы должны передать свой базовый URL при инициализации RestClient. Любое значение, определённое в RestApi, будет проигнорировано.

@RestApi(baseUrl: 'этот URL будет игнорироваться, если baseUrl передан')
abstract class RestClient {
  factory RestClient(Dio dio, {String? baseUrl}) = _RestClient;
}

final client = RestClient(dio, baseUrl: 'ваш базовый URL');

Если вы хотите использовать базовый URL из dio.option.baseUrl, который имеет самый низкий приоритет, пожалуйста, не передавайте никаких параметров в аннотацию RestApi и метод структуры RestClient.

Многопоточность (только Flutter)

Если вы хотите анализировать модели в отдельном потоке, вы можете воспользоваться функцией compute, как это делает Dio при преобразовании строковых данных ответов в объекты json.

Для каждой модели, которую вы используете, вам нужно определить две функции верхнего уровня:

FutureOr<Task> deserializeTask(Map<String, dynamic> json);
FutureOr<dynamic> serializeTask(Task object);

Если вы хотите обрабатывать списки объектов, либо как возвращаемые типы, либо параметры, вы должны предоставить аналоги списков:

FutureOr<List<Task>> deserializeTaskList(Map<String, dynamic> json);
FutureOr<dynamic> serializeTaskList(List<Task> objects);

Наконец, убедитесь, что вы установили @RestApi для использования парсера Parser.FlutterCompute:

@RestApi(parser: Parser.FlutterCompute)

Например:

@RestApi(
  baseUrl: 'https://5d42a6e2bc64f90014a56ca0.mockapi.io/api/v1/',
  parser: Parser.FlutterCompute,
)
abstract class RestClient {
  factory RestClient(Dio dio, {String? baseUrl}) = _RestClient;

  @GET('/task')
  Future<Task> getTask();

  @GET('/tasks')
  Future<List<Task>> getTasks();

  @POST('/task')
  Future<void> updateTasks(Task task);

  @POST('/tasks')
  Future<void> updateTasks(List<Task> tasks);
}

Task deserializeTask(Map<String, dynamic> json) => Task.fromJson(json);

List<Task> deserializeTaskList(List<Map<String, dynamic>> json) =>
    json.map((e) => Task.fromJson(e)).toList();

Map<String, dynamic> serializeTask(Task

В запросе представлен текст на языке Dart.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

retrofit.dart — это генератор клиента dio, использующий source_gen и вдохновлённый Chopper и Retrofit. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/trevor-retrofit.dart.git
git@api.gitlife.ru:oschina-mirror/trevor-retrofit.dart.git
oschina-mirror
trevor-retrofit.dart
trevor-retrofit.dart
master