Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振中的三元算子_Flutter_Dart - Fatal编程技术网

Flutter 颤振中的三元算子

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

我想基于布尔显示和隐藏HomeCategory对象。目前,我已准备好:

  _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模板就是-模板。你可以自由地改变你想要得到的结果。