it-swarm.com.ru

Как определить, когда TextField выбран во Flutter?

Глупый вопрос новичка Флаттера здесь ...

У меня есть Flutter TextField, который покрывается программной клавиатурой, когда поле выбрано. Мне нужно прокручивать поле вверх и в сторону, когда отображается клавиатура. Это довольно распространенная проблема, и решение представлено в этом посте StackOverflow .

Я думаю, что у меня есть часть ScrollController, но как мне определить, когда TextField был выбран? Кажется, что нет никакого метода события (например, onFocus (), onSelected (), onTap () и т.д.).

Я попытался обернуть TextField в GestureDetector, но это тоже не сработало - очевидно, событие не было зафиксировано.

new GestureDetector(
  child: new TextField(
    decoration: const InputDecoration(labelText: 'City'),
  ),
  onTap: () => print('Text Selected'),
),

Это такое основное требование, что я знаю, что должно быть простое решение.

Спасибо за помощь.

7
user2785693

Я полагаю, вы ищете FocusNode .

Чтобы прослушать изменение фокуса, вы можете добавить список в FocusNode и указать от focusNode до TextField.

Пример:

class TextFieldFocus extends StatefulWidget {
  @override
  _TextFieldFocusState createState() => new _TextFieldFocusState();
}

class _TextFieldFocusState extends State<TextFieldFocus> {
  FocusNode _focus = new FocusNode();

  TextEditingController _controller = new TextEditingController();

  @override
  void initState() {
    super.initState();
    _focus.addListener(_onFocusChange);
  }

  void _onFocusChange(){
    debugPrint("Focus: "+_focus.hasFocus.toString());
  }

  @override
  Widget build(BuildContext context) {
    return new Container(
      color: Colors.white,
      child: new TextField(
        focusNode: _focus,
      ),
    );
  }
}

Это Gist представляет, как обеспечить фокусировку узла, чтобы быть видимым на пользовательском интерфейсе.

Надеюсь, поможет!

16
Hemanth Raj

Самое простое и простое решение - добавить метод onTap в TextField.

TextField(
  onTap: () {
    print('Editing stated $widget');
  },
)
1
Ankur Prakash