我试图获取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/

10-12 04:28