我不需要使用TextEditingController做很多事情,但想显示初始文本。我觉得为此创建StatefulWidget太过分了。 这就是我希望我的代码看起来像
// In StatelessWidget
TextField(
controller: TextEditingController(),
)
但是我见过的每一篇教程和博客文章都在StatefulWidget中使用TextEditingController并将它们放在dispose方法中。但是,如果我像上面那样使用的话,我将无法处置它们。
答案 0 :(得分:1)
如果您想使用TextEditingController
,则除了要避免内存泄漏外,只能使用StatefulWidget
。
但是,如果您通过这种方法看到了很多样板,则可以使用HookWidget
(flutter_hooks),它使您可以轻松访问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,
),
),
),
);
}
}