首页 > 解决方案 > Dart 2 异步包预编译错误

问题描述

我正在尝试使用 Dart 2 SDK 运行 Web 应用程序webdev。我终于成功解决了依赖项,但现在pub get无法预编译async包。

我发现这个问题似乎相关,但pub global run他们建议的解决方法不起作用:https ://github.com/dart-lang/pub/issues/1932

发布规范.yaml

environment:
  sdk: '>=2.0.0-dev.68.0 <3.0.0'

dependencies:
  browser_detect: ^1.0.4
  dnd: ^1.2.0
  firebase: ^0.5.0
  gorgon: ^0.14.2
  intl: ^0.15.6
  jsonx: ^2.0.2
  slack: ^1.2.2
  stagexl: ^1.3.1+4
  xml: ^3.0.0

dev_dependencies:
  build_runner: '>=0.8.10 <0.10.0'
  build_web_compilers: '>=0.3.6 <0.5.0'

酒吧得到

Dart VM 版本:“linux_x64”上的 2.0.0-dev.69.0(未知时间戳)

Resolving dependencies...
Overriding the upper bound Dart SDK constraint to <=2.0.0-dev.69.0 for the following packages:

args, async, browser, browser_detect, coUemoticons, convert, cou_toolkit, edit_distance, firebase, fixnum, glob, gorgon, graphs, http_parser, js, jsonx, libld, logging, meta, petitparser, pub_semver, quiver, quiver_iterables, scproxy, slack, source_span, stack_trace, stagexl, string_scanner, transmit, typed_data, xml

To disable this you can set the PUB_ALLOW_PRERELEASE_SDK system environment variable to `false`, or you can silence this message by setting it to `quiet`.
Got dependencies!
Precompiling executables...
Failed to precompile build_runner:graph_inspector:
file:///home/andy/.pub-cache/hosted/pub.dartlang.org/async-1.13.3/lib/src/typed/stream.dart:56:10: Error: The return type of the method 'TypeSafeStream::firstWhere' is dart.async::Future<dynamic>, which does not match the return type of the overridden method (dart.async::Future<#lib1::TypeSafeStream::T>).
Change to a subtype of dart.async::Future<#lib1::TypeSafeStream::T>.
  Future firstWhere(bool test(T element), {Object defaultValue()}) =>
         ^
file:///home/andy/.pub-cache/hosted/pub.dartlang.org/async-1.13.3/lib/src/typed/stream.dart:56:10: Error: The method 'TypeSafeStream::firstWhere' doesn't have the named parameter 'orElse' of overriden method 'Stream::firstWhere'.
  Future firstWhere(bool test(T element), {Object defaultValue()}) =>
         ^
file:///home/andy/.pub-cache/hosted/pub.dartlang.org/async-1.13.3/lib/src/typed/stream.dart:59:10: Error: The return type of the method 'TypeSafeStream::lastWhere' is dart.async::Future<dynamic>, which does not match the return type of the overridden method (dart.async::Future<#lib1::TypeSafeStream::T>).
Change to a subtype of dart.async::Future<#lib1::TypeSafeStream::T>.
  Future lastWhere(bool test(T element), {Object defaultValue()}) =>
         ^
file:///home/andy/.pub-cache/hosted/pub.dartlang.org/async-1.13.3/lib/src/typed/stream.dart:59:10: Error: The method 'TypeSafeStream::lastWhere' doesn't have the named parameter 'orElse' of overriden method 'Stream::lastWhere'.
  Future lastWhere(bool test(T element), {Object defaultValue()}) =>
         ^
file:///home/andy/.pub-cache/hosted/pub.dartlang.org/async-1.13.3/lib/src/typed/stream.dart:62:13: Error: The method 'TypeSafeStream::singleWhere' has fewer named arguments than those of overridden method 'Stream::singleWhere'.
  Future<T> singleWhere(bool test(T element)) async =>
            ^
file:///home/andy/.pub-cache/hosted/pub.dartlang.org/async-1.13.3/lib/src/restartable_timer.dart:11:7: Error: The non-abstract class 'RestartableTimer' is missing implementations for these members:
  'tick'.
