Инъекция зависимости дротика - почему я не могу передать ссылку на экземпляр членам класса? - PullRequest
1 голос
/ 20 января 2020

В настоящее время я пишу приложение с использованием Flutter и начал рефакторинг управления состоянием с помощью MobX. Поскольку у меня есть несколько магазинов, которые будут взаимодействовать друг с другом, я попытался «соединить» эти магазины, как рекомендовано в рекомендациях MobX: https://mobx.js.org/best/store.html#combining -multiple-store .

Создать Магазин "root", в котором другие магазины хранятся как члены, каждый из которых содержит ссылку на магазин root.

По какой-то причине я не могу сделать эту, казалось бы, простую вещь. Я много искал, но не смог найти ответ.

Это в основном то, что я хочу сделать:

class StoreA {
  final Root _root;

  StoreA(this._root);
}

class root {
  final StoreA = StoreA(this);
}

Анализатор дротиков жалуется:

Неверная ссылка на выражение 'this'

Ответы [ 2 ]

4 голосов
/ 20 января 2020

Вы не можете использовать this в инициализаторах, но вы можете использовать его в конструкторе, если отбросите квалификатор final.

class Root {
  StoreA storeA;

  Root() {
    storeA = StoreA(this);
  }
}
1 голос
/ 20 января 2020

Ответ Ричарда Хипа в настоящее время является правильным, но в будущем выпуске Dart, который включает систему типов, не допускающих обнуление, вы сможете написать следующее:

class StoreA {
  final Root _root;

  StoreA(this._root);
}

class root {
  late final StoreA = StoreA(this);
}

Вы можете увидеть спецификация для необнуляемых по умолчанию (NNBD) и связанных функций, таких как late поля в хранилище языка Dart .

...