我有一个 map
运行应用程序时,它在卡片中返回“null”!!
针对类似问题,我尝试了在 StackOverFlow 中看到的许多解决方案,但都没有结果。
在这里我确定了我的地图:
var _item;
List listCount = [];
Map<String, dynamic> records = {};
String name;
在这里我给 var _item 赋值:
MyCard(
colour: Colors.lightBlueAccent,
maker: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
StreamBuilder<int>(
stream: _stopWatchTimer2.rawTime,
initialData: 0,
builder: (context, snap) {
final value = snap.data;
final displayTime = StopWatchTimer.getDisplayTime(
value,
hours: _isHours2);
_item = displayTime;
return Padding(
padding: EdgeInsets.all(5.0),
child: Text(displayTime,
style: TextStyle(
fontSize: 30.0, color: Colors.white)),
);
},
),
],
),
),
在“保存”按钮中,我提供地图的第一个参数并分配名称变量:
createAlertDialog(buildContext, context) {
TextEditingController controller;
return showDialog(
context: context,
// barrierDismissible: false,
builder: (context) {
return AlertDialog(
title: Text(
'Type record name',
textAlign: TextAlign.center,
style: TextStyle(fontSize: 18.0),
),
content: TextField(
controller: controller,
onChanged: (value) {
name = value;
}),
actions: [
MaterialButton(
elevation: 5.0,
child: Text('Save'),
onPressed: () {
listCount.add(_item);
print(_item);
records[name] = _item;
print(records);
Navigator.pop(context);
},
),
MaterialButton(
elevation: 5.0,
child: Text('Cancel'),
onPressed: () {
Navigator.pop(context);
},
),
],
);
},
);
}
最后在这里我尝试通过 listview.builder 在卡片中显示它:
Container(
color: Colors.white,
child: ListView.builder(
scrollDirection: Axis.vertical,
shrinkWrap: true,
itemCount: records.length,
itemBuilder: (context, index) {
return MyCard(
colour: Colors.cyanAccent,
maker: Container(
width: 250.0,
height: 75.0,
child: Text(
'${records[index]}',
style: TextStyle(fontSize: 25.0),
textAlign: TextAlign.center,
),
),
);
},
),
),
我认为 itemBuilder 的第二个参数(索引)有问题,因为我随机用另一个关键字替换了这个关键字,并在运行我的应用程序“Null”时得到了相同的结果。
答案 0 :(得分:0)
您可以将地图条目作为列表获取:
final recordsEntries = records.entries.toList()
然后,您有一个 MapEntry 列表,并且能够访问与集合中每个项目关联的键和值。
recordsEntries[index].key
recordsEntries[index].value