{"id":16746549,"url":"https://github.com/valmnt/otter","last_synced_at":"2025-10-23T02:40:31.098Z","repository":{"id":231292707,"uuid":"780895028","full_name":"valmnt/otter","owner":"valmnt","description":"Flutter plugin designed to simplify the management of HTTP requests in offline mode. 🦦","archived":false,"fork":false,"pushed_at":"2024-04-10T22:02:11.000Z","size":851,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"develop","last_synced_at":"2024-11-22T00:28:44.959Z","etag":null,"topics":["dart","flutter","http","offline","online"],"latest_commit_sha":null,"homepage":"https://pub.dev/packages/otter","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/valmnt.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-04-02T11:12:50.000Z","updated_at":"2024-05-21T10:40:41.000Z","dependencies_parsed_at":"2024-10-13T02:06:41.472Z","dependency_job_id":"7c3e5588-eced-4abf-891d-f4028b01ec90","html_url":"https://github.com/valmnt/otter","commit_stats":null,"previous_names":["nexhubfr/flutter_offline_queue","nexhubfr/otter","valmnt/otter"],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valmnt%2Fotter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valmnt%2Fotter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valmnt%2Fotter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valmnt%2Fotter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/valmnt","download_url":"https://codeload.github.com/valmnt/otter/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":235134778,"owners_count":18941326,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dart","flutter","http","offline","online"],"created_at":"2024-10-13T02:06:52.303Z","updated_at":"2025-10-03T13:30:58.246Z","avatar_url":"https://github.com/valmnt.png","language":"Dart","readme":"# \u003cimg src=\"https://raw.githubusercontent.com/NexhubFR/otter/v1.0.0/resources/icon.jpg\" width=\"30\"\u003e Otter\n\n\u003cimg src=\"https://raw.githubusercontent.com/NexhubFR/otter/v1.0.0/resources/banner.jpg\"\u003e\n\n\u003e Flutter plugin designed to simplify the management of HTTP requests in offline mode :\n\u003e - Cache HTTP requests in the event of network unavailability.\n\u003e - Monitor network connectivity status continuously.\n\u003e - Process and dispatch cached HTTP requests upon restoration of network access.\n\n## Installation\n\n```yml\ndependencies:\n    otter: ^1.0.3\n```\n\n## Configuration\n\n\u003e Here's a simple configuration. \n\n*⚠️ Note that you can create your own OTTaskHandler and pass it as a parameter to the init() function. [Example](#custom-ottaskhandler)*\n\n```dart\nimport 'package:otter/handler/task_handler.dart';\nimport 'package:otter/database/database_provider.dart';\nimport 'package:otter/network/network_helper.dart';\n\nvoid main() async {\n  runApp(const App());\n  Otter.init(OTTaskHandler());\n}\n```\n\n## Using\n\n*⚠️ Note that you can create your own OTTask and pass it as a parameter to the addOneTask() or addMultipleTasks() functions. [Example](#custom-ottask)*\n\n### addOneTask\n\n#### GET\n\n```dart\nimport 'package:otter/network/http_method.dart';\nimport 'package:otter/database/database_store.dart';\nimport 'package:otter/model/task.dart';\n\nfinal store = OTDBStore();\nfinal task = OTTask(Uri.https('example.com', '/path/example'), HTTPMethod.get, {}, {});\n\nstore.addOneTask(\n    task,\n    didFail: (task, error, stackTrace) =\u003e {\n        // Handle error saving here\n    },\n    networkAvailable: () =\u003e {\n        // Perform HTTP request here, if network is available\n    },\n);\n```\n\n#### POST\n\n```dart\nimport 'package:otter/network/http_method.dart';\nimport 'package:otter/database/database_store.dart';\nimport 'package:otter/model/task.dart';\n\nfinal store = OTDBStore();\n\nfinal task = OTTask(Uri.https('example.com', '/path/example'),HTTPMethod.post, \n                {'Content-Type': 'application/json'}, {'key': 'value'});\n\nstore.addOneTask(\n    task,\n    didFail: (task, error, stackTrace) =\u003e {\n        // Handle error saving here\n    },\n    networkAvailable: () =\u003e {\n        // Perform HTTP request here, if network is available\n    },\n);\n```\n\n#### PATCH\n\n```dart\nimport 'package:otter/network/http_method.dart';\nimport 'package:otter/database/database_store.dart';\nimport 'package:otter/model/task.dart';\n\nfinal store = OTDBStore();\n\nfinal task = OTTask(Uri.https('example.com', '/path/example'), HTTPMethod.patch, \n                {'Content-Type': 'application/json'}, {'key': 'value'});\n\nstore.addOneTask(\n    task,\n    didFail: (task, error, stackTrace) =\u003e {\n        // Handle error saving here\n    },\n    networkAvailable: () =\u003e {\n        // Perform HTTP request here, if network is available\n    },\n);\n```\n\n#### PUT\n\n```dart\nimport 'package:otter/network/http_method.dart';\nimport 'package:otter/database/database_store.dart';\nimport 'package:otter/model/task.dart';\n\nfinal store = OTDBStore();\n\nfinal task = OTTask(Uri.https('example.com', '/path/example'), HTTPMethod.put, \n                {'Content-Type': 'application/json'}, {'key': 'value'});\n\nstore.addOneTask(\n    task,\n    didFail: (task, error, stackTrace) =\u003e {\n        // Handle error saving here\n    },\n    networkAvailable: () =\u003e {\n        // Perform HTTP request here, if network is available\n    },\n);\n```\n\n#### DELETE\n\n```dart\nimport 'package:otter/network/http_method.dart';\nimport 'package:otter/database/database_store.dart';\nimport 'package:otter/model/task.dart';\n\nfinal store = OTDBStore();\n\nfinal task = OTTask(Uri.https('example.com', '/path/example'), HTTPMethod.delete, {}, {});\n\nstore.addOneTask(\n    task,\n    didFail: (task, error, stackTrace) =\u003e {\n        // Handle error saving here\n    },\n    networkAvailable: () =\u003e {\n        // Perform HTTP request here, if network is available\n    },\n);\n```\n\n### addMultipleTasks\n\n```dart\nimport 'package:otter/network/http_method.dart';\nimport 'package:otter/database/database_store.dart';\nimport 'package:otter/model/task.dart';\n\nfinal store = OTDBStore();\n\nfinal getTask = OTTask(Uri.https('example.com', '/path/example'), HTTPMethod.get, {}, {});\nfinal postTask = OTTask(Uri.https('example.com', '/path/example'),HTTPMethod.post, \n                {'Content-Type': 'application/json'}, {'key': 'value'});\nfinal deleteTask = OTTask(Uri.https('example.com', '/path/example'), HTTPMethod.delete, {}, {});\n\nstore.addMultipleTasks(\n    [getTask, postTask, deleteTask],\n    didFail: (task, error, stackTrace) =\u003e {\n        // Handle error saving here\n    },\n    networkAvailable: () =\u003e {\n        // Perform HTTP request here, if network is available\n    },\n);\n```\n\n---\n\n### Custom OTTaskHandler\n\n\u003e TaskHandler is an important concept in Otter. \n\u003e It is in this class that the post-processing of HTTP requests is managed.\n\n```dart\nimport 'package:otter/handler/task_handler.dart';\nimport 'package:otter/model/task.dart';\n\nclass ExampleTaskHandler extends OTTaskHandler {\n  @override\n  void didFail(OTTask task, Object? error, StackTrace stackTrace) {\n    // Handle task failure\n  }\n\n  @override\n  Future\u003cvoid\u003e didFinish(OTTask task) async {\n    await super.didFinish(task);\n    // Complete processing of a given task\n  }\n\n  @override\n  void didSuccess(OTTask task, String response) {\n    // Handle the successful completion of a task\n  }\n}\n```\n\n### Custom OTTask\n\n\u003e Task is a representation of HTTP request\n\n```dart\nimport 'package:otter/model/task.dart';\n\nclass ExampleTask extends OTTask {\n  ExampleTask(super.uri, super.method, super.headers, super.body);\n}\n```\n\n---\n\n\u003e support@nexhub.fr","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvalmnt%2Fotter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvalmnt%2Fotter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvalmnt%2Fotter/lists"}