Try to either
 - provide an implementation,
 - inherit an implementation from a superclass or mixin,
 - mark the class as abstract, or
 - provide a 'noSuchMethod' implementation.

class RestartableTimer implements Timer {
      ^^^^^^^^^^^^^^^^
file:///home/andy/.pub-cache/hosted/pub.dartlang.org/async-1.13.3/lib/src/result/capture_transformer.dart:15:7: Error: The non-abstract class 'CaptureStreamTransformer' is missing implementations for these members:
  'cast'.
Try to either
 - provide an implementation,
 - inherit an implementation from a superclass or mixin,
 - mark the class as abstract, or
 - provide a 'noSuchMethod' implementation.

class CaptureStreamTransformer<T> implements StreamTransformer<T, Result<T>> {
      ^^^^^^^^^^^^^^^^^^^^^^^^
file:///home/andy/.pub-cache/hosted/pub.dartlang.org/async-1.13.3/lib/src/result/release_transformer.dart:12:7: Error: The non-abstract class 'ReleaseStreamTransformer' is missing implementations for these members:
  'cast'.
Try to either
 - provide an implementation,
 - inherit an implementation from a superclass or mixin,
 - mark the class as abstract, or
 - provide a 'noSuchMethod' implementation.

class ReleaseStreamTransformer<T> implements StreamTransformer<Result<T>, T> {
      ^^^^^^^^^^^^^^^^^^^^^^^^
file:///home/andy/.pub-cache/hosted/pub.dartlang.org/async-1.13.3/lib/src/single_subscription_transformer.dart:16:7: Error: The non-abstract class 'SingleSubscriptionTransformer' is missing implementations for these members:
  'cast'.
Try to either
 - provide an implementation,
 - inherit an implementation from a superclass or mixin,
 - mark the class as abstract, or
 - provide a 'noSuchMethod' implementation.

class SingleSubscriptionTransformer<S, T> implements StreamTransformer<S, T> {
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
file:///home/andy/.pub-cache/hosted/pub.dartlang.org/async-1.13.3/lib/src/typed_stream_transformer.dart:23:7: Error: The non-abstract class '_TypeSafeStreamTransformer' is missing implementations for these members:
  'cast'.
Try to either
 - provide an implementation,
 - inherit an implementation from a superclass or mixin,
 - mark the class as abstract, or
 - provide a 'noSuchMethod' implementation.

class _TypeSafeStreamTransformer<S, T> implements StreamTransformer<S, T> {
      ^^^^^^^^^^^^^^^^^^^^^^^^^^
Failed to precompile build_runner:build_runner:
file:///home/andy/.pub-cache/hosted/pub.dartlang.org/async-1.13.3/lib/src/typed/stream.dart:56:10: Error: The return type of the method 'TypeSafeStream::firstWhere' is dart.async::Future<dynamic>, which does not match the return type of the overridden method (dart.async::Future<#lib1::TypeSafeStream::T>).
Change to a subtype of dart.async::Future<#lib1::TypeSafeStream::T>.
  Future firstWhere(bool test(T element), {Object defaultValue()}) =>
         ^
file:///home/andy/.pub-cache/hosted/pub.dartlang.org/async-1.13.3/lib/src/typed/stream.dart:56:10: Error: The method 'TypeSafeStream::firstWhere' doesn't have the named parameter 'orElse' of overriden method 'Stream::firstWhere'.
  Future firstWhere(bool test(T element), {Object defaultValue()}) =>
         ^
file:///home/andy/.pub-cache/hosted/pub.dartlang.org/async-1.13.3/lib/src/typed/stream.dart:59:10: Error: The return type of the method 'TypeSafeStream::lastWhere' is dart.async::Future<dynamic>, which does not match the return type of the overridden method (dart.async::Future<#lib1::TypeSafeStream::T>).
Change to a subtype of dart.async::Future<#lib1::TypeSafeStream::T>.
  Future lastWhere(bool test(T element), {Object defaultValue()}) =>
         ^
file:///home/andy/.pub-cache/hosted/pub.dartlang.org/async-1.13.3/lib/src/typed/stream.dart:59:10: Error: The method 'TypeSafeStream::lastWhere' doesn't have the named parameter 'orElse' of overriden method 'Stream::lastWhere'.
  Future lastWhere(bool test(T element), {Object defaultValue()}) =>
         ^
file:///home/andy/.pub-cache/hosted/pub.dartlang.org/async-1.13.3/lib/src/typed/stream.dart:62:13: Error: The method 'TypeSafeStream::singleWhere' has fewer named arguments than those of overridden method 'Stream::singleWhere'.
  Future<T> singleWhere(bool test(T element)) async =>
            ^
file:///home/andy/.pub-cache/hosted/pub.dartlang.org/async-1.13.3/lib/src/restartable_timer.dart:11:7: Error: The non-abstract class 'RestartableTimer' is missing implementations for these members:
  'tick'.
Try to either
 - provide an implementation,
 - inherit an implementation from a superclass or mixin,
 - mark the class as abstract, or
 - provide a 'noSuchMethod' implementation.

class RestartableTimer implements Timer {
      ^^^^^^^^^^^^^^^^
file:///home/andy/.pub-cache/hosted/pub.dartlang.org/async-1.13.3/lib/src/result/capture_transformer.dart:15:7: Error: The non-abstract class 'CaptureStreamTransformer' is missing implementations for these members:
  'cast'.
Try to either
 - provide an implementation,
 - inherit an implementation from a superclass or mixin,
 - mark the class as abstract, or
 - provide a 'noSuchMethod' implementation.

class CaptureStreamTransformer<T> implements StreamTransformer<T, Result<T>> {
      ^^^^^^^^^^^^^^^^^^^^^^^^
file:///home/andy/.pub-cache/hosted/pub.dartlang.org/async-1.13.3/lib/src/result/release_transformer.dart:12:7: Error: The non-abstract class 'ReleaseStreamTransformer' is missing implementations for these members:
  'cast'.
Try to either
 - provide an implementation,
 - inherit an implementation from a superclass or mixin,
 - mark the class as abstract, or
 - provide a 'noSuchMethod' implementation.

class ReleaseStreamTransformer<T> implements StreamTransformer<Result<T>, T> {
      ^^^^^^^^^^^^^^^^^^^^^^^^
file:///home/andy/.pub-cache/hosted/pub.dartlang.org/async-1.13.3/lib/src/single_subscription_transformer.dart:16:7: Error: The non-abstract class 'SingleSubscriptionTransformer' is missing implementations for these members:
  'cast'.
Try to either
 - provide an implementation,
 - inherit an implementation from a superclass or mixin,
 - mark the class as abstract, or
 - provide a 'noSuchMethod' implementation.

class SingleSubscriptionTransformer<S, T> implements StreamTransformer<S, T> {
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
file:///home/andy/.pub-cache/hosted/pub.dartlang.org/async-1.13.3/lib/src/typed_stream_transformer.dart:23:7: Error: The non-abstract class '_TypeSafeStreamTransformer' is missing implementations for these members:
  'cast'.
Try to either
 - provide an implementation,
 - inherit an implementation from a superclass or mixin,
 - mark the class as abstract, or
 - provide a 'noSuchMethod' implementation.

class _TypeSafeStreamTransformer<S, T> implements StreamTransformer<S, T> {
      ^^^^^^^^^^^^^^^^^^^^^^^^^^

我在我的 中做错了什么,或者其他包pubspec.yaml有问题吗?async这个项目已经运行了大约 4 年,但我无法让它在 Dart 2 中运行。感谢任何帮助。

标签: dartdart-pub

解决方案


您依赖于几个尚未针对 Dart 2 更新的库。不幸的是,唯一的解决方案是删除这些依赖项或移回 Dart 1 SDK。以供参考:

  • browser_detect:v 1.0.4 • 更新:2016 年 3 月 2 日
  • gorgon v 0.14.2 • 更新日期:2014 年 12 月 6 日
  • jsonx v 2.0.2 • 更新日期:2016 年 5 月 19 日
  • slack 1.2.2 • 更新日期:2015 年 6 月 6 日 WEB

通常,只有在 2018 年某个时候最后更新的库才能在 Dart 2 中运行,而且通常只有最新版本。您可以通过在pub.dartlang.org上搜索包名称来检查依赖项的状态

编辑: gorgon 特别依赖于旧版本的async,我将首先删除它


推荐阅读