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

Так MediaQuery.of(context) все равно ж вызовет build, если значение изменится. Проще тогда создать виджет-обертку, который будет прокидывать это значение. При желании, можно и в стрим завернуть.


Но главное не это, делать выводы об открытой/закрытой клавиатуре на основании viewInsets – очень плохая идея. Во-первых, viewInsets определяет "the parts of the display that are completely obscured by system UI, typically by the device's keyboard", т.е. это может быть и не клавиатура в общем случае – получаем ложно-положительное срабатывание. Может быть и ложно-отрицательное – попробуйте в iOS сделать floating keyboard, клавиатура будет на экране, а viewInsets.bottom будет 0.

Надо будет рассмотреть вариант с iOS. Спасибо.)

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

Вопросы не по теме, но раз вы работаете с этим, может ответите:
Собирает ли google данные телеметрии с приложений которые работают на flutter?
hello world на flutter по прежнем занимает 5Mb?
Появилась ли возможность собрать desktop приложение?
Есть ли проблемы с тормозами при срабатывании garbage collector?

«Собирает ли google данные телеметрии с приложений которые работают на flutter?»

Вопрос не очень понятен. Что именно они собирать могут?

«hello world на flutter по прежнем занимает 5Mb?»

Давно не смотрел, но точно не меньше.

«Появилась ли возможность собрать desktop приложение?»

Да, пока далеко не в стабильном канале, но есть.

«Есть ли проблемы с тормозами при срабатывании garbage collector?»

Нет.
Спасибо за статью, интересно было почитать.
У меня в проекте тоже плотно используется keyboard_visibility. Почему то работает :)
Flutter doctor
[✓] Flutter (Channel stable, 1.22.4, on macOS 11.0.1 20B29 darwin-x64, locale en-RU)
• Flutter version 1.22.4 at /Users/macbook/development/flutter
• Framework revision 1aafb3a8b9 (7 days ago), 2020-11-13 09:59:28 -0800
• Engine revision 2c956a31c0
• Dart version 2.10.4

[!] Android toolchain — develop for Android devices (Android SDK version 30.0.2)
• Android SDK at /Users/macbook/Library/Android/sdk
• Platform android-30, build-tools 30.0.2
• Java binary at: /Applications/Android Studio 4.2 Preview.app/Contents/jre/jdk/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6842174)
✗ Android license status unknown.
Run `flutter doctor --android-licenses` to accept the SDK licenses.
See flutter.dev/docs/get-started/install/macos#android-setup for more details.

[✓] Xcode — develop for iOS and macOS (Xcode 12.1)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 12.1, Build version 12A7403
• CocoaPods version 1.9.3
Вы немного ошиблись с удалением слушателей
В статье и в репозитории
Код
 void removeAtChangeListener(String id) {
   _removeAtListener(_changeListeners, id);
 }

 void removeAtShowListener(String id) {
   _removeAtListener(_changeListeners, id);
 }

 void removeAtHideListener(String id) {
   _removeAtListener(_changeListeners, id);
 }

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Информация

Дата основания
Местоположение
Россия
Сайт
surf.ru
Численность
101–200 человек
Дата регистрации

Блог на Хабре