Вступить в клуб →
сложнаявопросFlutter и Dart: виджеты, рендер и асинхронность

Второй StreamBuilder на поток сообщений падает с «Stream has already been listened to»

class ChatRepository {
  final _controller = StreamController<List<Message>>();
  Stream<List<Message>> get messages => _controller.stream;
}

Список сообщений слушает поток через StreamBuilder — всё работает. Добавили в AppBar счётчик непрочитанных, тоже на repository.messages, — получили Bad state: Stream has already been listened to. Как правильно устроить поток?

  • Broadcast-поток и хранить последнее значение
  • Создавать новый StreamController в геттере
  • Отписывать первый StreamBuilder перед вторым
  • Вызывать asBroadcastStream в каждом виджете

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела