【问题标题】:Adding Maps inside Map<dynamic, dynamic> Dart/Flutter在 Map<dynamic, dynamic> Dart/Flutter 中添加地图
【发布时间】:2020-05-02 07:26:32
【问题描述】:

我坐 6 小时 试图添加 Map&lt;dynamic, dynamic&gt; 包含 Map&lt;dynamic, dynamic&gt; 在另一个里面 Map&lt;dynamic, dynamic&gt;

如何像这样添加地图:

{
    map1:{
          map1_key1: map1_val1
          map1_key2: map1_val2
          map1_2:{
                  map1_3:{
                           map3_key1: map3_val1
                           map3_key1: map3_val2
                         }
                  map2_key1: map2_val1
                  map2_key1: map2_val2
                 }

          map1_key3: map1_val3
         }
}

在名为 masterMap 的映射中重复访问,并像访问任何其他映射一样访问其中的每个键/值?

  • 我试过this
  • 我试过this
  • 我试过this
  • 我试过this

    • 试过 addAll() 函数给我错误调用 null..
    • 试过 addEntries() 函数给我

      The argument type 'Map<dynamic, dynamic>' can't be assigned to the parameter type 'Iterable<MapEntry<dynamic, dynamic>>'
      

没什么用,我需要帮助这是非常糟糕和愚蠢的事情,为什么没有简单的函数可以将所有映射键/值与另一个合并,那么简单?!

更新: 我的代码:

Map<dynamic, dynamic> theSnapShot;
theSnapShot = {
  'map1': {
          '-LyUAD8B0LpKZ-5-cRn-': {
                   'CoordsMap': [null, {'FirstCoords': '30.088,31.279',}]
                                  }
          }
             };
Map<dynamic, dynamic> masterMap;
masterMap.addAll(Map.from(theSnapShot['map1']));

输出:

Unhandled Exception: NoSuchMethodError: The method 'addAll()' was called on null.

【问题讨论】:

  • 您能出示您当前的代码吗?
  • 我提供了示例代码.. 我需要将此地图添加到地图列表中的某个键下
  • 你的意思是你有像第一个代码sn-p这样的地图,你需要在那个地图上添加theSnapShot 对吗?
  • @Blasanka True ...

标签: flutter dart


【解决方案1】:

很简单
您在这里有两个选择,第一个:定义键然后为其赋值

Map someThing = {
    "someThing2":{
      'key1': 'val1',
      'key2': 'val2',
      'key3': {},
    }
  };
// {someThing2: {key1: val1, key2: val2, key3: {}}}
someThing['someThing2']['key3'] = {
    'someThing3': {
          'key4': 'val4',
        },
  };
// {someThing2: {key1: val1, key2: val2, key3: {someThing3: {key4: val4}}}}

第二个选项是添加键和值,如下所示

Map someThing = {
    "someThing2":{
      'key1': 'val1',
      'key2': 'val2',
    }
  };

someThing['someThing2'].putIfAbsent('key4', () => {
    'someThing3': {
          'key4': 'val4',
        },
  });
// {someThing2: {key1: val1, key2: val2, key4: {someThing3: {key4: val4}}}}

【讨论】:

  • 我不知道 someThing 映射值,所以我将其定义为 Map someThing; ,当我尝试 putIfAbsent 时,它给了我错误被称为 null ..
  • 你试过了吗Map someThing = {};someThing.putIfAbsent('key4', () =&gt; { 'someThing3': { 'key4': 'val4', }, });
  • 是的,并在initState函数中添加了它并尝试重建应用程序,同样的问题!!
【解决方案2】:

你的输出Unhandled Exception: NoSuchMethodError: The method 'addAll()' was called on null.因为你还没有初始化masterMap,就这样做吧:

Map<dynamic, dynamic> masterMap = {};

我不知道它是否解决了你的问题,既然你说你不知道关键,我想下面就是你要找的:

Map<dynamic, dynamic> theSnapShot;
theSnapShot = {
  'map1': {
      '-LyUAD8B0LpKZ-5-cRn-': {
         'CoordsMap': [null, {'FirstCoords': '30.088,31.279',}]
      }
   }
};
Map<dynamic, dynamic> masterMap = Map.from(theSnapShot);
theSnapShot.forEach((key, value) {
    masterMap.addAll(theSnapShot[key]);
});

print(masterMap);

//output
//{map1: {-LyUAD8B0LpKZ-5-cRn-: {CoordsMap: [null, {FirstCoords: 30.088,31.279}]}}, -LyUAD8B0LpKZ-5-cRn-: {CoordsMap: [null, {FirstCoords: 30.088,31.279}]}}

这是我在dartpad 中创建的一个简单示例。

【讨论】:

  • @Almodoen 让我知道这是否没有解决您的问题
【解决方案3】:

这是您的代码的工作版本

Map<dynamic, dynamic> theSnapShot;
theSnapShot = {
  'map1': {
          '-LyUAD8B0LpKZ-5-cRn-': {
                   'CoordsMap': [null, {'FirstCoords': '30.088,31.279',}]
                                  }
          }
             };
  Map<dynamic, dynamic> masterMap = theSnapShot;
  masterMap.addAll(theSnapShot["map1"]);
  print(masterMap);

基本上,它使用theSnapShot 映射初始化masterMap,并将map1 条目附加到masterMap。所以masterMap 最终会是这样的

{
    "map1": {
      "-LyUAD8B0LpKZ-5-cRn-": {"CoordsMap": [null, {"FirstCoords": "30.088,31.279"}]}},

    "-LyUAD8B0LpKZ-5-cRn-": {"CoordsMap": [null, {"FirstCoords": "30.088,31.279"}]}}

这是你想要的输出吗?

【讨论】:

  • 很好,你添加了 ["map1"] 而不是 [map1] 但我的问题是一样的,我在快照中有非常复杂的地图,但我提供了示例,但它不起作用,我没有用 theSnapShot 映射初始化 masterMap,因为我不知道 theSnapShot 值,它是来自 firebase realtime-database 的 Future,我只是像这样定义 masterMap Map masterMap; addAll 函数在这里不起作用..
  • 所以您有来自 firebase 数据库的传入数据,并且您想将它们插入到您的 masterMap 中?
  • 不完全是,但是就像你说的那样,但是我对接收到的数据进行循环以从每个 map1 中提取 CoordsMap 地图并将其添加到 masterMap ..,这给了我名为 masterMap 的地图,其中包含CoordsMap 的 Maps ,使用 forEach 或类似的东西访问它
猜你喜欢
  • 1970-01-01
  • 2021-09-25
  • 2020-01-10
  • 2020-08-25
  • 2018-12-01
  • 2021-07-14
  • 2021-02-11
  • 2021-09-08
  • 2021-12-02
相关资源
最近更新 更多