如何解决InterfaceType不是VariableGet
在升级到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
命令
json_serializer支持的数据类型为:
- 字符串。
- 号码。
- 布尔值。
- 为空。
- 对象。
- 数组。
所以请反映您的数据类
,首先,您必须从代码中删除以下文件:
pubspec.lock
.packages
.flutter-plugins
.flutter-plugins-dependencies
然后必须应用flutter pub get
命令。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。