Flutter 徽章上的三元运算符仅在出现新消息时显示徽章

Flutter 徽章上的三元运算符仅在出现新消息时显示徽章,flutter,dart,ternary-operator,Flutter,Dart,Ternary Operator,这可能是一个简单的问题 我试图仅在有未读消息时在聊天屏幕上显示徽章图标 徽章的默认数量已设置为“0” 如何对三元运算符进行编码,使其在没有未读消息时甚至不会出现,并且仅在至少有一条未读消息时才会出现 我遇到的问题是,即使未读邮件为零(嵌入以下链接),徽章也会出现: 新容器( 边距:新边集。对称(水平:5.0), 孩子:新墨水井( 子:新列( mainAxisAlignment:mainAxisAlignment.center, crossAxisAlignment:crossAxisAlign

这可能是一个简单的问题

我试图仅在有未读消息时在聊天屏幕上显示徽章图标

徽章的默认数量已设置为“0”

如何对三元运算符进行编码,使其在没有未读消息时甚至不会出现,并且仅在至少有一条未读消息时才会出现

我遇到的问题是,即使未读邮件为零(嵌入以下链接),徽章也会出现:

新容器(
边距:新边集。对称(水平:5.0),
孩子:新墨水井(
子:新列(
mainAxisAlignment:mainAxisAlignment.center,
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
新徽章(
徽章颜色:颜色。绿色[300],
内容:填充(
填充:仅限常量边集(左:3.0,右:3),
子项:文本(“${badges???”}”==0
? ''
:“${徽章???”}”),
))
]))),
徽章>0
? 新容器(
边距:新边集。对称(水平:5.0),
孩子:新墨水井(
子:新列(
mainAxisAlignment:mainAxisAlignment.center,
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
新徽章(
徽章颜色:颜色。绿色[300],
内容:填充(
填充:仅限常量边集(左:3.0,右:3),
子项:文本(“$badges”),
),
),
],
),
),
),
:CustomWidget()//在此处返回所需内容

您可以嵌套三元运算符,将条件放在更深的小部件上。

基本上,您有一个逻辑,可以检查徽章是否等于“0”,然后只返回一个空白容器

children: <Widget>[
   (badges == '0') ? Container() : Badge( ... ),
]
儿童:[
(徽章==“0”)?容器():徽章(…),
]
(徽章==null)
? 新容器(
边距:新边集。对称(水平:5.0),
孩子:新墨水井(
子:新列(
mainAxisAlignment:mainAxisAlignment.center,
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
新徽章(
徽章颜色:颜色。绿色[300],
内容:填充(
填充:仅限常量边集(左:3.0,右:3),
子项:文本(“$badges”),
),
),
],
),
),
),
:CustomWidget()
成功了。多谢各位


badge在上面被初始化为int到0

其他想法:当没有新消息时,尝试使badge完全不存在。所以上面的代码应该是错误的。三元运算符应该在徽章之外,或者甚至可能在“容器”或“墨水池”本身之外。尝试此方法后,它在徽章中为这些徽章返回一个文本“null”,没有新消息。这只意味着在代码中将徽章设置为null。。。因此,请以这种方式更换它。
(徽章???'0'='0')
谢谢您的帮助。解决了的。(badges==null)有效。尝试此方法后,Flatter说我无法在null上使用运算符“>”,在本例中为“0”。变量
badges
的类型是什么?我建议将其设置为int并将其初始化为0。谢谢您的帮助。解决了的。(徽章==null)已生效。
badges > 0
? new Container(
    margin: new EdgeInsets.symmetric(horizontal: 5.0),
    child: new InkWell(
      child: new Column(
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: <Widget>[
          new Badge(
            badgeColor: Colors.green[300],
            badgeContent: Padding(
              padding: const EdgeInsets.only(left: 3.0, right: 3),
              child: Text('$badges'),
            ),
          ),
        ],
      ),
    ),
  ),
: CustomWidget() //Return what you want here
children: <Widget>[
   (badges == '0') ? Container() : Badge( ... ),
]
(badges == null) 
? new Container(
    margin: new EdgeInsets.symmetric(horizontal: 5.0),
    child: new InkWell(
      child: new Column(
        mainAxisAlignment: MainAxisAlignment.center,
        crossAxisAlignment: CrossAxisAlignment.center,
        children: <Widget>[
          new Badge(
            badgeColor: Colors.green[300],
            badgeContent: Padding(
              padding: const EdgeInsets.only(left: 3.0, right: 3),
              child: Text('$badges'),
            ),
          ),
        ],
      ),
    ),
  ),
: CustomWidget()