Я хочу добавить виджет Text в столбец, и значение должно быть значением ввода TextFormField, введенным пользователем.

Код

String text;
Column(
  children: <Widget>[
    Padding(
      padding: const EdgeInsets.fromLTRB(30, 10, 30, 10),
      child: TextFormField(
        onFieldSubmitted: (value) {
          text= value;
        },
      ),
     Text(text), // want to add text here
   ]

Выдает ошибку:

Для текстового виджета необходимо указать ненулевую строку.

Каким должен быть хороший способ сделать это?

0
sg717 16 Сен 2021 в 23:34

3 ответа

Лучший ответ

1-й сделайте текст, допускающий значение NULL, например String? text;

Изменение на основе отправки внутри statefullWidget.

 onFieldSubmitted: (value) {
            setState(() {
              text = value;
            });
          },

Во-вторых, вам нужно обрабатывать нулевое значение, например

if (text != null) Text(text!), или подобное Text(text ?? "defaul value"),

Виджет будет как

 String? text;

  @override
  Widget build(BuildContext context) {
    return Column(children: <Widget>[
      Padding(
        padding: const EdgeInsets.fromLTRB(30, 10, 30, 10),
        child: TextFormField(
          onFieldSubmitted: (value) {
            setState(() {
              text = value;
            });
          },
        ),
      ),
      if (text != null) Text(text!), // want to add text here
    ]);
  }

Это решает в вашем случае?

1
Yeasin Sheikh 16 Сен 2021 в 20:54

Поскольку вы не присвоили никакого значения при инициализации переменной «String text», а виджет Text не может принимать пустую строку, вам может потребоваться инициализировать текст следующим образом

String text = "";

Или поместите или отметьте null строку в текстовом виджете, как это

Text(text??""),

Или, кроме того, вы можете использовать нулевую безопасность, например

String? text;

Ваш окончательный код будет похож

String text = "";
Column(
  children: <Widget>[
    Padding(
      padding: const EdgeInsets.fromLTRB(30, 10, 30, 10),
      child: TextFormField(
        onFieldSubmitted: (value) {
           setState((){
           text= value;
          });
        },
      ),
     Text(text??""), // placed null check
   ]
1
Ayyaz meo 16 Сен 2021 в 20:56

Обновите свой код:

String? text;
Column(
  children: <Widget>[
    Padding(
      padding: const EdgeInsets.fromLTRB(30, 10, 30, 10),
      child: TextFormField(
        onFieldSubmitted: (value) {
          text = value;
        },
      ),
     Text(text), // want to add text here
   ]
0
Jessé Lopes Pereira 16 Сен 2021 в 20:55