У меня есть экран чата, на котором переключение на клавиатуру с эмодзи в iOS приводит к зависанию всего пользовательского интерфейса. На Android все работает отлично. Мой макет экрана чата:
— это фактически нарушило многострочный ввод Android, поэтому пришлось вернуться.
Вопрос:
Это известная ошибка движка Flutter в iOS? Есть ли какой-нибудь обходной путь, который действительно работает для макета чата с закрепленным вводом внизу?
У меня есть экран чата, на котором переключение на клавиатуру с эмодзи в iOS приводит к зависанию всего пользовательского интерфейса. На Android все работает отлично. [b]Мой макет экрана чата:[/b] [code]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), ], ), ), ) [/code] [b]Мое текстовое поле внутри MessageInputField:[/b] [code]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(...), ) [/code] [b]Что я пробовал (все было отменено, поскольку не было исправлено):[/b] [list] [*][code]resizeToAvoidBottomInset: false[/code] + руководство [code]MediaQuery.viewInsets.bottom[/code] заполнение через [code]SizedBox[/code]
[*][code]WidgetsBindingObserver + didChangeMetrics()[/code] с устранением дребезга в течение 80 мс для отслеживания высоты клавиатуры.
[*]Перенос ввода в [code]SingleChildScrollView(physics: NeverScrollableScrollPhysics())[/code]
[*]Выделение входа в отдельный [code]StatefulWidget[/code] чтобы ограничить пересборку медиа-запросов[*][code]SingleChildScrollView(reverse: true)[/code] с [code]Padding(bottom: viewInsets.bottom)[/code] обертка ввода
[*][code]keyboardType: TextInputType.text[/code] — это фактически нарушило многострочный ввод Android, поэтому пришлось вернуться.
[/list] [b]Вопрос:[/b] Это известная ошибка движка Flutter в iOS? Есть ли какой-нибудь обходной путь, который действительно работает для макета чата с закрепленным вводом внизу?