Flutter: Мягкая анимация клавиатуры вызывает огромные проблемы с iOS после обновления с Flutter 2.2.3 до Flutter 3.0.0.

Поскольку я обновил код своего приложения с Flutter 2.2.3 до Flutter 3.0.0, я сталкиваюсь с огромным рывком в своем приложении всякий раз, когда программная клавиатура открывается и закрывается.

В то время как этот мусор более заметен на iOS, он существует и на Android.

Ссылка на демо-версию проблемы (обратите внимание, что это высококлассное устройство iOS, поэтому на нем, вероятно, меньше всего проблем): https://user-images.githubusercontent.com/53447798/173196265-f2de6864-2e6c-4bab-9253 . -faac7735ece1.MP4

Мое исследование показало, что это связано с новой функцией, появившейся после версии 2.2.3, которая называется «Плавная анимация клавиатуры на iOS». Вы можете узнать больше об этом здесь: https://github.com/flutter/engine/pull/29281

Как оказалось, из-за новой функции во время анимации открытия или закрытия клавиатуры MediaQuery несколько раз меняется, в результате чего все виджеты, использующие MediaQuery, перестраиваются, вызывая jank. Проблема, однако, в том, что виджеты, которые я использовал, не используют параметр высоты MediaQuery, который меняется из-за клавиатуры. На самом деле мои виджеты используют только параметр ширины (например, MediaQuery.of(context).size.width), который не меняется при открытии клавиатуры. Однако MediaQuery полностью сбрасывается, а не просто обновляет один аспект (например, рост).

Чтобы исправить это, Моффатман предложил следующее решение, которое позволяет MediaQuery использовать InheritedModel и обновлять только один аспект: https://github.com/flutter/flutter/pull/97928 .

Однако это решение еще не было объединено с бета-версией или стабильными каналами Flutter, поэтому я не знаю, как его использовать.

Итак, мои вопросы заключаются в следующем:

  1. Есть ли другой обходной путь для этого? (Обратите внимание, что переход на версию 2.2.3 невозможен, так как мне нужно много новых функций версии 3.0.0)
  2. Если нет, то как я могу использовать решение, предложенное моффатманом? Должен ли я ждать или есть достаточно простой способ использовать его решение в моем коде. (Обратите внимание, что мое приложение находится в разработке и имеет живых пользователей)
  3. Наконец, если ничего не помогает, можно ли не использовать эту конкретную функцию (например, плавную анимацию клавиатуры) из Flutter 3.0.0?

0 ответов

Другие вопросы по тегам