Jae*_*ung 5 flutter flutter-layout
我不需要使用 TextEditingController 做很多事情,但想显示初始文本。我觉得创建 StatefulWidget 太过分了。这就是我想要的代码的样子
// In StatelessWidget
TextField(
controller: TextEditingController(),
)
Run Code Online (Sandbox Code Playgroud)
但我看到的每一篇教程和博客文章都在 StatefulWidget 中使用 TextEditingController 并在 dispose 方法中处理它们。但如果我像上面那样使用,我就无法处理它们
如果你想使用,除了使用 a来避免内存泄漏之外,TextEditingController没有其他办法。StatefulWidget
但是,如果您在这种方法中看到很多样板文件,您可以使用HookWidget(flutter_hooksTextEditingController ),它可以让您以简单的方式访问并为您处理它,这里有一个比较:
使用StatefulWidget:
class Test extends StatefulWidget {
@override
_TestState createState() => _TestState();
}
class _TestState extends State<Test> {
TextEditingController controller;
FocusNode focusNode;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Container(
width: 200,
height: 200,
color: Colors.red,
child: TextField(
focusNode: focusNode,
controller: controller,
),
),
),
);
}
@override
void initState() {
controller = TextEditingController();
focusNode = FocusNode();
super.initState();
}
@override
void dispose() {
controller.dispose();
focusNode.dispose();
super.dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
使用HookWidget:
class Test extends HookWidget {
@override
Widget build(BuildContext context) {
final focusNode = useFocusNode();
final controller = useTextEditingController();
return Scaffold(
body: Center(
child: Container(
width: 200,
height: 200,
color: Colors.red,
child: TextField(
focusNode: focusNode,
controller: controller,
),
),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1502 次 |
| 最近记录: |