启用Flutter并聚焦textformfield

时间:2020-02-10 16:42:09

标签: flutter

我创建了个人资料页面,并且我有4个textformfield。我想在点击图标上激活textformfield并同时聚焦。现在,我需要在图标和第一个激活的字段上点击两次,其次是聚焦。 怎么解决呢? 我的代码:

 class UserProfile extends StatefulWidget {
  @override
  _UserProfileState createState() => _UserProfileState();
}

class _UserProfileState extends State<UserProfile> {
  FocusNode myFocusNode;
  bool isEnable = false;

  @override
  void initState() {
    super.initState();
    myFocusNode = FocusNode();
  }

  @override
  void dispose() {
    myFocusNode.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Padding(
        padding: EdgeInsets.fromLTRB(40.0, 50.0, 20.0, 0.0),
        child: Column(
          children: <Widget>[
            Row(
              children: <Widget>[
                Flexible(
                  child: TextFormField(
                    enabled: isEnable,
                    focusNode: myFocusNode,
                  ),
                ),
                IconButton(
                    icon: Icon(Icons.edit),
                    onPressed: () {
                      setState(() {
                        isEnable = true;
                        FocusScope.of(context).requestFocus(myFocusNode);
                      });
                    })
              ],
            ),

3 个答案:

答案 0 :(得分:0)

您应该改用autofocus: isEnable

答案 1 :(得分:0)

就像下面在您的音乐中一样

setState(() {
      if(isEnable)
         Future.delayed(const Duration(milliseconds: 10), ()
             {FocusScope.of(context).requestFocus(myFocusNode);
         });
      isEnable = true;
    });

在第一次isEnable为false时,因此不聚焦于调用而仅启用工作,而在其他时候也获得聚焦。 在禁用和启用窗口小部件之前,您无法集中显示窗口小部件。当您在ui踏步中同时进行聚焦和启用时,由于它们的渲染时间,请尝试在启用之前进行聚焦。如果您延迟聚焦时间来解决问题,就可以解决。

答案 2 :(得分:0)

尝试使用readOnly中的enabled代替TextFormField