-
Notifications
You must be signed in to change notification settings - Fork 26
Open
Labels
questionFurther information is requestedFurther information is requested
Description
β Question
Why is my api file causing an error in the generated vaden file?
π Title
Api class with @ApiClient() annotation causing error in vaden_application.dart
π Detailed Description
I am using the lastest version of flutter_vaden (1.0.2).
I have the following api class
import 'package:flutter_vaden/flutter_vaden.dart';
import 'package:myapp/models/launch_model.dart';
@ApiClient()
abstract class LaunchApi {
@Get('launches/?when=past')
Future<List<LaunchModel>> fetchPrevLaunches();
@Get('launches/?when=next')
Future<List<LaunchModel>> fetchNextLaunches();
}
When I run dart run build_runner build, the vaden_application.dart file is generated, but it has an error in the line _injector.addLazySingleton(LaunchApi.new);. The error is:
A generative constructor of an abstract class can't be torn off.
Try tearing off a constructor of a concrete class, or a non-generative constructor.dart[tearoff_of_generative_constructor_of_abstract_class](https://dart.dev/diagnostics/tearoff_of_generative_constructor_of_abstract_class)"
The entire file is:
// GENERATED CODE - DO NOT MODIFY BY HAND
// Aggregated Vaden application file
// ignore_for_file: prefer_func tion_declarations_over_variables, implementation_imports
import 'package:myapp/core/configurations/dio_configurations.dart';
import 'package:myapp/data/api/launch_api.dart';
import 'package:myapp/data/repository/launch_repository.dart';
import 'package:myapp/models/agency_model.dart';
import 'package:myapp/models/launch_media_model.dart';
import 'package:myapp/models/launch_model.dart';
import 'package:myapp/models/rocket_configuration_model.dart';
import 'package:myapp/models/rocket_model.dart';
import 'package:myapp/ui/launches/viewmodel/launch_view_model.dart';
import 'dart:convert';
import 'dart:io';
import 'package:dio/dio.dart' as dioPackage;
import 'package:flutter_vaden/flutter_vaden.dart';
late final AutoInjector _injector;
class VadenApp extends FlutterVadenApplication {
@override
AutoInjector get injector => _injector;
VadenApp({required super.child, AutoInjector? injector}) {
_injector = injector ?? AutoInjector();
}
@override
Future<void> setup() async {
final asyncBeans = <Future<void> Function()>[];
_injector.addLazySingleton<DSON>(_DSON.new);
_injector.addInstance<Injector>(_injector);
final configurationDioconfiguration = Dioconfiguration();
_injector.addLazySingleton(configurationDioconfiguration.createDio);
_injector.addLazySingleton(LaunchApi.new);
_injector.addLazySingleton(LaunchRepository.new);
_injector.addLazySingleton(LaunchViewModel.new);
_injector.commit();
for (final asyncBean in asyncBeans) {
await asyncBean();
}
}
}
class _DSON extends DSON {
@override
(
Map<Type, FromJsonFunction>,
Map<Type, ToJsonFunction>,
Map<Type, ToOpenApiNormalMap>,
)
getMaps() {
final fromJsonMap = <Type, FromJsonFunction>{};
final toJsonMap = <Type, ToJsonFunction>{};
final toOpenApiMap = <Type, ToOpenApiNormalMap>{};
fromJsonMap[AgencyModel] = (Map<String, dynamic> json) {
return Function.apply(AgencyModel.new, [], {#name: json['name']});
};
toJsonMap[AgencyModel] = (object) {
final obj = object as AgencyModel;
return {'name': obj.name};
};
toOpenApiMap[AgencyModel] = {
"type": "object",
"properties": <String, dynamic>{
"name": {"type": "string"},
},
"required": ["name"],
};
fromJsonMap[LaunchMedia] = (Map<String, dynamic> json) {
return Function.apply(LaunchMedia.new, [], {
#name: json['name'],
#url: json['url'],
#type: MediaType.values.byName(json['type'] as String),
});
};
toJsonMap[LaunchMedia] = (object) {
final obj = object as LaunchMedia;
return {'name': obj.name, 'url': obj.url, 'type': obj.type.name};
};
toOpenApiMap[LaunchMedia] = {
"type": "object",
"properties": <String, dynamic>{
"name": {"type": "string"},
"url": {"type": "string"},
"type": {
"type": "string",
"enum": ["video", "livestream"],
},
},
"required": ["name", "url", "type"],
};
fromJsonMap[LaunchModel] = (Map<String, dynamic> json) {
return Function.apply(LaunchModel.new, [], {
#missionName: json['missionName'],
#launchDate: DateTime.parse(json['launchDate'] as String),
#descriptionEnus: json['description_enus'],
#descriptionPtbr: json['description_ptbr'],
#rocketConfiguration: fromJson<RocketConfigurationModel>(
json['rocket_configuration'],
),
#media: fromJsonList<LaunchMedia>(json['media']),
});
};
toJsonMap[LaunchModel] = (object) {
final obj = object as LaunchModel;
return {
'missionName': obj.missionName,
'launchDate': obj.launchDate.toIso8601String(),
'description_enus': obj.descriptionEnus,
'description_ptbr': obj.descriptionPtbr,
'rocket_configuration': toJson<RocketConfigurationModel>(
obj.rocketConfiguration,
),
'media': toJsonList<LaunchMedia>(obj.media),
};
};
toOpenApiMap[LaunchModel] = {
"type": "object",
"properties": <String, dynamic>{
"missionName": {"type": "string"},
"launchDate": {"type": "string", "format": "date-time"},
"description_enus": {"type": "string"},
"description_ptbr": {"type": "string"},
"rocket_configuration": {
r"$ref": "#/components/schemas/RocketConfigurationModel",
},
"media": {
"type": "array",
"items": {r"$ref": "#/components/schemas/LaunchMedia"},
},
},
"required": [
"missionName",
"launchDate",
"description_enus",
"description_ptbr",
"rocket_configuration",
"media",
],
};
fromJsonMap[RocketConfigurationModel] = (Map<String, dynamic> json) {
return Function.apply(RocketConfigurationModel.new, [], {
#name: json['name'],
#rocket: fromJson<RocketModel>(json['rocket']),
});
};
toJsonMap[RocketConfigurationModel] = (object) {
final obj = object as RocketConfigurationModel;
return {'name': obj.name, 'rocket': toJson<RocketModel>(obj.rocket)};
};
toOpenApiMap[RocketConfigurationModel] = {
"type": "object",
"properties": <String, dynamic>{
"name": {"type": "string"},
"rocket": {r"$ref": "#/components/schemas/RocketModel"},
},
"required": ["name", "rocket"],
};
fromJsonMap[RocketModel] = (Map<String, dynamic> json) {
return Function.apply(RocketModel.new, [], {
#name: json['name'],
#agency: fromJson<AgencyModel>(json['agency']),
});
};
toJsonMap[RocketModel] = (object) {
final obj = object as RocketModel;
return {'name': obj.name, 'agency': toJson<AgencyModel>(obj.agency)};
};
toOpenApiMap[RocketModel] = {
"type": "object",
"properties": <String, dynamic>{
"name": {"type": "string"},
"agency": {r"$ref": "#/components/schemas/AgencyModel"},
},
"required": ["name", "agency"],
};
return (fromJsonMap, toJsonMap, toOpenApiMap);
}
}
π· Evidence
β οΈ Urgency
- Low
- Medium
- High
Metadata
Metadata
Assignees
Labels
questionFurther information is requestedFurther information is requested