Flutter 移动光标 关闭弹出的键盘

移动光标

要移动光标先要将目标view关联对应的FocusNode, 然后通过FocusScope来request对应的FocusNode即可。

关闭弹出的键盘

- 如果关联了对应的FocusNode, 直接调用focusNode.unfocus()即可
- 如果没有关联, 直接用 FocusScope.of(context).requestFocus(FocusNode()); 

完成案例如下:

class FocusTestRoute extends StatefulWidget {
  @override
  _FocusTestRouteState createState() => new _FocusTestRouteState();
}

class _FocusTestRouteState extends State<FocusTestRoute> {
  FocusNode focusNodeUserName = new FocusNode();
  FocusNode focusNodePassword = new FocusNode();
  FocusScopeNode focusScopeNode;

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: EdgeInsets.all(16.0),
      child: Column(
        children: <Widget>[
          TextField(
            autofocus: true,
            focusNode: focusNodeUserName,
            //关联focusNodeUserName
            decoration: InputDecoration(labelText: "用户名"),
            textInputAction: TextInputAction.next,
            // 设置键盘 "下一步" 按钮
            onSubmitted: (_) {
              // 点击键盘上的 "下一步" 回调
              focusNodeUserName.unfocus();
              FocusScope.of(context).requestFocus(focusNodePassword);
            },
          ),
          TextField(
            focusNode: focusNodePassword, //关联focusNodePassword
            decoration: InputDecoration(labelText: "密码"),
            textInputAction: TextInputAction.done, // 设置键盘 "完成" 按钮
            onSubmitted: (_) {
              // 点击键盘上的 "完成" 回调
              // 关闭弹出的键盘
              focusNodePassword.unfocus();
              // 如果没有关联focusnode 要关闭键盘可以用:  FocusScope.of(context).requestFocus(FocusNode());
            },
          ),
        ],
      ),
    );
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值