首页 文章

flutter initState()vs build()?

提问于
浏览
2

我很困惑何时将我的代码放在 initState() 中与 build() 相比,在状态小部件中 . 我正在做一个关于flutter的udacity课程的测验,该课程有this todo项目,它将一块代码从 build() 移动到 initState() . 但我不知道这样做的目的或优势 . 为什么不把所有代码都放在 build() 中?

是_112025_只被调用一次,而 initState() 在每次状态变化时被调用?

谢谢 .

2 回答

  • 1

    这实际上恰恰相反 .

    在许多情况下可以再次调用 build . 如状态更改或父级重建 .

    initState 只被召唤一次 .

    build 应仅用于布局 . 而 initState 通常用于变量初始化 .

  • 5

    它位于您提供的link的构建状态中的注释中 .

    Widget build(BuildContext context) {
        // TODO: Instead of re-creating a list of Categories in every build(),
        // save this as a variable inside the State object and create
        // the list at initialization (in initState()).
        // This way, you also don't have to pass in the list of categories to
        // _buildCategoryWidgets()
         final categories = <Category>[];  
         ...
    

    在构建状态中创建类别列表将导致在每个构建上创建列表 . 这是必要的,因为你只想创建一次,所以最好的地方是initState(),因为它只会在创建状态对象时调用一次,从而消除了重新创建类别的成本 . 每个构建 .

    根据flutter doc:
    InitState

    将此对象插入树中时调用 . 框架将为它创建的每个State对象调用此方法一次 . 重写此方法以执行初始化,该初始化取决于此对象插入树中的位置(即上下文)或用于配置此对象的窗口小部件(即窗口小部件)

    build

    框架在许多不同的情况下调用此方法:调用initState之后 . 在调用didUpdateWidget之后 . 收到对setState的调用后 . 在此State对象的依赖项更改之后(例如,先前构建引用的InheritedWidget更改) .

相关问题