как изменить тип клавиатуры в TextField при изменении вкладки?

Я хочу изменить тип клавиатуры динамически, когда пользователь меняет вкладку в TabBarView. Я много чего пробовал autoFocus = true, давать FocusNode() для каждого TextField и расфокусировать и запросить фокус для этих focusNode. Один и тот же FocusNode для этих трех текстовых полей.

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

То, что я уже пробовал

return TabBar(
      onTap: (_) {
        if (tabController.indexIsChanging) {
//here the input just unfocus



          FocusScope.of(context).unfocus();
          Future.delayed(Duration(seconds: 1)).then((v) {
             FocusScope.of(context).requestFocus();
          });

        }
      }, ... )

мое текстовое поле

 Widget _buildTextField({
    TextInputType keyboardType,
    List<TextInputFormatter> inputFormatters,

  }) {
    return BlocBuilder<TransferBloc, TransferState>(
      builder: (context, state) {
        return TextField(
          controller: inputController,
          // focusNode: focusInput,
          autofocus: true,
          keyboardType: keyboardType,
          inputFormatters: inputFormatters,
}
)
}

person Rafael Menicucci    schedule 22.05.2020    source источник
comment
Трудно сказать из вашего примера кода, но если в каждом представлении есть только одно поле, autofocus должно быть достаточно. codepen.io/kuhnroyal/pen/NWGJWPO   -  person kuhnroyal    schedule 22.05.2020
comment
спасибо за пример, но не решайте мою проблему. Пользователю не нужно нажимать TextField, чтобы открыть клавиатуру. Приложение должно делать это автоматически.   -  person Rafael Menicucci    schedule 22.05.2020
comment
Клавиатура должна открываться автоматически, когда текстовое поле находится в фокусе.   -  person kuhnroyal    schedule 22.05.2020
comment
да, но пользователю не нужно касаться TextField, чтобы сфокусироваться. Это должно происходить автоматически при смене вкладки   -  person Rafael Menicucci    schedule 22.05.2020
comment
Это то, что происходит в моем примере, в сети просто нет клавиатуры, но поле сфокусировано.   -  person kuhnroyal    schedule 22.05.2020
comment
Спасибо за ваше время @kuhnroyal, но я тестировал его на симуляторе, и клавиатура не запускается автоматически.   -  person Rafael Menicucci    schedule 22.05.2020


Ответы (1)


это решает мою проблему, но звучит как взлом. Есть ли у кого-нибудь подход получше?

FocusScope.of(context).unfocus();

Future.delayed(Duration(milliseconds: 350)).then((value) {
       FocusScope.of(context).requestFocus(inputFocus);
});

менее 350 миллисекунд не работают. : /

person Rafael Menicucci    schedule 22.05.2020