Обновление элемента в списке Flutter

#flutter #dart

#flutter #dart

Вопрос:

как реализовать, когда я нажимаю кнопку «changenName», все добавленные и отображаемые имена изменятся на «test2»? Я должен использовать nameList.forEach() или nameList.where()?

   String name = 'test'; 
  List<String> nameList = List<String>();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [
          Center(
            child: nameList.length == 0
                ? Text('0')
                : Column(
                    children: nameList
                        .map(
                          (e) => Text(e),
                        )
                        .toList(),
                  ),
          ),
          RaisedButton(
            onPressed: () {
              setState(() {
                nameList.add(name);
              });
            },
            child: Text('add'),
          ),
           RaisedButton(
            onPressed: () {
              setState(() {
                        //??
              });
            },
            child: Text('changeName'),
          )
        ],
      ),
  

Комментарии:

1. Не ясно. Пожалуйста, добавьте скриншот текущего вывода и ожидаемого результата

2. Я попытаюсь объяснить, чего бы я хотел. когда я должен нажать «добавить», «имя» было добавлено в список и отображено. допустим, я добавил в список 2 «имя», и оно отобразилось на экране «test», «test». Я хотел бы нажать на ‘changeName’, и этот ‘test’ ‘test’ изменится на ‘test2’ ‘test2’

3. А, понятно. Это понятно. Я добавлю свой ответ

Ответ №1:

Вы можете написать функцию для обновления имени, которая принимает имя, подлежащее изменению, в качестве аргумента, и при нажатии вы можете вызвать эту функцию внутри setState.

После изменения имени один раз и для дальнейшего добавления, если вы хотите добавить то же имя, вам может потребоваться присвоить эту строку переменной ‘name’;

Пример:

 changeName(String name){
 for(int i=0;i<list.length;i  ){
  list[i] = name;
 }
}

String name = 'test'; 
List<String> nameList = List<String>();

@override
Widget build(BuildContext context) {
return Scaffold(
  body: Column(
    children: [
      Center(
        child: nameList.length == 0
            ? Text('0')
            : Column(
                children: nameList
                    .map(
                      (e) => Text(e),
                    )
                    .toList(),
              ),
      ),
      RaisedButton(
        onPressed: () {
          setState(() {
            nameList.add(name);
          });
        },
        child: Text('add'),
      ),
       RaisedButton(
        onPressed: () {
          setState(() {
           name = 'test2';  //If you want to change the names for future 
                            //values
           changeName(name);          
          });
        },
        child: Text('changeName'),
      )
    ],
  ),