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);