Как скопировать значения списка в другой список во флаттере - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь скопировать значения одного списка в другой, я использую три кнопки: 1-ю, чтобы добавить значение в mylist, вторую, чтобы очистить mylist, 3-ю кнопку, чтобы составить значения из mynewlist в mylist.

Я попробовал это

List<String> mylist = [
    'Albania',
    'Andorra',
    'Armenia',
    'Austria',
    'Azerbaijan',
    'Belarus',
    'Belgium',
    'Albania',
    'Andorra',
    'Armenia',
    'Austria',
    'Azerbaijan',
    'Belarus',
    'Belgium',
  ];

  List<String> mynewlist = [
    'Albania',
    'Andorra',
    'Armenia',
    'Austria',
    'Azerbaijan',
    'Belarus',
    'Belgium',
    'Albania',
    'Andorra',
    'Armenia',
    'Austria',
    'Azerbaijan',
    'Belarus',
    'Belgium',
  ];



Padding(
                padding: const EdgeInsets.all(5.0),
                child: Row(
                  children: <Widget>[
                    Expanded(
                      child: FlatButton(
                        onPressed: () {
                          setState(() {
                            print('clicked 1st');
                            print(mylist.length);
                            print(mynewlist.length);
                            mylist.add('sdsds');
                          });
                        },
                        child: Container(
                          child: Column(
                            children: <Widget>[
                              Image.asset(
                                'images/bulb.png',
                                width: 100,
                                height: 100,
                              ),
                              Text('bulb')
                            ],
                          ),
                        ),
                      ),
                    ),
                    Expanded(
                      child: FlatButton(
                        onPressed: () {
                          setState(() {
                            print('clicked 2nd');
                            print(mylist.length);
                            print(mynewlist.length);
//after i set mylist = mynewlist; when i click this button it clears the old and new list.
                            mylist.removeRange(0, mylist.length);
                          });
                        },
                        child: Container(
                          child: Column(
                            children: <Widget>[
                              Image.asset(
                                'images/bulb.png',
                                width: 100,
                                height: 100,
                              ),
                              Text('bulb')
                            ],
                          ),
                        ),
                      ),
                    ),
                    Expanded(
                      child: FlatButton(
                        onPressed: () {
                          setState(() {
                            print('clicked 3rd');
                            print(mylist.length);
                            print(mynewlist.length);
                         mylist = mynewlist;
                          });
                        },
                        child: Container(
                          child: Column(
                            children: <Widget>[
                              Image.asset(
                                'images/bulb.png',
                                width: 100,
                                height: 100,
                              ),
                              Text('bulb')
                            ],
                          ),
                        ),
                      ),
                    ),
                  ],
                ),
              )


В начальный момент он работает отлично, второй раз, когда я нажимаю вторую кнопку, он очищает mylist и mynewlist.

Как я могу скопировать значения второго спискабез очистки нового нового списка

Ответы [ 2 ]

1 голос
/ 15 октября 2019

Используйте List.from(mynewlist) вместо mylist = mynewlist

1 голос
/ 15 октября 2019

Это потому, что вы скопировали ссылки на объекты (mylist = mynewlist), а не содержимое списка. Таким образом, после первого клика mylist имеет ссылку на тот же объект в памяти, что и mynewlist. Таким образом, любая операция с одним из них влияет на оба.

Чтобы решить вашу проблему, вы должны сохранить ссылки на объекты в целости и просто скопировать содержимое этих списков.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...