如果启用并聚焦以前禁用的TextFormField,则看不到闪烁的光标。在此示例中,如_enabled
状态变量所示,最初禁用了TextFormField,并且当您单击启用按钮时,该字段已启用并处于焦点状态,但闪烁的光标不可见。我必须单击TextFormField才能看到闪烁的光标。
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key}) : super(key: key);
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
bool _enabled = false;
FocusNode focusNodeA = FocusNode();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Test'),
),
body: TextFormField(
enabled: _enabled,
focusNode: focusNodeA,
),
floatingActionButton: FloatingActionButton(
onPressed: () {
setState(() => _enabled = true);
FocusScope.of(context).requestFocus(focusNodeA);
},
child: Text('Enable'),
),
);
}
}
如果我按两次“启用”,则会显示光标。
如果已经启用TextFormField然后将其聚焦,则闪烁的光标可见。
答案 0 :(得分:0)
1-您将焦点放在setState之后,所以它不起作用。 就像下面一样 2-在禁用小部件和启用小部件之前,您无法集中关注小部件。当您在ui踏步中同时进行聚焦和启用时,由于它们的渲染时间,请尝试在启用之前进行聚焦。如果您延迟聚焦时间来解决问题,就可以解决。
setState(() {
Future.delayed(const Duration(milliseconds: 10), ()
{
FocusScope
.of(
context)
.requestFocus(
focusNodeA);
print(FocusScope.of(context).focusedChild.toString());
});
_enabled = true;
});