For循环颤振内的Chnage图标类型

问题描述 投票:1回答:1

我正在尝试为我的应用程序上的每个用户创建不同数量的按钮,在这个应用程序上,我将把按钮中的数据存储在Firestore中的文档中,该文档存储按钮包含的内容,因此,文本,图标,标签等。所有内容都将存储在这些文档中。每个按钮都有1个文档。目前,我正在使用3个按钮,所以我有3个文档。我创建了一个For循环,因此可以在我的App中创建这些按钮。但是我尝试的是添加一个列表,该列表将从Firestore中获取所有图标的名称,因此我可以插入循环中。这是我尝试过的列表:

List<String> icondata = [for (int i = 0; i < cardamount; i++)  documents[i]["icondata"]];

此列表包含的是图标的类型,因此:

[lock, lightbulb_outline, check]

我在循环中尝试做的是:

for (int i = 0; i < cardamount; i++)  
                                CustomCard(
                                  activeLabel: activelabel,
                                  inActiveLabel: inactivelabel,
                                  iconData: Icons.icondata[i],
                                  text: 'Lâmpada 2 Schuma',
                                  isActive: snapshot.data[devices[i]],
                                  onTap: () {
                                    setState(() {
                                      Firestore.instance.collection('dadosusuarios').document(user.uid).updateData({
                                        devices[i]: cardsValue[i] = !cardsValue[i],
                                      });
                                    });
                                  },
                                ), 

这是我尝试过的:

iconData: Icons.icondata[i],

但是显然我做不到,还有其他解决方法吗?

flutter google-cloud-firestore flutter-layout
1个回答
1
投票
您不能直接执行此操作,但是可以尝试以下操作:

import 'package:flutter/material.dart'; void main() { runApp( MaterialApp( home: MyWidget(), ), ); } class MyWidget extends StatelessWidget { @override Widget build(BuildContext context) { var data = [ {'name': 'Account Data', 'icon': 'account_balance'}, {'name': 'Banker', 'icon': 'home'}, ]; return Scaffold( body: Center( child: Wrap( alignment: WrapAlignment.center, spacing: 8.0, // gap between adjacent chips runSpacing: 4.0, // gap between lines children: data .map((e) => Chip( avatar: Icon( getIconData(e['icon']), size: 18, ), label: Text(e['name']), )) .toList()))); } IconData getIconData(String name) { switch (name) { case "account_balance": return Icons.account_balance; case "home": return Icons.home; } return Icons.check_box_outline_blank; } }

此代码使用switch-case语句将字符串与已知值进行比较,并基于该值返回Icon对象。
© www.soinside.com 2019 - 2024. All rights reserved.