Primer vistazo a .Net Maui (con codigo incluido)

Demos un vistazo preliminar a .NET Maui previo a los primeros previews que estarán disponibles a la comunidad próximamente! Código y baterías incluídas!

Maui overview

Esta publicación forma parte del 2do Calendario de Adviento Xamarin, organizado por mi colega Luis Beltran. Te invito a leer las demás publicaciones desde el siguiente link:

Calendario de Adviento Xamarin 2020: https://www.luisbeltran.mx/2020/11/16/segundo-calendario-de-adviento-de-xamarin-en-espanol/

Sobre .NET Maui

Ansioso por .NET MAUI? No puedes esperar? Bueno, por acá algunas sugerencias:

¿Qué veremos en este artículo?

Aviso / Disclaimer [Experimental]

Teniendo claro lo anterior, comenzamos :)

1- Comenzando con el repositorio de Maui.

Puedes hacer ‘fork’ o clonar localmente en tu equipo el repositorio de Maui directamente desde GitHub, extenderlo y enviar sugerencias en el codigo. Te recomiendo darle una leida al README.md y el código de conducta que Xamarin ha mantenido desde que es Open Source años atrás:

https://github.com/dotnet/maui

Maui structure

2- Creando un repositorio tipo “Playground” para Maui

Para efectos de este ejemplo - disponible en GitHub bajo mi cuenta, haremos una app Xamarin desde 0 utilizando NetStandard2.0 y los templates de Visual Studio 2019 para Mac y Windows disponibles en 2020, los cuales generan la misma estructura de archivos independientemente de que uses Windows o Mac.

IMPORTANTE: El código de Maui actual contiene una carpeta Samples donde de hecho ya viene algo que podemos utilizar si no queremos utilizar este playground.

He puesto el código utilizado en GitHub donde se pueden examinar más de cerca los cambios entre una app Xamarin.Forms de 2020 hacia un .NET Maui experimental.

Por ahora y por la estructura tradicional que estamos usando y como veremos mas adelante con Maui, los proyectos se mantienen compatibles dado que aun son basados en .Net Standard.

HelloWorld

File -> New Project -> Blank Forms App
Nombre: HelloWorld

¿Qué esperar de esto a futuro en Maui? Bastante en este aspecto:

En otras palabras, podremos tener algo como lo siguiente:

dotnet new maui

Lo cual es algo muy común en frameworks como React Native y Flutter hoy en día.

3- Haciendo “switch” a Maui en lugar de Xamarin.Forms para nuestro proyecto experimental.

Desde nuestro app de HelloWorld (playground), agregamos a la solución los proyectos principales que provienen del proyecto Maui, para poderlos compilar y usarlos en nuestra aplicación.

Para ello simplemente agregamos mediante clic derecho a la solución -> Add existing project… y agregamos los siguientes, entre otros:

Teniendo compilado todo, podemos comentar/quitar las referencias de Xamarin.Forms de nuestros proyectos iOS/Android para empezar a usar Maui por primera vez!

Maui references

Como es esperado, Maui se compone mayormente del codigo original de Xamarin.Forms, con estructura un poco diferente y con codigo nuevo que se espera para la nueva implementación.

¿Qué esperar de esto a futuro en Maui? Habrá un cambio de nombre en los namespaces como ya se ha anunciado:

Probando IView y los nuevos Handlers (aka la “extinción de los Renderers”)

Maui introducirá mediante los clásicos interfaces de C# una forma mucho más fácil de poder extender e implementar lo que se solía hacer con los famosos Renderers de Xamarin.Forms: Acceder a los controles nativos de una forma directa, sin intermediarios.

Una de las interfaces se llama IView y al parecer tendremos una para IApplication también. Esto puede facilitar mucho la implementación en los tradicionales Delegates y Activity de iOS/Android respectivamente, lo que nos permitiría tener personalizaciones con mucho menos código desde nuestro código multi-plataforma y próximas plataformas que se sumen a la iniciativa.

Maui ui

En lugar de Renderers, los Handlers sacan provecho del multi-targeting para poder acceder directamente a los controles nativos de la plataforma (.NET para iOS y .NET para Android, y así sucesivamente) y poder acceder sin mucho intermediario los objetos que Xamarin nos ha permitido acceder desde C# tradicionalmente.

Veamos como quedaría la implementación de nuestro propio botón y definir un Handler para definir sus atributos.

Maui renderer

¿Qué esperar de esto a futuro en Maui?

4- Corriendo el proyecto

Para este ejemplo usaremos el tooling actual desde VS para Mac y vemos que es posible correrlo sin problemas.

Hello World run

¿Qué esperar de esto a futuro en Maui?

5. Conclusiones del experimento.

Recapitulando:

5- Recursos adicionales y recomendaciones