我不需要用TextEditingController做很多事情,但想显示初始文本。而我觉得创建StatefulWidget是太多了.下面是我想要的代码的样子
// In StatelessWidget
TextField(
controller: TextEditingController(),
)
但我看到的所有教程和博客文章都在StatefulWidget中使用TextEditingController,并在dispose方法中处理它们。但如果我使用像上面这样的方法,我就不能处理它们了
如果你想使用 TextEditingController
,没有办法,只能用一个 StatefulWidget
如果你想避免内存泄漏。
然而,如果你在这种方法中看到大量的模板,你可以使用 HookWidget
(扇形钩),让您可以访问 TextEditingController
在简单的方式,并为您处理它,这里是一个比较。
使用 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();
}
}
使用 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,
),
),
),
);
}
}