启用它后,TextFormField未聚焦

时间:2020-02-10 15:45:21

标签: flutter dart

如果启用并聚焦以前禁用的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然后将其聚焦,则闪烁的光标可见。

1 个答案:

答案 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;
          });