首页 > 解决方案 > Flutter / Inject.dart - 是否可以为“提供的”类实例化简化或生成代码?

问题描述

一直在做一些 Flutter 依赖注入的研究,我选择了 Inject.dart

但是,我在使用注入时遇到了一些问题。

有没有办法简化注入类的实例化?

我有这个 MyClass,我需要通过 HomeStore 实例化它,但是,如何在不调用全局访问器的情况下实例化它?(例如在 Injector 文件上制作的那些)。

看来我可以只使用 Get_It 包,否则会得到相同的结果,并且无需代码生成,但我不太喜欢整个全局访问。

我的样本:

// current code
class MyClass(){
    store = HomeStore(AppInjector().globalHudStore, AppInjector().globalErrorStore);
}
// desired code
class MyClass(){
    @instance ?
    store = HomeStore();

    store = HomeStore.instanciate?();
}
class HomeStore {
  @provide
  HomeStore(this._globalHudStore, this._globalErrorStore);

  final GlobalHudStore _globalHudStore;
  final ErrorStore _globalErrorStore;
}

标签: flutterdependency-injectionservice-locatorflutter-provider

解决方案


如果您愿意使用 json,您可能需要考虑这个包json_serializable。只需在 中搜索即可pub.dev

我可以举一个小例子。假设您有一个User班级/模型。

part 'user.g.dart';

@JsonSerializable()
class User {
  int id;
  @JsonKey(name: 'user_type_id')
  int userTypeId;
  String email;

  @JsonKey(name: 'user_detail')
  UserDetail userDetail;
  @JsonKey(name: 'user_type')
  UserType userType;
  @JsonKey(name: 'user_location')
  UserLocation userLocation;

  User();

  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);

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

并且您User通过 API 获取数据,并希望创建一个User变量并用数据填充它,而无需手动执行此操作。

你实际上可以用这行代码做到这一点

User user = User.fromJson(jsonUser);

这些甚至会自动 json 序列化你的类中的User类,只要这些类也是 json 可序列化的,它是用定义的@JsonSerializable()

因此,即使只有那一行代码,如果jsonUser来自 API 的 也具有、 和的值UserDetail,您也可以访问它们。UserTypeUserLocation


推荐阅读