Я использую Provider для предоставления своего blo c виджету с именем TheGroupPage с помощью метода c create
static Widget create(BuildContext context, GroupModel group) {
final database = Provider.of<DatabaseService>(context);
return Provider(
create: (_) => GroupMembersBloc(database, group),
child: TheGroupPage(group),
dispose: (BuildContext context, GroupMembersBloc bloc) => bloc.dispose(),
);
}
Этот виджет имеет PageView () с 3 страницами
PageView(children: [
TheGroupNotificationsView(),
TheGroupMembersView(group),
TheGroupSettingsView(group),
])
Представление членов группы ищет GroupMembersBlo c
GroupMembersBloc bloc = Provider.of<GroupMembersBloc>(context);
Я также пытался поставить прослушивание false, но это не сработало. И я хочу, чтобы виджет прослушивал любые изменения. Страница использует этот поток blo c для составления списка членов группы
class GroupMembersBloc{
StreamController<List<UserModel>> _controller = StreamController<List<UserModel>>();
Stream<List<UserModel>> get stream => _controller.stream;
GroupMembersBloc(DatabaseService database, GroupModel group)
{
_controller.addStream(database.groupMembersStream(group));
}
void dispose(){
_controller.close();
}
}
Проблема в том, что когда я переключаю страницу внутри PageView (), я получаю сообщение об ошибке на странице после первого раза это было показано. Ошибка говорит Bad state: Stream has already been listened to.
как я могу решить эту проблему?