我想把列表中的数字之和显示在一个文本部件中。

问题描述 投票:0回答:1

这是我的列表,我想在Text widget中得到未读邮件的总和,我不知道如何从这个列表中得到未读邮件并添加它们。我不知道如何才能从这个列表中获取未读邮件并添加它们,有人能帮助我吗?

List<UsersData> user = [

  UsersData(
    name: 'Zack Alex',
    msg: 'Im on my way.',
    status: '3 hours ago',
    dp: 'assets/Zack.jpg',
    seenMsgs: false,
    unreadMsgs: 12,
  ),

  UsersData(
    name: 'Ali sho',
    msg: 'Send an attachemnt',
    status: 'false',
    dp: 'assets/Ali.jpg',
    seenMsgs: false,
    unreadMsgs: 3
  ),

  UsersData(
    name: 'Marie',
    msg: 'Gud Morning',
    status: '23 seconds ago',
    dp: 'assets/Marie.jpg',
    seenMsgs: true,
    unreadMsgs: 6,
  ),
];
flutter math dart sum flutter-layout
1个回答
0
投票

试试这个。试试这个.

class MyHomePage extends StatelessWidget {

  List<UsersData> user = [
    UsersData(
      name: 'Zack Alex',
      msg: 'Im on my way.',
      status: '3 hours ago',
      dp: 'assets/Zack.jpg',
      seenMsgs: false,
      unreadMsgs: 12,
    ),
    UsersData(
        name: 'Ali sho',
        msg: 'Send an attachemnt',
        status: 'false',
        dp: 'assets/Ali.jpg',
        seenMsgs: false,
        unreadMsgs: 3),
    UsersData(
      name: 'Marie',
      msg: 'Gud Morning',
      status: '23 seconds ago',
      dp: 'assets/Marie.jpg',
      seenMsgs: true,
      unreadMsgs: 6,
    ),
  ];

  // variable to hold sum of unread messages
  int sumOfUnreadMsgs = 0;

  @override
  Widget build(BuildContext context) {

    // use a for loop to loop through your list
    for (var person in user){
      // add all the messages here
      sumOfUnreadMsgs += person.unreadMsgs ;
    }

    return Scaffold(
      body: Center(
       // display sum of unread messages here
        child: Text('Sum of unread message is $sumOfUnreadMsgs'),
      ),
    );
  }
}

输出

enter image description here


2
投票

地图与折页

最易读懂的方法是分两部分来完成。第一, map 在您的用户数据列表(也就是 user)并提取未读的Msgs。其次,将所有的值加在一起,使用 fold.

折叠与减少

使用 fold 而不是 reduce 提供一个默认值,以备您的 List 是空的。

例子

在CodePen上查看

final int unreadMsgCount =
    user
      .map((data) => data.unreadMsgs)
      .fold(0, (acc, curr) => acc + curr);

return Scaffold(
  body: Center(
    child: Text(
      '$unreadMsgCount',
      style: Theme.of(context).textTheme.headline4,
    ),
  ),
);

fold 可能是最容易被绊倒的。的第一个论点 foldinitialValue 和第二个参数是一个回调函数,定义你想要完成的工作。

在我们的例子中,我们想对unreadMsgs做加法。按照惯例,你会看到 accagg 作为该回调的第一个参数。acc 代表蓄能器和 agg 代表聚合或聚合器,但你也可以很容易地把它命名为 prev 代表以前。curr 代表当前。

map 负责提取您的 unreadMsgsfold 将这些值相加,得到 unreadMsgCount 我们定义的变量。

使用字符串内插法将我们定义的 int 作为 String 为您 Text 小组件。


0
投票

你可以在这里利用操作符重载。可能这不是最好的方法,但也是可能的方法之一。

class Item {
  Item({this.id, this.msg});
  String id;
  int msg;

  Item operator +(Item other) {
    return Item(id: "", msg: (this.msg + other.msg));
  }
}

void main() {
  List<Item> data = [
    new Item(id: "A1", msg: 100),
    new Item(id: "A2", msg: 200),
    new Item(id: "A2", msg: 350)
  ];
  print(data.reduce((curr, next) => curr + next).msg);
}
© www.soinside.com 2019 - 2024. All rights reserved.