【问题标题】:BlocListener not being executed after Cubit function call在 Cubit 函数调用后未执行 BlocListener
【发布时间】:2021-09-05 22:43:22
【问题描述】:

所以,我有一个带有 POST 数据功能的肘位。我有三个州,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
        }
      },
    );
  }
),

我尝试在read() 调用中使用await,但没有奏效。我如何对这里的状态变化做出反应?谢谢。

【问题讨论】:

  • 你的意思是当状态更新时你的监听器没有反应?
  • 是的。当我发出一个状态但没有发生时,应该采取一些行动。

标签: flutter bloc flutter-bloc cubit


【解决方案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);
        });
      },
 ),

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    相关资源
    最近更新 更多