Как импортировать dart:html & dart:io в одном классе?

Приведенный ниже код "выглядит правильно", он компилируется, но не запускается, не получая сообщение консоли:

Не удается загрузить скрипт Dart dart: io
не удалось загрузить ресурс

Если я закомментирую #import('dart:io');Неправильно, я полагаю, я получаю ошибку компиляции, но она запускается, и только когда я нажимаю кнопку, я получаю ошибку времени выполнения:

Внутренняя ошибка: "http://127.0.0.1:3030/home/david/dart/samples/htmlIO/htmlIO.dart": Ошибка: строка 13, позиция 26: тип "HttpClient" не загружен
var connection = new HttpClient (). get ('www.google.com', 80, '/');

... что ожидается.

Поэтому мой вопрос: как мне импортировать dart:html & dart:io в одном классе?

#import('dart:html');
#import('dart:io');

class htmlIO {

  ButtonElement _aButton;

  htmlIO() {
  }

  void handlePress(Event e) {
    var connection = new HttpClient().get('www.google.com', 80, '/');
    write('made it');
  }

  void run() {
    _aButton = document.query("#aButton");
    _aButton.on.click.add(handlePress);
    write("Hello World!");
  }

  void write(String message) {
    // the HTML library defines a global "document" variable
    document.query('#status').innerHTML = message;
  }
}

void main() {
  new htmlIO().run();
}

2 ответа

dart:html библиотека на стороне клиента, тогда как dart:io библиотека на стороне сервера dart:html использует функции браузера, но dart:io использует функции, которые ограничены безопасностью браузера (например, доступ к файловой системе и т. д.).

Может случиться так, что придет время, что вы можете использовать dart:html на сервере с "поддельным" браузером, который может быть полезен для модульного тестирования и т. п., но вы пока не можете этого сделать.

Короткий ответ, вы не можете. Как упоминает Крис, библиотека dart: io предназначена только для библиотек серверов.

Я вижу, вы пытаетесь подключиться к службе HTTP в вашем приложении HTML. Вы должны проверить библиотеку HttpRequest. Вот ссылка на примеры: http://c.dart-examples.com/api/dart-html/interface/eventtarget/httprequest/asynchronous

import 'dart:html';
import 'dart:convert';

void onSuccess(ProgressEvent event, HttpRequest request) {
  print(event.loaded); // 0
  print(request.statusText); // ok
  print(request.responseText); // "(resource text)"
}

/**
 * test.txt file must be of the same origin
 * Or the response header must contain "Access-Control-Allow-Origin: [*|origin]"
 */
void main() {
  String url = "test.txt";  
  HttpRequest request = new HttpRequest();
  request.open("GET", url, async : true);
  request.onLoadEnd.listen((ProgressEvent e) => onSuccess(e, request));
  request.send();
}

Есть запрос на объединение HttpRequest от dart: html и HttpClient от dart:io, см. http://code.google.com/p/dart/issues/detail?id=2677

Другие вопросы по тегам