Flutter listview with Map instead of List

2020-06-02 08:03发布

问题:

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.

回答1:

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



回答2:

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]]


回答3:

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


标签: dart flutter