我的代码:

Padding(
  padding: const EdgeInsets.only(bottom: 3.0),
  child: SizedBox(
    width: double.infinity,
    child: GestureDetector(
      onTap: () {},
      child: Form(
        child: TextFormField(
          inputFormatters: <TextInputFormatter>[
            FilteringTextInputFormatter.digitsOnly,
          ],
          keyboardType: TextInputType.number,
          controller: TextEditingController(text: formData.pin),
          decoration: const InputDecoration(
            border: UnderlineInputBorder(),
            labelText: 'PIN 2',
          ),
          onChanged: (newValue) => formData.pin = newValue,
        ),
      ),
    ),
  ),
),

我的问题是,第一次输入时,PIN栏不显示数字,您必须再次点击才能显示数字,我附上了下面的gif:

Screen recording

我希望第一次输入时PIN栏可以显示数字

推荐答案

不要在build方法中初始化TextEditingController.这将导致控制器在每次重新构建小部件时将其值设置为给定的初始文本.

将控制器变量移至状态,并将其初始化为initState(您必须使用StatefulWidget).

class MyWidget extends StatefulWidget {
  const MyWidget({super.key});

  @override
  State<MyWidget> createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  late TextEditingController pinController; // (1) Define the controller variable

  @override
  void initState() {
    super.initState();
    pinController = TextEditingController(text: formData.pin); // (2) Initialize it
  }

  @override
  void dispose() {
    pinController.dispose(); // (3) Don't forget to dispose after
    super.dispose();
  }

  // ...
}

现在,在小部件中使用它,如下所示:

TextFormField(
  controller: pinController,
  // ...
)

如果无法从initState访问formData,则很可能需要重构定义formData的方式.把它移到一个从initState可以接近的地方.

Flutter相关问答推荐

ShaderMask上的文本渐变问题

如何使用Firebase Firestore来获取外部集合中的文档子集合中的文档

从Flutter应用程序解释蓝牙BLE数据:了解Sylvania压力值

所需引用Firebase处不存在任何对象

无效参数(S):隔离消息中的非法参数:try 旋转图像时对象不可发送

火焰Flutter 在多个向量之间插补2

Flutter在CustomPainter的右上角和左上角添加了2条曲线

带有命名参数的回调函数不起作用

如何拥有 StreamProvider 的多个侦听器,其中稍后添加的侦听器接收最新数据?

在使用 Android 12+ 的真实 Android 设备上,SingleChildScrollView 中最初位于视口之外的无响应 Web 视图

如何与 PostgreSQL 和外部网站交互 flutter apk?

Flutter 错误:OutletListModel类型的值不能分配给List类型的变量?

如何在两个不同的路由(屏幕)之间正确设置 BlocProvider?

如何在 cupertino switch flutter 中添加文本

在不丢失游戏状态的情况下从 Flame 游戏导航到 Flutter 小部件

如何在 Flutter 中将 ScaffoldMessenger 中的 Snackbar 显示为 Widget?

如何在dart中编写多个条件?

Flutter 小部件中的视图和逻辑分离

Firebase Firestore 查询

RangeError(索引):无效值:有效值范围为空:点击文章时为0