Как только я создаю экземпляр BrowserClient, я вижу трассировку стека в консоли браузера, и приложение умирает.
import 'package:http/browser_client.dart';
...
var client = new BrowserClient()
..withCredentials = true;
Stacktrace и соответствующий код в http / src / utils.dart:
'package: http / src / utils.dart': ошибка: строка 89 поз. 1: неожиданный токен 'Stream' Stream onDone (Stream stream, void onDone ()) => ^: package: http / src / utils.dart
/// Calls [onDone] once [stream] (a single-subscription [Stream]) is finished.
/// The return value, also a single-subscription [Stream] should be used in
/// place of [stream] after calling this method.
Stream/*<T>*/ onDone/*<T>*/(Stream/*<T>*/ stream, void onDone()) =>
stream.transform(new StreamTransformer.fromHandlers(handleDone: (sink) {
sink.close();
onDone();
}));
Если я только импортирую его, исключение выглядит иначе - stacktrace и соответствующий код в async / src / byte_collector.dart
'пакет: async / src / byte_collector.dart': ошибка: строка 42 поз.1: неожиданный токен 'T' T _collectBytes (^: package: async / src / byte_collector.dart
T _collectBytes<T>(
Stream<List<int>> source,
T result(StreamSubscription<List<int>> subscription,
Future<Uint8List> result)) {
Я использую последнюю версию браузера и http-зависимости
browser: "^0.10.0+2"
http: "^0.11.3+13"
Изменилось ли что-нибудь в BrowserClient
, о чем мне нужно знать? Этот код работал нормально последние два года.
Я пробовал версии Dart 1.22.1
и 1.23.0
, я убедился, что Dartium обновлен и соответствует версии Dart. pub build
тоже не показывает ошибок.
Фактически, простой импорт import 'package:http/browser_client.dart';
вызывает трассировку стека независимо от того, используется он или нет.
Полный pubspec.yaml
на всякий случай:
...
environment:
sdk: '>=1.13.0 <2.0.0'
dependencies:
angular2: "^2.2.0"
bootjack: "0.6.7+2"
browser: "^0.10.0+2"
event_bus: "^0.4.1"
less_dart: any
http: "^0.11.3+13"
dart_to_js_script_rewriter: "^1.0.2"
transformers:
- angular2:
platform_directives:
- package:angular2/common.dart#COMMON_DIRECTIVES
platform_pipes:
- package:angular2/common.dart#COMMON_PIPES
entry_points: web/main.dart
- dart_to_js_script_rewriter
- $dart2js:
commandLineOptions: [--enable-experimental-mirrors]
- less_dart:
entry_points: [web/css/main.less]
build_mode: dart
Понижение версии http
тоже не помогает. Я сделал pub cache repair
, удалил pubspec.lock
файл и повторно запустил pub get
, ошибка остается, пока я импортирую / использую BrowserClient
==================
Протестируйте приложение, чтобы воспроизвести проблему:
==================
lib/components/bug-fix.dart
import 'package:angular2/angular2.dart';
import 'package:angular2/core.dart' show AfterContentInit, Component;
import 'package:angular2/router.dart'
show ROUTER_DIRECTIVES, Route, RouteConfig;
// uncomment this line to make it crash
// import 'package:http/browser_client.dart';
@Component(
selector: 'bug-fix',
template: 'test',
providers: const [],
directives: const [ROUTER_DIRECTIVES]
)
@RouteConfig(const [
])
class AppComponent {
}
web/index.html
<!DOCTYPE html>
<html>
<head>
<!--<base href="/">-->
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="developed-by" content="jVaaS (Pty) Ltd">
<title>BugFix APP</title>
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="icon" href="favicon.ico" type="image/x-icon">
<!--<link rel="stylesheet" href="css/main.css?4">-->
<!--<script src="cordova.js"></script>-->
</head>
<body >
<bug-fix class="noselect">
</bug-fix>
<script async src="main.dart" type="application/dart"></script>
<script async src="packages/browser/dart.js"></script>
</body>
</html>
web/main.dart
import 'package:angular2/angular2.dart' show provide;
import 'package:angular2/platform/browser.dart';
import 'package:angular2/router.dart' show ROUTER_PROVIDERS;
import 'package:angular2/src/platform/browser/location/hash_location_strategy.dart';
import 'package:angular2/src/platform/browser/location/location_strategy.dart';
import 'package:bugfix/components/bug-fix.dart';
void main() {
// bootstrap angular2
bootstrap(AppComponent, [
ROUTER_PROVIDERS,
provide(APP_BASE_HREF, useValue: '/'),
provide(LocationStrategy, useClass: HashLocationStrategy)
]);
}
pubspec.yaml
name: bugfix
version: 2.0.0
description: BugFix
environment:
sdk: '>=1.13.0 <2.0.0'
dependencies:
angular2: "^2.2.0"
bootjack: "0.6.7+2"
browser: "^0.10.0+2"
event_bus: "^0.4.1"
less_dart: any
http: "^0.11.3+13"
dart_to_js_script_rewriter: "^1.0.2"
transformers:
- angular2:
platform_directives:
- package:angular2/common.dart#COMMON_DIRECTIVES
platform_pipes:
- package:angular2/common.dart#COMMON_PIPES
entry_points: web/main.dart
- dart_to_js_script_rewriter
- $dart2js:
commandLineOptions: [--enable-experimental-mirrors]
- less_dart:
entry_points: [web/css/main.less]
build_mode: dart
==================
Приведенный выше код - это буквально единственный код в приложении «Исправление ошибок». Я делаю pub get
, а затем pub serve --port=8888
. Как только я раскомментирую импорт browser_client
, он умирает с указанными выше трассировками стека.