{"id":19032757,"url":"https://github.com/joutvhu/dioxide","last_synced_at":"2026-03-09T10:02:04.081Z","repository":{"id":47788851,"uuid":"463222877","full_name":"joutvhu/dioxide","owner":"joutvhu","description":"Dioxide is a type conversion dio client generator.","archived":false,"fork":false,"pushed_at":"2025-02-22T14:34:47.000Z","size":94,"stargazers_count":4,"open_issues_count":2,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-11T16:21:13.631Z","etag":null,"topics":["build-runner","dart","dio","http","source-gen"],"latest_commit_sha":null,"homepage":"https://pub.dev/packages/dioxide","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/joutvhu.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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,"zenodo":null}},"created_at":"2022-02-24T16:37:25.000Z","updated_at":"2025-02-22T14:19:11.000Z","dependencies_parsed_at":"2025-04-17T14:16:01.660Z","dependency_job_id":"2b9d7348-0b73-4293-b262-dfce4d4d8d14","html_url":"https://github.com/joutvhu/dioxide","commit_stats":{"total_commits":20,"total_committers":3,"mean_commits":6.666666666666667,"dds":0.4,"last_synced_commit":"56fa2588cf8a83c2c3a62dbf48e026b391db5ff9"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/joutvhu/dioxide","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joutvhu%2Fdioxide","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joutvhu%2Fdioxide/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joutvhu%2Fdioxide/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joutvhu%2Fdioxide/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joutvhu","download_url":"https://codeload.github.com/joutvhu/dioxide/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joutvhu%2Fdioxide/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30290921,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-09T02:57:19.223Z","status":"ssl_error","status_checked_at":"2026-03-09T02:56:26.373Z","response_time":61,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["build-runner","dart","dio","http","source-gen"],"created_at":"2024-11-08T21:30:59.429Z","updated_at":"2026-03-09T10:02:04.064Z","avatar_url":"https://github.com/joutvhu.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Dioxide\n\nDioxide is a type conversion [dio](https://github.com/flutterchina/dio/) client generator.\n\n## Using\n\n### Add dependencies\n\n```yaml\ndependencies:\n  dioxide: ^lastVersion\n\ndev_dependencies:\n  build_runner: ^2.2.0\n  dioxide_generator: ^lastVersion\n```\n\n### Define and Generate your API\n\n```dart\nimport 'package:json_annotation/json_annotation.dart';\nimport 'package:dio/dio.dart';\nimport 'package:dioxide/dioxide.dart';\n\npart 'example.g.dart';\n\n@RestApi(baseUrl: \"http://localhost:8080/api/Task\")\nabstract class RestClient {\n  factory RestClient(Dio dio, {String baseUrl}) = _RestClient;\n\n  @GetRequest()\n  Future\u003cList\u003cTask\u003e\u003e getTasks();\n}\n\n@JsonSerializable()\nclass Task {\n  String? id;\n  String? name;\n  String? avatar;\n  String? createdAt;\n\n  Task({this.id, this.name, this.avatar, this.createdAt});\n\n  factory Task.fromJson(Map\u003cString, dynamic\u003e json) =\u003e _$TaskFromJson(json);\n\n  Map\u003cString, dynamic\u003e toJson() =\u003e _$TaskToJson(this);\n}\n```\n\nthen run the generator\n\n```shell\n# dart\npub run build_runner build\n\n# flutter\nflutter pub run build_runner build\n```\n\n## More\n\n### Type Conversion\n\n\u003e Before you use the type conversion, please make sure that a ` factory Task.fromJson(Map\u003cString, dynamic\u003e json)` must be provided for each model class. `json_serializable` is the recommanded to be used as the serialization tool.\n\n```dart\n@GetRequest(\"/tasks\") Future\u003cList\u003cTask\u003e\u003e getTasks();\n\n@JsonSerializable()\nclass Task {\n  String name;\n  Task({this.name});\n  factory Task.fromJson(Map\u003cString, dynamic\u003e json) =\u003e _$TaskFromJson(json);\n}\n```\n\n### HTTP Methods\n\nThe HTTP methods in the below sample are supported.\n\n```dart\n@GetRequest(\"/tasks/{id}\")\nFuture\u003cTask\u003e getTask(@Path(\"id\") String id);\n\n@GetRequest('/demo')\nFuture\u003cString\u003e queries(@Queries() Map\u003cString, dynamic\u003e queries);\n\n@GetRequest(\"/search\")\nFuture\u003cString\u003e namedExample(\n    @Query(\"name\") String name,\n    @Query(\"tag\") String tag,\n);\n\n@PatchRequest(\"/tasks/{id}\")\nFuture\u003cTask\u003e updateTaskPart(@Path() String id, @Body() Map\u003cString, dynamic\u003e map);\n\n@PutRequest(\"/tasks/{id}\")\nFuture\u003cTask\u003e updateTask(@Path() String id, @Body() Task task);\n\n@DeleteRequest(\"/tasks/{id}\")\nFuture\u003cvoid\u003e deleteTask(@Path() String id);\n\n@PostRequest(\"/tasks\")\nFuture\u003cTask\u003e createTask(@Body() Task task);\n\n@PostRequest(\"/post\")\nFuture\u003cvoid\u003e createNewTaskFromFile(@Part() File file);\n\n@PostRequest(\"/post\")\n@FormUrlEncoded()\nFuture\u003cString\u003e postUrlEncodedFormData(@Field() String hello);\n```\n\n### Get original HTTP response\n\n```dart\n@GetRequest(\"/tasks/{id}\")\nFuture\u003cHttpResponse\u003cTask\u003e\u003e getTask(@Path(\"id\") String id);\n\n@GetRequest(\"/tasks\")\nFuture\u003cHttpResponse\u003cList\u003cTask\u003e\u003e\u003e getTasks();\n```\n\n### Get dio Response\n\n```dart\n@GetRequest(\"/file/{fileId}\")\n@DioResponseType(ResponseType.stream)\nFuture\u003cResponse\u003cResponseBody\u003e\u003e getTask(@Path(\"fileId\") String id);\n```\n\n### HTTP Header\n\n* Add a HTTP header from the parameter of the method\n\n  ```dart\n  @GetRequest(\"/tasks\")\n  Future\u003cTask\u003e getTasks(@Header(\"Content-Type\") String contentType );\n  ```\n\n* Add static HTTP headers\n\n  ```dart\n  @GetRequest(\"/tasks\")\n  @Headers(\u003cString, dynamic\u003e{\n  \t\"Content-Type\" : \"application/json\",\n  \t\"Custom-Header\" : \"Your header\"\n  })\n  Future\u003cTask\u003e getTasks();\n  ```\n\n### Multiple endpoints support\n\nIf you want to use multiple endpoints to your `RestClient`, you should pass your base url when you initiate `RestClient`. Any value defined in `RestApi` will be ignored.\n\n```dart\n@RestApi(baseUrl: \"this url will be ignored if baseUrl is passed\")\nabstract class RestClient {\n  factory RestClient(Dio dio, {String baseUrl}) = _RestClient;\n}\n\nfinal client = RestClient(dio, baseUrl: \"your base url\");\n```\n\nIf you want to use the base url from `dio.option.baseUrl`, which has lowest priority, please don't pass any parameter to `RestApi` annotation and `RestClient`'s structure method. \n\n### Set request timeout\n\n```dart\n@RestApi(baseUrl: 'http://localhost:8080/api/Report')\n@RequestTimeout(connectTimeout: 5000, sendTimeout: 5000, receiveTimeout: 5000)\nabstract class ReportClient {\n  @GetRequest(\"/generate\")\n  @RequestTimeout(sendTimeout: 15000, receiveTimeout: 30000)\n  @DioResponseType(ResponseType.stream)\n  Future\u003cResponse\u003cResponseBody\u003e\u003e getTask(@Queries() Map\u003cString, dynamic\u003e queries);\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoutvhu%2Fdioxide","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoutvhu%2Fdioxide","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoutvhu%2Fdioxide/lists"}