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

107 Views Asked by At

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.

1

There are 1 best solutions below

1
On BEST ANSWER

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);
  },
),