A Stash Dio extension
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.
Add this to your pubspec.yaml
(or create it):
dependencies:
stash_dio: ^1.0.4
Run the following command to install dependencies:
pub install
Optionally use the following command to run the tests:
pub run test
Finally, to start developing import the library:
import 'package:stash_dio/stash_dio.dart';
import 'package:dio/dio.dart';
import 'package:stash_dio/dio_stash.dart';
class Task {
final int id;
final String title;
final bool completed;
Task({this.id, 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 {
// Configures a a dio client
final dio = Dio(BaseOptions(baseUrl: 'https://jsonplaceholder.typicode.com'))
..interceptors.addAll([
newMemoryCacheInterceptor('/todos/1', 'task'),
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);
}
It is developed by best effort, in the motto of "Scratch your own itch!", meaning APIs that are meaningful for the author use cases.
If you would like to contribute with other parts of the API, feel free to make a Github pull request as I'm always looking for contributions for:
- Tests
- Documentation
- New APIs
Please file feature requests and bugs at the issue tracker.
This project is licensed under the MIT License - see the LICENSE file for details