我有这样的列表(它一直在变化,因为这是API的响应,
tableValue=[
{
"id": "RegNo",
"displayName": "Enter Register No",
"type": "string",
"value": "1XYZ19AA"
},
{
"id": "name",
"displayName": "Enter Name",
"type": "string",
"value": "KARAN"
},
{
"id": "sub",
"displayName": "choose subjects",
"type": "list",
"value": ["JAVA"],
"data": [
{"id": "1", "dispId": "JAVA"},
{"id": "2", "dispId": "Python"},
{"id": "3", "dispId": "Dart"}
]
}
];
我想展示的是下面,
根据列表,我想显示它的所有数据,即
Enter Register No --Text_Box here--
Enter Name --Text_Box here--
(有多少个条目具有字符串类型,我希望在文本框上显示一个文本框,它的显示名称和在该地图列表中定义的值应该显示在textbox上的示例1XYZ19AA中),
如果有n个具有类型字符串n文本框的条目,则应该显示显示名称,并且我希望输入对数据的控制。
如果列表中有3个文本框,如果用户输入全部或只有1个文本框,我应该能够唯一地访问该文本框。
问题
,如果是类型列表,您可以建议任何显示方法吗?因为列表中的元素应该有一个多选择选项?
谢谢
发布于 2019-10-10 00:23:09
ListView.builder(
itemCount: tableValue.length,
itemBuilder:(context, index){
return Container(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height/10,
child: Row(
children: <Widget>[
Container(
width: MediaQuery.of(context).size.width/2,
height: MediaQuery.of(context).size.height/10,
alignment: AlignmentDirectional.centerStart,
child:Text(tableValue[index]['displayName'])
),
Container(
width: MediaQuery.of(context).size.width/2,
height: MediaQuery.of(context).size.height/10,
alignment: AlignmentDirectional.centerStart,
child: TextField(
decoration: InputDecoration.collapsed(
hintText: "blah"
)
)
)
],
)
);
}
)
发布于 2019-10-10 01:57:31
下面是一个示例,可以显示表中的数据,还可以看到如何访问TextFields和Checkboxs的选定值
请注意,您可能需要像这样更改tableValue的类型:
List<Map<String, dynamic>> tableValue = [...]
Map<String, TextEditingController> controllers = {};
Set<String> checks = {};
这将是你屏幕的主体
ListView(
children: <Widget>[
Column(
children: tableValue
.where((entry) => entry["type"] == "string")
.map((entry) => Row(
children: <Widget>[
Text(entry["displayName"]),
Flexible(
child: TextField(
controller: getController(entry["id"]),
),
)
],
)).toList(),
),
Column(
children: tableValue
.firstWhere(
(entry) => entry["type"] == "list")["data"]
.map<Widget>(
(data) => CheckboxListTile(
title: Text(data["dispId"]),
value: checks.contains(data["id"]),
onChanged: (checked) {
setState(() {
checked ? checks.add(data["id"]) : checks.remove(data["id"]);
});
},
),
).toList(),
),
Text("Texts: ${controllers.values.map((controller) => controller.text)}"),
Text("Checks: ${checks.map((check) => check)}"),
],
)
这就是如何处理TextField控制器
TextEditingController getController(String id) {
controllers.putIfAbsent(id, () => TextEditingController());
return controllers[id];
}
https://stackoverflow.com/questions/58317975
复制相似问题