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

ddarikpa  于 2022-11-30  发布在  Flutter
关注(0)|答案(6)|浏览(341)

我试图将一个列表的值复制到另一个列表,我使用了三个按钮,第一个按钮用于向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')
                            ],
                          ),
                        ),
                      ),
                    ),
                  ],
                ),
              )

在最初的时候,它工作得很完美,第二次我点击第二个按钮时,它会清除MyList和MyNewList。
如何在不清除新列表的情况下复制第二个列表的值

jhkqcmku

jhkqcmku1#

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

m4pnthwp

m4pnthwp2#

这是因为你复制的是对象引用(mylist = mynewlist)而不是列表的内容。所以在第一次点击之后,mylist在内存中有一个与mynewlist相同的对象引用。所以对其中一个对象的任何操作都会影响两个对象。
要解决您的问题,您需要保持对象引用不变,只复制这些列表的内容。

waxmsbnn

waxmsbnn3#

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

ygya80vv

ygya80vv4#

您也可以在任何您想要创建副本而不是引用的可迭代对象(在本例中为List)上调用method:toList()。

9udxz4iz

9udxz4iz5#

自定义类列表的深层副本

如果您有一个类列表,请确保克隆/复制每个类。否则,如果您更改了原始列表中的对象,新列表中的对象也会随之更改。以下是一种防止方法:
1.将clone()函数添加到类中

class RandomObject {

RandomObject(this.x, this.y);

//add clone function to your class:
RandomObject.clone(RandomObject randomObject): this(randomObject.x, randomObject.y);

int x;
int y;
}

1.要进行复制,请通过每个元素进行Map并克隆

final List<RandomObject> original = [RandomObject(1, 2), RandomObject(3, 4)];

final List<RandomObject> copy = original.map((v) => RandomObject.clone(v)).toList();
gzszwxb4

gzszwxb46#

使用:mylist = [...mynewlist]。它复制www.example.com中的所有项目mynewlist.it但不将mynewlist的内存地址复制到mylist。
有关详细信息,请访问:您可以搜索“在Flutter或飞镖中展开操作”。

相关问题