Viewing version 0.8.2. Open the latest package page.

universal_io

0.8.2

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

Download archive

Readme

Pub Package Build Status

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.

Dart SDK 2.5 breaking changes

  • Dart SDK 2.5 (currently in the Dart SDK 'dev' channel) has various breaking changes in dart:io. Consequently this package has breaking changes too.
  • If you don't use the 2.5.0-dev-2.0 or later, see dependency constraint recommendations below.

Issues

Similar packages

Getting started

1.Add a dependency

Dart SDK 2.5.0-dev-2.0 and above

In pubspec.yaml:

dependencies:
  universal_io: '^0.8.2'

Dart SDK 2.4.x

In pubspec.yaml:

dependencies:
  universal_io: '>=0.7.3 <0.8.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?

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 (the browser will not send authentication like cookies).
You can enable 'credentials' mode with: request.headers.set('Authorization', "someValue")

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/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);
Changelog

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 Uint8List instead of List<int>. Examples: File, Socket, HttpClientResponse.
    • Various other breaking changes such as Cookie constructor.

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:0.8.2'
pubspec.yaml
name: universal_io
version: 0.8.2
description:
  Cross-platform 'dart:io' that works in browsers, Flutter, and VM.
homepage: https://github.com/terrier989/dart-universal_io
author: terrier989 <terrier989@gmail.com>

environment:
  # This package is not actually 2.4.x compatible!
  #
  # Unfortunately, if we use 2.5.0-dev-2.1, pub.dev/packages/universal_io would show big red
  # warnings to potential users of this package.
  sdk: '>=2.4.0 <3.0.0'

dependencies:
  meta: ^1.1.7
  zone_local: '>=0.1.1 <2.0.0'

dev_dependencies:
  async: ^2.3.0
  pedantic: ^1.8.0
  stream_channel: ^2.0.0
  test: ^1.6.5

Version history

VersionPublishedArchiveSHA-256
0.0.1Cached · Upstream SHA-256 matchedDownloada8aa4b4f…6f259b
0.1.0Cached · Upstream SHA-256 matchedDownloadadeca974…128b76
0.1.1Cached · Upstream SHA-256 matchedDownloadb4d0cce4…efe2b0
0.2.0Cached · Upstream SHA-256 matchedDownloaddebb79ed…36d4ee
0.3.0Cached · Upstream SHA-256 matchedDownload0b8f764b…a054e5
0.4.0Cached · Upstream SHA-256 matchedDownload7f879f79…0ee63f
0.5.0Cached · Upstream SHA-256 matchedDownloada185c8ca…f5f7c2
0.5.1Cached · Upstream SHA-256 matchedDownload47881238…a13ab3
0.6.0Cached · Upstream SHA-256 matchedDownload0465c285…30fb21
0.7.0Cached · Upstream SHA-256 matchedDownload0b6ff36a…c988ef
0.7.1Cached · Upstream SHA-256 matchedDownload3fd33123…e947d1
0.7.2Cached · Upstream SHA-256 matchedDownloadab916807…e30f36
0.7.3Cached · Upstream SHA-256 matchedDownload9918c2ae…d6e492
0.8.0Cached · Upstream SHA-256 matchedDownload9e971384…0ffa98
0.8.1Cached · Upstream SHA-256 matchedDownload39dd369c…e29abc
0.8.2Cached · Upstream SHA-256 matchedDownload873f9c3e…b5629f
0.8.3Cached · Upstream SHA-256 matchedDownload0da20598…979fb2
0.8.4Cached · Upstream SHA-256 matchedDownloadb1c84301…3b7ec0
0.8.5Cached · Upstream SHA-256 matchedDownload50a660f9…874883
0.8.6Cached · Upstream SHA-256 matchedDownloade700bb7c…986502
1.0.0Cached · Upstream SHA-256 matchedDownload5da439c3…bddf21
1.0.1Cached · Upstream SHA-256 matchedDownload2c0fa418…f6cb08
1.0.2Cached · Upstream SHA-256 matchedDownload22c5875f…f9e8db
2.0.0-nullsafety.0Cached · Upstream SHA-256 matchedDownload2fe15fca…c8acd3
2.0.0-nullsafety.1Cached · Upstream SHA-256 matchedDownload2c94fd97…a42cfa
2.0.0-nullsafety.2Cached · Upstream SHA-256 matchedDownloadad7e7015…8099d1
2.0.0Cached · Upstream SHA-256 matchedDownload6ba43dc8…75397e
2.0.1Cached · Upstream SHA-256 matchedDownloadffb7b33e…21e456
2.0.2Cached · Upstream SHA-256 matchedDownload02437682…2d832b
2.0.3Cached · Upstream SHA-256 matchedDownloadee2ecc7c…bc6f23
2.0.4Cached · Upstream SHA-256 matchedDownload79f78dda…f03cef
2.0.5Cached · Upstream SHA-256 matchedDownload2730b3fc…680b85
2.1.0Cached · Upstream SHA-256 matchedDownload070d8fcc…745007
2.2.0Cached · Upstream SHA-256 matchedDownload06866290…48005d
2.2.1Cached · Upstream SHA-256 matchedDownload302df7ff…d51401
2.2.2Cached · Upstream SHA-256 matchedDownload1722b2dc…ba9aad
2.2.3Cached · Upstream SHA-256 matchedDownloadba9dde5f…2edf04
2.3.0Cached · Upstream SHA-256 matchedDownload6780711d…79530a
2.3.1Cached · Upstream SHA-256 matchedDownloadf63cbc48…9301e2

Dependencies

meta "^1.1.7"

zone_local "\u003e=0.1.1 \u003c2.0.0"