I'm trying to display the contents of my HashMap values in a ListView.builder widget. Is there a way to do this? With a List I could simply use the index, but how would that work with a HashMap without making a List out of it?
The keys of the map are strings and the values are maps with the data to display.
Add a comment
|
4 Answers
Its a little late but You could also try this. Map values = snapshot.data;
return new ListView.builder(
itemCount: values.length,
itemBuilder: (BuildContext context, int index) {
String key = values.keys.elementAt(index);
return new Column(
children: <Widget>[
new ListTile(
title: new Text("$key"),
subtitle: new Text("${values[key]}"),
),
new Divider(
height: 2.0,
),
],
);
},
);
for a more detailed example check this out https://kodestat.gitbook.io/flutter/39-flutter-listviewbuilder-using-dart-maps
Comments
Just make a list from the keys and then get the value using the index to get the map key and use it to get the map value
var keys = myMap.keys.toList();
var val = myMap[keys[idx]];
5 Comments
Bram Vanbilsen
But I'm constantly changing the Map. I'd prefer not to create a list every time when I'm adding data.
Seth Ladd
Every time you change your map, you're calling setState() anyway, I presume? If so, you probably don't need to worry about calling keys.toList().
Günter Zöchbauer
There is no way to access elements of a map by index. I don't think there are other map implementations that would allow that.
Ian Smith
What is idx in this example?
Günter Zöchbauer
The position of the element you want to access.
it is possible, you can do something like this
map.forEach((key, value) {
// here you can write your logic using "Value object",
// make new object of your list view item and
// add it to it's builder list using
setState(() {
_builderList.insert(0, itemObject);
});
});
or you can try
final list = map.values.toList(growable: {true/false});
// play with your list
Comments
Just use inside the listview builder yourlistname[index ]['keyname' ], that works for me.
1 Comment
Gene
Is it ideal? I have no idea ! Does it work? Yes !! Thank you