Как проверить, задан ли текст во Flutter - PullRequest
0 голосов
/ 04 мая 2020

Как я могу проверить, пуст ли текст из TextFormField? У меня есть этот пример кода:

                TextFormField(
                  controller: firstNameController,
                  style: TextStyle(color: Color.fromRGBO(136, 136, 136, 1)),
                  decoration: InputDecoration(
                    border: UnderlineInputBorder(borderSide: BorderSide()),
                    hintStyle: TextStyle(color: Colors.grey.shade300),
                    hintText: sharedPreferences.getString("firstName")
                  ),
                  onChanged: (String value){
                    final trimValue = value.trim();
                    if(value != trimValue){
                      setState(() {
                        if(trimValue != ""){
                          firstNameController.text = trimValue;
                        }else{
                          firstNameController.text = sharedPreferences.getString("firstName");
                        }
                      });
                    }
                  },
                ),

Я пытаюсь использовать оператор if(trimValue != ""), но после запуска этого виджета моя консоль выдает мне:

I/flutter (20342): UsageError: Cannot perform update with the provided values.
I/flutter (20342): Details:
I/flutter (20342):   Could not use specified `lastName`.  Cannot set "" (empty string) for a required attribute.

Я хочу, чтобы он проверял, есть ли строка дается, если дано, он получает текст от контроллера, если это не он отправляет текст из shardPreferences,

есть ли у кого-нибудь решение этой проблемы?

1 Ответ

0 голосов
/ 04 мая 2020

То, что вы делаете, не имеет смысла, потому что то, что вы пытаетесь сделать, это сравнить его с самим собой firstNameController.text/trimValue firstNameController.text is value из свойства onChanged (). Нет необходимости иметь свойство onChanged (), если вы собираетесь использовать TextEditingController.

Я предлагаю использовать метод addListener() для проверки изменений.

final firstNameController = TextEditingController();

  @override
  void initState() {
    super.initState();

    firstNameController.addListener(_checkIfFieldIsEmpty);
  }

  @override
  void dispose() {
    // Clean up the controller when the widget is removed from the widget tree.
    // This also removes the _checkIfFieldIsEmpty listener.
    firstNameController.dispose();
    super.dispose();
  }

  _checkIfFieldIsEmpty() {
   if (firstNameController.text.trim().isEmpty) {
        firstNameController.text = sharedPreferences.getString("firstName"); 
    }
   }
...