Flutter:如何从其状态类访问属性

问题描述 投票:0回答:2

我正在设计自定义文本字段

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属性?

以上代码片段中的希望可以帮助您了解我想要达到的目标。

flutter dart
2个回答
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,

          ),
       );
    }
}

0
投票

应该是其他方式。不是从状态到小部件,数据流应该从小部件到状态。因此,请在MyTextField小部件内声明以下代码。

TextEditingController _textEditingController = TextEditingController();

然后您可以使用以下命令从状态访问控制器:

widget._textEditingController
© www.soinside.com 2019 - 2024. All rights reserved.