我试图获取TextFormField值。但是结果是null
主页
children:[
UrlTextField(),
UsernameTextField(),
UrlButton()
]
UrlTextField(),类似于UsernameTextField()
class UrlTextField extends StatelessWidget {
final myController = TextEditingController();
@override
Widget build(BuildContext context) {
return AppTextField(
decoration:
InputDecoration(prefixText: "https://", labelText: "Enter your URL"),
myController: myController,
textInputType: TextInputType.url,
);}}
AppTextField()这是一个常见的类,我到处都使用了该类
class AppTextField extends StatelessWidget {
final InputDecoration decoration;
var myController = TextEditingController();
final TextInputType textInputType;
AppTextField({
this.decoration,
this.myController,
this.textInputType
});
@override
Widget build(BuildContext context) {
return TextFormField(
controller: myController,
keyboardType: textInputType,
textAlign: TextAlign.left,
decoration: decoration
);}}
单击按钮或任何其他区域时,我需要获取Url和Username值,
class UrlButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
return AppButton(
onPressed: () {
String url = UrlTextField().myController.text;
String username = UsernameTextField().myController.text;
print('url is $text');
});}}
AppButton()此类也常见
class AppButton extends StatelessWidget {
final VoidCallback onPressed;
AppButton({
this.buttonTextStyle
});
@override
Widget build(BuildContext context) {
return RaisedButton(
child: Text(...),
onPressed: onPressed);}}
最佳答案
您正在尝试从刚刚在按钮的onPressed
中实例化的 Controller 中检索文本,因此到目前为止不能有任何文本!要解决此问题,您需要某种状态管理方式来访问和更改现有的小部件,在您的情况下为UrlTextField
小部件。我将为您提供一个示例,说明如何快速解决此问题:
主页:
class MainPage extends StatefulWidget {
...
@override
createState() => _MainPageState();
}
class _MainPageState extends State<MainPage> {
UrlTextField _urlTextField = UrlTextField();
...
children:[
_urlTextField,
UsernameTextField(),
UrlButton(_urlTextField)
]
现在,我们实例化了一个
UrlTextField
,可以引用该UrlButton
并将其传递给另一个小部件,例如UrlTextField
:class UrlButton extends StatelessWidget {
final UrlTextField urlTextField;
UrlButton(this.urlTextField);
@override
Widget build(BuildContext context) {
return AppButton(
onPressed: () {
String url = this.urlTextField.myController.text;
String username = UsernameTextField().myController.text;
print('url is $text');
}
);
}
}
这样,您实例化了一个
UrlButton
并在您的主页中使用它,用户可以在其中填写一些输入,并将其传递给Provider
,您可以在其中访问其 Controller 并由此访问其文本。我建议您更多地研究“状态管理”主题,因为有很多方法可以处理这种情况。我可以建议您看一下ojit_code,它非常易于使用并且方便访问某些数据。
关于flutter - TextFormField值为null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56473504/