如何在飞镖中访问嵌套词典?



我有这个代码:

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

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

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

它不起作用,当我尝试时一样

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

如何正确访问变量中的登录属性?,提前感谢。

那是因为endPoints值是一个Object而不是dynamic,试试这个:

var signInEndpoint = (Dev.config['endpoints'] as dynamic)['signIn'];

你尝试过两种方法@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']

最新更新