当前位置: 首页 > 面试题库 >

flutter_bloc的BlocBuilder是否可以避免重建未更改的Widget部分?

闻人博
2023-03-14
问题内容

BlocBuilderflutter_bloc一种是将页面的所有状态放在一起。

有一个案例pulling a list有2个数据(isPullingStatedataList),我怎么能避免生成控件DataList控件的一部分时dataList没有变化,但构建部件部分isPullingState,从改变
假的

BlocBuilderCondition 看起来只有避免孔状态不变时才避免重建。


问题答案:

BlocBuilder有optinal参数condition具有类型bool Function(State previous, State current),你需要返回true,如果你想了Widget调用builder函数,false如果你不想要的。此参数是可选的,默认情况下为true

因为在condition参数中您具有previous状态和状态,所以current您可以比较此状态的属性,并true在满足比较条件时返回。

请记住,您需要覆盖
==运算符hashCode状态以及在状态类中使用的所有类。简单的方法是使用equatable。

在您的情况下,您需要State像这样:

class MyState extends Equatable {
  final bool isPullingState;
  final List<MyClass> dataList;

  MyState(this.isPullingState, this.dataList)
      : super([isPullingState, dataList]);
}

class MyClass extends Equatable {
  final int property1;
  final int property2;

  MyClass(this.property1, this.property2)
      : super([
          property1,
          property2,
        ]);
}

然后,您可以在小部件中设置所需的条件:

@override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        BlocBuilder(
          bloc: myBloc,
          condition: (MyState previous, MyState current) =>
              previous.isPullingState != current.isPullingState,
          builder: (BuildContext context, MyState state) {
            // this function is only called when isPullingState change
            return MyIsPullingWidget();
          },
        ),
        BlocBuilder(
          bloc: myBloc,
          condition: (MyState previous, MyState current) =>
              previous.dataList != current.dataList,
          builder: (BuildContext context, MyState state) {
            // this function is only called when the dataList change
            return MyListWidget(state.dataList);
          },
        ),
        BlocBuilder(
          bloc: myBloc,
          builder: (BuildContext context, MyState state) {
            // this function is called in each state change
            return MyListWidget(state.dataList);
          },
        ),
      ],
    );
  }


 类似资料:
  • 我一直在思考jvm安全的工作方式。原则是,jvm始终信任并运行任何本地代码。因此,从概念上讲,如果您的代码没有显式或隐式调用<code>checkpermission(permission)</code>,这意味着它永远不会失败任何安全验证。当然,所有这些验证调用通常都是在JavaAPI类中完成的,因此我们不需要为内置权限调用它们。 现在,只要您使用内置类(如<code>FileOutputStr

  • Facebook React鼓励您将可变()和不可变()状态分开: 尽量让您的组件尽可能多的无状态。通过这样做,您可以将状态隔离到最符合逻辑的位置,并最大限度地减少冗余,从而更容易对应用程序进行推理。 当状态改变时,您应该调用来触发虚拟DOM diff,只有在需要时才会导致真正的DOM更新。 有一种方法可以通过调用手动触发DOM更新,但不鼓励: 通常情况下,您应该尽量避免使用,并且只从和中的读取。

  • 我大致了解了TensorFlow图在评估它包含的之一时是如何评估的:该张量的或的执行将触发图中所需的所有级联计算计算该张量的值,因此,图中“导致它”的任何张量也将被计算,并且连接它们的任何操作都将被运行。 因此,如果我有一个包含张量out\u a的图,其计算涉及(可能在许多其他事情中)使用int\u b的操作,这反过来(最终)需要执行本身(最终)使用in的操作 将只评估、和一次:和的计算都使用的相

  • 问题内容: 是否可以“监视”指令上的ui更改?像这样的东西: 问题答案: 是。您可以使用,如果你在属性利用插值。 但是,如果这不是一个插值属性,并且您希望它可以从应用程序中的其他位置更改(绝对不建议这样做,请阅读Common Pitfalls ),那么函数可以返回: 无论如何,对您来说最好的方法可能是更改更改元素类的代码。它何时更改?

  • 我正在尝试返回Json文件的内容。但是我想在将其发送到前端之前进行修改。我想在文件的开头和结尾添加“[”和“]”。我这样做是因为json文件有。 例如,提取结果,如图所示 问题 是否可以更改响应主体并将其放回ResponseEntity? 源代码

  • 我试图只获得新版本的行已更改,而不是git diff显示的所有其他信息。 用于: 它显示: 我想看到的只是: 可能吗?

  • 例如: 用例1: 我想将上面的查询传递给一个实用工具类,该类将只使用不同的SELECT生成相同的查询,例如: 目前,我在应用程序代码中的查询构造时使用助手类来完成这一任务。我想把责任转移到一个库,这样它就可以透明地强制应用程序。 谢了。

  • 问题内容: 建议在HTML页面中使用表格(现在已经有了CSS)? 表格有什么用途?表具有哪些CSS所没有的功能? 问题答案: 一点都不。但是将表格用于表格数据。只是不要将它们用于一般布局。 但是,如果您显示表格数据(例如结果或什至是表格),请继续使用表格!