Flutter 颤振initState()与build()?
与有状态小部件中的Flutter 颤振initState()与build()?,flutter,state,Flutter,State,与有状态小部件中的build()相比,我对何时将代码放入initState()感到困惑。我正在做一个关于Flatter的udacity课程的测验,该课程有一个待办事项,就是将一块代码从build()移动到initState()。但我不知道这样做的目的和好处。为什么不把所有的代码都放到build()中呢 是不是每次状态更改都只调用一次build(),而调用initState() 谢谢。事实恰恰相反 build在许多情况下都可以再次调用。例如状态更改或父级重建 而initState只调用一次 bui
build()
相比,我对何时将代码放入initState()
感到困惑。我正在做一个关于Flatter的udacity课程的测验,该课程有一个待办事项,就是将一块代码从build()
移动到initState()
。但我不知道这样做的目的和好处。为什么不把所有的代码都放到build()
中呢
是不是每次状态更改都只调用一次build()
,而调用initState()
谢谢。事实恰恰相反
build
在许多情况下都可以再次调用。例如状态更改或父级重建
而initState
只调用一次
build
应仅用于布局。而initState
通常用于变量初始化 它位于您提供的构建状态中的注释中
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>[];
...
小部件构建(构建上下文){
//TODO:不是在每个生成()中重新创建类别列表,
//将其另存为状态对象内的变量并创建
//初始化时的列表(在initState()中)。
//这样,您也不必将类别列表传递给
//_buildCategoryWidgets()
最终类别=[];
...
在生成状态下创建类别列表将导致在每个生成上创建列表。这是必要的,因为您只希望创建一次,所以最好在initState()中执行此操作因为在创建state对象时只调用一次,因此消除了在每个构建上重新创建类别的成本
根据颤振文件:InitState 将此对象插入树时调用。
框架将为其创建的每个状态对象准确调用此方法一次。
重写此方法以执行初始化,该初始化取决于此对象插入到树中的位置(即上下文)或用于配置此对象的小部件(即小部件) 构建 框架在许多不同的情况下调用此方法:
在调用initState之后。
调用didUpdateWidget后。
在接到对setState的呼叫后。
此状态对象的依赖项更改后(例如,先前构建更改引用的继承小部件)
因此,如果我们通过initstate初始化列表并希望更新该列表的一些元素,我们将如何做?我们将从构建内部调用setstate以使这些更改显示在我们的ui中吗?那么如果我们通过initstate初始化列表并希望更新该列表的一些元素,我们将如何做?我们将从构建内部调用setstate以使这些更改显示在我们的ui中吗让这些变化出现在我们的ui@SanjaySingh使用
didUpdateWidget
或didChangeDependencies
我也没有使用过。我只是想知道当我使用initstate初始化变量时,会发生什么,或者该怎么做,现在我想在列表中进行更改,然后在ui中显示