Как присвоить значение абстрактному объекту в Dart? - PullRequest
0 голосов
/ 13 февраля 2020

У меня вопрос по Дарту, в моем коде мне нужно получить несколько объектов для перевода их значений. Основная проблема, которую я пытаюсь решить: я не могу изменить свойства абстрактного объекта (см. Пример ниже)!

Чтобы сделать это, я создал абстрактный класс с именем «TranslatableModel», например:

abstract class TranslatableModel {
  List<Object> translatableItems();
}

Мои другие классы расширяются TranslatableModel следующим образом:

class Game extends TranslatableModel {
  String item1;
  String item2;
  String item3;

  [...]

  @override
  List<Object> translatableItems() {
    return [
        item1,
        item3
      ];
    }
  }

И в моем сервисе я хотел бы перевести все переводимые предметы:

Future<TranslatableModel> translateDataModel(
      TranslatableModel aTranslatableModel) async {
    List<Future> metaDataToTranslateList = new List<Future>();

    aTranslatableModel.translatableItems().forEach((item) {
      metaDataToTranslateList.add(translator.translate(item,
          from: 'en', to: targetLanguage.languageCode));
    });

    return Future.wait(metaDataToTranslateList).then((List responses) {
      if (responses != null &&
          responses.length == aTranslatableModel.translatableItems().length) {
        var i = 0;
        aTranslatableModel.translatableItems().forEach((item) {
          item = responses[I]; // This doesn't work, item is not modified!
        });
      }
      // The returned translated model is untouched... :/
      return aTranslatableModel;
    });
  }

Для получения информации, aTranslatableModel .translatableItems () возвращает хорошие значения, а список ответов содержит все переведенные значения в виде списка в правильном порядке. Но я не могу добиться применения переведенных значений к моему объекту TranslatableModel: /

Любая помощь будет принята с благодарностью!

Заранее спасибо!

...