В pubspec.yaml я использую библиотеку english_words для генерации пар слов:
dependencies:
flutter:
sdk: flutter
# Contains a few thousand of the most used English words
# plus some utility functions.
english_words: ^3.1.0
Теперь класс WordPair не является подтипом String, и поэтому я не могу использовать лямбда-выражения или функции Iterable, такие как cast или retype, для «приведения» WordPairs к строкам.
Итак, мне пришлось написать функцию getWords ().
См. Ниже файл Dart, Model.dart, который содержит эту реализацию.
Вы увидите закомментированную старую строку, в которой она возвращала в метод получения тип Iterable.
Был бы более эффективный способ сделать это?
Например, я не хотел привлекать List List к преобразованию, но я не могу найти другого способа успешно это сделать.
Спасибо.
---------------- Model.dart
import 'package:english_words/english_words.dart' show WordPair, generateWordPairs;
import 'dart:collection';
/// Model Class
///
class Model {
String get randomWordPair => new WordPair.random().asPascalCase;
// Iterable<WordPair> get wordPairs => generateWordPairs().take(10);
Iterable<String> get wordPairs => getWords();
Iterable<String> getWords(){
Iterable<WordPair> pairs = generateWordPairs().take(10);
ListWords<String> words = new ListWords();
for (var pair in pairs) {
words.add(pair.asString);
}
return words;
}
}
class ListWords<E> extends ListBase<E> {
final List<E> l = [];
set length(int newLength) { l.length = newLength; }
int get length => l.length;
E operator [](int index) => l[index];
void operator []=(int index, E value) { l[index] = value; }
}