├── .github
├── FUNDING.yml
├── ISSUE_TEMPLATE
│ ├── bug.yml
│ ├── config.yaml
│ ├── feature.yml
│ └── infra.yml
├── PULL_REQUEST_TEMPLATE.md
├── dependabot.yaml
└── workflows
│ ├── check_issues_access.yml
│ ├── coverage_base.yml
│ ├── coverage_comment.yml
│ ├── publish.yml
│ └── tests.yml
├── .gitignore
├── .idea
└── modules.xml
├── CODEOWNERS
├── CODE_OF_CONDUCT.md
├── COMPATIBILITY_POLICY.md
├── CONTRIBUTING-ZH.md
├── CONTRIBUTING.md
├── LICENSE
├── README-ZH.md
├── README.md
├── SECURITY.md
├── analysis_options.yaml
├── dio
├── .gitignore
├── CHANGELOG.md
├── LICENSE
├── README-ZH.md
├── README.md
├── analysis_options.yaml
├── dart_test.yaml
├── dartdoc_options.yaml
├── dio.iml
├── doc
│ ├── migration_guide.md
│ └── plugins.md
├── example
│ └── dio.dart
├── lib
│ ├── browser.dart
│ ├── dio.dart
│ ├── fix_data
│ │ └── fix.yaml
│ ├── io.dart
│ └── src
│ │ ├── adapter.dart
│ │ ├── adapters
│ │ ├── browser_adapter.dart
│ │ └── io_adapter.dart
│ │ ├── cancel_token.dart
│ │ ├── compute
│ │ ├── compute.dart
│ │ ├── compute_io.dart
│ │ └── compute_web.dart
│ │ ├── dio.dart
│ │ ├── dio
│ │ ├── dio_for_browser.dart
│ │ └── dio_for_native.dart
│ │ ├── dio_exception.dart
│ │ ├── dio_mixin.dart
│ │ ├── form_data.dart
│ │ ├── headers.dart
│ │ ├── interceptor.dart
│ │ ├── interceptors
│ │ ├── imply_content_type.dart
│ │ └── log.dart
│ │ ├── multipart_file.dart
│ │ ├── multipart_file
│ │ ├── browser_multipart_file.dart
│ │ └── io_multipart_file.dart
│ │ ├── options.dart
│ │ ├── parameter.dart
│ │ ├── progress_stream
│ │ ├── browser_progress_stream.dart
│ │ └── io_progress_stream.dart
│ │ ├── redirect_record.dart
│ │ ├── response.dart
│ │ ├── response
│ │ └── response_stream_handler.dart
│ │ ├── transformer.dart
│ │ ├── transformers
│ │ ├── background_transformer.dart
│ │ ├── fused_transformer.dart
│ │ ├── sync_transformer.dart
│ │ └── util
│ │ │ ├── consolidate_bytes.dart
│ │ │ └── transform_empty_to_null.dart
│ │ └── utils.dart
├── pubspec.yaml
└── test
│ ├── adapters_test.dart
│ ├── cancel_token_test.dart
│ ├── dio_mixin_test.dart
│ ├── encoding_test.dart
│ ├── exception_test.dart
│ ├── formdata_test.dart
│ ├── headers_test.dart
│ ├── interceptor_test.dart
│ ├── mimetype_test.dart
│ ├── mock
│ ├── _formdata
│ ├── _testfile
│ ├── adapters.dart
│ ├── http_mock.dart
│ ├── http_mock.mocks.dart
│ └── test.jpg
│ ├── multipart_file_test.dart
│ ├── options_test.dart
│ ├── parameter_test.dart
│ ├── pinning_test.dart
│ ├── response
│ └── response_stream_test.dart
│ ├── stacktrace_test.dart
│ ├── test_suite_test.dart
│ ├── timeout_test.dart
│ ├── transformer_test.dart
│ └── utils.dart
├── dio_test
├── LICENSE
├── README.md
├── analysis_options.yaml
├── dio_test.iml
├── lib
│ ├── src
│ │ ├── httpbun.dart
│ │ ├── matcher.dart
│ │ ├── test
│ │ │ ├── basic_tests.dart
│ │ │ ├── cancellation_tests.dart
│ │ │ ├── cors_tests.dart
│ │ │ ├── download_tests.dart
│ │ │ ├── headers_tests.dart
│ │ │ ├── http_method_tests.dart
│ │ │ ├── parameter_tests.dart
│ │ │ ├── redirect_tests.dart
│ │ │ ├── status_code_tests.dart
│ │ │ ├── suite.dart
│ │ │ ├── timeout_tests.dart
│ │ │ ├── upload_tests.dart
│ │ │ └── url_encoded_tests.dart
│ │ └── utils.dart
│ ├── tests.dart
│ └── util.dart
└── pubspec.yaml
├── dio_workspace.iml
├── example_dart
├── .gitignore
├── analysis_options.yaml
├── dart_test.yaml
├── dio_example.iml
├── lib
│ ├── adapter.dart
│ ├── bee.mp4
│ ├── cancel_request.dart
│ ├── certificate_pinning.dart
│ ├── cookie_mgr.dart
│ ├── custom_cache_interceptor.dart
│ ├── dio.dart
│ ├── download.dart
│ ├── download_with_trunks.dart
│ ├── extend_dio.dart
│ ├── formdata.dart
│ ├── generic.dart
│ ├── http2_adapter.dart
│ ├── options.dart
│ ├── post_stream_and_bytes.dart
│ ├── proxy.dart
│ ├── queue_interceptors.dart
│ ├── queued_interceptor_crsftoken.dart
│ ├── request_interceptors.dart
│ ├── response_interceptor.dart
│ ├── test.dart
│ ├── transformer.dart
│ ├── upload.txt
│ └── xx.png
└── pubspec.yaml
├── example_flutter_app
├── .gitignore
├── .metadata
├── README.md
├── analysis_options.yaml
├── android
│ ├── .gitignore
│ ├── app
│ │ ├── build.gradle
│ │ └── src
│ │ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── kotlin
│ │ │ └── cn
│ │ │ │ └── flutter
│ │ │ │ └── dio_flutter_example
│ │ │ │ └── MainActivity.kt
│ │ │ └── res
│ │ │ ├── drawable-v21
│ │ │ └── launch_background.xml
│ │ │ ├── drawable
│ │ │ └── launch_background.xml
│ │ │ ├── mipmap-hdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-mdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── values-night
│ │ │ └── styles.xml
│ │ │ └── values
│ │ │ └── styles.xml
│ ├── build.gradle
│ ├── dio_flutter_example_android.iml
│ ├── gradle.properties
│ ├── gradle
│ │ └── wrapper
│ │ │ └── gradle-wrapper.properties
│ └── settings.gradle
├── dio_flutter_example.iml
├── example_flutter_app.iml
├── ios
│ ├── .gitignore
│ ├── Flutter
│ │ ├── AppFrameworkInfo.plist
│ │ ├── Debug.xcconfig
│ │ └── Release.xcconfig
│ ├── Runner.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── WorkspaceSettings.xcsettings
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ └── Runner.xcscheme
│ ├── Runner.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ ├── Runner
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── Icon-App-1024x1024@1x.png
│ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ └── Icon-App-83.5x83.5@2x.png
│ │ │ └── LaunchImage.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── LaunchImage.png
│ │ │ │ ├── LaunchImage@2x.png
│ │ │ │ ├── LaunchImage@3x.png
│ │ │ │ └── README.md
│ │ ├── Base.lproj
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Info.plist
│ │ └── Runner-Bridging-Header.h
│ └── RunnerTests
│ │ └── RunnerTests.swift
├── lib
│ ├── http.dart
│ ├── main.dart
│ └── routes
│ │ └── request.dart
├── linux
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter
│ │ ├── CMakeLists.txt
│ │ ├── generated_plugin_registrant.cc
│ │ ├── generated_plugin_registrant.h
│ │ └── generated_plugins.cmake
│ └── runner
│ │ ├── CMakeLists.txt
│ │ ├── main.cc
│ │ ├── my_application.cc
│ │ └── my_application.h
├── macos
│ ├── .gitignore
│ ├── Flutter
│ │ ├── Flutter-Debug.xcconfig
│ │ ├── Flutter-Release.xcconfig
│ │ └── GeneratedPluginRegistrant.swift
│ ├── Runner.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ └── Runner.xcscheme
│ ├── Runner.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ ├── Runner
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ └── AppIcon.appiconset
│ │ │ │ ├── Contents.json
│ │ │ │ ├── app_icon_1024.png
│ │ │ │ ├── app_icon_128.png
│ │ │ │ ├── app_icon_16.png
│ │ │ │ ├── app_icon_256.png
│ │ │ │ ├── app_icon_32.png
│ │ │ │ ├── app_icon_512.png
│ │ │ │ └── app_icon_64.png
│ │ ├── Base.lproj
│ │ │ └── MainMenu.xib
│ │ ├── Configs
│ │ │ ├── AppInfo.xcconfig
│ │ │ ├── Debug.xcconfig
│ │ │ ├── Release.xcconfig
│ │ │ └── Warnings.xcconfig
│ │ ├── DebugProfile.entitlements
│ │ ├── Info.plist
│ │ ├── MainFlutterWindow.swift
│ │ └── Release.entitlements
│ └── RunnerTests
│ │ └── RunnerTests.swift
├── pubspec.yaml
├── web
│ ├── favicon.png
│ ├── icons
│ │ ├── Icon-192.png
│ │ ├── Icon-512.png
│ │ ├── Icon-maskable-192.png
│ │ └── Icon-maskable-512.png
│ ├── index.html
│ └── manifest.json
└── windows
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter
│ ├── CMakeLists.txt
│ ├── generated_plugin_registrant.cc
│ ├── generated_plugin_registrant.h
│ └── generated_plugins.cmake
│ └── runner
│ ├── CMakeLists.txt
│ ├── Runner.rc
│ ├── flutter_window.cpp
│ ├── flutter_window.h
│ ├── main.cpp
│ ├── resource.h
│ ├── resources
│ └── app_icon.ico
│ ├── runner.exe.manifest
│ ├── utils.cpp
│ ├── utils.h
│ ├── win32_window.cpp
│ └── win32_window.h
├── melos.yaml
├── plugins
├── compatibility_layer
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── dart_test.yaml
│ ├── dio_compatibility_layer.iml
│ ├── example
│ │ └── conversion_layer_example.dart
│ ├── lib
│ │ ├── dio_compatibility_layer.dart
│ │ └── src
│ │ │ └── conversion_layer_adapter.dart
│ ├── pubspec.yaml
│ └── test
│ │ ├── client_mock.dart
│ │ └── conversion_layer_adapter_test.dart
├── cookie_manager
│ ├── .gitignore
│ ├── .metadata
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── dart_test.yaml
│ ├── dio_cookie_manager.iml
│ ├── example
│ │ └── example.dart
│ ├── lib
│ │ ├── dio_cookie_manager.dart
│ │ └── src
│ │ │ └── cookie_mgr.dart
│ ├── pubspec.yaml
│ └── test
│ │ ├── basic_test.dart
│ │ ├── cookies_persistance_test.dart
│ │ └── cookies_test.dart
├── http2_adapter
│ ├── .gitignore
│ ├── .metadata
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── dart_test.yaml
│ ├── dio_http2_adapter.iml
│ ├── doc
│ │ └── migration_guide.md
│ ├── example
│ │ └── example.dart
│ ├── lib
│ │ ├── dio_http2_adapter.dart
│ │ └── src
│ │ │ ├── client_setting.dart
│ │ │ ├── connection_manager.dart
│ │ │ ├── connection_manager_imp.dart
│ │ │ └── http2_adapter.dart
│ ├── pubspec.yaml
│ └── test
│ │ ├── http2_test.dart
│ │ ├── pinning_test.dart
│ │ ├── redirect_test.dart
│ │ └── test_suite_test.dart
├── native_dio_adapter
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── example
│ │ ├── .gitignore
│ │ ├── analysis_options.yaml
│ │ ├── android
│ │ │ ├── .gitignore
│ │ │ ├── app
│ │ │ │ ├── build.gradle
│ │ │ │ └── src
│ │ │ │ │ ├── debug
│ │ │ │ │ └── AndroidManifest.xml
│ │ │ │ │ ├── main
│ │ │ │ │ ├── AndroidManifest.xml
│ │ │ │ │ ├── kotlin
│ │ │ │ │ │ └── com
│ │ │ │ │ │ │ └── example
│ │ │ │ │ │ │ └── example
│ │ │ │ │ │ │ └── MainActivity.kt
│ │ │ │ │ └── res
│ │ │ │ │ │ ├── drawable-v21
│ │ │ │ │ │ └── launch_background.xml
│ │ │ │ │ │ ├── drawable
│ │ │ │ │ │ └── launch_background.xml
│ │ │ │ │ │ ├── mipmap-hdpi
│ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ ├── mipmap-mdpi
│ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ ├── mipmap-xhdpi
│ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ │ │ └── ic_launcher.png
│ │ │ │ │ │ ├── values-night
│ │ │ │ │ │ └── styles.xml
│ │ │ │ │ │ └── values
│ │ │ │ │ │ └── styles.xml
│ │ │ │ │ └── profile
│ │ │ │ │ └── AndroidManifest.xml
│ │ │ ├── build.gradle
│ │ │ ├── gradle.properties
│ │ │ ├── gradle
│ │ │ │ └── wrapper
│ │ │ │ │ └── gradle-wrapper.properties
│ │ │ └── settings.gradle
│ │ ├── ios
│ │ │ ├── .gitignore
│ │ │ ├── Flutter
│ │ │ │ ├── AppFrameworkInfo.plist
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ └── Release.xcconfig
│ │ │ ├── Podfile
│ │ │ ├── Podfile.lock
│ │ │ ├── Runner.xcodeproj
│ │ │ │ ├── project.pbxproj
│ │ │ │ ├── project.xcworkspace
│ │ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ │ └── xcshareddata
│ │ │ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ │ └── xcshareddata
│ │ │ │ │ └── xcschemes
│ │ │ │ │ └── Runner.xcscheme
│ │ │ ├── Runner.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ │ └── WorkspaceSettings.xcsettings
│ │ │ └── Runner
│ │ │ │ ├── AppDelegate.swift
│ │ │ │ ├── Assets.xcassets
│ │ │ │ ├── AppIcon.appiconset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── Icon-App-1024x1024@1x.png
│ │ │ │ │ ├── Icon-App-20x20@1x.png
│ │ │ │ │ ├── Icon-App-20x20@2x.png
│ │ │ │ │ ├── Icon-App-20x20@3x.png
│ │ │ │ │ ├── Icon-App-29x29@1x.png
│ │ │ │ │ ├── Icon-App-29x29@2x.png
│ │ │ │ │ ├── Icon-App-29x29@3x.png
│ │ │ │ │ ├── Icon-App-40x40@1x.png
│ │ │ │ │ ├── Icon-App-40x40@2x.png
│ │ │ │ │ ├── Icon-App-40x40@3x.png
│ │ │ │ │ ├── Icon-App-60x60@2x.png
│ │ │ │ │ ├── Icon-App-60x60@3x.png
│ │ │ │ │ ├── Icon-App-76x76@1x.png
│ │ │ │ │ ├── Icon-App-76x76@2x.png
│ │ │ │ │ └── Icon-App-83.5x83.5@2x.png
│ │ │ │ └── LaunchImage.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── LaunchImage.png
│ │ │ │ │ ├── LaunchImage@2x.png
│ │ │ │ │ ├── LaunchImage@3x.png
│ │ │ │ │ └── README.md
│ │ │ │ ├── Base.lproj
│ │ │ │ ├── LaunchScreen.storyboard
│ │ │ │ └── Main.storyboard
│ │ │ │ ├── Info.plist
│ │ │ │ └── Runner-Bridging-Header.h
│ │ ├── lib
│ │ │ └── main.dart
│ │ ├── linux
│ │ │ ├── .gitignore
│ │ │ ├── CMakeLists.txt
│ │ │ ├── flutter
│ │ │ │ ├── CMakeLists.txt
│ │ │ │ ├── generated_plugin_registrant.cc
│ │ │ │ ├── generated_plugin_registrant.h
│ │ │ │ └── generated_plugins.cmake
│ │ │ ├── main.cc
│ │ │ ├── my_application.cc
│ │ │ └── my_application.h
│ │ ├── macos
│ │ │ ├── .gitignore
│ │ │ ├── Flutter
│ │ │ │ ├── Flutter-Debug.xcconfig
│ │ │ │ ├── Flutter-Release.xcconfig
│ │ │ │ └── GeneratedPluginRegistrant.swift
│ │ │ ├── Podfile
│ │ │ ├── Runner.xcodeproj
│ │ │ │ ├── project.pbxproj
│ │ │ │ ├── project.xcworkspace
│ │ │ │ │ └── xcshareddata
│ │ │ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ │ └── xcshareddata
│ │ │ │ │ └── xcschemes
│ │ │ │ │ └── Runner.xcscheme
│ │ │ ├── Runner.xcworkspace
│ │ │ │ ├── contents.xcworkspacedata
│ │ │ │ └── xcshareddata
│ │ │ │ │ └── IDEWorkspaceChecks.plist
│ │ │ └── Runner
│ │ │ │ ├── AppDelegate.swift
│ │ │ │ ├── Assets.xcassets
│ │ │ │ └── AppIcon.appiconset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ ├── app_icon_1024.png
│ │ │ │ │ ├── app_icon_128.png
│ │ │ │ │ ├── app_icon_16.png
│ │ │ │ │ ├── app_icon_256.png
│ │ │ │ │ ├── app_icon_32.png
│ │ │ │ │ ├── app_icon_512.png
│ │ │ │ │ └── app_icon_64.png
│ │ │ │ ├── Base.lproj
│ │ │ │ └── MainMenu.xib
│ │ │ │ ├── Configs
│ │ │ │ ├── AppInfo.xcconfig
│ │ │ │ ├── Debug.xcconfig
│ │ │ │ ├── Release.xcconfig
│ │ │ │ └── Warnings.xcconfig
│ │ │ │ ├── DebugProfile.entitlements
│ │ │ │ ├── Info.plist
│ │ │ │ ├── MainFlutterWindow.swift
│ │ │ │ └── Release.entitlements
│ │ ├── pubspec.yaml
│ │ ├── web
│ │ │ ├── favicon.png
│ │ │ ├── icons
│ │ │ │ ├── Icon-192.png
│ │ │ │ ├── Icon-512.png
│ │ │ │ ├── Icon-maskable-192.png
│ │ │ │ └── Icon-maskable-512.png
│ │ │ ├── index.html
│ │ │ └── manifest.json
│ │ └── windows
│ │ │ ├── .gitignore
│ │ │ ├── CMakeLists.txt
│ │ │ ├── flutter
│ │ │ ├── CMakeLists.txt
│ │ │ ├── generated_plugin_registrant.cc
│ │ │ ├── generated_plugin_registrant.h
│ │ │ └── generated_plugins.cmake
│ │ │ └── runner
│ │ │ ├── CMakeLists.txt
│ │ │ ├── Runner.rc
│ │ │ ├── flutter_window.cpp
│ │ │ ├── flutter_window.h
│ │ │ ├── main.cpp
│ │ │ ├── resource.h
│ │ │ ├── resources
│ │ │ └── app_icon.ico
│ │ │ ├── runner.exe.manifest
│ │ │ ├── utils.cpp
│ │ │ ├── utils.h
│ │ │ ├── win32_window.cpp
│ │ │ └── win32_window.h
│ ├── lib
│ │ ├── fix_data
│ │ │ └── fix.yaml
│ │ ├── native_dio_adapter.dart
│ │ └── src
│ │ │ ├── conversion_layer_adapter.dart
│ │ │ ├── cronet_adapter.dart
│ │ │ ├── cupertino_adapter.dart
│ │ │ └── native_adapter.dart
│ ├── native_dio_adapter.iml
│ ├── pubspec.yaml
│ └── test
│ │ ├── client_mock.dart
│ │ └── conversion_layer_adapter_test.dart
└── web_adapter
│ ├── .gitignore
│ ├── CHANGELOG.md
│ ├── LICENSE
│ ├── README.md
│ ├── analysis_options.yaml
│ ├── dart_test.yaml
│ ├── dio_web_adapter.iml
│ ├── example
│ └── main.dart
│ ├── lib
│ ├── dio_web_adapter.dart
│ └── src
│ │ ├── adapter.dart
│ │ ├── adapter_impl.dart
│ │ ├── compute.dart
│ │ ├── compute_impl.dart
│ │ ├── dio_impl.dart
│ │ ├── multipart_file.dart
│ │ ├── multipart_file_impl.dart
│ │ ├── progress_stream.dart
│ │ └── progress_stream_impl.dart
│ ├── pubspec.yaml
│ └── test
│ └── browser_test.dart
├── pubspec.yaml
└── scripts
├── melos_packages.dart
└── prepare_pinning_certs.sh
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | github: [AlexV525, kuhnroyal]
2 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yaml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: true
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature.yml:
--------------------------------------------------------------------------------
1 | name: 💡 Feature Request
2 | description: Tell us about a problem dio could solve but doesn't.
3 | labels: ["s: feature"]
4 | body:
5 | - type: textarea
6 | id: problem
7 | attributes:
8 | label: Request Statement
9 | description: What problem could dio solve that it doesn't?
10 | validations:
11 | required: true
12 | - type: textarea
13 | id: expected
14 | attributes:
15 | label: Solution Brainstorm
16 | description: We know you have bright ideas to share ... share away, friend.
17 | validations:
18 | required: false
19 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/infra.yml:
--------------------------------------------------------------------------------
1 | name: 👷 Infra
2 | description: Something is wrong with the CI setup or could be improved
3 | labels: ["infra"]
4 | body:
5 | - type: textarea
6 | id: problem
7 | attributes:
8 | label: Request Statement
9 | validations:
10 | required: true
11 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ### New Pull Request Checklist
4 |
5 | - [ ] I have read the [Documentation](https://pub.dev/documentation/dio/latest/)
6 | - [ ] I have searched for a similar pull request in the [project](https://github.com/cfug/dio/pulls) and found none
7 | - [ ] I have updated this branch with the latest `main` branch to avoid conflicts (via merge from master or rebase)
8 | - [ ] I have added the required tests to prove the fix/feature I'm adding
9 | - [ ] I have updated the documentation (if necessary)
10 | - [ ] I have run the tests without failures
11 | - [ ] I have updated the `CHANGELOG.md` in the corresponding package
12 |
13 | ### Additional context and info (if any)
14 |
15 |
16 |
--------------------------------------------------------------------------------
/.github/dependabot.yaml:
--------------------------------------------------------------------------------
1 | version: 2
2 | updates:
3 | - package-ecosystem: "github-actions"
4 | directory: "/"
5 | schedule:
6 | interval: "weekly"
7 | labels:
8 | - "infra"
9 | - "github-actions"
10 |
--------------------------------------------------------------------------------
/.github/workflows/coverage_comment.yml:
--------------------------------------------------------------------------------
1 | name: 'coverage_comment'
2 |
3 | # This workflow runs after the 'Verify packages abilities' workflow is completed for a pull request.
4 | # The workflow downloads the coverage report if the 'Verify packages abilities' workflow was successful.
5 | # The workflow then adds a comment to the PR with the coverage report.
6 |
7 | on:
8 | workflow_run:
9 | workflows: ['Verify packages abilities']
10 | types:
11 | - completed
12 |
13 | jobs:
14 | download_coverage:
15 | runs-on: ubuntu-latest
16 | if: github.event.workflow_run.event == 'pull_request'
17 | steps:
18 | - name: Download artifact
19 | id: download-artifact
20 | uses: dawidd6/action-download-artifact@v9
21 | with:
22 | workflow: tests.yml
23 | workflow_conclusion: success
24 | run_id: ${{ github.event.workflow_run.id }}
25 | name: code-coverage-results
26 | - name: Determine PR number
27 | id: pr-number
28 | run: |
29 | PR_NUMBER=$(cat pr_number.txt)
30 | echo "Found PR:$PR_NUMBER"
31 | echo "value=$PR_NUMBER" >> $GITHUB_OUTPUT
32 | - name: Add PR comment
33 | uses: marocchino/sticky-pull-request-comment@v2
34 | with:
35 | number: ${{ steps.pr-number.outputs.value }}
36 | recreate: true
37 | path: code-coverage-results.md
38 |
--------------------------------------------------------------------------------
/.github/workflows/publish.yml:
--------------------------------------------------------------------------------
1 | name: Publish from comments
2 |
3 | on:
4 | issue_comment:
5 | types: [created]
6 |
7 | jobs:
8 | publish:
9 | # https://github.com/cfug/dio/issues/1633
10 | if: github.event.issue.number == 1633
11 | runs-on: ubuntu-latest
12 | steps:
13 | - uses: actions/checkout@v4
14 | with:
15 | token: ${{ secrets.CFUG_PUBLISHER }}
16 | - uses: dart-lang/setup-dart@v1.4
17 | - uses: cfug/dio_issue_release_action@v2
18 | with:
19 | github-token: ${{ secrets.CFUG_PUBLISHER }}
20 | pub-credentials-json: ${{ secrets.CREDENTIAL_JSON }}
21 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Files and directories created by pub
2 | .packages
3 | .dart_tool/
4 | .pub/
5 | .example/flutter.png
6 | build/
7 | # Remove the following pattern if you wish to check in your lock file
8 | pubspec.lock
9 | pubspec_overrides.yaml
10 |
11 | # Directory created by dartdoc
12 | doc/api/
13 | .cookies/
14 |
15 | .vscode/
16 |
17 | # Miscellaneous
18 | .DS_Store
19 |
20 | # IDEA configurations
21 | /.idea/*
22 | !/.idea/dio.iml
23 | !/.idea/modules.xml
24 |
25 | # Coverage
26 | coverage
27 |
28 | # Melos
29 | **/.melos_package
30 | .melos_packages
31 | melos_overrides.yaml
32 |
33 | # FVM Version Cache
34 | .fvm/
35 | .fvmrc
36 |
--------------------------------------------------------------------------------
/CODEOWNERS:
--------------------------------------------------------------------------------
1 | * @cfug/dio-core
2 |
--------------------------------------------------------------------------------
/COMPATIBILITY_POLICY.md:
--------------------------------------------------------------------------------
1 | # Compatibility Policy
2 |
3 | As an open-source project, all activities happened when the maintainers have spare time and energy.
4 | The support range is limited due to the above condition.
5 | Therefore, we have a general compatibility policy to help people
6 | that are not actively adapting SDK updates or intended to use any old SDKs to acknowledge the support range.
7 |
8 | ## Policy Details
9 |
10 | For all packages, the oldest Dart SDK we typically support
11 | is one that was **released less than 2 years ago**.
12 |
13 | ### Exceptions
14 |
15 | - The minimum SDK version will follow the dependencies' requirement.
16 | For example: `http2: ^2.1.0` requires Dart SDK >=3.0.0.
17 | - The implementation can no longer compatible between the latest and previous SDKs.
18 | - Previous SDKs have security issues that require to use a new version.
19 |
20 | To raise your suggestions and reports, use the issue tracker
21 | or contact cfug-team@googlegroups.com if you want to do this privately.
22 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Wen Du (wendux)
4 | Copyright (c) 2022 The CFUG Team
5 |
6 | Permission is hereby granted, free of charge, to any person obtaining a copy
7 | of this software and associated documentation files (the "Software"), to deal
8 | in the Software without restriction, including without limitation the rights
9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | copies of the Software, and to permit persons to whom the Software is
11 | furnished to do so, subject to the following conditions:
12 |
13 | The above copyright notice and this permission notice shall be included in all
14 | copies or substantial portions of the Software.
15 |
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 | SOFTWARE.
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 | # Security Policy
2 |
3 | ## Supported Versions
4 |
5 | | Version | Supported |
6 | |---------|-----------|
7 | | >=5.0 | ✅ |
8 | | < 5.0 | ❌ |
9 |
10 | ## Reporting a Vulnerability
11 |
12 | Contact cfug-team@googlegroups.com with your vulnerability report.
13 |
--------------------------------------------------------------------------------
/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | include: package:lints/recommended.yaml
2 |
3 | analyzer:
4 | errors:
5 | always_declare_return_types: error
6 | always_put_control_body_on_new_line: error
7 | avoid_renaming_method_parameters: error
8 | avoid_void_async: error
9 | camel_case_types: error
10 | constant_identifier_names: error
11 | deprecated_member_use_from_same_package: ignore
12 | non_constant_identifier_names: error
13 | prefer_single_quotes: error
14 | require_trailing_commas: error
15 | todo: ignore
16 |
17 | linter:
18 | rules:
19 | always_declare_return_types: true
20 | always_put_control_body_on_new_line: true
21 | avoid_renaming_method_parameters: true
22 | avoid_unnecessary_containers: true
23 | avoid_void_async: true
24 | curly_braces_in_flow_control_structures: true
25 | directives_ordering: true
26 | library_annotations: false
27 | prefer_const_constructors: true
28 | prefer_const_constructors_in_immutables: false
29 | prefer_final_fields: true
30 | prefer_final_in_for_each: true
31 | prefer_final_locals: true
32 | prefer_relative_imports: true
33 | prefer_single_quotes: true
34 | require_trailing_commas: true
35 | sort_constructors_first: true
36 | sort_unnamed_constructors_first: true
37 | unnecessary_await_in_return: true
38 | unnecessary_breaks: true
39 | unnecessary_late: true
40 | unnecessary_library_name: false
41 | unnecessary_parenthesis: true
42 |
--------------------------------------------------------------------------------
/dio/.gitignore:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | *.class
3 | *.log
4 | *.pyc
5 | *.swp
6 | .DS_Store
7 | .atom/
8 | .buildlog/
9 | .history
10 | .svn/
11 |
12 | # IntelliJ related
13 | *.ipr
14 | *.iws
15 | .idea/
16 |
17 | # The .vscode folder contains launch configuration and tasks you configure in
18 | # VS Code which you may wish to be included in version control, so this line
19 | # is commented out by default.
20 | #.vscode/
21 |
22 | # Flutter/Dart/Pub related
23 | **/doc/api/
24 | .dart_tool/
25 | .flutter-plugins
26 | .packages
27 | .pub-cache/
28 | .pub/
29 | build/
30 |
31 | # Exceptions to above rules.
32 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
33 |
34 | # Project related.
35 | test/*_pinning.txt
36 |
37 | coverage
38 |
--------------------------------------------------------------------------------
/dio/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Wen Du (wendux)
4 | Copyright (c) 2022 The CFUG Team
5 |
6 | Permission is hereby granted, free of charge, to any person obtaining a copy
7 | of this software and associated documentation files (the "Software"), to deal
8 | in the Software without restriction, including without limitation the rights
9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | copies of the Software, and to permit persons to whom the Software is
11 | furnished to do so, subject to the following conditions:
12 |
13 | The above copyright notice and this permission notice shall be included in all
14 | copies or substantial portions of the Software.
15 |
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 | SOFTWARE.
--------------------------------------------------------------------------------
/dio/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | include: ../analysis_options.yaml
2 |
--------------------------------------------------------------------------------
/dio/dart_test.yaml:
--------------------------------------------------------------------------------
1 | file_reporters:
2 | json: build/reports/test-results.json
3 |
4 | presets:
5 | # empty placeholders required in CI scripts
6 | all:
7 | default:
8 | min:
9 | stable:
10 | beta:
11 |
12 | tags:
13 | tls:
14 | skip: "Skipping TLS test with specific setup requirements by default. Use '-P all' to run all tests."
15 | presets:
16 | all:
17 | skip: false
18 | default:
19 | skip: true
20 | gc: # We have that tag, but we are not skipping in any preset.
21 |
22 | override_platforms:
23 | chrome:
24 | settings:
25 | headless: true
26 | firefox:
27 | settings:
28 | # headless argument has to be set explicitly for non-chrome browsers
29 | arguments: --headless
30 | executable:
31 | # https://github.com/dart-lang/test/pull/2195
32 | mac_os: '/Applications/Firefox.app/Contents/MacOS/firefox'
33 |
--------------------------------------------------------------------------------
/dio/dartdoc_options.yaml:
--------------------------------------------------------------------------------
1 | dartdoc:
2 | showUndocumentedCategories: true
3 | categories:
4 | "Migration Guide":
5 | markdown: doc/migration_guide.md
6 | "Plugins":
7 | markdown: doc/plugins.md
8 |
--------------------------------------------------------------------------------
/dio/dio.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/dio/example/dio.dart:
--------------------------------------------------------------------------------
1 | import 'package:dio/dio.dart';
2 |
3 | /// More examples see https://github.com/cfug/dio/tree/main/dio#examples
4 | void main() async {
5 | final dio = Dio();
6 | final response = await dio.get('https://pub.dev');
7 | print(response.data);
8 | }
9 |
--------------------------------------------------------------------------------
/dio/lib/browser.dart:
--------------------------------------------------------------------------------
1 | export 'src/adapters/browser_adapter.dart' show BrowserHttpClientAdapter;
2 | export 'src/dio/dio_for_browser.dart' show DioForBrowser;
3 |
--------------------------------------------------------------------------------
/dio/lib/dio.dart:
--------------------------------------------------------------------------------
1 | /// A powerful HTTP client for Dart and Flutter, which supports global settings,
2 | /// [Interceptors], [FormData], aborting and canceling a request,
3 | /// files uploading and downloading, requests timeout, custom adapters, etc.
4 | /// {@category Migration Guide}
5 | /// {@category Plugins}
6 | library dio;
7 |
8 | export 'src/adapter.dart';
9 | export 'src/cancel_token.dart';
10 | export 'src/dio.dart';
11 | export 'src/dio_exception.dart';
12 | export 'src/dio_mixin.dart' hide InterceptorState, InterceptorResultType;
13 | export 'src/form_data.dart';
14 | export 'src/headers.dart';
15 | export 'src/interceptors/log.dart';
16 | export 'src/multipart_file.dart';
17 | export 'src/options.dart';
18 | export 'src/parameter.dart';
19 | export 'src/redirect_record.dart';
20 | export 'src/response.dart';
21 | export 'src/transformer.dart';
22 |
--------------------------------------------------------------------------------
/dio/lib/io.dart:
--------------------------------------------------------------------------------
1 | export 'src/adapters/io_adapter.dart' hide createAdapter;
2 | export 'src/dio/dio_for_native.dart' show DioForNative;
3 |
--------------------------------------------------------------------------------
/dio/lib/src/adapters/browser_adapter.dart:
--------------------------------------------------------------------------------
1 | export 'package:dio_web_adapter/dio_web_adapter.dart'
2 | show createAdapter, BrowserHttpClientAdapter;
3 |
--------------------------------------------------------------------------------
/dio/lib/src/compute/compute_web.dart:
--------------------------------------------------------------------------------
1 | export 'package:dio_web_adapter/dio_web_adapter.dart' show compute;
2 |
--------------------------------------------------------------------------------
/dio/lib/src/dio/dio_for_browser.dart:
--------------------------------------------------------------------------------
1 | export 'package:dio_web_adapter/dio_web_adapter.dart'
2 | show createDio, DioForBrowser;
3 |
--------------------------------------------------------------------------------
/dio/lib/src/interceptors/imply_content_type.dart:
--------------------------------------------------------------------------------
1 | import '../dio_mixin.dart';
2 | import '../form_data.dart';
3 | import '../headers.dart';
4 | import '../options.dart';
5 | import '../utils.dart';
6 |
7 | /// {@template dio.interceptors.ImplyContentTypeInterceptor}
8 | /// The default `content-type` for requests will be implied by the
9 | /// [ImplyContentTypeInterceptor] according to the type of the request payload.
10 | /// The interceptor can be removed by
11 | /// [Interceptors.removeImplyContentTypeInterceptor].
12 | /// {@endtemplate}
13 | class ImplyContentTypeInterceptor extends Interceptor {
14 | const ImplyContentTypeInterceptor();
15 |
16 | @override
17 | void onRequest(
18 | RequestOptions options,
19 | RequestInterceptorHandler handler,
20 | ) {
21 | final Object? data = options.data;
22 | if (data != null && options.contentType == null) {
23 | final String? contentType;
24 | if (data is FormData) {
25 | contentType = Headers.multipartFormDataContentType;
26 | } else if (data is List