【问题标题】:How to copy list values to another list in flutter如何将列表值复制到颤振中的另一个列表
【发布时间】:2020-02-11 20:02:02
【问题描述】:

我正在尝试将一个列表的值复制到另一个列表, 我使用三个按钮第一个将值附加到 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。

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

【问题讨论】:

    标签: list flutter copy


    【解决方案1】:

    使用myList = List.from(mynewlist); 而不是mylist = mynewlist;

    【讨论】:

    • mylist = List.from(mynewlist);
    • 谢谢 :) 抱歉回复晚了 :P
    • 这很奇怪,但 streamDataListExtra = streamDataList; 对我有用。
    • @Kamlesh 是的,它可能对您有用,但您实际上不会复制列表的值。您只是从初始列表中复制了指针。
    • 这对我不起作用,因为我的列表有子列表,主列表被正确克隆,但是如果我过滤子列表,即使我使用 也会影响原始列表myList = List.from(mynewlist); 有什么想法吗?
    【解决方案2】:

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

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

    【讨论】:

    • 感谢您的回答。
    • 对不起,没有详细说明这一点。但易卜拉欣卡拉汉比我快;-)
    【解决方案3】:

    var YOURCOPY = YOURLIST.map((v) =&gt; v).toList();

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        如果您有类列表,请确保也克隆/复制每个类。否则,如果您更改原始列表中的对象,它也会在新列表中更改。 这是防止它的一种方法:

        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;
        }
        

        克隆/复制您的 List&lt;RandomObject&gt; 映射到每个元素并克隆它:

        final List<RandomObject> original = [RandomObject(1, 2), RandomObject(3, 4)];
        
        final List<RandomObject> copy = original.map((v) => RandomObject.clone(v)).toList();
        

        【讨论】:

        猜你喜欢
        • 2021-08-30
        • 2022-01-23
        • 2021-10-23
        • 2019-01-26
        • 2016-02-28
        • 2017-11-02
        • 1970-01-01
        • 1970-01-01
        • 2020-06-13
        相关资源
        最近更新 更多