1

所以,我有一个带有 POST 一些数据的函数的cubit。我有三个状态,DataLoadingDataErrorDataLoaded我的肘。

当用户点击一个按钮时,我调用cubit中的函数。之后,我有一个 BlocListener 等到 Cubit 发出DataLoaded状态。问题是侦听器正在对状态变化做出反应。

Button(
  text: 'Add',
  onTap: () {
    final data = _textController.text;
    
    context.read<PostDataCubit>().post(data);

    BlocListener<PostDataCubit, PostDataState>(
      listener: (context, state) {
        if (state is DataLoaded) {
          // navigate to another route
        } else if (state is DataError) {
          // show error
        }
      },
    );
  }
),

我试过awaitread()通话中使用,但没有奏效。我如何对这里的状态变化做出反应?谢谢。

4

1 回答 1

1

BlocListener不是在侦听,因为您已在函数中添加了侦听器,而不是将其添加到小部件树中。将您的按钮包裹在BlocConsumer小部件内,它会正常工作。看看下面的代码。

BlocListener<PostDataCubit, PostDataState>(
  listener: (context, state) {
     if (state is DataLoaded) {
          // navigate to another route
      } else if (state is DataError) {
           // show error
       }
    },
   builder: (context, state) {
     return Button(
        text: 'Add',
         onTap: () {
           final data = _textController.text;

            context.read<PostDataCubit>().post(data);
        });
      },
 ),
于 2021-06-22T10:50:27.900 回答