У меня вопрос по Дарту, в моем коде мне нужно получить несколько объектов для перевода их значений. Основная проблема, которую я пытаюсь решить: я не могу изменить свойства абстрактного объекта (см. Пример ниже)!
Чтобы сделать это, я создал абстрактный класс с именем «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: /
Любая помощь будет принята с благодарностью!
Заранее спасибо!