为子窗口小部件选择 StatelessWidget 或 StatefulWidget,子窗口小部件具有 TextEditingController 作为子窗口小部件
Choosing StatelessWidget or StatefulWidget for sub-widget which has TextEditingController as a child
我正在重构代码以分离小部件。
them.I 中有几列 TextFields
有两个选项可以完成任务:
选择 StatelessWidget
因为它具有 更高的性能,可能会将 TextEditingController 相关代码放在子小部件之外。或者在 onChanged
事件中包含一些逻辑。但仍然有一些事件,例如 clear text
无法放入 onChanged
事件
如果我使用 TextEditingController
选择 StatefulWidget
包含在每个子小部件中。
将代码重构成这样的小部件时,如何在StatelessWidget
和StatefulWidget
之间做出选择?
更新
这是我目前的结论,如果不正确,可以更新。
- 最好把
TextEdit
的FocusNode
放在parent里,因为它和兄弟focusNode & parentNode有关;
- 最好将
TextEdtingController
放在父级中,这在 TextField
超出屏幕的情况下很有用,就像 ListItem
滚出屏幕一样,这将使整个小部件卸载。状态将被保留。
- 自己输入错误的时候宁愿把
animation self
像摇TextField
一样。因为它是 TextField
的一个特性,与父级无关。
针对评论区的讨论进行编辑:
将代码重构为更小的 StatefulWidgets
时,您应该采用第二种方法。并且 parent
应该有一个函数来改变嵌套的 TextFields 的内容及其 animation
行为,通过调用其中的函数,正如您之前指出的,您需要管理此行为。
我正在重构代码以分离小部件。
them.I 中有几列 TextFields
有两个选项可以完成任务:
选择
StatelessWidget
因为它具有 更高的性能,可能会将 TextEditingController 相关代码放在子小部件之外。或者在onChanged
事件中包含一些逻辑。但仍然有一些事件,例如clear text
无法放入onChanged
事件如果我使用
TextEditingController
选择StatefulWidget
包含在每个子小部件中。
将代码重构成这样的小部件时,如何在StatelessWidget
和StatefulWidget
之间做出选择?
更新
这是我目前的结论,如果不正确,可以更新。
- 最好把
TextEdit
的FocusNode
放在parent里,因为它和兄弟focusNode & parentNode有关; - 最好将
TextEdtingController
放在父级中,这在TextField
超出屏幕的情况下很有用,就像ListItem
滚出屏幕一样,这将使整个小部件卸载。状态将被保留。 - 自己输入错误的时候宁愿把
animation self
像摇TextField
一样。因为它是TextField
的一个特性,与父级无关。
针对评论区的讨论进行编辑:
将代码重构为更小的 StatefulWidgets
时,您应该采用第二种方法。并且 parent
应该有一个函数来改变嵌套的 TextFields 的内容及其 animation
行为,通过调用其中的函数,正如您之前指出的,您需要管理此行为。