如何多次触发具有相同状态的块侦听器?

时间:2021-06-09 13:34:03

标签: flutter bloc

如果没有互联网连接,我的集团将返回 NetworkErrorState。它将显示一个带有“再试一次”按钮的小部件。当我在仍然没有互联网连接的情况下按下按钮时,它将返回相同的状态和相同的消息和失败。我将如何以相同的状态再次触发 bloc 侦听器?

区块状态:

 class NetworkErrorState extends MyBlocState {
      final String message;
      final Failure failure;
    
      NetworkErrorState ({this.failure, this.message});
      @override
      List<Object> get props => [failure, message];
    }

异常:

class ServerException implements Exception {
  final String message;

  ServerException({this.message});
}

失败:

abstract class Failure extends Equatable {
  final List properties = const <dynamic>[];
  Failure([properties]);

  @override
  List<Object> get props => properties;
}

class ServerFailure extends Failure {
  final String message;

  ServerFailure({this.message});
  @override
  List<Object> get props => [message];
}

1 个答案:

答案 0 :(得分:0)

我认为这是不可能的,按照设计。但我看到了两个非常可行的选择。我可能会选择 1 号......

  1. 在您的两个 NetworkErrorStates 之间发出不同的状态。按下“再试一次按钮”(被调用的函数)可以首先发出例如重试连接状态。那么你的用户界面可以显示一些不错的东西吗?

或者...

  1. 另一种解决方法是传递一个带有更改状态的额外变量,这样它就不会被识别为相同的状态(确保 equatable props 考虑到该变量)。它可以例如是重新连接尝试次数或上次重试时的时间戳。