【问题标题】:Flutter - how to localize the setState()?Flutter - 如何本地化 setState()?
【发布时间】:2021-11-01 16:47:00
【问题描述】:

我们可以从官方文档中阅读:

当在状态上调用 setState() 时,所有后代小部件都会重建。 因此,将 setState() 调用本地化到子树的一部分 其 UI 实际上需要更改。避免在高处调用 setState() 如果更改包含在树的一小部分,则树。

那么“本地化 setState()”到底是什么意思?我该怎么做?

【问题讨论】:

    标签: flutter


    【解决方案1】:

    这意味着最好在唯一需要更新的小部件上调用 setState()。 我们来看一个例子:

    Column(
      children:[
        FooWidget() //which you wanna update(rebuild)
        AnotherWidget() //wich you don't want to rebuild
      ],
    )
    

    如果你用一个有状态的小部件包裹整个专栏,那么任何时候你使用 setState(),FooWidget()AnotherWidget() 都将重建,当然这不是你想要的 Flutter! 不需要更新是浪费硬件使用。

    因此,本地化 setState() 意味着您将 FooWidget() 设为有状态并在 'FooWidget()' 上调用 setState() 而不是整个列。

    【讨论】:

    • 如果我更改了根小部件中的变量,但该变量仅在 FooWidget() 中使用。有没有办法只重建 FooWidget()?
    • 如果该变量仅在FooWidget() 中使用,则不应在根目录中定义它。否则,您应该在该小部件中定义一个回调并通过该回调更新该变量的值。并在FooWidget() 的回调中使用 setState
    • 我该怎么做?我创建了一个回调并将其传递给 FooWidget(callback),然后我可以在 FooWidget() 之外调用诸如 callback.update() 之类的东西,是这样吗?
    • 首先,告诉我你想在哪里更新那个 var 的值?在FooWidget() 中还是在父级中?
    猜你喜欢
    • 2020-12-17
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 2019-12-21
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    相关资源
    最近更新 更多