如何在小部件外部获取TextFiled值

时间:2019-06-26 02:06:39

标签: flutter dart

TextFiled类

class InputContainer extends StatefulWidget{

  final _InputContainerInner input = new _InputContainerInner();
  @override
  State<StatefulWidget> createState() {
    return input;
  }


}

class _InputContainerInner extends State<InputContainer>{
  TextEditingController controller = TextEditingController();
  String num = '';

  @override
  Widget build(BuildContext context) {
    return Container(
    ...
        child: TextField(
         ...
         controller: controller,
         ...
         )
     )
}

我在另一个文件中使用它

Widget build(BuildContext context) {
    InputContainer passWord = new InputContainer();
    return Scaffold(
        body: new Column(
        children: <Widget>[
                passWord,
                new MaterialButton(
                    onPressed: () {
                        print(passWord.input);
                        print(passWord.input.num);

                    }
                )
            ]
        )
}


我单击按钮,但没有此TextFiled,打印结果为

flutter: InputContainerInner#9818c(lifecycle state: created, no widget, not mounted)
flutter:

也许这是生命周期的问题,但是我已经在小部件中做到了,会发生什么?

3 个答案:

答案 0 :(得分:0)

也许U可以将其保存在某些变量中,例如

String password = controller.text

然后通过创建对象或其他东西从其他类中调用它

答案 1 :(得分:0)

我认为您不应该在另一个小部件类中创建InputContainer的新实例,这是错误的。

理想的方法是使用继承的小部件或scopedmodel,提供程序,但这比较复杂

您可以尝试在另一个类中创建一个globalkey并从那里访问InputContainerInner文本控制器

注意:将_InputContainerInner更改为InputContainerInner

//put this inside your class widget, where u declare all the variables
final GlobalKey<InputContainerInner> containerKey;


Widget build(BuildContext context) {
    return Scaffold(
        body: new Column(
        children: <Widget>[
                //import the inputContainer class
                InputContainer(),
                new MaterialButton(
                    onPressed: () {
                        print(widget.containerKey.currentState.controller.text);
                        print(widget.containerKey.currentState.controller.input.num);

               }
            )
        ]
    )

}

答案 2 :(得分:0)

  

完整示例

TextEditingController completeAddressController = new TextEditingController();

TextFormField(
          controller: completeAddressController,
          ),
  

获取TextFormField的值

字符串文本= completeAddressController.text.toString(),