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:
也许这是生命周期的问题,但是我已经在小部件中做到了,会发生什么?
答案 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(),