universal_io 0.6.0 copy "universal_io: ^0.6.0" to clipboard
universal_io: ^0.6.0 copied to clipboard

outdated

Cross-platform 'dart:io' that works in VM/Flutter, browsers, and elsewhere.

Introduction #

A cross-platform dart:io that works in VM/Flutter, browsers, and elsewhere.

Licensed under the Apache License 2.0. Much of the source code was adopted from the original 'dart:io' in Dart SDK, which was licensed under a BSD-style license (license terms of Dart SDK can be found in the source code files that were derived from Dart SDK).

Issues #

Similar packages #

Getting started #

1.Add a dependency #

In pubspec.yaml:

dependencies:
  universal_io: '>=0.5.1 <2.0.0'

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? #

Node.JS? Google Cloud Functions? #

GRPC messaging? #

3. Use #

import 'package:universal_io/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();
}

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 (cookies will NOT be supported).

If the URL is correct and the server actually responded, did the response
include the following required CORS headers?
  * Access-Control-Allow-Origin: http://source.com
    * Wildcard '*' is also acceptable.
  * Access-Control-Allow-Methods: PUT

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.

Socket classes and HttpServer #

  • Any attempt to use these APIs will throw UnimplementedError.

Writing your own driver? #

import 'package:universal_io/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"),
).fillMissingFieldsFrom(defaultIODriver);
209
likes
0
pub points
99%
popularity

Publisher

verified publisherdint.dev

Cross-platform 'dart:io' that works in VM/Flutter, browsers, and elsewhere.

Repository (GitHub)
View/report issues

License

unknown (LICENSE)

Dependencies

meta, zone_local

More

Packages that depend on universal_io