【问题标题】:how to change keyboard type in TextField when change a Tab?更改选项卡时如何更改 TextField 中的键盘类型?
【发布时间】:2020-09-09 09:00:33
【问题描述】:

我想在用户更改 TabBarView 中的选项卡时动态更改键盘类型。我尝试了很多东西autoFocus = true,为每个TextField 提供FocusNode(),并为这些focusNode 取消焦点并请求焦点。这三个 TextField 的 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,
}
)
}

【问题讨论】:

  • 很难从您的示例代码中看出,但如果每个视图中只有一个字段,autofocus 应该就足够了。 codepen.io/kuhnroyal/pen/NWGJWPO
  • 感谢您的示例,但不要解决我的问题。用户不必点击 TextField 即可打开键盘。应用程序应该自动完成。
  • 当文本字段获得焦点时,键盘应该会自动打开。
  • 是的,但用户不必点击 TextField 即可聚焦。当标签发生变化时应该自动完成
  • 这就是我的示例中发生的情况,Web 中没有键盘,但该字段已聚焦。

标签: flutter focus textfield tabbar


【解决方案1】:

这解决了我的问题,但听起来像个 hack。 有人有更好的方法吗?

FocusScope.of(context).unfocus();

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

不到 350 毫秒是行不通的。 :/

【讨论】:

    猜你喜欢
    • 2014-08-06
    • 2011-09-19
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多