Отключить клавиатуру при прокрутке?

У меня есть текстовое поле в приложении. Это автоматическое открытие клавиатуры при нажатии на текстовое поле. Но при прокрутке списка (firebaseAnimatedList) за ним клавиатура не исчезает. Это ненормально и является большой проблемой для iOS, потому что нельзя нажать кнопку «Назад», чтобы закрыть окно.

Кто-нибудь знает как решить?


person FlutterFirebase    schedule 18.01.2019    source источник


Ответы (4)


Вот что я сделал:

NotificationListener(
  onNotification: (t) {
    if (t is UserScrollNotification) {
      FocusScope.of(context).requestFocus(FocusNode());
    }
  },
  child: ListView.builder(
    itemBuilder: (_, i) => Container(),
    itemCount: items.length,
  ),
);

Присоединение ScrollListener у меня не сработало, потому что Android использует ClampingScrollPhysics и получит событие прокрутки только в том случае, если элементы ListView длиннее родительского. Однако NotificationListener получит все всплывающие сообщения, включая UserScrollNotification.

person Fuxing Loh    schedule 19.02.2019

вы можете использовать keyboardDismissBehavior.

return ListView.builder(
        keyboardDismissBehavior: ScrollViewKeyboardDismissBehavior.onDrag,
person Fuad All    schedule 03.11.2020

Вы можете поместить следующий код в прослушиватель прокрутки списков.

FocusScope.of(context).requestFocus(new FocusNode());

person westdabestdb    schedule 18.01.2019
comment
Спасибо за ответ! Я могу реализовать с помощью onTap() и GestureDetector. Но не знаю, чтобы добавить к вызову прокрутки. Я использую анимационный список. Куда добавить, чтобы при прокрутке анимированного списка клавиатура закрывалась? - person FlutterFirebase; 19.01.2019

Это то, что дает вам желаемый эффект:

NotificationListener(
 onNotification: (ScrollNotification scrollInfo) {

   if (scrollInfo is ScrollUpdateNotification) {
     if (scrollInfo.scrollDelta >= 20.0)      {
       FocusScope.of(context).requestFocus(FocusNode());
      }
     }

    },
 child: new FirebaseAnimatedList ...)
person user3532201    schedule 24.03.2019