Flutter / Inject.dart-是否可以为“提供的”类实例简化或生成代码?

问题描述 投票:0回答:1

[曾经对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;
}
flutter dependency-injection service-locator flutter-provider
1个回答
0
投票

如果您愿意使用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也具有UserDetailUserTypeUserLocation的值,您也可以访问它们。

© www.soinside.com 2019 - 2024. All rights reserved.