我正在尝试为我的应用程序上的每个用户创建不同数量的按钮,在这个应用程序上,我将把按钮中的数据存储在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],
但是显然我做不到,还有其他解决方法吗?
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
对象。