id | aliases | tags | created | links | title | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|
tpl.flutter |
|
|
12. Dynamic type - Curso Flutter |
En este capítulo, exploramos los Maps
en Dart, una estructura de datos esencial para almacenar pares clave-valor. Un
Map
es una colección dinámica donde cada clave es única y se asocia a un valor. Tanto las claves como los valores
pueden ser de cualquier tipo.
Los Maps
son increíblemente útiles para representar datos con una estructura similar a un diccionario, donde se busca
un valor específico utilizando su clave correspondiente.
void main() {
// final Map<String, dynamic> pokemon = { ... };
// Se declara un Map llamado 'pokemon'.
// <String, dynamic> especifica que las claves son de tipo String
// y los valores pueden ser de cualquier tipo (dynamic).
final Map<String, dynamic> pokemon = {
'name': 'Ditto',
'hp': 100,
'isAlive': true,
'abilities': <String>['impostor'],
'sprites': {
1: 'ditto/front.png',
2: 'ditto/back.png',
}
};
// print(pokemon);
// Imprime todo el Map 'pokemon' en la consola.
print(pokemon);
// print('Name: ${pokemon['name']}');
// Accede al valor asociado a la clave 'name' y lo imprime.
// Si la clave no existe, devuelve 'null'.
print('Name: ${pokemon['name']}');
// print('Name: ${pokemon['sprites']}');
// Accede al valor asociado a la clave 'sprites', que en este caso
// es otro Map anidado.
print('Name: ${pokemon['sprites']}');
}
En este segmento, profundizamos en la forma de acceder a los valores dentro de un Map
, especialmente cuando estos
valores son, a su vez, otros Maps
anidados. Esto es crucial para trabajar con estructuras de datos complejas que
representan objetos con propiedades que también son objetos o colecciones.
La clave para acceder a valores anidados es encadenar los corchetes []
, utilizando la clave de cada nivel del Map
hasta llegar al valor deseado.
[!NOTE] Tarea: Acceder a valores anidados
void main() { // Se declara un Map llamado 'pokemon'. // Las claves son String y los valores pueden ser de tipo dinámico. // Dentro de 'sprites', hay un Map anidado con claves de tipo int y valores String. final Map<String, dynamic> pokemon = { 'name': 'Ditto', 'hp': 100, 'isAlive': true, 'abilities': <String>['impostor'], 'sprites': { // Este es un Map anidado 1: 'ditto/front.png', // Clave 1, Valor 'ditto/front.png' 2: 'ditto/back.png', // Clave 2, Valor 'ditto/back.png' } }; // Accediendo a un valor dentro del Map anidado 'sprites'. // Primero se accede al Map 'sprites' usando la clave 'sprites'. // Luego, se accede al valor dentro de 'sprites' usando la clave [1]. print('Back: ${pokemon ['sprites'] [1]}'); // Salida: Back: ditto/front.png // Accediendo al segundo valor dentro del Map anidado 'sprites'. print('front: ${pokemon ['sprites'][2]}'); // Salida: front: ditto/back.png }