如何在Dart中访问嵌套字典?

时间:2018-09-01 05:39:09

标签: dart flutter

我有此代码:

 class Dev {
     static final config = const {
       'endpoints': const {
         'signIn': '/v1/auth/sign_in',
       },
       'apiBaseUrl': 'localhost:3000'
     };
    }   

我正在尝试访问config变量中的signIn属性,当我执行config ['endpoints']时,它可以正确访问该属性,但是当我尝试

var signInEndpoint = config['endpoints']['signIn'];

它不起作用,当我尝试

var endpoints = config['endpoints'];
var signInEndpoint = endpoints['signIn'];

我要如何正确访问变量中的signIn属性?

2 个答案:

答案 0 :(得分:1)

这是因为extension Object { func doubledPrice() -> Object { return Object( price1: price1 * 2, price2: price2 * 2, price3: price3 * 2, price4: price4 * 2, name: name, //we can't double a string type: type, quantitySold: quantitySold, //I've named the func assuming you won't double the quantitySold, obviously if that's not the desired behaviour then this needs to change dateIntroduced: dateIntroduced //can't double a date ) } } 的值是endPoints而不是Object,请尝试以下操作:

dynamic

答案 1 :(得分:1)

@Juan您尝试了两种方法,

  1. var signInEndpoint = config['endpoints']['signIn'];
    

    可以根据@diegoveloper的建议进行修复

  2. var endpoints = config['endpoints'];
    var signInEndpoint = endpoints['signIn'];
    

    可以像

    一样固定
    Map endpoints = config['endpoints']; //Map<String, String> will be much better
    var signInEndpoint = endpoints['signIn'];
    

其他信息:

我更喜欢使用dynamic类型,因为它只会产生运行时错误(对于动态/对象,不会产生编译时错误)。

在您的情况下,Dev.configMap<String, Object>。可以将对象投射任何地方,它将创建运行时错误。

因此,我对Dev类进行了一些更改。请看看

class Dev {
  static final Map<String, Map<String, String>> config = const {
    'endpoints': const {
      'signIn': '/v1/auth/sign_in',
      'apiBaseUrl': 'localhost:3000'
    },
  };
}
var signInEndpoint = Dev.config['endpoints']['signIn'] //will work

或类似的

class Dev {

  static final Map<String, String> endpoints = const {
    'signIn': '/v1/auth/sign_in',
  };
  static final Map<String, String> config = const {
    'baseUrl': 'localhost:3000',
    'other': 'others'
  };
}
var signInEndpoint = Dev.endpoints['signIn']