如果我启用并聚焦先前禁用的TextFormField,则看不到闪烁的光标。在本例中,TextFormField最初是禁用的,正如_enabled状态变量所指示的那样,当您单击enable按钮时,该字段将被启用并聚焦,但闪烁的光标不可见。我必须单击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'),
),
);
}
}如果我按两次“Enable”,光标就会显示出来。
如果TextFormField已启用并聚焦,则闪烁的光标可见。
发布于 2020-02-11 01:38:34
1-你专注于setState之后,所以它不工作。就像下面的2-你不能聚焦小部件,直到禁用和当你启用小部件。当你在ui tread中同时进行聚焦和启用时,在启用之前先尝试聚焦,因为它们的渲染time.if,所以在聚焦问题得到解决之前会有一些延迟。
setState(() {
Future.delayed(const Duration(milliseconds: 10), ()
{
FocusScope
.of(
context)
.requestFocus(
focusNodeA);
print(FocusScope.of(context).focusedChild.toString());
});
_enabled = true;
});https://stackoverflow.com/questions/60153807
复制相似问题