【问题标题】:Trying to fill in a List of class试图填写班级列表
【发布时间】:2020-09-09 21:37:08
【问题描述】:

我真的很抱歉我是一个初学者...... 最后,当它应该是 8 个不同的名称/角色时,我只有一个具有相同名称/位置的 8 个 TimeCardDayStrip 列表。 我不明白我在这里做错了什么: 非常感谢

'''
class TimeCardDayStrip {
  String name, position;
  DateTime day;

  @override
  String toString(){
    return '{ $this.name, $this.position }';
  }
}

void main() {
  var tcds = TimeCardDayStrip();
  var listOfTcds = [];
  List<String> names, roles;
   names = ["Michael", "Gunnell", "Byrne", "Aspromonte", "Davis", "Adam Jordan", "Mirko"];
  roles = ["Director", "Vice", "President", "1ST", "KEY 2ND", "2ND", "BASECAMP PA", "PA", " PA", "Add'l PA"];

  for (int i = 0; i < names.length; i++) {
    tcds.name = names[i];
    tcds.position = roles[i];
    listOfTcds.add(tcds);
    // checking the list as it creates
    print(listOfTcds[i].name+' is '+listOfTcds[i].position);
  }
  //print the list of card to check
  print('print the list of time card to check');
  for (int x = 0; x < listOfTcds.length; x++){
    print (listOfTcds.elementAt(x).name);
  }
}
'''

【问题讨论】:

    标签: list class flutter dart


    【解决方案1】:

    如果您只想打印出每个名称: 将其放入循环中(您应该在每个循环中创建新对象,而不是更新同一个对象)

     for (int i = 0; i < names.length; i++) {
    
        var tcds = TimeCardDayStrip();
    
        tcds.name = names[i];
        tcds.position = roles[i];
        listOfTcds.add(tcds);
    
        // checking the list as it creates
        print('${listOfTcds[i].name} is ${listOfTcds[i].position}');
    }
    

    后来

     listOfTcds[x].name 
    

    如果你想展示东西:

      @override
      Widget build(BuildContext ctx) {
        return ListView.builder(
                itemCount: listOfTcds.length,
                itemBuilder: (context, index) {
                  return CustomTile(item: listOfTcds[index]);
                },
              );
      }
    

    【讨论】:

    • 谢谢,但不幸的是结果没有改变...(打印考勤卡清单) Mirko Mirko Mirko Mirko Mirko Mirko Mirko
    • 您应该在每次循环中将 tcds 创建为一个新对象,然后将其添加到列表中,否则您只是在更新指向该对象的同一指针上的值。
    • 完美!现在它工作了,谢谢!现在我要开始了,希望我能够将它返回给一个函数......创建我的列表!但这是另一个故事!太棒了,太高兴了,我花了三天时间自己尝试弄清楚!非常感谢!
    • 太棒了,祝你的编码冒险好运!
    【解决方案2】:

    我相信您需要将 tcds 声明为 Tcds = new TimecardDayStrip() 而不仅仅是 tcds = TimeCardDayStrip() 或者您只是更改同一个对象而不是创建新实例。

    【讨论】:

    • 谢谢:我认为 Dart 2.0 new 表单是可选的,顺便说一句,我已经尝试了您的建议,但输出没有改变:打印时间卡列表以检查 Mirko Mirko Mirko Mirko Mirko Mirko米尔科
    猜你喜欢
    • 2019-06-07
    • 1970-01-01
    • 2020-11-02
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多