Flutter 颤振集团库和性能体系结构

Flutter 颤振集团库和性能体系结构,flutter,bloc,Flutter,Bloc,我目前正在尝试将bloc_库作为州管理库,但我想知道如何以性能的方式集成它。BlocBuilder确实有一个“buildWhen”属性,但当整个BlocBuilder正在重建时,这几乎是无用的,因为父BlocBuilder决定重新渲染,还是我认为它错了?考虑下面的样本: class LogbookPage extends StatelessWidget { @override Widget build(BuildContext context) => Scaffold(

我目前正在尝试将bloc_库作为州管理库,但我想知道如何以性能的方式集成它。BlocBuilder确实有一个“buildWhen”属性,但当整个BlocBuilder正在重建时,这几乎是无用的,因为父BlocBuilder决定重新渲染,还是我认为它错了?考虑下面的样本:

class LogbookPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) => Scaffold(
      body: BlocBuilder<LogbookBloc, LogbookState>(builder: (context, state) {
        // this changes very frequently
        // (multiple times a second)
        if (state is Loading) {
          return null;
        } else {
          return Column(children: [
            BlocBuilder<LogbookBloc, LogbookState>(
                buildWhen: (old, cur) => !((old is Loaded) && (cur is Loaded) && old.recordIndex == cur.recordIndex),
                builder: (context, state) {
                  // this changes very frequently
                  // (multiple times a second)
                  return null;
                }),
            BlocBuilder<LogbookBloc, LogbookState>(
                buildWhen: (old, cur) => !((cur is Loaded) && (old is Loaded) && cur.logbook == old.logbook),
                builder: (context, state) {
                  // this changes actually NEVER!!
                  // and the buildWhen function will always return false except for the first time.
                  // the entire list consisting of thousends of elements is however being
                  // re-rendered whenever the recordIndex changes (multiple times a second)
                  // slowing down the framerate indefinitely
                  // because I guess the entire BlocBuilder is being rebuilt from scratch independently
                  // from what then stands in buildWhen

                  // HOW DO APPLY THE BLOC ARCHITECTURE WITHOUT THIS HAPPENING
                  return null;
                })
          ]);
        }
      }));
}
classlogbookpage扩展了无状态小部件{
@凌驾
小部件构建(构建上下文)=>Scaffold(
正文:BlocBuilder(生成器:(上下文,状态){
//这种变化非常频繁
//(每秒多次)
如果(状态为正在加载){
返回null;
}否则{
返回列(子项:[
BlocBuilder(
buildWhen:(old,cur)=>!((old已加载)&(cur已加载)&&old.recordIndex==cur.recordIndex),
生成器:(上下文、状态){
//这种变化非常频繁
//(每秒多次)
返回null;
}),
BlocBuilder(
buildWhen:(旧的,cur)=>!((cur已加载)和(旧的已加载)和&cur.logbook==旧的.logbook),
生成器:(上下文、状态){
//这种变化其实永远不会改变!!
//buildWhen函数将始终返回false,第一次除外。
//但是,由数千个元素组成的整个列表正在被删除
//每当recordIndex更改时重新渲染(每秒多次)
//无限期地降低帧速率
//因为我猜整个BlocBuilder都是从零开始独立重建的
//从那时起,我们站在什么地方
//如何在不发生这种情况的情况下应用集团架构
返回null;
})
]);
}
}));
}
我认为一个可能的解决方案可能是将数据加载方面和导航方面分为两个单独的部分,但我不喜欢根据UI的需要分散状态的想法(在我看来,这会产生一种间接依赖,因为重组UI需要重组集团结构,这与UI=f(状态)相矛盾)

有什么想法吗