问题标签 [statefulwidget]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
flutter - 为具有 TextEditingController 作为子控件的子控件选择 StatelessWidget 或 StatefulWidget
我正在重构代码以分离一小块小部件。每一个都有几列TextFields
。我有两个选项来完成任务:
选择
StatelessWidget
,因为它具有更高的性能,可能会将 TextEditingController 相关代码放在子小部件之外。onChanged
或者在事件中包含一些逻辑。但是仍然有一些事件,例如clear text
无法放入onChanged
事件选择我是否在每个子小部件中
StatefulWidget
使用包含。TextEditingController
如何在将代码重构为这样的小部件之间StatelessWidget
以及何时进行选择?StatefulWidget
更新
这是我目前的结论,如果不正确,可以更新。
- 更喜欢放在parent
FocusNode
中TextEdit
,因为它与兄弟 focusNode 和 parentNode 相关; - 更喜欢放入父级,这在诸如滚动到屏幕外的
TextEdtingController
情况下很有用,这将使整个小部件卸载。状态将被保留。TextField
ListItem
- 当自己输入错误时,更喜欢
animation self
像摇晃一样。TextField
因为它是TextField
与父母无关的特征。
flutter - 渲染后更新有状态的小部件变量?
我正在使用带有两个选项卡的TabBarView,每个选项卡都显示一个有状态小部件——让我们称它们为主小部件和配置小部件。
配置小部件用作主小部件的“配置部分”——我使用它来设置主小部件中的背景颜色和 URL 变量等内容,该变量用于从 Web 服务中获取数据。
Main Widget 有一个由该 Web 服务填充的 ListView。我正在使用Bloc模式将事件从一个小部件发送到另一个小部件,这就是配置小部件将 URL 值发送到主小部件的方式——一个事件被触发,由 bloc 提供成为一个“状态”对象Main Widget 可以在其构造函数中读取并用于构建 ListView 的新 URL。
现在,如果我没有更改配置小部件中的 URL,我在主小部件中使用wantKeepAlive机制来避免重新填充 ListView——如果我不这样做,每当我返回其选项卡时,主小部件都会重建,即使我没有更改配置小部件中的任何内容。
我想要做的是有选择地设置该值,以便在配置中更改 URL 时,将wantKeepAlive
值更新为,false
以便 ListView使用新 URL 重建。但是当它完成构建时,将wantKeepAlive
值设置回true
,因此不会进行重建,直到下一个 URL 更改。
方法完成后是否可以调用生命周期方法build()
,我可以在哪里设置wantKeepAlive
设置?我认为在构建方法本身中这样做是行不通的。欢迎提出建议,谢谢。
flutter - Flutter StatefulWidget 的可变作用域
我正在尝试访问moviesList
内部build()
和结果,如下所示。如果有人能指出真正的问题,将不胜感激。提前致谢。
代码片段如下:
checkbox - SetState() 在构造函数中调用
我已经建立了一个自定义列表。现在我包含一个复选框,如果我要选中或未选中,则会引发以下错误:'setState() called in constructor'
我/颤振(5067):══╡手势发现异常╞════════════════════════════════════════════ ════════════════════════════════ I/flutter(5067):处理手势时抛出以下断言:I /flutter ( 5067): setState() 在构造函数中调用: _List#9044e(lifecycle state: created, no widget, notmounted) I/flutter ( 5067): 当你在一个状态对象上为一个小部件调用 setState() 时会发生这种情况尚未插入到 I/flutter ( 5067): 小部件树。没有必要在构造函数中调用 setState(),因为状态是 I/flutter ( 5067):在最初创建时已经假定它是脏的。
multidimensional-array - Flutter:仅在调用 setState() 的地方重新渲染小部件 - 在嵌套对象结构中
Flutter 是如何渲染小部件的,这里已经详细描述了。它会将新的小部件与旧的小部件进行比较。因此,Flutter 通常知道在大多数情况下如何重新渲染 UI。
在嵌套对象结构中,当您更改子对象时,所有父窗口小部件都不可避免地发生变化,因此它们似乎被呈现为新的。
这会导致应用程序用户的视觉效果没有吸引力。
有没有办法只重新渲染调用 SetState () 的小部件?
我尝试了各种 this.setState (() {})。我已经换出了无状态类中的小部件。
不幸的是,这两种方法都不能解决问题。
小部件 _createCheckbox(int dataArrayPosition, int elementCurrentPosition, int inputCurrentPosition) { 输入 inputElement = contextData.data[dataArrayPosition].element[elementCurrentPosition].input[inputCurrentPosition];
}
有谁知道在调用 onChanged 时仅重新渲染此示例中的“受影响”小部件的方法?
android - 列表视图中的有状态小部件和重新加载导致错误
当我使用一组无状态小部件制作 ListView 时,我没有收到任何错误,一切正常。但是,当我将有状态的小部件放入数组中并通过滚动它来重新渲染小部件使其在视图之外结束时,我会收到错误消息。
我在 ListView 和 ListView.builder 上试过了,似乎没有什么区别。我认为问题出在文本上,所以我尝试删除所有 Text 构造函数,但没有区别。小部件会初始化和处理,但不会重新初始化。
};
调试器中的错误
这是正在发生的事情的视频。 https://webm.red/6ZTH
flutter - 如何从其实例访问有状态小部件内的变量
我使用了一个为我stateful class
返回DropdownButton
小部件的变量,我需要访问其中的一个变量,该变量不是最终的,并且可以通过它的object
. 这是我的代码:
为了清楚起见,我需要通过类的对象访问变量名。
flutter - StatefulWidget 中的 State 对象什么时候销毁?
Flutter 的口头禅之一是小部件是不可变的,并且可以随时重新构建。StatefulWidget 的一个原因是伴随的 State 对象,它“徘徊”在任何单独的build()
方法调用之外。这样,当小部件本身被重建时,文本值、复选框选择可以保持不变。
但是,国家对象本身何时被销毁?是当它们关联的小部件从小部件树中删除时?在什么情况下会发生这种情况——当使用导航器访问新的小部件时?当您转到 TabBar 中的不同条目时?
这对我来说有点模糊,实际上从小部件树中删除小部件并且它们的关联状态被破坏的场景。我还需要注意哪些其他情况下我的状态对象可能会消失,以便我可以使用 PageStorageKeys 等采取适当的措施?
flutter - 从嵌套的子视图颤振飞镖通知 AppBar
我有一个 MainPage,它有一个 AppBar、一个 BottomNavigationBar 和多个主体:
当然,body 会随着 bottomNavigationBar 的选定索引而变化。
在我的 AppBar 中,我有一些双变量。
当用户单击其中一个主体中的按钮时,我想更新这些双变量。
身体也是StatefulWidgets
,例如:
这是我upgradeCallback
在 MainPage 中给出的方式:
这是我的updateVariables
功能:
但是,我的 IDE 显示一个错误:Instance members can't be accessed from a static method
.
如果我将我的函数设置为非静态,我有,在我的 _bodies 列表 SubView 声明 : Only static members can be accessed in initializers
。
我希望能够通过单击 SubView 来动态更新 MainPage AppBar 变量(使用 setState),但我不知道该怎么做。
有任何想法吗 ?
提前致谢。
flutter - setState() 不改变容器属性
我做错了什么?即使该函数被调用,小部件树也没有更新,另一个问题是 setState 如何知道要重建哪个小部件?有没有办法在运行时查看小部件树?