stash_dio 5.1.0 copy "stash_dio: ^5.1.0" to clipboard
stash_dio: ^5.1.0 copied to clipboard

Dio extension for the stash API. Provides an interceptor that uses stash as a caching layer for Dio

stash_dio #

A stash Dio extension

Pub Package Coverage Status Package Documentation GitHub License

Overview #

This integration of stash with dio provides a caching interceptor that is able to return the response from a Cache instead of hitting the backend system.

Getting Started #

Add this to your pubspec.yaml (or create it) replacing x.x.x with the latest version of stash_dio:

dependencies:
    stash_dio: ^x.x.x

Run the following command to install dependencies:

dart pub get

Finally, to start developing import the library:

import 'package:stash/stash_api.dart';
import 'package:stash_dio/stash_dio.dart';

Usage #

import 'package:dio/dio.dart';
import 'package:stash/stash_api.dart';
import 'package:stash_dio/stash_dio.dart';
import 'package:stash_memory/stash_memory.dart';

class Task {
  final int id;
  final String title;
  final bool completed;

  Task({required this.id, required this.title, this.completed = false});

  /// Creates a [Task] from json map
  factory Task.fromJson(Map<String, dynamic> json) => Task(
      id: json['id'] as int,
      title: json['title'] as String,
      completed: json['completed'] as bool);

  /// Creates a json map from a [Task]
  Map<String, dynamic> toJson() =>
      <String, dynamic>{'id': id, 'title': title, 'completed': completed};

  @override
  String toString() {
    return 'Task $id: "$title" is ${completed ? "completed" : "not completed"}';
  }
}

void main() async {
  // Creates a store
  final store = await newMemoryCacheStore();
  // Creates a cache
  final cache = wait store.cache(eventListenerMode: EventListenerMode.synchronous)
    ..on<CacheEntryCreatedEvent>().listen(
        (event) => print('Key "${event.entry.key}" added to the cache'));

  // Configures a a dio client
  final dio = Dio(BaseOptions(baseUrl: 'https://jsonplaceholder.typicode.com'))
    ..interceptors.addAll([
      cache.interceptor('/todos/1'),
      LogInterceptor(
          requestHeader: false,
          requestBody: false,
          responseHeader: false,
          responseBody: false)
    ]);

  // First call, executes the request and response is received
  final task1 = await dio
      .get('/todos/1')
      .then((Response<dynamic> response) => Task.fromJson(response.data));
  print(task1);

  // Second call, executes the request and the response is received from the
  // cache
  final task2 = await dio
      .get('/todos/1')
      .then((Response<dynamic> response) => Task.fromJson(response.data));
  print(task2);
}

Features and Bugs #

Please file feature requests and bugs at the issue tracker.

License #

This project is licensed under the MIT License - see the LICENSE file for details

7
likes
140
pub points
55%
popularity

Publisher

verified publisherivoleitao.dev

Dio extension for the stash API. Provides an interceptor that uses stash as a caching layer for Dio

Repository (GitHub)
View/report issues
Contributing

Documentation

API reference

License

MIT (LICENSE)

Dependencies

crypto, dio, equatable, http_parser, stash

More

Packages that depend on stash_dio