我正在设计自定义文本字段
class MyTextField extends StatefulWidget {
final String labelText;
String get title {
// Error area
return _textEditingController.text;
}
MyTextField({
Key key,
this.labelText,
.....
.....
}) : super(key: key);
}
class _MyTextFieldState extends State<MyTextField> {
TextEditingController _textEditingController = TextEditingController();
@override
Widget build(BuildContext context) {
return Container(
child: TextField(
controller: _textEditingController,
....,
....,
),
)
}
}
我收到编译错误Undefined name '_textEditingController'
,并且由于_textEditingController
在不同的类中定义,因此可以预期。
现在我的问题是如何在那儿访问_textEditingController
属性?
以上代码片段中的希望可以帮助您了解我想要达到的目标。
我认为这应该做您想要的。在小部件中声明Controller,因为您仍然可以从State访问小部件成员。只需确保在getter中使用它之前检查_textEdittingController是否具有值即可。
class MyTextField extends StatefulWidget {
TextEditingController _textEditingController = TextEditingController();
final String labelText;
String get title {
// Error area
return _textEditingController.text;
}
MyTextField({
Key key,
this.labelText,
}) : super(key: key);
_MyTextFieldState createState() => _MyTextFieldState();
}
class _MyTextFieldState extends State<MyTextField> {
@override
Widget build(BuildContext context) {
return Container(
child: TextField(
controller: widget._textEditingController,
),
);
}
}
应该是其他方式。不是从状态到小部件,数据流应该从小部件到状态。因此,请在MyTextField小部件内声明以下代码。
TextEditingController _textEditingController = TextEditingController();
然后您可以使用以下命令从状态访问控制器:
widget._textEditingController