[曾经对Flutter依赖注入进行了一些研究,而我最终选择了Inject.dart
但是,使用注射时遇到了一些麻烦。
是否有任何方法可以简化注入的类的实例化?
我有这个MyClass,我需要实例化传递HomeStore,但是,如何在不调用全局acessors的情况下对其进行实例化? (例如在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;
}
如果您愿意使用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);
[这些甚至会自动对您的User
类中的类进行json序列化,只要这些类也可以json可序列化(由@JsonSerializable()
定义])>
因此,即使仅使用一行代码,如果来自API的jsonUser
也具有UserDetail
,UserType
和UserLocation
的值,您也可以访问它们。