颤振:在 BLoC 中,事件比较失败,尽管使用 equatbale

Posted

技术标签:

【中文标题】颤振:在 BLoC 中,事件比较失败,尽管使用 equatbale【英文标题】:flutter: in BLoC, event comparison fails, though using equatbale 【发布时间】:2021-01-05 03:18:51 【问题描述】:

我即将开始运行我的第一个基于 BLoC 的功能(尽管在这里搜索我的问题提供了对未来更多陷阱的洞察)。那些不同的教程和文档,指的是不同的 BLoC 版本,或者只是针对同一个问题使用不同的方法,这让人很困惑。

我目前坚持比较事件以映射到我的 _bloc 文件中的适当状态。即使事件在调试器中显示相同的值 (event = LogicGraphsNextProblemRequested),if (event == LogicGraphsNextProblemRequested) 也提供了false

我在 StateLessWidget 中触发了这个

  @override
  Widget build(BuildContext context) 
    BlocProvider.of<LogicGraphsPStmntBloc>(context)
        .add(LogicGraphsNextProblemRequested());

事件、集团等定义如下

// =========== BLOC ================

class LogicGraphsPStmntBloc extends Bloc<LogicGraphsPStmntEvent, LogicGraphsPStmntState> 
  LogicGraphsPStmntBloc(@required this.logicGraphsRepository)
      : super(LogicGraphsPStmntInProgress());
  final LogicGraphsRepository logicGraphsRepository; within mapEventToState
  int currentProblem;

  @override
  Stream<LogicGraphsPStmntState> mapEventToState(
      LogicGraphsPStmntEvent event) async* 
    if (event == LogicGraphsNextProblemRequested) 
      _mapLGPStmntNewProblemRequested(currentProblem);
    
    else if (event == LogicGraphsPStmntLoadRequested) 
      _mapLGPStmntLoadRequested(currentProblem);
    
  


// =========== EVENTS ================

abstract class LogicGraphsPStmntEvent extends Equatable 
  const LogicGraphsPStmntEvent();

  @override
  List<Object> get props => [];


class LogicGraphsNextProblemRequested extends LogicGraphsPStmntEvent 

class LogicGraphsPStmntLoadRequested extends LogicGraphsPStmntEvent 

// =========== STATES ================

abstract class LogicGraphsPStmntState extends Equatable 
  const LogicGraphsPStmntState();
  @override
  List<Object> get props => [];


class LogicGraphsPStmntInProgress extends LogicGraphsPStmntState 


class LogicGraphsPStmntLoadSuccess extends LogicGraphsPStmntState 
  const LogicGraphsPStmntLoadSuccess([this.statements = const []]);
  final List<String> statements;

  @override
  List<Object> get props => [];

  @override
  String toString() => 'LogicGraphsPStmntLoadSuccess  statements: $statements ';


class LogicGraphsPStmntLoadFailure extends LogicGraphsPStmntState 

相关问题: 这是为该页面请求初始数据馈送的正确方法吗?当我打开该屏幕时,应用程序将从一堆随机问题中选择一个,并(首先)显示该问题的陈述列表。所以我想知道,上面的方法是否会创建一个无限循环来请求一个新问题,这也会自动导致将语句输入到该屏幕,并且返回语句的新呈现再次询问一个新问题。

【问题讨论】:

【参考方案1】:

当您使用 equatable 包检查变量的类型时,请尝试将 '==' 替换为 'is'。

像这样:

@override
Stream<LogicGraphsPStmntState> mapEventToState(
    LogicGraphsPStmntEvent event) async* 
  if (event is LogicGraphsNextProblemRequested) 
    _mapLGPStmntNewProblemRequested(currentProblem);
  
  else if (event is LogicGraphsPStmntLoadRequested) 
    _mapLGPStmntLoadRequested(currentProblem);
  

【讨论】:

抱歉这个愚蠢的问题。这也是我第一次使用 equatable 并且我没有意识到这种差异。有道理。

以上是关于颤振:在 BLoC 中,事件比较失败,尽管使用 equatbale的主要内容,如果未能解决你的问题,请参考以下文章

Flutter - 转换颤振 bloc 事件以添加去抖动

颤振:如何使用“等待”等待其他 BLoC 事件完成

BLoC 的事件映射器未执行,尽管调试表明它应该 8-/

Flutter bloc同时添加2个事件

如何在不使用任何库的情况下在颤振中使用 bloc

颤振和块异步产量