Future<String> postUrlEncodedFormData(@Field() String hello);
Future<HttpResponse<Task>> getTask(@Path('id') String id);
Future<HttpResponse<List<Task>>> getTasks();
Future<Task> getTasks(@Header('Content-Type') String contentType);
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
в аннотации 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
.
Если вы хотите анализировать модели в отдельном потоке, вы можете воспользоваться функцией 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 )