Клавиатура эмодзи ОС вызывает зависание пользовательского интерфейса в чате TextField FlutterIOS

Программируем под IOS
Ответить
Anonymous
 Клавиатура эмодзи ОС вызывает зависание пользовательского интерфейса в чате TextField Flutter

Сообщение Anonymous »

У меня есть экран чата, на котором переключение на клавиатуру с эмодзи в iOS приводит к зависанию всего пользовательского интерфейса. На Android все работает отлично.
Мой макет экрана чата:

Код: Выделить всё

Scaffold(
backgroundColor: AppConstants.offWhite,
extendBodyBehindAppBar: true,
appBar: IndividualChatAppBar(...),
body: SafeArea(
bottom: false,
child: Column(
children: [
Expanded(
child: BlocBuilder(
builder: (context, state) {
// messages list
},
),
),
BlocBuilder(
builder: (context, state) {
return MessageInputField(...);
},
),
SizedBox(height: MediaQuery.of(context).padding.bottom + 8),
],
),
),
)
Мое текстовое поле внутри MessageInputField:

Код: Выделить всё

TextField(
controller: _controller,
maxLines: null,
textCapitalization: TextCapitalization.sentences,
keyboardType: TextInputType.multiline,
scrollPadding: EdgeInsets.zero,
autocorrect: false,
enableSuggestions: false,
style: const TextStyle(fontSize: 15, color: Colors.black87),
decoration: InputDecoration(...),
)
Что я пробовал (все было отменено, поскольку не было исправлено):
  • Код: Выделить всё

    resizeToAvoidBottomInset: false
     + руководство 

    Код: Выделить всё

    MediaQuery.viewInsets.bottom
     заполнение через 

    Код: Выделить всё

    SizedBox
  • Код: Выделить всё

    WidgetsBindingObserver + didChangeMetrics()
     с устранением дребезга в течение 80 мс для отслеживания высоты клавиатуры.
  • Перенос ввода в 

    Код: Выделить всё

    SingleChildScrollView(physics: NeverScrollableScrollPhysics())
  • Выделение входа в отдельный 

    Код: Выделить всё

    StatefulWidget
     чтобы ограничить пересборку медиа-запросов
  • Код: Выделить всё

    SingleChildScrollView(reverse: true)
     с 

    Код: Выделить всё

    Padding(bottom: viewInsets.bottom)
     обертка ввода
  • Код: Выделить всё

    keyboardType: TextInputType.text
     — это фактически нарушило многострочный ввод Android, поэтому пришлось вернуться.
Вопрос:
Это известная ошибка движка Flutter в iOS? Есть ли какой-нибудь обходной путь, который действительно работает для макета чата с закрепленным вводом внизу?

Подробнее здесь: https://stackoverflow.com/questions/799 ... ld-flutter
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»