конвертировать поток в список <String>во флаттере - PullRequest
1 голос
/ 28 мая 2020

Я пытаюсь преобразовать Stream<List<String>> to List<String> во флаттер, вот мой код

Stream<List<String>> _currentEntries;

/// A stream of entries that should be displayed on the home screen.
Stream<List<String>> get categoryEntries => _currentEntries;

_currentEntries заполняется данными из базы данных. Я хочу преобразовать _currentEntries в List<String>

Я пробовал следующий код, но не работает

List<List<String>> categoryList () async  {
  return await _currentEntries.toList();
}

Я получаю следующую ошибку:

A значение типа List> не может быть возвращено из метода categoryList, потому что он имеет тип возврата List>

Может ли кто-нибудь помочь, как решить эту проблему и преобразовать Stream<List<String> в List<String>?

Ответы [ 3 ]

2 голосов
/ 28 мая 2020

Похоже, проблема связана с возвращаемым типом categoryList. Вы возвращаете как List из List s, когда Stream содержит только один слой List. Тип возврата должен быть Future<List<String>>.

Используйте .first, .last или .single в дополнение к await, чтобы получить только один элемент, а toList() следует удалить.

Future<List<String>> categoryList () async  {
  return await _currentEntries.first;
}

Также небольшой совет: Dart автоматически генерирует геттеры и сеттеры для всех полей, поэтому показываемый вами метод получения не требуется.

0 голосов
/ 28 мая 2020

Я понятия не имею, что Stream может ждать для вызова API с сервера, в моем случае я использую шаблон BLO C и использую Future<List<String>> getCategoryList async () {...} и для получения списка, который я собираюсь используйте это так:

Future<List<String>> getCategory() async {
    var result = await http.get();
    //Some format and casting code for the String type here
    return result;
}

Надеюсь на эту помощь

0 голосов
/ 28 мая 2020

Вы можете преобразовать только Stream<T> в Future<List<T>>, потому что вы не можете преобразовать асинхронный в синхронный.

...