Удаление фокуса клавиатуры на нескольких нажатых кнопках - PullRequest
1 голос
/ 17 июня 2020

Я пытаюсь скрыть клавиатуру при нажатии везде за пределами textField. Итак, я обернул Scaffold с помощью GestureDetector и установил onTap с помощью несфокусированной (). Это хорошо работает, однако, когда кнопка нажата, клавиатура все еще активна

  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: () => FocusScope.of(context).unfocus(),
      child: Scaffold(
        appBar: AppBar(
          actions: <Widget>[FlatButton(child: Text('Done'), onPressed: () {})],
        ),
        body: Column(
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            FlatButton(
              child: Text('something'),
              onPressed: () {},
            ),
            TextField(),
          ],
        ),
      ),
    );
  }

Есть ли способ удалить фокус без добавления этого несфокусированного в onTap всех кнопок .. Причина в том, что у меня их много кнопки там, а в некоторых даже установлен onLogTap, поэтому будет много повторяющихся кодов

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Вам также нужно добавить код для скрытия клавиатуры внутри onPressed() метод FlatButton

FlatButton(
    child: Text('something'),
    onPressed: () {
    FocusScope.of(context).unfocus();
   },   
),

надеялся на какое-то решение, где мне не нужно было бы делать так много повторяющихся кодов одна вещь.

AFAIK, что невозможно, потому что событие клика GestureDetector виджета и событие клика FlatButton оба разные,

Вы регистрируете другое / отдельное событие клика FlatButton вот почему ваша клавиатура не скрывается при нажатии на FlatButton

Теперь причина, по которой ваша клавиатура не скрывается при нажатии на кнопки

Потому что событие щелчка вашего виджета GestureDetector, если оно переопределено событием щелчка вашего FlatButton

РЕШЕНИЕ

Вы можете сделать одну вещь, создать общий метод, чтобы скрыть клавиатуру и вызвать этот метод для нажатия кнопки

0 голосов
/ 17 июня 2020

Подумав немного нестандартно, мне удалось скрыть клавиатуру при всех нажатиях, изменив GestureDetector ..

  Widget build(BuildContext context) {
    return GestureDetector(
      onPanDown: (pd) {FocusScope.of(context).unfocus();}, //<- replaced
      child: Scaffold(
        appBar: AppBar(
          actions: <Widget>[FlatButton(child: Text('Done'), onPressed: () {})],
        ),
        body: Column(
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            FlatButton(
              child: Text('something'),
              onPressed: () {},
            ),
            TextField(),
          ],
        ),
      ),
    );
  }

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

ОБНОВЛЕНИЕ: Это решение создаст исключение при нажатии на уже сфокусированное текстовое поле

...