List 将索引附加到列表项(字符串)[颤振]

List 将索引附加到列表项(字符串)[颤振],list,flutter,indexing,colors,containers,List,Flutter,Indexing,Colors,Containers,我不想让isSelected bool变量,我想让它成为selected的索引。然后检查reportReasons列表中所选的索引 这是为了知道选择的原因。此外,如果isSelected不是bool,那么如何使所选容器更改颜色 多谢各位 final List<String> reportReasons = [ 'blah', 'blah blah', 'blah blah blah' ]; List<String> chosenReasonsToReport = [

我不想让isSelected bool变量,我想让它成为selected的索引。然后检查reportReasons列表中所选的索引

这是为了知道选择的原因。此外,如果isSelected不是bool,那么如何使所选容器更改颜色

多谢各位

final List<String> reportReasons = [
  'blah',
'blah blah',
'blah blah blah'
];

List<String> chosenReasonsToReport = [];
bool isSelected = false;

  Container(
                child: Wrap(
                    children: reportReasons
                        .map((reportReason) => GestureDetector(
                              onTap: () {
                               
                                setState(() { if (isSelected = false) {
                                  isSelected = true;
                                } else {
                                  isSelected = false;
                                }});
if (reportReason.isSelected && chosenReasonsToReport.length < 3) {
      chosenReasonsToReport.add('${reportReason}');

      print(chosenReasonsToReport);
    } else {
      chosenReasonsToReport.remove('${reportReason}');
     
      print(chosenReasonsToReport);
    }
                              },
                              child: Container(
                                margin: EdgeInsets.only(
                                  right:
                                      MediaQuery.of(context).size.width * 0.021,
                                  bottom: MediaQuery.of(context).size.height *
                                      0.009,
                                ),
                                decoration: BoxDecoration(
                                    color: isSelected
                                        ? Color(0xff4aa3f8)
                                        : Color(0xff3a327f),
                                    borderRadius: BorderRadius.circular(12),
                                    border: Border.all(
                                        color:
                                            Colors.grey[50].withOpacity(0.60))),
                                padding: EdgeInsets.symmetric(
                                    horizontal:
                                        MediaQuery.of(context).size.width *
                                            0.027,
                                    vertical:
                                        MediaQuery.of(context).size.height *
                                            0.0045),
                                child: Text(
                                  reportReason,
                                  style: TextStyle(
                                      fontSize: 13.5,
                                      color: isSelected
                                          ? Color(0xff231b6a)
                                          : null),
                                ),
                              ),
                            ))
                        .toList()),
最终列表报告原因=[
"废话",,
“胡说八道”,
“废话废话”
];
列表chosenReasonsToReport=[];
bool-isSelected=false;
容器(
孩子:包裹(
儿童:原因
.map((reportReason)=>GestureDetector(
onTap:(){
setState((){if(isSelected=false){
isSelected=true;
}否则{
isSelected=false;
}});
if(reportReason.isSelected&&chosenReasonsToReport.length<3){
添加('${reportReason}');
打印(ChosenRestorePort);
}否则{
删除(“${reportReason}”);
打印(ChosenRestorePort);
}
},
子:容器(
页边距:仅限边距(
正确的:
MediaQuery.of(context).size.width*0.021,
底部:MediaQuery.of(上下文).size.height*
0.009,
),
装饰:盒子装饰(
颜色:已选择
?颜色(0xff4aa3f8)
:颜色(0xff3a327f),
边界半径:边界半径。圆形(12),
边界:边界(
颜色:
颜色。灰色[50]。不透明度(0.60)),
填充:EdgeInsets.symmetric(
水平:
MediaQuery.of(context).size.width*
0.027,
垂直:
MediaQuery.of(上下文).size.height*
0.0045),
子:文本(
报告原因,
样式:TextStyle(
字体大小:13.5,
颜色:已选择
?颜色(0xff231b6a)
:null),
),
),
))
.toList()),

您可以使用以下几种方法:

  • 一组索引:
  • class\u MyScreenState扩展状态{
    静态常量列表_reportReasons=[
    "废话",,
    “胡说八道”,
    “废话废话”
    ];
    集合_chosenindex={};
    @凌驾
    小部件构建(构建上下文){
    返回列表视图(
    子项:List.generate(_reportReasons.length,(i){
    返回容器(
    //根据报告选择更改属性
    颜色:_chosenindex.contains(i)
    ?颜色:绿色
    :颜色。红色,
    子:CheckboxListTile(
    //访问报表名称
    标题:正文(_[i]),
    //如果选择了报告,则访问
    值:_chosenindex.contains(i),
    //选择和取消选择报表
    一旦更改:(v){
    设置状态(){
    如果(v){
    _添加(i);
    }否则{
    _删除(i);
    }
    });
    }
    ),
    );
    }),
    );
    }
    }
    
  • 字符串和布尔值的映射:
  • class\u MyScreenState扩展状态{
    最终地图报告={
    "废话":假,,
    "废话":错,,
    “胡说八道”:错,
    };
    @凌驾
    小部件构建(构建上下文){
    返回列表视图(
    子项:_reports.keys.map((报告){
    返回容器(
    //根据报告选择更改属性
    颜色:_报告[报告]
    ?颜色:绿色
    :颜色。红色,
    子:CheckboxListTile(
    //访问报表名称
    标题:文本(报告),
    //如果选择了报告,则访问
    值:_报告[报告],
    //选择和取消选择报表
    一旦更改:(v){
    设置状态(()=>_reports[report]=v);
    }
    ),
    );
    }).toList(),
    );
    }
    }