Flutter 颤振:BlocBuilder没有更新,尽管我在调试器中看到了新的/不同的状态
我今天第二件奇怪的事。当我跟随bloc.dart(库,而不是我的文件)中的调试器时,我看到Flutter 颤振:BlocBuilder没有更新,尽管我在调试器中看到了新的/不同的状态,flutter,state,bloc,Flutter,State,Bloc,我今天第二件奇怪的事。当我跟随bloc.dart(库,而不是我的文件)中的调试器时,我看到transition.nextState==state&&u emissed是false,它不会更新我的小部件(nextState的列表大小为2,state的列表大小为10-\u emissed为true)。据我所知,建设者应该是好的,有没有其他地方可以看看为什么它不更新 在我展示代码之前先解释一下逻辑 我在应用程序启动时使用 BlocProvider(create: (context) => L
transition.nextState==state&&u emissed
是false
,它不会更新我的小部件(nextState的列表大小为2,state的列表大小为10-\u emissed为true)。据我所知,建设者应该是好的,有没有其他地方可以看看为什么它不更新
在我展示代码之前先解释一下逻辑
BlocProvider(create: (context) =>
LogicGraphsPStmntBloc(logicGraphsRepository:
logicGraphsRepository)..add(LogicGraphsNextProblemRequested()),
LogicGraphsPStmntLoadSuccess(语句)
发送,并正确呈现为按钮
onPressed:(){BlocProvider.of(context).add(LogicGraphsPStmntCollapsed(语句:index-1));},
yield LogicGraphsPStmntLoadSuccess(statementsShown)代码>现在列表中只有2个元素(与步骤3中的10个相比),但不会导致重新排序
抽象类LogicGraphsPStmntState扩展了Equalable{
常量LogicGraphsPStmntState();
@凌驾
列表获取道具=>[];
}
类LogicGraphsPStmntLoadSuccess扩展了LogicGraphsPStmntState{
常量逻辑图HSPSTMNTLOADSUCCESS([this.statements=const[]);
最后清单说明;
@凌驾
列表获取道具=>[];
@凌驾
String-toString()=>“LogicGraphsPStmntLoadSuccess{statements:$statements}”;
}
my bloc(不完全是,因为释放状态的子函数中的代码未达到中所述的状态。因此,目前我在mapEventToState中将这些子函数行作为意大利面条=
class LogicGraphsPStmntBloc扩展了Bloc{
LogicGraphsPStmntBloc({@required this.LogicGraphRepository}):超级(LogicGraphsPStmntInProgress());
最终逻辑图存储库逻辑图存储库;
清单说明;
int currentProblem=-1;
@凌驾
Stream mapEventToState(LogicGraphSpstmentEvent事件)异步*{
if(事件为LogicGraphNextProblemRequested){
_mapLGPStmntNewProblemRequested();
_mapLGPStmntLoadRequested(当前问题);
}
else if(事件为LogicGraphsPStmntLoadRequested){
_mapLGPStmntLoadRequested(当前问题);
}
else if(事件为LogicGraphsPStmntCollapsed){
_mapLGPStmntCollapseRequested(事件);
}
流_mapLGPStmntNewProblemRequested()异步*{
试一试{
当前问题=
等待getNextProblem(currentProblem==null?-1:currentProblem);
声明=
等待LogicgraphRepository.getProblemStmntList(currentProblem);
_mapLGPStmntLoadRequested(当前问题);
}接住{
屈服逻辑图hspstmntloadfailure();
}
}
Stream _mapLGPStmntLoadRequested(整数问题)异步*{
试一试{
收益逻辑图HSPSTMNTLOADSUCCESS(语句);
}接住{
屈服逻辑图hspstmntloadfailure();
}
}
已请求的流_mapLGPStmntCollapseRequested(
LogicGraphsPStmntCollapsed事件)异步*{
列表语句shown=[];
语句聚焦=event.statement;
语句shown.add(语句[0]);
语句shown.add(语句[语句聚焦]);
产量逻辑图HSPSTMNTLOADSUCCESS(说明);
}
}
我的小部件
类LogicGraphPage扩展了无状态小部件{
最终LogicGraphRepository LogicGraphRepository=LogicGraphRepository(
logicGraphsApiClient:logicGraphsApiClient());
@凌驾
小部件构建(构建上下文){
返回式CupertinoPageScaffold(
孩子:BlocProvider(
创建:(上下文)=>
LogicGraphsPStmntBloc(LogicGraphRepository:LogicGraphRepository)
…添加(LogicGraphsNextProblemRequested()),
孩子:BlocBuilder(
生成器:(上下文、状态){
if(状态为LogicGraphsPStmntLoadSuccess){
最终列表声明=state.statements;
返回ListView.builder(
itemCount:statements.length,
itemBuilder:(构建上下文,int索引){
返回CupertinoButton(
填充:边缘集。全部(0),
子项:文本(语句[索引])
onPressed:(){BlocProvider.of(context).add(LogicGraphsPStmntCollapsed(语句:index-1));},
);
});
}
else返回容器();
}
)
),
);
}
}
bloc.dart库中的函数,我将在其中假设新状态已发出。您会看到行if(transition.nextState==state&&&&u emitted)返回;
。下一个状态有2个元素,state有10个元素,\u emitted为true,因此我假设代码将继续。相反,将触发返回并发出带有的行(transition.nextState);
被跳过
非常感谢您的帮助,因为这是我第一次使用BLoC/equatable和Flatter,总体来说对我来说还是很新的。但我正在进步
void\u bindEventsToState(){
_transitionSubscription=transformTransitions(
变革事件(
_eventController.stream,
(事件)=>mapEventToState(事件).map(
(nextState)=>转换(
当前状态:状态,
事件:事件,,
下一个状态:下一个状态,
),
),
),
).听着(
yield LogicGraphsPStmntChangeStatement;
yield LogicGraphsPStmntLoadSuccess(statementsShown);