如何在flutter中将列表值复制到另一个列表

Alv*_*yil 9 copy list flutter

我试图将一个列表的值复制到另一个列表,我使用三个按钮,第一个按钮将值附加到 mylist,第二个按钮清除 mylist,第三个按钮将值从 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')
                            ],
                          ),
                        ),
                      ),
                    ),
                  ],
                ),
              )


Run Code Online (Sandbox Code Playgroud)

在第一次它完美地工作第二次我单击第二个按钮时,它会清除 mylist 和 mynewlist。

如何在不清除新列表的情况下复制第二个列表的值

Ibr*_*han 26

使用myList = List.from(mynewlist);代替mylist = mynewlist;

  • @Kamlesh是的,它可能对你有用,但你实际上不会复制列表的值。您仅复制了初始列表中的指针。 (4认同)
  • mylist = List.from(mynewlist); (2认同)

小智 14

使用:

myNewList = [...myOldList]
Run Code Online (Sandbox Code Playgroud)

myOldList它创建从到 的项目的浅表副本myNewList

有关更多信息:您可以搜索“dart 中的扩展运算符”。


Mar*_*arc 9

那是因为您复制了对象引用(mylist = mynewlist)而不是列表的内容。因此,在第一次单击后,mylist 引用了与 mynewlist 相同的内存对象。因此,对其中之一的任何操作都会影响两者。

要解决您的问题,您需要保持对象引用完整无缺,只需复制这些列表的内容即可。

在此处输入图片说明


Joh*_*ers 9

var YOURCOPY = YOURLIST.map((v) => v).toList();