我正在设计一个自定义文本字段
class MyTextField extends StatefulWidget {
final String labelText;
final TextEditingController textEditingController;
String get text {
// Expected compilation error: "Undefined name '_textEditingController'"
return _textEditingController.text;
}
MyTextField({
Key key,
this.labelText,
this.textEditingController,
.....
.....
}) : super(key: key);
}
class _MyTextFieldState extends State<MyTextField> {
TextEditingController _textEditingController = TextEditingController();
@override
void initState() {
super.initState();
_textEditingController = widget.editingController ?? TextEditingController();
}
@override
Widget build(BuildContext context) {
return Container(
child: TextField(
controller: _textEditingController,
....,
....,
),
)
}
}
我收到编译错误Undefined name '_textEditingController'
,并且由于_textEditingController
是在不同的类中定义的,因此应该可以。
现在我的问题是如何在那儿访问_textEditingController
属性?
以上代码段中的希望可以帮助您了解我要实现的目标。
答案 0 :(得分:0)
我认为这应该做您想要的。在小部件中声明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,
),
);
}
}
答案 1 :(得分:0)
应该反过来。不是从状态到小部件,数据流应该从小部件到状态。因此,在MyTextField小部件中声明以下代码。
TextEditingController _textEditingController = TextEditingController();
然后您可以从状态类访问_textEditingController,如下所示:
widget._textEditingController