Viewing version 1.0.2. Open the latest package page.
universal_io
1.0.2Cross-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: ^1.0.2
The may also consider chrome_os_io (if you use Chrome OS) and nodejs_io (if you use Node.JS).
main.dart
import 'package:universal_io/io.dart';
Future<void> main() async {
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.
CORS in browsers
If you do cross-origin requests in browsers, you may want to use CORS credentials mode.
You can control credentials mode with the following technique:
final client = HttpClient();
final request = client.openUrl(Url.parse('https://example/path'));
if (request is BrowserHttpClientRequest) {
request.credentialsMode = BrowserHttpClientCredentialsMode.include;
}
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
URL: http://destination.com/path/example
Origin: http://source.com
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
Streaming responses
The underlying XHR supports streaming only for text responses. You can enable streaming by changing response type:
Future<void> main() async {
// ...
// Change response type
if (request is BrowserHttpClientRequest) {
request.responseType = BrowserHttpClientResponseType.text;
}
// Stream chunks
final response = await request.close();
response.listen((chunk) {
// ...
});
}
Platform
The implementation supports APIs such as:
Platform.isWindowsPlatform.operatingSystemPlatform.locale
Changelog
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.ir
flutter pub add 'universal_io:1.0.2'pubspec.yaml
name: universal_io
version: 1.0.2
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.10.0 <3.0.0'
dependencies:
crypto: ^2.1.5
meta: ^1.1.0
zone_local: '>=0.1.0 <=0.3.0'
dev_dependencies:
async: ^2.4.0
pedantic: ^1.9.0
stream_channel: ^2.0.0
test: ^1.8.0Version history
| Version | Published | Archive | SHA-256 |
|---|---|---|---|
| 0.0.1 | Cached · Upstream SHA-256 matched | Download | a8aa4b4f…6f259b |
| 0.1.0 | Cached · Upstream SHA-256 matched | Download | adeca974…128b76 |
| 0.1.1 | Cached · Upstream SHA-256 matched | Download | b4d0cce4…efe2b0 |
| 0.2.0 | Cached · Upstream SHA-256 matched | Download | debb79ed…36d4ee |
| 0.3.0 | Cached · Upstream SHA-256 matched | Download | 0b8f764b…a054e5 |
| 0.4.0 | Cached · Upstream SHA-256 matched | Download | 7f879f79…0ee63f |
| 0.5.0 | Cached · Upstream SHA-256 matched | Download | a185c8ca…f5f7c2 |
| 0.5.1 | Cached · Upstream SHA-256 matched | Download | 47881238…a13ab3 |
| 0.6.0 | Cached · Upstream SHA-256 matched | Download | 0465c285…30fb21 |
| 0.7.0 | Cached · Upstream SHA-256 matched | Download | 0b6ff36a…c988ef |
| 0.7.1 | Cached · Upstream SHA-256 matched | Download | 3fd33123…e947d1 |
| 0.7.2 | Cached · Upstream SHA-256 matched | Download | ab916807…e30f36 |
| 0.7.3 | Cached · Upstream SHA-256 matched | Download | 9918c2ae…d6e492 |
| 0.8.0 | Cached · Upstream SHA-256 matched | Download | 9e971384…0ffa98 |
| 0.8.1 | Cached · Upstream SHA-256 matched | Download | 39dd369c…e29abc |
| 0.8.2 | Cached · Upstream SHA-256 matched | Download | 873f9c3e…b5629f |
| 0.8.3 | Cached · Upstream SHA-256 matched | Download | 0da20598…979fb2 |
| 0.8.4 | Cached · Upstream SHA-256 matched | Download | b1c84301…3b7ec0 |
| 0.8.5 | Cached · Upstream SHA-256 matched | Download | 50a660f9…874883 |
| 0.8.6 | Cached · Upstream SHA-256 matched | Download | e700bb7c…986502 |
| 1.0.0 | Cached · Upstream SHA-256 matched | Download | 5da439c3…bddf21 |
| 1.0.1 | Cached · Upstream SHA-256 matched | Download | 2c0fa418…f6cb08 |
| 1.0.2 | Cached · Upstream SHA-256 matched | Download | 22c5875f…f9e8db |
| 2.0.0-nullsafety.0 | Cached · Upstream SHA-256 matched | Download | 2fe15fca…c8acd3 |
| 2.0.0-nullsafety.1 | Cached · Upstream SHA-256 matched | Download | 2c94fd97…a42cfa |
| 2.0.0-nullsafety.2 | Cached · Upstream SHA-256 matched | Download | ad7e7015…8099d1 |
| 2.0.0 | Cached · Upstream SHA-256 matched | Download | 6ba43dc8…75397e |
| 2.0.1 | Cached · Upstream SHA-256 matched | Download | ffb7b33e…21e456 |
| 2.0.2 | Cached · Upstream SHA-256 matched | Download | 02437682…2d832b |
| 2.0.3 | Cached · Upstream SHA-256 matched | Download | ee2ecc7c…bc6f23 |
| 2.0.4 | Cached · Upstream SHA-256 matched | Download | 79f78dda…f03cef |
| 2.0.5 | Cached · Upstream SHA-256 matched | Download | 2730b3fc…680b85 |
| 2.1.0 | Cached · Upstream SHA-256 matched | Download | 070d8fcc…745007 |
| 2.2.0 | Cached · Upstream SHA-256 matched | Download | 06866290…48005d |
| 2.2.1 | Cached · Upstream SHA-256 matched | Download | 302df7ff…d51401 |
| 2.2.2 | Cached · Upstream SHA-256 matched | Download | 1722b2dc…ba9aad |
| 2.2.3 | Cached · Upstream SHA-256 matched | Download | ba9dde5f…2edf04 |
| 2.3.0 | Cached · Upstream SHA-256 matched | Download | 6780711d…79530a |
| 2.3.1 | Cached · Upstream SHA-256 matched | Download | f63cbc48…9301e2 |
Dependencies
crypto "^2.1.5"
meta "^1.1.0"
zone_local "\u003e=0.1.0 \u003c=0.3.0"