pub repository
mirror.p-hatan.comuniversal_io
2.0.0-nullsafety.0Cross-platform 'dart:io' that works in all platforms (browsers, Flutter, and VM).
Readme
Overview
A cross-platform dart:io that works in all platforms (browsers, Flutter, and VM).
The API is exactly the same API as dart:io. You can simply replace dart:io imports with package:universal_io/io.dart.
Licensed under the Apache License 2.0. Much of the source code is derived from Dart SDK, which was obtained under the BSD-style license of Dart SDK. See LICENSE file for details.
Links
Similar packages
- universal_html (cross-platform dart:html)
Getting started
pubspec.yaml
dependencies:
universal_io: ^2.0.0
main.dart
import 'package:universal_io/io.dart';
Future<void> main() async {
// HttpClient works
final httpClient = HttpClient();
final request = await httpClient.getUrl(Uri.parse("http://google.com"));
final response = await request.close();
}
In some situations, Dart development tools (your IDE) may give warnings, but your application
will compile fine. You can try to eliminate warnings by importing
"package:universal_io/prefer_universal/io.dart" or "package:universal_io/prefer_sdk/io.dart"
Browser driver
HTTP client
HTTP client is implemented using XMLHttpRequest (XHR) (in dart:html, the class is HttpRequest).
XHR causes the following differences with dart:io:
- HTTP connection is created only after
request.close()has been called. - Same-origin policy limitations. For making cross-origin requests, see documentation below.
Cross-origin requests
If any cross-origin request fails, error message contains a detailed description how to fix possible issues like missing cross-origin headers. The error messages look like:
BrowserHttpClient received an error from XMLHttpRequest (which doesn't tell
reason for the error).
HTTP method: PUT
HTTP URL: http://destination.com/path/example
Origin: http://source.com
Cross-origin: true
Credentials mode: true
Cross-origin request!
CORS 'credentials mode' is disabled (the browser will not send cookies).
You can enable 'credentials mode' with:
if (httpRequest is BrowserHttpClientRequest) {
httpRequest.credentialsMode = BrowserHttpClientCredentialsMode.include;
}
Did the server send the following mandatory headers?
* Access-Control-Allow-Origin: http://source.com
* OR '*'
* Access-Control-Allow-Methods: PUT
Sometimes when you do cross-origin requests in browsers, you want to use CORS "credentials mode". This can be achieved with the following pattern:
Future<void> main() async {
final client = HttpClient();
final request = client.getUrl(Url.parse('http://host/path'));
if (request is BrowserHttpClientRequest) {
request.browserCredentialsMode = true;
}
final response = await request.close();
// ...
}
Streaming text responses
The underlying XMLHttpRequest (XHR) API supports response streaming only when responseType is "text". If HTTP request header "Accept" contains only text MIMEs ("text/plain", etc.), this package uses responseType "text".
You can manually set response type:
Future<void> main() async {
// ...
// Change response type
if (request is BrowserHttpClientRequest) {
request.browserResponseType = 'text';
}
// Stream chunks
final response = await request.close();
response.listen((chunk) {
// ...
});
}
Platform
The implementation supports APIs such as:
Platform.isWindowsPlatform.operatingSystemPlatform.locale
Changelog
2.0.0-nullsafety.0
- The first null-safe version.
- Makes changes in BrowserHttpClient / BrowserHttpClientRequest API:
- The property for enabling credentials mode is now
browserCredentialsMode. The default isfalse. - The property for setting response type is now
browserResponseType("arraybuffer", "text", etc.). By default, if HTTP request header "Accept" contains only text MIMEs ("text/plain", etc.), this package uses responseType "text". - HTTP client now has
onBrowserHttpClientRequestClosefor using your own logic for settingbrowserResponseType.
- The property for enabling credentials mode is now
- Removes IO adapter API.
1.0.2
- Fixes issue #11 (InternetAddress parameter).
- Fixes issue #12 (CORS credentials mode). Eliminates legacy, complicated behavior. Developers should choose either omit or include. Improves error messages and documentation related to it.
- Replaces MD5/SHA1 implementations used by some of the source code copied from dart:io. It now uses package:crypto instead of implementations copied from dart:io.
1.0.0
- Implements recent changes in 'dart:io' (Dart SDK 2.8).
- HttpDriver is replaced by 'dart:io' HttpOverrides.
- FileSystemDriver is replaced by 'dart:io' IOOverrides.
- Various other driver APIs are renamed or removed.
- BrowserLikeHttpClientRequest is now BrowserHttpClientRequest.
- BrowserHttpClientRequest implementation is improved.
0.8.6
- Fixed documentation and small fixes related to
nodejs_io.
0.8.5
- Raised minimum SDK to 2.6 and upgraded dependencies.
- Changed how CORS credentials mode is enabled. It was previously enabled with a header, but now we introduced subclasses for HttpClient and HttpClientRequest. This is a breaking change, but we decided not to bump the major version number.
- Improved analysis and test settings.
0.8.4
- Added 'prefer_sdk/io.dart' and 'prefer_universal/io.dart' libraries for dealing with conditional export issues.
- Library 'package:universal_io/io.dart' now exports SDK version by default.
0.8.3
- Replaced IP address parsing with the new Uri.parseIPv4Address / Uri.parseIPv6Address.
- Fixed missing HTTP status codes.
0.8.2
- Fixed problems introduced by Dart SDK 2.5.0-dev-2.0.
0.8.1
- Fixed pubspec.yaml and documented Dart SDK 2.5 breaking changes.
0.8.0
- Updated classes to Dart 2.5. See Dart SDK documentation about the changes.
- Various APIs now return
Uint8Listinstead ofList<int>. Examples:File,Socket,HttpClientResponse. - Various other breaking changes such as
Cookieconstructor.
- Various APIs now return
0.7.3
- Fixed the following error thrown by the Dart build system in some cases: "Unsupported conditional import of dart:io found in universal_io|lib/io.dart".
0.7.2
- Small fixes.
0.7.1
- Fixed various bugs.
- Improved the test suite.
0.7.0
- Improved driver base classes and the test suite.
0.6.0
- Major refactoring of IODriver API.
0.5.1
- Fixed small bugs.
0.5.0
- Fixed various bugs.
- Re-organized source code.
- Eliminated dependencies by doing IP parsing in this package.
- Improved the test suite for drivers.
Installing
export PUB_HOSTED_URL=https://pub.mirror.p-hatan.com
flutter pub add universal_iopubspec.yaml
name: universal_io
version: 2.0.0-nullsafety.0
description: Cross-platform 'dart:io' that works in all platforms (browsers, Flutter, and VM).
homepage: https://github.com/dart-io-packages/universal_io
environment:
sdk: '>=2.12.0-133.2 <3.0.0'
dependencies:
collection: ^1.15.0-nullsafety.4
crypto: ^3.0.0-nullsafety.0
meta: ^1.3.0-nullsafety.6
typed_data: ^1.3.0-nullsafety.5
zone_local: ^0.2.0-nullsafety.0
dev_dependencies:
async: ^2.5.0-nullsafety.3
pedantic: ^1.10.0-nullsafety.3
stream_channel: ^2.1.0-nullsafety.3
test: ^1.16.0-nullsafety.13
#dependency_overrides:
# crypto: ^3.0.0-nullsafety.0Version history
| Version | Published | Archive | SHA-256 |
|---|---|---|---|
| 0.0.1 | 2018-12-04T19:37:19.011323Z | Download | a8aa4b4fa0ed2e298ae4620f1a963b19ddd4cb7a385b65f02b79421d5c6f259b |
| 0.1.0 | 2019-02-18T13:57:26.157075Z | Download | adeca9748c95d713e9b244d5278c69155cac14e368e002dc5f01e2f421128b76 |
| 0.1.1 | 2019-02-18T21:46:46.616626Z | Download | b4d0cce4eaf430212064bb594e4213a4ead522acc5242b921d219c9efaefe2b0 |
| 0.2.0 | 2019-05-31T10:54:11.421350Z | Download | debb79ed9c47f7a90973d0aae77bcd01bd8e0e66156412324f37399f2336d4ee |
| 0.3.0 | 2019-05-31T13:27:13.026878Z | Download | 0b8f764b4e55e89c26c5de3665c15d7c30818ec14b6b37763cfd8ee298a054e5 |
| 0.4.0 | 2019-05-31T23:56:54.513127Z | Download | 7f879f7900304c5e9465d44f948538202d74179263adc6d7865e83cdd90ee63f |
| 0.5.0 | 2019-06-08T17:15:40.346705Z | Download | a185c8ca630a62f86e30565576457a96e22581d406c248c469ad95a6cdf5f7c2 |
| 0.5.1 | 2019-06-08T20:40:49.193850Z | Download | 47881238750e5a875236a7e39fd9043669442cc0858f0c05b90776a2c8a13ab3 |
| 0.6.0 | 2019-06-09T15:14:44.044116Z | Download | 0465c285afc06a6bae58204d3c5e4b970cb040108e777424b3bf2616be30fb21 |
| 0.7.0 | 2019-06-10T15:43:12.255070Z | Download | 0b6ff36a76b7e862284ba5ffc1fd189b47108e7561ccbf374f047e9b0fc988ef |
| 0.7.1 | 2019-06-11T12:49:21.293001Z | Download | 3fd33123521fdb09daa588bb86f18f164b9f49f3f37515ef05b665a2c3e947d1 |
| 0.7.2 | 2019-06-11T14:57:37.911870Z | Download | ab9168079199cd23c4b89e2fd77680d34ecab479f84561da16b09c9182e30f36 |
| 0.7.3 | 2019-07-08T22:24:43.021295Z | Download | 9918c2ae9eed388c2e0a97e25480a2a1e715de4ed6f24137f8c2b30433d6e492 |
| 0.8.0 | 2019-07-24T05:43:38.735341Z | Download | 9e971384b0d5dbf92e477b9f26bc474fe7e4ebd913bfa29473f6063a9b0ffa98 |
| 0.8.1 | 2019-07-24T17:05:10.369224Z | Download | 39dd369c4d8eba7d503d2c3856affc8308b0c43412f3fc84405da58ad9e29abc |
| 0.8.2 | 2019-09-07T18:05:10.328141Z | Download | 873f9c3e25e7248df42b483d890caa87a03722467161592bfa341543bdb5629f |
| 0.8.3 | 2019-09-08T19:32:12.653442Z | Download | 0da2059835e189a63058523e5055ecd659b17d187c1a5d23285709d963979fb2 |
| 0.8.4 | 2019-09-09T19:42:23.264520Z | Download | b1c843018cd4e21b8c551c991ca6ddab6c23538aaf377cd91fb3cee90a3b7ec0 |
| 0.8.5 | 2019-12-18T22:57:29.460913Z | Download | 50a660f95189e042ea5df3080302f6513a28139ba036ff92185d9705fa874883 |
| 0.8.6 | 2020-01-08T11:27:09.248339Z | Download | e700bb7cc12768429241339f16afbb155a3897846b16f11476c6c36431986502 |
| 1.0.0 | 2020-02-17T21:02:40.451806Z | Download | 5da439c3cee498d1facb919b4bf3c519155640ad17cf10d572f237df86bddf21 |
| 1.0.1 | 2020-02-24T10:57:05.544932Z | Download | 2c0fa418dfe4758c36171f228c68f80cbe624bc382872a907f6963618bf6cb08 |
| 1.0.2 | 2021-01-02T22:39:40.952162Z | Download | 22c5875f15a25dd8b916566757589dff6c44bd355dcfc0f2e376d9bab7f9e8db |
| 2.0.0-nullsafety.0 | 2021-01-11T00:50:59.258777Z | Download | 2fe15fcace7078c5a20ce680f748add1fdc3de2ec26f0799fd2f9632cac8acd3 |
| 2.0.0-nullsafety.1 | 2021-01-11T02:07:11.187443Z | Download | 2c94fd97e48e52902f875fb60cd4337c9e4abdd4ac15d72e79205e8bf8a42cfa |
| 2.0.0-nullsafety.2 | 2021-01-11T02:31:17.910536Z | Download | ad7e7015e83e6bbb5ec6fce16cea7f484a0d3751069fc0fb314829a4288099d1 |
| 2.0.0 | 2021-03-04T21:27:30.040176Z | Download | 6ba43dc871719171a77114b308729bb92e3d9bd259717fe3cf5e1b6cc175397e |
| 2.0.1 | 2021-03-15T02:08:40.354623Z | Download | ffb7b33ee95da5d5c6edc697d7c79f4ea72690b527b327fb79f48dea2921e456 |
| 2.0.2 | 2021-03-25T23:43:13.546427Z | Download | 024376826b2df3d68929afa5b4805678905ee29e8c6a9390d15655c9082d832b |
| 2.0.3 | 2021-03-26T00:36:10.989788Z | Download | ee2ecc7c9a9817588ccde39d91beb00c763d435735ba43dac2e252da98bc6f23 |
| 2.0.4 | 2021-04-02T20:15:10.594231Z | Download | 79f78ddad839ee3aae3ec7c01eb4575faf0d5c860f8e5223bc9f9c17f7f03cef |
| 2.0.5 | 2023-02-16T13:50:41.511328Z | Download | 2730b3fced23063ef4b4a12d0ff2a697d26dbf7dc83e36790a816abea0680b85 |
| 2.1.0 | 2023-02-16T15:27:45.904325Z | Download | 070d8fcc12d599497b635f82db6a07f0ba0b756d48126a826b50b0c558745007 |
| 2.2.0 | 2023-02-17T01:26:39.200947Z | Download | 06866290206d196064fd61df4c7aea1ffe9a4e7c4ccaa8fcded42dd41948005d |
| 2.2.1 | 2023-05-15T11:35:21.494470Z | Download | 302df7ff2b6a96960e9e447b42e1f238fa30525b92f7ddb47432f8406cd51401 |
| 2.2.2 | 2023-06-01T13:43:33.061309Z | Download | 1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad |
| 2.2.3 | 2025-11-15T22:37:58.300488Z | Download | ba9dde5f7c6d8ec7ed856bef0eb01c425881acae7748f77dac4d5cc46f2edf04 |
| 2.3.0 | 2025-11-16T15:29:41.473289Z | Download | 6780711d2a6de16fa28badff48ed8a0fc6b79a09384eda6eacd2e792fb79530a |
| 2.3.1 | 2025-11-16T19:32:10.094594Z | Download | f63cbc48103236abf48e345e07a03ce5757ea86285ed313a6a032596ed9301e2 |
Dependencies
collection "^1.15.0-nullsafety.4"
crypto "^3.0.0-nullsafety.0"
meta "^1.3.0-nullsafety.6"
typed_data "^1.3.0-nullsafety.5"
zone_local "^0.2.0-nullsafety.0"