Creando una Pokedex con Blazor WebAssembly. La aplicación obtiene la información haciendo peticiones HTTP a PokeAPI.
Puedes ver el resultado final en el siguiente enlace: https://blazordex.web.app
- Utilizar Blazor
- Peticiones HTTP a PokeAPI
- Renderización Listas
- Enrutado simple
- Formulario para manejar una búsqueda
- Continuous Deployment con GitHub Actions
- .NET 6 + Blazor
- Bootstrap v5
- .NET CLI + Firebase CLI (vía npm)
- GitHub Actions + Firebase Hosting
- VSCode
Creación de nuevo proyecto:
dotnet new blazorwasm -o Blazordex
Instalación de .NET Webassembly build tools:
dotnet workload install wasm-tools
Instalación del paquete para añadir peticiones HTTP:
dotnet add package Microsoft.Extensions.Http --version 6.0.0
- Reside en la carpeta /Models
- Documentación de refencia del Pokemon Endpoint.
- Documentación de C# sobre el tipo primitivo
record
(Desde C# 9), que provee funcionalidades para encapsular datos: Link - Documentación de C# sobre Init only setters para eliminar el boilerplate en los constructores: Link
Serializamos el modelo a través de los siguientes records:
NamedModel
, Sprites
, PokemonTypes
, Pokemon
, GetPokemonListResponse
- Reside en la carpeta /Clients
Creación de la clase PokeClient
que utiliza los métodos:
- GetPokemons(int offset): Para cargar más Pokemons
- GetPokemon(string url):
- GetPokemonByNameOrId(string identifier):
Necesitamos que la configuración del cliente apunte a la API de PokeAPI. Para ello configuramos appsettings.json
en /wwwroot y lo registramos en Program.cs
PokeApiOptions
reside en la carpeta /Configurations- Necesitamos que la configuración apunte a la API de PokeAPI. Para ello configuramos
BaseAddress
en appsetings.json - Debemos también registrar la configuración en Program.cs
- Los componentes residen en /Shared/Components
En particular, los componentes <PokemonCard>
, <PokemonTypes>
serán consumidos por las páginas.
En función de los tipos de cada Pokemon se añade un background personalizado. El código reside en: PokemonCard.razor
- Utilizamos un Diccionario para mapear los colores.
Key
es el Identificador yValue
es el color rgb. - El método
getBackgroundByType()
es el encargado de asignar los backgrounds a cada tarjeta.
- Las páginas residen en /Pages
El proyecto sólo utiliza dos páginas: Index y PokemonDetails
Los estilos están distribuídos en:
- Clases para los elementos en Bootstrap, y
- En los
.css
asociados a cada archivo.razor
para los detalles más personalizados. - CSS inline para los
backgrounds
en función de los tipos de cada Pokemon.
- Crear un nuevo proyecto en Firebase
- Instalar firebase CLI
npm install -g firebase-tools
- Asegurarse de tener abierto VSCode como administrador (Lo necesitaras para ejecutar comandos de firebase)
- Cambiar la directiva de ejecución: Documentación - Solución
Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope CurrentUser
- Login en Firebase
firebase login
- Inicializar el proyecto y seguir los pasos de Firebase CLI
firebase init
- Publicar en el directorio
release/wwwroot
- Script para ejecutar antes de cada deploy
dotnet publish -c Release -o release
Agradecimiento especial
A Adre Lopes - @alopes2 por mostrar sus conocimientos de una forma divertida y a @ssmkhrj por la inspiración.