Начальное состояние блока больше не испускается

У меня есть блок, который слушает другой блок. После обновления пакета flutter_bloc до version 6.0.2 слушатель больше не будет вызывать в исходном состоянии.

class BlocA extends Bloc {
  final BlocB blocB = ...;

  ...

  blocA.blocB.listen((state) {
    DO SOMTTHING...
  });

  ...
}

Я нашел такое решение:

class BlocB extends Bloc<..., ...> with BehaviorSubjectBloc {
  ...
}

mixin BehaviorSubjectBloc<TEvent, TState> on Bloc<TEvent, TState> {
  @override
  StreamSubscription<TState> listen(
    void Function(TState state) onData, {
    Function onError,
    void Function() onDone,
    bool cancelOnError,
  }) {
    onData(this.state);

    return super.listen(
      onData,
      onError: onError,
      onDone: onDone,
      cancelOnError: cancelOnError,
    );
  }
}

Интересно, есть ли лучшее решение?


person Hamed    schedule 20.08.2020    source источник
comment
Что вам нужно сделать? Разве для вас не решение получить доступ к blocA.state из конструктора BlocB и рассматривать это как частный случай? Это известное критическое изменение (к сожалению), которое было задокументировано на (Страница миграции] (bloclibrary.dev / # /).   -  person jorjdaniel    schedule 10.11.2020


Ответы (1)


В репозитории flutter_bloc есть проблема:
https://github.com/felangel/bloc/issues/1641

Проблема находится в списке дел.
Вы можете исправить свой yaml, чтобы принудительно использовать предыдущую версию, используя одинарные кавычки и удалив ^ или любые другие символы. Удалите папку ~/.pub-cache/... и файл pubspec.lock, снова запустите flutter packages get и будьте счастливы.

Обратите внимание, что папка pub-cache является общей для всех ваших проектов, поэтому вы можете попытаться удалить только определенный пакет внутри нее.
Вы можете исследовать транзитивные зависимости, используя flutter packages pub deps, чтобы увидеть flutter_bloc зависимости и удалить их тоже.

person Rod    schedule 23.08.2020
comment
Просто завершение вашего ответа: эти критические изменения указаны в Переход на документацию 6.0.0. - person jorjdaniel; 10.11.2020