flutter_annotation_http
Annotation-based Http library.
Example
- Import
import 'dart:convert';
import 'package:flutter_annotation_http/flutter_annotation_http.dart';
import 'package:http/http.dart' as http;
- Basic
@Endpoint(
baseUrl: 'https://jsonplaceholder.typicode.com',
parameters: {'x-app-platform': 'ios'},
headers: {'x-lang-platform': 'Dart'},
)
abstract class JsonPlaceholderApi {
factory JsonPlaceholderApi() => _$JsonPlaceholderApiImpl();
@GET('/todos')
Future<List<TodoModel>> getTodos({String? title});
@POST('/todos')
Future<TodoModel> createTodo(AddTodo data);
}
- Custom Headers
@PATCH('/todos/{id}', headers: {'x-user-tag': '1'})
Future<TodoModel> patchTodo(String title);
@PATCH('/todos/{id}')
Future<TodoModel> patchTodo(@RequestHeader(name: 'x-user-type') String type);
- Path Variable
@GET('/todos/{id}')
Future<TodoModel> getTodo(@PathVariable() String id);
- Custom encode
@JsonObject()
class AddTodo {
final String title;
final String body;
final int userId;
AddTodo({required this.title, required this.body, required this.userId});
Map<String, dynamic> toJson() => _$AddTodoToJson(this);
}
@PUT('/todos/{id}', consume: RequestMapping.jsonHeader)
Future<TodoModel> updateTodo(@RequestBody(_todoToJson) AddTodo data);
Map _todoToJson(AddTodo todo) => todo.toJson();
- Upload file
@Multipart('/upload', timeout: 60 * 1000)
Future<void> upload(String from,
@FilePart(filename: 'image', contentType: 'image/jpeg') String imagePath);
- Raw response
@DELETE('/todos/{id}')
Future<http.Response> deleteTodo(@PathVariable() int id);
@GET('/bytes/{n}', produce: RequestMapping.byteHeader)
Future<Uint8List> runBytes(@PathVariable() int n);
@GET('/json', produce: RequestMapping.jsonHeader)
Future<Map> getJson();
@GET('/robots.txt', produce: RequestMapping.textHeader)
Future<String> getRobotsTxt();
- Http chain
factory JsonPlaceholderApi([HttpChain? chain]) => _$JsonPlaceholderApiImpl(chain);
- Cancel request
@GET('/status')
Future<void> cancelRequest(CancelToken cancelToken);