flutter TextFormField在启用后未获得焦点

nhaq1z21  于 2023-01-06  发布在  Flutter
关注(0)|答案(2)|浏览(232)

如果启用并聚焦以前禁用的TextFormField,我看不到 Flink 的光标。在本例中,TextFormField最初是禁用的,如_enabled状态变量所示,当您单击启用按钮时,该字段将被启用并聚焦,但 Flink 的光标不可见。我必须单击TextFormField才能看到 Flink 的光标。

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已启用并获得焦点,则 Flink 光标可见。

55ooxyrt

55ooxyrt1#

1-你focused after setState so it not working. just do like below 2-你不能focused widget until disabled and when you enabled widget. when you do focusing and enabled at same time in ui tread它的尝试focused before enabled因为他们的渲染时间.if you post some delay to focusing the problem get solving.

setState(() {
            Future.delayed(const Duration(milliseconds: 10), ()
            {
              FocusScope
                  .of(
                  context)
                  .requestFocus(
                  focusNodeA);
              print(FocusScope.of(context).focusedChild.toString());

            });
            _enabled = true;
          });
rkkpypqq

rkkpypqq2#

你试试看

setState(() {
                    enableEditText = true;
                    Future.delayed(const Duration(milliseconds: 500), () {
                      tfController.selection =
                          TextSelection.fromPosition(TextPosition(offset: tfController.text.length));
                      FocusScope.of(context).requestFocus(focusNode);
                    });
                  });
TextField(
            controller: tfController,
            decoration: null,
            textInputAction: TextInputAction.done,
            enabled: enableEditText,
            focusNode: focusNode,
           
          ),

相关问题