首页 > 解决方案 > 使用键值对创建新地图,而不是保存

问题描述

我解码 json 并将其转换为 map [string, List < LatLng>] 类型的变量,并尝试将其重新调整为该函数的代码,但是我无法将其保存为变量 _polyFinal 中的映射:

       static getPoligoni() async {
http.Response _response = await http.get('$api/posizione/poligoni',
    headers: {'Authorization': '${dataController.tokenBearer.value}'});
if (_response.statusCode == 200) {
  Map<String, dynamic> _json = jsonDecode(_response.body);
  var _poly = Map.from(_json["Poligoni"]).map(
    (k, v) {
      return MapEntry<String, List<String>>(
        k,
        List<String>.from(
          v.map((x) => x),
        ),
      );
    },
  );
  List<String> _verticiRaw;
  List<LatLng> _vertici = [];
  Map<String, List<LatLng>> _polyFinal = {};
  for (String key in _poly.keys) {
    // print(_verticiRaw);
    _verticiRaw?.clear();
    _verticiRaw = _poly[key];
    for (int i = 0; i < _verticiRaw.length; i++) {
      print(i);
      var _posVirgola = _verticiRaw[i].indexOf(',');
      String posx, posy;
      posx = _verticiRaw[i].substring(0, _posVirgola);
      posy = _verticiRaw[i].substring(_posVirgola + 1);
      var lat = double.tryParse(posx);
      var lon = double.tryParse(posy);
      _vertici.add(LatLng(lat, lon));
    }
    print(key);
    print(_vertici);
    _polyFinal.putIfAbsent(key, () => _vertici);
    _vertici?.clear();
  }
  dataController.showLoadingStatus(false);
  // print(_polyFinal);
  // return _polyFinal;

如果我尝试在循环结束时打印 polyFinal 变量,我会得到一个空映射,如果我在循环期间打印变量,每个键值对都会在下面进行转换

键 --> 最后一个顶点值

我试图检查 key 和 vertici 的值,每次循环运行时它们都是不同的。

非常感谢您对理解此行为的任何帮助,致以最诚挚的问候。

标签: androidandroid-studioflutterdart

解决方案


通过放置解决

 _polyFinal.putIfAbsent(key, () => _vertici.toList());

也许 _vertici 只是一个指针而不是值本身。


推荐阅读