这是我的列表,我想在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,
),
];
试试这个。试试这个.
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'),
),
);
}
}
输出
最易读懂的方法是分两部分来完成。第一, map
在您的用户数据列表(也就是 user
)并提取未读的Msgs。其次,将所有的值加在一起,使用 fold
.
使用 fold
而不是 reduce
提供一个默认值,以备您的 List
是空的。
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
可能是最容易被绊倒的。的第一个论点 fold
是 initialValue
和第二个参数是一个回调函数,定义你想要完成的工作。
在我们的例子中,我们想对unreadMsgs做加法。按照惯例,你会看到 acc
或 agg
作为该回调的第一个参数。acc
代表蓄能器和 agg
代表聚合或聚合器,但你也可以很容易地把它命名为 prev
代表以前。curr
代表当前。
map
负责提取您的 unreadMsgs
和 fold
将这些值相加,得到 unreadMsgCount
我们定义的变量。
使用字符串内插法将我们定义的 int
作为 String
为您 Text
小组件。
你可以在这里利用操作符重载。可能这不是最好的方法,但也是可能的方法之一。
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);
}