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

问题描述 投票:2回答:2

我有这个代码:

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

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

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

当我尝试时,它不起作用

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

我怎样才能正确访问变量中的signIn属性?,提前感谢。

dart flutter
2个回答
1
投票

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

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

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']
© www.soinside.com 2019 - 2024. All rights reserved.