我创建了个人资料页面,并且我有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);
});
})
],
),
答案 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