Flutter / Inject.dart - 是否可以简化或生成'provided'类实例化的代码?



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

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

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

我有这个 MyClass,我需要实例化传递 HomeStore,但是,如何在不调用全局 acessor 的情况下对其进行初始化?(例如在注入器文件上制作的那些(。

似乎我可以用 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;
}

如果您愿意使用 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);
}

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

实际上,您只需使用这一行代码即可做到这一点

User user = User.fromJson(jsonUser);

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

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