В Интернете, как я могу управлять значком видимости, который автоматически отображается в сфокусированном текстовом поле, для свойства obscureText которого установлено значение true?

#flutter #flutter-web

Вопрос:

Вот мой код для поля пароля:

 TextFormField(
  obscureText: isObscure,
  decoration: InputDecoration(
    suffix: TextButton(
      child: isPasswordObscure
          ? Text(
            'Show', 
            style: TextStyle(color: Colors.grey),
          )
          : Text(
            'Hide',
            style: TextStyle(color: Colors.grey),
          ),
      onPressed: () {
        setState(() { isObscure = !isObscure; });
      },
    ),
  ),
)
 

Если я запущу его, поле пароля будет выглядеть следующим образом:
введите описание изображения здесь

Если вы просмотрите мой код, я указал только текстовую кнопку, а не значок в качестве суффикса. Значок видимости был добавлен Flutter Edge, и когда я нажимаю на него, он только меняет свой значок и не отменяет подписку или не закрывает текстовое поле.

введите описание изображения здесь

Что я хочу знать, так это как мне изменить или удалить значок? И, возможно, также перезвоните ему, чтобы он знал, что делать, когда я нажму на него.

Проблема не существует на мобильных устройствах, только на краю рабочего стола браузеров.

Изменить: Я попытался установить suffix значение и suffixIcon равным нулю, но значок видимости все еще отображается.

Обновление: Я обнаружил, что проблема существует только в MS Edge.

Ответ №1:

Если вы хотите отключить значок видимости, установите значение onPressed: () {}, а также, если вы хотите удалить обзор формы значка видимости, оберните его виджетом непрозрачности

Непрозрачность( непрозрачность: 0.0, дочерний элемент: TextButton(),

Комментарии:

1. Привет, пожалуйста, прочтите еще раз мой вопрос. Спасибо 😀

Ответ №2:

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

  Center(child: TextField(
        obscureText: _isObscured,
        decoration : InputDecoration(
        suffix:InkWell(
                onTap: (){
                    setState(() => this._isObscured = 
                    !this._isObscured);
                    Future.delayed(Duration(seconds: 2), (){
                      setState(() => this._isObscured = 
                      !this._isObscured);

                    });
                },
                child: Icon( Icons.visibility),
            ),
         ),
      ), 
    ),
  ),
 

Комментарии:

1. Привет, пожалуйста, прочтите еще раз мой вопрос. Спасибо 😀

2. @Блейзет. используете ли вы какие-либо библиотеки для создания формы.

3. Нет, это не так. Способны ли вы воспроизвести проблему?

4. нет. Мы не можем, я мог бы получить только обычное текстовое поле

5. Решил эту проблему. Он отображается только в Microsoft Edge, а не в Google Chrome. Хотя я не знаю о других браузерах.