Почему я собираюсь обнулить строку во Flutter? - PullRequest
0 голосов
/ 03 августа 2020

У меня проблема с простой вещью, но я не знаю, как это происходит в коде. Ниже приведен код:

  Widget build(BuildContext context) {
    String newTaskTitle;
    return Container(
      color: Color(0xff757575),
      child: Container(
        padding: EdgeInsets.all(20.0),
        decoration: BoxDecoration(
          color: Colors.white,
          borderRadius: BorderRadius.only(
            topLeft: Radius.circular(20.0),
            topRight: Radius.circular(20.0),
          ),
        ),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: <Widget>[
            Text(
              'Add Task',
              textAlign: TextAlign.center,
              style: TextStyle(
                fontSize: 30.0,
                color: Colors.lightBlueAccent,
              ),
            ),
            TextField(
              autofocus: true,
              textAlign: TextAlign.center,
              onChanged: (newText) {
                newTaskTitle = newText;
              },
            ),
            FlatButton(
              child: Text(
                'Add',
                style: TextStyle(
                  color: Colors.white,
                ),
              ),
              color: Colors.lightBlueAccent,
              onPressed: () {
                print(newTaskTitle);
              },
            ),
          ],
        ),
      ),
    );
  }

Я пытаюсь получить значение ввода текстового поля и передать его на другой экран, но когда я что-то набираю и нажимаю кнопку, он дает мне ноль. введите описание изображения здесь

Ответы [ 2 ]

1 голос
/ 03 августа 2020

Этого также можно добиться с помощью контроллеров. просто инициализируйте один и укажите контроллер в виджете TextField. Чтобы получить доступ к тексту, просто выполните _controlller.text, как показано ниже:

  final _controller = TextEditingController();
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        color: Color(0xff757575),
        child: Container(
          padding: EdgeInsets.all(20.0),
          decoration: BoxDecoration(
            color: Colors.white,
            borderRadius: BorderRadius.only(
              topLeft: Radius.circular(20.0),
              topRight: Radius.circular(20.0),
            ),
          ),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.stretch,
            children: <Widget>[
              Text(
                'Add Task',
                textAlign: TextAlign.center,
                style: TextStyle(
                  fontSize: 30.0,
                  color: Colors.lightBlueAccent,
                ),
              ),
              TextField(
                controller: _controller,
                autofocus: true,
                textAlign: TextAlign.center,
              ),
              FlatButton(
                child: Text(
                  'Add',
                  style: TextStyle(
                    color: Colors.white,
                  ),
                ),
                color: Colors.lightBlueAccent,
                onPressed: () {
                  print(_controller.text);
                },
              ),
            ],
          ),
        ),
      ),
    );
  }
1 голос
/ 03 августа 2020

Вы определили String newTaskTitle внутри метода build (), попробуйте удалить его изнутри метода сборки и попробуйте определить его внутри StatefulWidget.

Это происходит потому, что TextField при изменении метода вызывает метод build () каждый раз при изменении текста

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...