【问题标题】:Convert bool into a int to display number in Flutter widget将 bool 转换为 int 以在 Flutter 小部件中显示数字
【发布时间】:2020-12-06 13:13:22
【问题描述】:

我有一个聊天课:

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,
  ),

带有消息属性,其中之一是“未读”属性。 如何将 true 分配给 Int,例如数字 1,如果为 false 则为 0 我需要将这个布尔“未读”转换为一个数字,以显示有多少未读消息进入 Flutter 中的通知小部件

有什么意见吗?

【问题讨论】:

  • 您可以遍历chats 列表并根据消息未读的情况增加计数器变量。然后,在通知中显示这个计数器整数。
  • 使用可以使用高阶函数如'reduce'来检查未读属性并为每个未读加1 == true

标签: flutter


【解决方案1】:

我想这就是你需要的。

    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,则该计数器会增加。

【讨论】:

    【解决方案2】:

    试试这个

    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());
    

    【讨论】:

    • 好的,如何使用到小部件中?
    • 使用继承的小部件或提供者消费者。或使用流
    猜你喜欢
    • 2017-02-24
    • 1970-01-01
    • 2012-01-14
    • 2023-01-03
    • 2015-12-01
    • 1970-01-01
    • 2015-06-12
    • 2021-10-09
    • 2020-03-25
    相关资源
    最近更新 更多