"NoSuchMethodError: The getter element..." while generating with retrofit_generator
"NoSuchMethodError: The getter element..." while generating with retrofit_generator
颤振 1.17.3
retrofit_generator: ^1.3.7
我运行这个命令
flutter pub run build_runner build --delete-conflicting-outputs
并且在生成过程中收到以下错误
[SEVERE] retrofit_generator:retrofit on lib/data_services/calendar/repository/calendar_network_repository.dart:
Error running RetrofitGenerator
NoSuchMethodError: The getter 'element' was called on null.
Receiver: null
Tried calling: element
Class的错误代码
part 'calendar_network_repository.g.dart';
@RestApi(baseUrl: Url.profiles)
abstract class CalendarNetworkRepository {
factory CalendarNetworkRepository(Dio dio, {String baseUrl}) = _CalendarNetworkRepository;
@GET('/{userId}/diary')
Future<List<dynamic>> getData(
@Path('userId') int userId, @Query('start') String startDate, @Query('end') String endDate);
}
TLDR
不要在将由retrofit_generator
生成的方法的签名中使用dynamic
生成失败,因为 dynamic
已被使用
Future<List<dynamic>> getData
此错误发生在 source_gen 的 type_checker
bool isExactlyType(DartType staticType) => isExactly(staticType.element);
因为我们知道 staticType == null
。现在让我们找出为什么它为空。
对于 return 类型 Future<List<SomeType>>
retrofit_generator 必须生成 code for transformation 映射到 SomeType 实例
blocks.add(Code("var value = $_resultVar.data.map((dynamic i) => $innerReturnType.fromJson(i as Map<String,dynamic>)).toList();"));
让我们看看 innerReturnType
是如何声明的
final innerReturnType = _getResponseInnerType(returnType);
在我们看到check for dynamic
if (generic.isDynamic) return null;
在调用 isExactlyType
之后我们得到错误
颤振 1.17.3
retrofit_generator: ^1.3.7
我运行这个命令
flutter pub run build_runner build --delete-conflicting-outputs
并且在生成过程中收到以下错误
[SEVERE] retrofit_generator:retrofit on lib/data_services/calendar/repository/calendar_network_repository.dart:
Error running RetrofitGenerator
NoSuchMethodError: The getter 'element' was called on null.
Receiver: null
Tried calling: element
Class的错误代码
part 'calendar_network_repository.g.dart';
@RestApi(baseUrl: Url.profiles)
abstract class CalendarNetworkRepository {
factory CalendarNetworkRepository(Dio dio, {String baseUrl}) = _CalendarNetworkRepository;
@GET('/{userId}/diary')
Future<List<dynamic>> getData(
@Path('userId') int userId, @Query('start') String startDate, @Query('end') String endDate);
}
TLDR
不要在将由retrofit_generator
生成的方法的签名中使用dynamic
生成失败,因为 dynamic
已被使用
Future<List<dynamic>> getData
此错误发生在 source_gen 的 type_checker
bool isExactlyType(DartType staticType) => isExactly(staticType.element);
因为我们知道 staticType == null
。现在让我们找出为什么它为空。
对于 return 类型 Future<List<SomeType>>
retrofit_generator 必须生成 code for transformation 映射到 SomeType 实例
blocks.add(Code("var value = $_resultVar.data.map((dynamic i) => $innerReturnType.fromJson(i as Map<String,dynamic>)).toList();"));
让我们看看 innerReturnType
是如何声明的
final innerReturnType = _getResponseInnerType(returnType);
在我们看到check for dynamic
if (generic.isDynamic) return null;
在调用 isExactlyType
之后我们得到错误