Flutter get Object property Name

21,321

Solution 1

To get all filenames you can use:

var data = ...
 
var filenames = [];
for(var i = 0; i < data.length; i++) {
  var item = data[0]['files'];
  var key = item.keys.first;
  var filename = item[key]['filename'];
  filenames.add(filename);
}

print(filenames);

Solution 2

I was able to solve using 'keys'

for a json example like this:

{
"1-0001": {
  "name": "red",
  "hex": "FF0000"
 },
"1-0002": {
  "name": "blue",
  "hex": "0000FF"
 },
"1-0003": {
  "name": "green",
  "hex": "008000"
 }
}

I was able to use

Map<String, dynamic> decoded = json.decode(jsonString);
for (var colour in decoded.keys) {
  print(colour);                   // prints 1-0001
  print(decoded[colour]['name']);  // prints red
  print(decoded[colour]['hex']);   // prints FF0000
}

Solution 3

You need to define a data type. It is basically a map of (key value-pair) where key is changed as stated in question typeA or typeB This Object has 2 properties option1 and option2 which is also strings.

Here is the sample code to construct model and how to use it

import 'package:TestDart/TestDart.dart' as TestDart;

main(List<String> arguments) {
  var  map = new Map<String, MyObject>();
  map['typeA'] = new MyObject("one", "two");
  map['typeB'] = new MyObject("one", "two");

  print(map['typeA'].toString());
  print(map['typeA'].toString());
}

class MyObject {
  String _option1;
  String _option2;

  MyObject(this._option1, this._option2);

  String get option2 => _option2;

  String get option1 => _option1;

  @override
  String toString() {
    return 'MyObject{option1: $_option1, option2: $_option2}';
  }


}

Relevant answer

 map.forEach((key, value) {
    print("Key : ${key} value ${value}");
  });
Share:
21,321
nitishk72
Author by

nitishk72

A developer who loves to work with various technology. Always ready to learn and explore new technologies. Expertise Primary: JavaScript. Secondary: Flutter Social My Website Youtube Channel GitHub Twitter

Updated on July 09, 2022

Comments

  • nitishk72
    nitishk72 almost 2 years

    I passed the following object:

    var myVar = { typeA: { option1: "one", option2: "two" } }
    

    I want to be able to pull out the key typeA from the above structure.

    This value can change each time so next time it could be typeB.

    So I would like to know if there is any way to do that

  • nitishk72
    nitishk72 about 6 years
    Actually, I wanted the key name. I got the correct solution but then also thanks for trying
  • silentsudo
    silentsudo about 6 years
    i have updated my answer to be more precise and in context of question take a look
  • nitishk72
    nitishk72 about 6 years
    I will try it and if it works I will definitely accept.
  • Günter Zöchbauer
    Günter Zöchbauer about 6 years
    I working with Dart since a long time. I'm still rather new to Flutter.
  • ztvmark
    ztvmark about 4 years
    The argument type 'Map<String, Map<String, String>>' can't be assigned to the parameter type 'String'