如果你想使用
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,
),
),
),
);
}
}
StatefulWidget
。 - Tokenyet