TextField получает фокус после перехода на другой экран - PullRequest
1 голос
/ 07 августа 2020

В моем проекте я обернул весь MaterialApp в GestureDetector, который должен отключать клавиатуру, когда пользователь нажимает на экран, используя этот фрагмент кода

FocusScope.of(context).unfocus()

После тестирования нескольких сценариев ios это не работало, поэтому я решил сделать это неправильно

FocusScope.of(context).requestFocus(FocusNode())

Но теперь у меня возникла другая проблема. Вот мой код для простого экрана, который создается конструктором MaterialApp routes.

import 'package:flutter/material.dart';

class TestScreen extends StatefulWidget {
  @override
  _TestScreenState createState() => _TestScreenState();
}

class _TestScreenState extends State<TestScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: <Widget>[
          TextFormField(),
          FlatButton(
              onPressed: () => Navigator.push(context,
                  MaterialPageRoute(builder: (context) => TestScreen())),
              child: Text('Test'))
        ],
      ),
    );
  }
}

Шаги для воспроизведения ошибки: 1-Начать редактирование TextField. 2-Расфокусируйте TextField, нажав где-нибудь на экране. 3-Нажмите кнопку, чтобы перейти на другой экран. Это результат:

введите описание изображения здесь

Этого не происходит, когда я пытаюсь расфокусировать TextField нажатием кнопки «Готово» на клавиатуре. Согласно исходному коду при нажатии кнопки «Готово» TextField вызывает clearComposing на TextEditingController. Я даже пробовал это, но безуспешно. Как я могу это исправить? Есть ли у кого-нибудь еще лучшее решение для обработки отклонения клавиатуры во Flutter?

Также вот мой результат flutter doctor:

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.17.5, on Mac OS X 10.15.5 19F101, locale en-US)
 
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.2)
[✓] Xcode - develop for iOS and macOS (Xcode 11.6)
[✓] Android Studio (version 4.0)
[✓] VS Code (version 1.47.3)
[✓] Connected device (2 available)

• No issues found!

1 Ответ

0 голосов
/ 07 августа 2020

После долгих поисков на GitHub проблем, связанных с управлением фокусом, кажется, что никто не знает, как это сделать правильно. Наконец, эта строка кода решила мою проблему:

WidgetsBinding.instance.focusManager.primaryFocus?.unfocus();

Я не знаю о ее побочных эффектах, но сейчас она работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...