universal_io 0.8.6 universal_io: ^0.8.6 copied to clipboard
Cross-platform 'dart:io' that works in browsers, Flutter, and VM.
Introduction #
A cross-platform dart:io that works in browsers, Flutter, and VM.
License #
Licensed under the Apache License 2.0.
Much of the source code in this project is from Dart SDK (github.com/dart-lang/sdk/tree/master/sdk/lib/io), which was obtained under the BSD-style license of Dart SDK.
Issues #
- Found issues? Report them at the Github issue tracker.
- Have a fix? Create a pull request!
Similar packages #
- universal_html (cross-platform dart:html)
Getting started #
1.Add a dependency #
In pubspec.yaml
:
dependencies:
universal_io: ^0.8.5
2. Choose a driver (optional) #
VM/Flutter? #
- Library "package:universal_io/io.dart" will automatically export dart:io for you.
Browser? #
- BrowserIODriver is automatically used when you use Dart2js / devc. This is possible with "conditional imports" feature of Dart.
- The driver implements HttpClient (with restrictions) and a few other features. If you need features such as sockets or unrestricted HTTP connections, choose one of the options below.
Chrome OS App? #
3. Use #
import 'package:universal_io/prefer_universal/io.dart';
void main() async {
// Use 'dart:io' HttpClient API.
final httpClient = new 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' instead of the library above.
Manual #
Default driver behavior #
HTTP client #
In browser, HTTP client is implemented using dart:html HttpRequest, which uses XmlHttpRequest.
Unlike HTTP client in the standard dart:io, the browser implementation sends HTTP request only after httpRequest.close() has been called.
If a 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
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 BrowserLikeHttpRequest) {
httpRequest.useCorsCredentials = true;
}
Did the server send the following mandatory headers?
* Access-Control-Allow-Origin: http://source.com
* OR '*'
* Access-Control-Allow-Methods: PUT
HttpServer #
- Requires sockets.
Platform #
- In browser, variables are determined by browser APIs such as navigator.userAgent.
- Elsewhere (e.g. Node.JS), appears like Linux environment.
Files #
- Any attempt to use these APIs will throw UnimplementedError.
Sockets #
- Any attempt to use these APIs will throw UnimplementedError.
Writing your own driver? #
import 'package:universal_io/prefer_universal/io.dart';
import 'package:universal_io/driver.dart';
import 'package:universal_io/driver_base.dart';
void main() {
exampleIODriver.enable();
}
/// Let's change 'Platform' implementation (in browser).
final exampleIODriver = IODriver(
platformDriver: PlatformDriver(localeName:"en-US"),
).fillMissingFeaturesFrom(defaultIODriver);