Flutter 颤振中的三元算子
我想基于布尔显示和隐藏HomeCategory对象。目前,我已准备好:Flutter 颤振中的三元算子,flutter,dart,Flutter,Dart,我想基于布尔显示和隐藏HomeCategory对象。目前,我已准备好: _isOn ? HomeCategory(0, Icons.check, Colors.blue[800], "Check In", [Task(0, "Check In", true),]) : "", 但是,它会抛出一个错误,因为如果它关闭,我将传递一个空字符串。如何传递空对象或隐藏它?这是一个如下的列表: _isOn ? HomeCategory(0, Icons.check, Colors.blue[80
_isOn ? HomeCategory(0, Icons.check, Colors.blue[800], "Check In", [Task(0, "Check In", true),]) : "",
但是,它会抛出一个错误,因为如果它关闭,我将传递一个空字符串。如何传递空对象或隐藏它?这是一个如下的列表:
_isOn ? HomeCategory(0, Icons.check, Colors.blue[800], "Check In", [Task(0, "Check In", true),]) : "",
HomeCategory(1, Icons.chat_bubble, Colors.red, "Forums", [ Task(1, "Questions", true),]),
HomeCategory(2, Icons.star, Colors.blue[200], "Goals", [ Task(2, "Goals", true),]),
HomeCategory(3, Icons.monetization_on, Colors.orange[700], "Budget", [ Task(3, "Budget", true),]),
HomeCategory(4, Icons.shopping_basket, Colors.brown[300], "Shopping", [ Task(4, "Items", true),]),
HomeCategory(5, Icons.calendar_today, Colors.purple[900], "My Day & Calendar", [ Task(4, "Events", false),]),
HomeCategory(6, Icons.check_circle_outline, Colors.teal[700], "Check Out", [ Task(4, "Tasks", false),]),
HomeCategory(7, Icons.dock, Colors.grey[700], "Connect", [ Task(4, "Tasks", false),]),
HomeCategory(8, Icons.local_pharmacy, Colors.green, "My Medication", [ Task(4, "Tasks", false),]),
HomeCategory(9, Icons.settings, Colors.yellow[800], "Settings", [ Task(4, "Tasks", false),]),
您可以这样做:
_isOn ? HomeCategory() : SizedBox()
但由于它位于列表中
,因此如果
条件更干净:
if(_isOn)
HomeCategory()
您根本不需要使用三元运算符。自Dart 2.3以来,您可以在集合(即列表和映射)中使用控制语句有条件地或在循环中添加内容。在您的情况下,您需要使用条件语法:
列(//作为示例
儿童:[
如果(isOn0)HomeCategory(0,Icons.check,Colors.blue[800],“签入”,[任务(0,“签入”,true),]),
如果(isOn1)HomeCategory(1,Icons.chat_bubble,Colors.red,“论坛”,[任务(1,“问题”,true),]),
如果(isOn2)家庭类别(2,Icons.star,Colors.blue[200],“Goals”,[Task(2,“Goals”,true),]),
...
],
),
通过将其与循环语法相结合,可以使其更加清晰:
列(
儿童:[
for(类别中的var类别)
if(category.isOn)
家庭类别(
类别id,
category.icon,
类别。颜色,
类别.信息,
类别.任务,
),
],
),
编辑:如果您绝对必须为每个
HomeCategory
小部件创建一个显式递增索引,您可以这样做:
仅条件语法:
int categoryIdx=0;//在生成方法的顶部声明
...
列(//作为示例
儿童:[
如果(isOn0)HomeCategory(categoryIdx++,Icons.check,Colors.blue[800],“签入”,[任务(0,“签入”,true),],
如果(isOn1)家庭类别(categoryIdx++,Icons.chat_bubble,Colors.red,“论坛”,[任务(1,“问题”,true),]),
如果(isOn2)HomeCategory(categoryIdx++,Icons.star,Colors.blue[200],“Goals”,[Task(2,“Goals”,true),]),
...
],
),
条件+循环语法:
int categoryIdx=0;//在生成方法的顶部声明
...
纵队(
儿童:[
for(类别中的var类别)
if(category.isOn)
家庭类别(
categoryIdx++,
category.icon,
类别。颜色,
类别.信息,
类别.任务,
),
],
),
这是可行的,但ID也需要根据它的开启或关闭进行更改,因此我需要一个else语句或一种方法来更改下一个家庭类别的ID。@SamCromer主要告诉我,您确实需要重新考虑您的结构。当你处理一个小部件列表时,这些小部件本身不应该负责知道它们在列表中的位置。不幸的是,这不是我的结构,而是我继承的来自Flatter awesome的一个Flatter模板。@SamCromer Flatter awesome模板就是-模板。你可以自由地改变你想要得到的结果。