Search code examples
flutterdartflutter-layoutsetstate

Title name of my new card changes all the other cards' name to the new title name


I have a listview which displays cards on but whenever I add a new card, the title of all the cards is updated to the new title but I need just the current added one to change

final taskName = TextEditingController();

 TextField(
                  controller: taskName,
                  decoration: const InputDecoration(hintText: 'Task Name'),
                ),
              ),
              Row(
                mainAxisAlignment: MainAxisAlignment.end,
                children: [
                  ElevatedButton(
                    onPressed: () {
                      counter++;
                      Navigator.pop(context);
                    },
                    child: const Text(
                      'Add',
                      style: TextStyle(fontSize: 15),
                    ),
                  ),

Expanded(
            child: ListView.builder(
                itemCount: counter,
                itemBuilder: (BuildContext context, index) {
                  return TodoContainer(
                    cardTitle: taskName.text.toString(),
                  );
                }),
          )

ScreenShot to show how my cards look like after adding a new card with name of TODO

ScreenShot to show how my cards look like after adding a new card with name of TODO


Solution

  • You are using a single TextEditingController value to populate the ListView, therefore listview children is getting update value instead of creating new item.

    final taskName = TextEditingController();

    What you can do, create a list of String and feed it on children.

      List<String> items = []; // on state class
    
     .... 
     // add data 
      onPressed: () {
        items.add(taskName.text.toString()); 
         ....
          },
    
    ......
    
    /// populate listView
     return TodoContainer(
             cardTitle: items[index],
                 );