颤振列表视图覆盖最后一项

flutter listview overwriting the last item

我想在 FirstClass 中的文本字段中插入一个人的名字,然后在 ListView.builder 中的 SecondClass 中显示它。当我返回并插入一个新人的名字时,PersonAdd class 工作得很好,但它用最后插入的名字填充了整个列表。我想念什么?

这是我的代码;

人class

class Person{
  late String name;

  void setName(String name){
    this.name=name;
  }
}

加人class

class PersonAdd{

  List<Person> list=[];

  void addList(Person person){
    list.add(person);

  }
  List<Person> getList(){
    return list;
  }
}

主要和头等舱


void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return  MaterialApp(
      home: FirstClass(),
    );
  }
}

PersonAdd personAdd = PersonAdd();
class FirstClass extends StatefulWidget {
  @override
  State<FirstClass> createState() => _FirstClassState();
}

class _FirstClassState extends State<FirstClass> {
  Person person= Person();
  void setData(String? input){
    setState(() {
      person.name=input!;
    });
  }


  @override
  Widget build(BuildContext context) {
    return  Scaffold(
      body: Center(
        child:  Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
             TextField(
              onChanged: (input)  {
                  setData(input);
              },
              style: const TextStyle(fontSize: 40,),

            ),
            const SizedBox(height: 15,),
            TextButton(

                style: TextButton.styleFrom(
                    backgroundColor: Colors.blue
                ),
                onPressed: (){
                  setState(() {
                    personAdd.addList(person);
                  });

                  Navigator.push(
                    context,
                    MaterialPageRoute(builder: (context) =>  SecondClass(persons:personAdd)),
                  );
                }, child: const Text('SEND', style: TextStyle(fontSize: 40,color: Colors.black38),))
          ],
        ),
      ),
    );

  }
}

二等

class SecondClass extends StatelessWidget {

  PersonAdd persons;
  SecondClass({required this.persons});


  @override
  Widget build(BuildContext context) {

    return  Scaffold(
      body: Center(
        child:  ListView.builder(
            padding: const EdgeInsets.all(8),
            itemCount: persons.getList().length,
            itemBuilder: (BuildContext context, int index) {
              return Container(
                height: 50,
                color: Colors.amber,
                child: Center(child: Text(personAdd.getList()[index].name)),
              );
            }
        ),


      ),
    );
  }
}

我按顺序插入了姓名1、姓名2、姓名3、姓名4。然而,结果是这样的

因为您列表中的所有项目都具有相同的地址。 让我们试试这个更新:

setState(() {
   personAdd.addList(person);
   person= Person();
});

在此代码中,我们将在将其添加到列表后创建新人。