将bool转换为int以在Flutter小部件中显示数字



我有一个聊天类:

List<Message> chats = [
Message(
sender: roberta,
time: '5:30 PM',
text: 'Hey, how's it going? What did you do today?',
isLiked: false,
unread: true,
),
Message(
sender: roberta,
time: '5:30 PM',
text: 'Hey, how's it going? What did you do today?',
isLiked: false,
unread: true,
),
Message(
sender: stefano,
time: '4:30 PM',
text: 'Hey, how's it going? What did you do today?',
isLiked: false,
unread: true,
),

With messages属性,其中一个是";未读";所有物如何将true赋值给像数字1一样的Int,如果为false则为0我需要接受这个bool"未读";并转换为一个数字,以显示有多少未读取的消息进入颤振中的通知窗口小部件

有什么意见吗?

我认为这正是您所需要的。

List<Messages> x = [
Messages("asdg", true),
Messages("dagd", false),
Messages("asdg", true)
];
print(x
.map<int>((element) => element.read ? 1 : 0)
.fold<int>(0, (previous, obj) => previous + obj));

不过,为了提高效率,如果这是一个聊天应用程序的话。您应该订阅某种Stream,并且只保存一个计数器,如果侦听器触发了onChanged,则该计数器将递增。

试试这个

class Message {
String sender;
String   time;
String   text;
bool  isLiked;
bool  unread;

Message({this.sender= "",
this.time = "",
this.text= "",
this.isLiked= false,
this.unread= false });
}
void main() {

List<Message> chats = [
Message(
sender: "roberta",
time: '5:30 PM',
text: 'Hey, how's it going? What did you do today?',
isLiked: false,
unread: true,
),
Message(
sender: "roberta",
time: '5:30 PM',
text: 'Hey, how's it going? What did you do today?',
isLiked: false,
unread: true,
),
Message(
sender: "stefano",
time: '4:30 PM',
text: 'Hey, how's it going? What did you do today?',
isLiked: false,
unread: true,
)
];

int unreadCount=0;

for (int i = 0; i < chats.length; i++) {
if(chats[i].unread)
unreadCount++;
}

print(" Total Unread messages :"+ unreadCount.toString());
}

或者使用类似的折叠

int cnt=0;
chats.fold(0, (t, e) => (e.unread?cnt++:0)); 

print(" Total Unread messages :"+ cnt.toString());

最新更新