Sdk

Quickstart

Minimal setup and first calls (search, mutate, actions).

Quickstart

1) Configure Dio + SDK client

import 'package:dio/dio.dart';
import 'package:laravel_rest_api_flutter/laravel_rest_api_flutter.dart';

final dio = Dio(
  BaseOptions(
    baseUrl: 'https://api.example.com',
    headers: {
      'Accept': 'application/json',
      'Authorization': 'Bearer YOUR_TOKEN',
    },
  ),
);

final client = ApiHttpClient(dio: dio);

2) Create a repository

class ItemsRepository
    with
        SearchFactory<Map<String, dynamic>>,
        DeleteFactory<Map<String, dynamic>>,
        MutateFactory,
        ActionsFactory {
  final RestApiClient client;

  ItemsRepository(this.client);

  @override
  String get baseRoute => '/items';

  @override
  RestApiClient get httpClient => client;

  @override
  Map<String, dynamic> fromJson(Map<String, dynamic> json) => json;

  @override
  void onCatchError(
    RestApiResponse? response,
    Object exception,
    StackTrace stacktrace,
  ) {}
}

3) Call endpoints

final repo = ItemsRepository(client);

final res = await repo.search(
  text: TextSearch(value: 'hammer'),
  page: 1,
  limit: 10,
  sorts: [Sort(field: 'created_at', direction: 'desc')],
);

print(res.data); // List<Map<String, dynamic>>

Mutate

final res = await repo.mutate(
  body: LaravelRestApiMutateBody(
    mutate: [
      Mutation(
        operation: MutationOperation.create,
        attributes: {'name': 'New item'},
      ),
    ],
  ),
);

print(res.data?.created);

Actions

final res = await repo.actions(
  actionUriKey: 'publish',
  data: LaravelRestApiActionsBody(
    fields: [
      Action(name: 'published_at', value: DateTime.now().toIso8601String()),
    ],
  ),
);

print(res.data); // impacted count