flutter - InterfaceType 不是 VariableGet 中 Class 的子类型

标签 flutter dart types build

升级到 Flutter 1.20.1 后尝试构建我的应用程序时出现以下错误。

Unhandled exception:
Crash when compiling null,
at character offset null:
InterfaceType(PagingResponse<Assignment*>*) is not a subtype of Class(Response) in VariableGet(response{PagingResponse<Assignment*>*})
#0      TypeEnvironment.typeError  (package:kernel/type_environment.dart:164:7)
#1      Expression.getStaticTypeAsInstanceOf  (package:kernel/ast.dart:3037:10)
#2      PropertyGet.getStaticType  (package:kernel/ast.dart:3200:20)
#3      transformAsExpression  (package:kernel/transformations/type_casts_optimizer.dart:22:45)
#4      _Lowering.visitAsExpression  (package:vm/transformations/lowering.dart:65:12)
#5      AsExpression.accept  (package:kernel/ast.dart:4913:44)
#6      VariableSet.transformChildren  (package:kernel/ast.dart:3154:21)
#7      Transformer.defaultTreeNode  (package:kernel/visitor.dart:653:10)
#8      TreeVisitor.defaultExpression  (package:kernel/visitor.dart:144:43)
#9      TreeVisitor.visitVariableSet  (package:kernel/visitor.dart:148:43)
#10     VariableSet.accept  (package:kernel/ast.dart:3144:44)
#11     ExpressionStatement.transformChildren  (package:kernel/ast.dart:5794:31)

// bunch of stack that doesn't look important

#133    KernelTarget.buildComponent  (package:front_end/src/fasta/kernel/kernel_target.dart:355:12)
#134    IncrementalCompiler.computeDelta.<anonymous closure>  (package:front_end/src/fasta/incremental_compiler.dart:274:28)
<asynchronous suspension>
#135    IncrementalCompiler.computeDelta.<anonymous closure> (package:front_end/src/fasta/incremental_compiler.dart)
#136    CompilerContext.runInContext.<anonymous closure>.<anonymous closure>  (package:front_end/src/fasta/compiler_context.dart:123:46)
#137    new Future.sync  (dart:async/future.dart:223:31)
#138    CompilerContext.runInContext.<anonymous closure>  (package:front_end/src/fasta/compiler_context.dart:123:19)
#139    _rootRun  (dart:async/zone.dart:1190:13)
#140    _CustomZone.run  (dart:async/zone.dart:1093:19)
#141    _runZoned  (dart:async/zone.dart:1630:10)
#142    runZoned  (dart:async/zone.dart:1550:10)
Assignment只是一个 json_serializable 模型。
这是什么 PagingResponse好像:
@JsonSerializable()
class PagingResponse<T> {
  PagingResponse(
    this.status,
    this.message,
    this.code,
    this.dataJson,
  );

  String status;
  String message;
  String code;
  @JsonKey(ignore: true)
  PagingResponseData<T> data;
  @JsonKey(name: 'data')
  Map<String, dynamic> dataJson;

  factory PagingResponse.fromJson(
    Map<String, dynamic> json,
    PagingResponseDataDataGeneratorFunction<T> rowsFromJson,
  ) {
    PagingResponse<T> response = _$PagingResponseFromJson<T>(json);

    // Our API sometimes returns data directly and at other times nested under
    // another object. Check if data directly has a rows field. If not, this
    // probably means that data is nested inside an object.
    if (response.dataJson?.containsKey('rows') ?? false) {
      response.data = new PagingResponseData<T>.fromJson(response.dataJson);
      response.data.rows = rowsFromJson(response.data.rowsJson);
    } else if (response.dataJson?.isNotEmpty ?? false) {
      response.data =
          new PagingResponseData<T>.fromJson(response.dataJson.values.first);
      response.data.rows = rowsFromJson(response.data.rowsJson);
    }

    return response;
  }

  Map<String, dynamic> toJson() => _$PagingResponseToJson(this);
}

typedef List<T> PagingResponseDataDataGeneratorFunction<T>(List<dynamic> json);
这里有各种版本:
[✓] Flutter (Channel stable, 1.20.1, on Mac OS X 10.15.4 19E287, locale en-US)
    • Flutter version 1.20.1 at /Users/------/dev/tools/flutter
    • Framework revision 2ae34518b8 (9 days ago), 2020-08-05 19:53:19 -0700
    • Engine revision c8e3b94853
    • Dart version 2.9.0
我省略了 doctor 的其余部分输出,因为 Android 和 iOS 版本都会发生这种情况。
在互联网上环顾四周,我找不到任何其他有此问题的解决方案的人。这里有一些:
  • https://github.com/flutter/flutter/issues/48071
  • https://github.com/dart-lang/build/issues/2478
  • https://github.com/flutter/flutter/issues/33013

  • 我试过:
  • 删除每次使用 PagingResponse<Assignment>并运行构建 - 使用不同的模型类得到相同的错误消息;
  • flutter clean
  • 删除 ~/.pub-cache
  • 其他各种我现在不记得了

  • 如果有人对这可能与之相关的事情有任何想法,我将不胜感激,因为目前我正在查看代码并进行盲目更改,希望能得到成功。如果一些知识渊博的人偶然发现这个问题,特别是关于这个 Dart 堆栈是什么的一些提示将不胜感激。
    更新:
    最终为此打开了一个问题,我们正朝着那里的解决方案迈进:https://github.com/flutter/flutter/issues/64155

    最佳答案

    我已经更新了 flutter 版 1.20.2 ,而且我也没有遇到任何问题,知道我用的是JsonSerializable同样,试试这个:
    删除这些文件:

    pubspec.lock

    .packages

    .flutter-plugins

    .flutter-plugins-dependencies


    然后申请 flutter pub get命令

    关于flutter - InterfaceType 不是 VariableGet 中 Class 的子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63417596/

    相关文章:

    flutter - 如何在按下按钮的同时增加文本大小?

    flutter - 如何在状态栏后面绘制 ListView 而无需填充?

    dart - Webstorm 或 Dart 编辑器。哪个更成熟

    function - OCaml,多态函数

    math - 自由定理和参数化

    flutter - 检测 flutter 中的模拟位置

    flutter - Flutter-处理程序!= null不正确

    flutter - StatefulWidget 中的 State 对象何时销毁?

    dart - Flutter - 在其他小部件之上显示建议列表

    c# - 使用泛型参数创建方法