dart - 在 TextInputType 更改后 Controller 重置的 Flutter TextField

标签 dart flutter

我在我的应用程序中使用全屏对话框将用户输入值输入到文本字段中。其中一些值是字符串,一些是整数。所以我想相应地更改键盘以使不必要的键消失。这是我的实现:

import 'package:flutter/material.dart';
import 'package:meal_tracker/model/food_model.dart';

class AddFoodDialog extends StatelessWidget {
  TextEditingController nameController = TextEditingController(),
      carbsController = TextEditingController(),
      fatController = TextEditingController(),
      proteinController = TextEditingController(),
      amountController = TextEditingController();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Add Food"),
        actions: <Widget>[
          FlatButton(
            child: Text(
              "SAVE",
              style: TextStyle(color: Colors.white),
            ),
            onPressed: () {
              _handleSave(context);
            },
          )
        ],
      ),
      body: Form(
          child: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: <Widget>[
            TextFormField(
              decoration: InputDecoration(labelText: "Name"),
              controller: nameController,
            ),
            TextFormField(
              decoration: InputDecoration(labelText: "Carbs per 100g"),
              controller: carbsController,
              keyboardType: TextInputType.number,
            ),
            TextFormField(
              decoration: InputDecoration(labelText: "Fat per 100g"),
              controller: fatController,
              keyboardType: TextInputType.number,
            ),
            TextFormField(
              decoration: InputDecoration(labelText: "Protein per 100g"),
              controller: proteinController,
              keyboardType: TextInputType.number,
            ),
            TextFormField(
              decoration: InputDecoration(labelText: "Amount in g"),
              controller: amountController,
              keyboardType: TextInputType.number,
            ),
          ],
        ),
      )),
    );
  }

  void _handleSave(BuildContext context) {
    print("Dialog text: " + nameController.text);
    Navigator.of(context).pop(Food(
        name: nameController.text,
        carbsPer100g: double.parse(carbsController.text),
        fatPer100g: double.parse(fatController.text),
        proteinPer100g: double.parse(proteinController.text),
        amount: double.parse(amountController.text)));
  }
}

问题是,当我在具有 TextInputType.text 的“名称”TextField 中输入内容,然后点击另一个具有 TextInputType.number,“名称”字段无缘无故清除。反过来也一样。

最佳答案

我不得不将 TextEditingControllers 放在一个有状态的小部件中,这确实有效。感谢 Jonah Williams 的快速回复!

关于dart - 在 TextInputType 更改后 Controller 重置的 Flutter TextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51518321/

相关文章:

Flutter-如何在firebase查询中使用逻辑AND以及如何更新数据?

flutter - 如何同时实现拖动和点击

flutter - 页面导航后是否可以使警报对话框消失?

dart - 如何在 Flutter 中创建类似 Android 照片应用程序的多选 GridView 布局?

flutter - 通常由 TextField 创建的 InputDecorator 不能具有无限宽度

android - 在 flutter 测试中比较两个 PinCode 文本字段

android - flutter 中的底部导航栏颜色恢复为黑色

arrays - 访问 Dart 中 List<Map> 中的特定项目

flutter - 如何将 Flutter 中的一个小部件与另一个小部件叠加,不透明度设置为相乘?

directory - Dart 中有复制目录的内置函数吗?