Search code examples
fluttertextfieldtexteditingcontroller

TextField (in flutter) getting filled with previously filled values (unintentionally)


On click of floatingActionButton in main.dart file, I'm calling a dialog widget.

main.dart

late ShoppingListDialog dialog;

@override
void initState() {
  dialog = ShoppingListDialog();
  super.initState();
}
floatingActionButton: FloatingActionButton(
  child: Icon(
    Icons.add,
  ),
  backgroundColor: Colors.pink,
  onPressed: () {
    showDialog(
      context: context,
      builder: (BuildContext context) => dialog.buildDialog(
          context, ShoppingList(id: 0, name: '', priority: 0), true),
    );
  },
),

shopping_list_dialog.dart

class ShoppingListDialog {
  final txtName = TextEditingController();
  final txtPriority = TextEditingController();

  Widget buildDialog(BuildContext context, ShoppingList list, bool isNew) {
    DbHelper helper = DbHelper();
    if (!isNew) {
      txtName.text = list.name;
      txtPriority.text = list.priority.toString();
    }

    return AlertDialog(
      shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(30.0)),
      title: Text((isNew) ? 'New shopping list' : 'Edit shopping list'),
      content: SingleChildScrollView(
        child: Column(
          children: [
            TextField(
                controller: txtName,
                onTap: () {},
                decoration: InputDecoration(hintText: 'Shopping List Name')),
            TextField(
              controller: txtPriority,
              keyboardType: TextInputType.number,
              decoration:
                  InputDecoration(hintText: 'Shopping List Priority (1-3)'),
            ),
            TextButton(
              child: Text('Save Shopping List'),
              onPressed: () {
                list.name = txtName.text;
                list.priority = int.parse(txtPriority.text);
                helper.insertList(list);
                Navigator.pop(context);
              },
            ),
          ],
        ),
      ),
    );
  }
}

TextField is empty, the first time (showing the hint text). But the second time onwards, it gets filled with the last used values, while I intend them to be empty. Like in the image below, the second time when I hit on floatingActionButton to add something, it gets filled with "fruits"(values I had used previously).

Image showing how 2nd time the textfield gets filled with values used in first time

TextField should start empty but it's getting filled with previous used values.


Solution

  • Here is a basic solution for you

    TextButton(
      child: Text('Save Shopping List'),
      onPressed: () {
        list.name = txtName.text;
        list.priority = int.parse(txtPriority.text);
        // Clear TE Controller
        txtName.clear();
        txtPriority.clear();
        // Insert 
        helper.insertList(list);
    
        Navigator.pop(context);
      },
    ),