Флэттерное отвержение клавиатуры автоматически при нажатии на текстовое полеAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Флэттерное отвержение клавиатуры автоматически при нажатии на текстовое поле

Сообщение Anonymous »

Я новичок в том, чтобы трепетать и столкнуться с очень странной проблемой: < /p>
У меня есть простой виджет без сохранности, с пользовательской панелью приложений, затем текстовой формы и кнопки внутри столбца. Я использую GO_ROUTER для навигации. Утилит экрана для размеров Dimen. Проблема в том, что я запустил свои маршруты с экрана Splash, затем входите в систему экрана с Textfield. Происходя на всех устройствах, включая эмулятор Android и физические устройства < /p>
На экране Textfield on Login, если нажал пользователь на 100 мс до 200 мс, появляется клавиатура, а затем скрывается самого себя. < /P>
Я пробую минимальный код, чтобы проверить: < /p>

Я пробую минимальный код: < /p>
< /p>
Я пробую минимальный код: < /p>
@TypedGoRoute(path: '/complaintScreenRoute')
class ComplaintScreenRoute extends GoRouteData {
final String complaintType;

const ComplaintScreenRoute({required this.complaintType});

@override
Widget build(BuildContext context, GoRouterState state) => injector().getComplaintScreenWidget(complaintType);
}
< /code>
это то, как я создаю свой GO_ROUTER. Я предполагаю, что этот экран после того, как вход в систему был выполнен пользователем. Затем приземляется на этом экране: < /p>
Метод сборки содержит: < /p>
Container(color: Colors.yellow,height: 200,width: 200,child:
// FocusDebugOverlay(
// child: TextFormField(
// // focusNode:model. myFocusNode,
// controller: model.myController,
// autofocus: true,
// // onTap: () {
// // Future.delayed(Duration(milliseconds: 100), () {
// // FocusScope.of(context).requestFocus(model.myFocusNode);
// // });
// // },
// ),
// ),
// AutoFocusFixTextField(
// controller: model.myController,
// decoration: const InputDecoration(
// labelText: 'Enter your name',
// ),
// )

TextFormField(
controller: model.myController,
autofocus: true,
)
),
< /code>
Я стараюсь с простым текстовым формированием и автофокусом: True даже автоматически скрываю клавиатуру при загрузке экрана. Поэтому, если пользователь слишком быстро нажимает по поле, или автофокус является верным, шкуры клавиатуры.class BulletproofTextFieldGreat extends StatefulWidget {
final TextEditingController controller;
final bool autofocus;
final FocusNode? focusNode;
final String? hintText;

const BulletproofTextFieldGreat({
super.key,
required this.controller,
this.autofocus = false,
this.focusNode,
this.hintText,
});

@override
State createState() => _BulletproofTextFieldGreatState();
}

class _BulletproofTextFieldGreatState extends State {
late FocusNode _internalFocusNode;
FocusNode get _focusNode => widget.focusNode ?? _internalFocusNode;

@override
void initState() {
super.initState();
_internalFocusNode = FocusNode();

if (widget.autofocus) {
// Delay autofocus until the screen is stable after navigation
WidgetsBinding.instance.addPostFrameCallback((_) {
Future.delayed(const Duration(milliseconds: 300), () {
if (mounted && !_focusNode.hasFocus) {
FocusScope.of(context).requestFocus(_focusNode);
}
});
});
}
}

@override
void dispose() {
if (widget.focusNode == null) {
_internalFocusNode.dispose();
}
super.dispose();
}

@override
Widget build(BuildContext context) {
return TextField(
controller: widget.controller,
focusNode: _focusNode,
decoration: InputDecoration(hintText: widget.hintText),
);
}
}
< /code>
Так что я пытаюсь преодолеть автофокус по умолчанию. Я откладываю поле, чтобы сосредоточиться, если оно сосредоточится на сборке. Но я также проверил, есть ли мой виджет восстанавливается в течение нескольких раз, добавив метод сборки в журнале внедорожника, который показывает только 1 раз. Я добавляю задержку в качестве обходного пути, чтобы, если пользователь нажимает быстро, клавиатура не должна скрываться. /> Я попробовал со всеми полями ввода, такими как Cupertino Textfield, редактируемый текст и т. Д. Flutter SDK обновлен до 3,29,2
с тех пор, как я получил эту проблему на 3.24.0, а затем обновлен до 3,27,4, а затем 3,29,2, но все еще получает проблему. < /p>
flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.29.2, on macOS 15.3.2 24D81 darwin-x64, locale en-US)
[✓] Android toolchain - develop for Android devices (Android SDK version 36.0.0)
[✓] Xcode - develop for iOS and macOS (Xcode 16.2)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2023.1)
[✓] Connected device (3 available)
[✓] Network resources

• No issues found!
< /code>
Любой подсказка или решение будут высоко оценены.
заранее < /p>

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

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

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

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

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

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