показывать предупреждение о состоянии локтя при трепете

Я знаю, что мы можем возвращать разные виджеты в определенном состоянии Cubit, но как мы можем показать предупреждение или другие взаимодействия в состояниях:

BlocBuilder<LoginCubit, LoginState> (
  builder: (context, LoginState loginState) {
    if (loginState is LoginInitial) {
      return Text("LoginInitial");
    } else if (loginState is LoginLoading) {
      return Text("LoginLoading");
    } else if (loginState is LoginLoaded) {
      return Text("LoginLoaded");
    } else if (loginState is LoginError) {
      return Text("LoginError");
    } else {
      return Container();
    }
  },
)

здесь, в LoginError, я хочу показать диалоговое окно с предупреждением.


person SinaMN75    schedule 19.10.2020    source источник
comment
Разве нельзя просто вызвать функцию showDialog(AlertDialog dialog) перед возвратом текста (LoginError)? Часть возврата должна строить виджет, который вы показываете, в то время как showDialog строит диалог на другом слое.   -  person Chris Marx    schedule 19.10.2020
comment
нет, он вернул мне ошибку, просто принимает виджет.   -  person SinaMN75    schedule 19.10.2020


Ответы (1)


Вы можете использовать BlocConsumer, который имеет как builder, так и listener:

  • Атрибут builder - это уже известный вам обратный вызов конструктора виджетов.
  • listener - это обратный вызов, который вызывается при изменении состояния, и вы можете делать там практически все, что угодно.

Для более детального управления вы можете использовать buildWhen и listenWhen, которые вызывают соответственно обратные вызовы builder или listener, если они возвращают true.

Например, вы можете увидеть, как я использовал BlocConsumer для отображения SnackBar при возникновении состояния ошибки здесь.

Не обращайте внимания на двойную проверку типа

if (state is RegionalReportLoadingError)

потому что это, вероятно, бесполезно (согласно документации), и я просто хотел быть уверенным в этом, когда у меня не было четкого использования listenWhen.

Вы можете узнать больше о BlocConsumer в документации (к сожалению, я не могу связать привязку).

person magicleon94    schedule 19.10.2020
comment
Я знаю, и это круто! : D - person magicleon94; 19.10.2020