flutter - 如何用图像列表替换逗号分隔值?
问题描述
我有这个布局:
代码:
return ListView.builder(
itemBuilder: (context, position) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Expanded(
child:Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Padding(
padding:
const EdgeInsets.fromLTRB(12.0, 12.0, 12.0, 6.0),
child: Row(
children: <Widget>[
Image.asset("assets/images/"+ _displayedList[position].brand+".jpg", height: 40, width: 40),
],
),
),
Padding(
padding:
const EdgeInsets.fromLTRB(12.0, 6.0, 12.0, 12.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Text(
_displayedList[position].location,
style: TextStyle(fontSize: 18.0, fontWeight: FontWeight.bold), textAlign: TextAlign.left,
),
],
),
),
Padding(
padding:
const EdgeInsets.fromLTRB(12.0, 6.0, 12.0, 12.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Text(
_displayedList[position].distance.toString()+" KM",
style: TextStyle(fontSize: 18.0), textAlign: TextAlign.left,
),
],
),
)
],
),
), flex: 3,
),
Expanded(
child:Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Padding(
padding:
const EdgeInsets.fromLTRB(12.0, 6.0, 12.0, 12.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Text(
"\$"+ _displayedList[position].price.toString(),
style: TextStyle(color: Colors.grey), textAlign: TextAlign.center,
),
],
),
),
Padding(
padding:
const EdgeInsets.fromLTRB(12.0, 6.0, 12.0, 12.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Text(
_displayedList[position].facilities.toString(),
style: TextStyle(color: Colors.grey), textAlign: TextAlign.center,
),
],
),
)
],
),
), flex: 2,
)
],
),
Divider(
height: 2.0,
color: Colors.grey,
)
],
);
},
itemCount: _displayedList.length
);
例如,查看餐厅、厕所文本?在上面的代码中,看看“_displayedList[position].facilities.toString()”
或者,如果 _displayedList[position].facilities.toString() 为“ATM”,则仅显示 ATM 图标。
更新 我在下面尝试了 Zvi Karp 的建议,如下所示(使用图像而不是图标):
Map<String, Image> _serviceImages = {
'atm': Image.asset("assets/images/atm.png", height: 30, width: 30),
'toilet': Image.asset("assets/images/toilet.png", height: 30, width: 30),
'restaurant': Image.asset("assets/images/restaurant.png", height: 30, width: 30)
};
Padding(
padding:
const EdgeInsets.fromLTRB(12.0, 6.0, 12.0, 12.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: _serviceImages[_displayedList[position].facilities.toString().split(",").map<Image>((icon) => Image(_categories[icon])).toList()]
),
),
颤振抱怨:
参数类型“图像”不能分配给参数类型“列表”
解决方案
首先,您需要创建一个图标映射,例如:
Map<String, IconData> _categories = {
'Sports' : Icons.directions_run,
'Politics' : Icons.gavel,
'Science' : Icons.wb_sunny,
};
然后你可以像这样使用它:
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: _categories[_displayedList[position].facilities.toString().split(",").map<Icon>((icon) => Icon(_categories[icon])).toList()
)
推荐阅读
- ruby - 当使用 `execute` 而不是 `invoke` 运行任务时,为什么 `args` 不是 Rake::TaskArguments 的实例?
- flutter - Flutter in_app_purchase 0.2.1 purchaseUpdatedStream.listen 在 Android 上不起作用
- angular-material - 当侧面导航在角度材料中打开时如何添加侧面导航切换图标
- .net - 通过 Docker 运行 .Net Core 应用程序时找不到 .XML 文件
- css - 如何使两个或更多行长表适合内联引导程序 4?
- msbuild - Cakebuild 脚本使用 vs 2017 并且构建失败
- javascript - 如何在 postgresql 中更改格式日期
- graphql - Graphql `Parameter \"obj\" to Document() 必须是一个对象,得到`
- python - 如何从带有参数的python脚本运行新终端?
- python - Python - 解析串行数据并查找特定字符串