Retrofit Flutter不生成model-json转换方法
Retrofit Flutter does not generate model-json conversion method
我正在直接关注这个官方 guide,它显然没有生成 _$TaskFromJson
和 _$TaskToJson
方法,
我已经把它放在 'task.dart' 文件中并修改 part
如下
task.dart
import 'package:json_annotation/json_annotation.dart';
import 'package:retrofit/retrofit.dart';
import 'package:dio/dio.dart';
part 'task.g.dart';
@RestApi(baseUrl: "https://5d42a6e2bc64f90014a56ca0.mockapi.io/api/v1/")
abstract class RestClient {
factory RestClient(Dio dio, {String baseUrl}) = _RestClient;
@GET("/tasks")
Future<List<Task>> getTasks();
}
@JsonSerializable()
class Task {
String id;
String name;
String avatar;
String createdAt;
Task(this.id, this.name, this.avatar, this.createdAt);
factory Task.fromJson(Map<String, dynamic> json) => _$TaskFromJson(json);
Map<String, dynamic> toJson() => _$TaskToJson(this);
}
我运行这个命令
flutter pub run build_runner build
但生成的部分仅如下所示,没有任何 _$TaskFromJson
也没有 _$TaskToJson
task.g.dart
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'task.dart';
// **************************************************************************
// RetrofitGenerator
// **************************************************************************
class _RestClient implements RestClient {
_RestClient(this._dio, {this.baseUrl}) {
ArgumentError.checkNotNull(_dio, '_dio');
this.baseUrl ??= 'https://5d42a6e2bc64f90014a56ca0.mockapi.io/api/v1/';
}
final Dio _dio;
String baseUrl;
@override
getTasks() async {
const _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{};
final _data = <String, dynamic>{};
final Response<List<dynamic>> _result = await _dio.request('/tasks',
queryParameters: queryParameters,
options: RequestOptions(
method: 'GET',
headers: <String, dynamic>{},
extra: _extra,
baseUrl: baseUrl),
data: _data);
var value = _result.data
.map((dynamic i) => Task.fromJson(i as Map<String, dynamic>))
.toList();
return Future.value(value);
}
}
我读过 但对我没有帮助,因为这个问题谈论的是根本无法生成,但我的生成很好,缺少 JsonSerialized 方法。此外,答案建议使用大写 User 文件名,这绝对不起作用。
json_serializable
负责生成这些方法。只需将其导入您的 pubspec dev_dependencies
部分,运行 flutter pub get
和 flutter pub run build_runner build
.
依赖项:
扑:
SDK: 颤动
cupertino_icons: ^1.0.2
记录器:任何
改装:任何
json_annotation:任意
dev_dependencies:
flutter_test:
SDK: 颤动
build_runner:任意
retrofit_generator:任意
json_serializable:任意
所有retrofit相关包都使用这个版本的包
肯定有用
我正在直接关注这个官方 guide,它显然没有生成 _$TaskFromJson
和 _$TaskToJson
方法,
我已经把它放在 'task.dart' 文件中并修改 part
如下
task.dart
import 'package:json_annotation/json_annotation.dart';
import 'package:retrofit/retrofit.dart';
import 'package:dio/dio.dart';
part 'task.g.dart';
@RestApi(baseUrl: "https://5d42a6e2bc64f90014a56ca0.mockapi.io/api/v1/")
abstract class RestClient {
factory RestClient(Dio dio, {String baseUrl}) = _RestClient;
@GET("/tasks")
Future<List<Task>> getTasks();
}
@JsonSerializable()
class Task {
String id;
String name;
String avatar;
String createdAt;
Task(this.id, this.name, this.avatar, this.createdAt);
factory Task.fromJson(Map<String, dynamic> json) => _$TaskFromJson(json);
Map<String, dynamic> toJson() => _$TaskToJson(this);
}
我运行这个命令
flutter pub run build_runner build
但生成的部分仅如下所示,没有任何 _$TaskFromJson
也没有 _$TaskToJson
task.g.dart
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'task.dart';
// **************************************************************************
// RetrofitGenerator
// **************************************************************************
class _RestClient implements RestClient {
_RestClient(this._dio, {this.baseUrl}) {
ArgumentError.checkNotNull(_dio, '_dio');
this.baseUrl ??= 'https://5d42a6e2bc64f90014a56ca0.mockapi.io/api/v1/';
}
final Dio _dio;
String baseUrl;
@override
getTasks() async {
const _extra = <String, dynamic>{};
final queryParameters = <String, dynamic>{};
final _data = <String, dynamic>{};
final Response<List<dynamic>> _result = await _dio.request('/tasks',
queryParameters: queryParameters,
options: RequestOptions(
method: 'GET',
headers: <String, dynamic>{},
extra: _extra,
baseUrl: baseUrl),
data: _data);
var value = _result.data
.map((dynamic i) => Task.fromJson(i as Map<String, dynamic>))
.toList();
return Future.value(value);
}
}
我读过
json_serializable
负责生成这些方法。只需将其导入您的 pubspec dev_dependencies
部分,运行 flutter pub get
和 flutter pub run build_runner build
.
依赖项: 扑: SDK: 颤动 cupertino_icons: ^1.0.2 记录器:任何 改装:任何 json_annotation:任意
dev_dependencies: flutter_test: SDK: 颤动 build_runner:任意 retrofit_generator:任意 json_serializable:任意
所有retrofit相关包都使用这个版本的包 肯定有用