Flutter / Inject.dart - возможно ли упростить или сгенерировать код для «предоставленной» реализации класса? - PullRequest
0 голосов
/ 07 января 2020

Я провел некоторое исследование по инъекции зависимостей 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;
}

1 Ответ

0 голосов
/ 10 января 2020

Если вы хотите работать с 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, UserType и UserLocation, вы также можете получить к ним доступ.

...