.NET MAUI Preview 3

Con la Preview 3 de NET MAUI llegan más novedades como:

  • Añadidos más cambios relacionados con HostBuilder, clase Startup.
  • Nueva API para gestionar el ciclo de vida de la aplicación.
  • Añadidos mas controles (DatePicker, TimePicker, SearchBar, Stepper, etc).
  • Añadidos mas cambios en Layouts.
  • Añadidas nuevas APIs de accesibilidad.
  • Primeros cambios añadiendo soporte para Windows usando WinUI 3.

En este artículo, vamos a hacer un repaso a todo lo que incluye la Preview 3, además de repasar que nos esperar en próximas Previews.

.NET MAUI Preview 3

Startup

Las aplicaciones .NET MAUI van a utilizar una clase Startup que permitirá:

  • Incluye un método Configure para canalizar los procesos de registro de servicios, registro de handlers o personalización de la aplicación.
  • Poder crear un HostBuilder personalizado.

Por ejemplo:

public void Configure(IAppHostBuilder appBuilder)
{
    appBuilder = appBuilder
        .UseCompatibilityRenderers()
        .UseMauiApp<MyApp>();
}

Por defecto, si no quiere personalizar nada especial, o bien, quieres utilizar tu propio contenedor de dependencias, etc., podrás hacerlo.

Ciclo de vida

El ciclo de vida de una aplicación es sumamente importante. Hay muchas acciones que se deben realizar cuando la aplicación pasa a segundo plano, o bien cuando regresa de suspensión. Por lo tanto, tener un control detallado de cada paso es importante.

En .NET MAUI hay una nueva API para el ciclo de vida con el firme objetivo de cubrir todas las peticiones recibidas en Xamarin.Forms y mejorar las áreas donde las posibilidades necesitaban ser expandidas.

Por supuesto, al igual que en Xamarin.Forms podrás sobrecargar diferentes métodos para saber cuándo la aplicación pasa a segundo plano etc. Igualmente, se añaden mucho más control en el ciclo de vida de otros elementos como ventanas o Views.

Por otro lado, también se va a permitir conectar directamente con eventos nativos de cada plataforma. Veamos un ejemplo:

appBuilder
    .ConfigureLifecycleEvents(events =>
    {
        events.AddEvent<Action<string>>("CustomEventName", value => LogEvent("CustomEventName"));

#if __ANDROID__
        events.AddAndroid(android => android
            .OnActivityResult((a, b, c, d) => LogEvent(nameof(AndroidLifecycle.OnActivityResult), b.ToString()))
            .OnBackPressed((a) => LogEvent(nameof(AndroidLifecycle.OnBackPressed)))
            .OnConfigurationChanged((a, b) => LogEvent(nameof(AndroidLifecycle.OnConfigurationChanged)))
            .OnCreate((a, b) => LogEvent(nameof(AndroidLifecycle.OnCreate)))
            .OnDestroy((a) => LogEvent(nameof(AndroidLifecycle.OnDestroy)))
            .OnNewIntent((a, b) => LogEvent(nameof(AndroidLifecycle.OnNewIntent)))
            .OnPause((a) => LogEvent(nameof(AndroidLifecycle.OnPause)))
            .OnPostCreate((a, b) => LogEvent(nameof(AndroidLifecycle.OnPostCreate)))
            .OnPostResume((a) => LogEvent(nameof(AndroidLifecycle.OnPostResume)))
            .OnPressingBack((a) => LogEvent(nameof(AndroidLifecycle.OnPressingBack)) && false)
            .OnRequestPermissionsResult((a, b, c, d) => LogEvent(nameof(AndroidLifecycle.OnRequestPermissionsResult)))
            .OnRestart((a) => LogEvent(nameof(AndroidLifecycle.OnRestart)))
            .OnRestoreInstanceState((a, b) => LogEvent(nameof(AndroidLifecycle.OnRestoreInstanceState)))
            .OnResume((a) => LogEvent(nameof(AndroidLifecycle.OnResume)))
            .OnSaveInstanceState((a, b) => LogEvent(nameof(AndroidLifecycle.OnSaveInstanceState)))
            .OnStart((a) => LogEvent(nameof(AndroidLifecycle.OnStart)))
            .OnStop((a) => LogEvent(nameof(AndroidLifecycle.OnStop))));

        // Add some cool features/things
        var shouldPreventBack = 1;
        events.AddAndroid(android => android
            .OnResume(a =>
            {
                LogEvent(nameof(AndroidLifecycle.OnResume), "shortcut");
            })
            .OnPressingBack(a =>
            {
                LogEvent(nameof(AndroidLifecycle.OnPressingBack), "shortcut");

                return shouldPreventBack-- > 0;
            })
            .OnBackPressed(a => LogEvent(nameof(AndroidLifecycle.OnBackPressed), "shortcut"))
            .OnRestoreInstanceState((a, b) =>
            {
                LogEvent(nameof(AndroidLifecycle.OnRestoreInstanceState), "shortcut");

                Debug.WriteLine($"{b.GetString("test2", "fail")} == {b.GetBoolean("test", false)}");
            })
            .OnSaveInstanceState((a, b) =>
            {
                LogEvent(nameof(AndroidLifecycle.OnSaveInstanceState), "shortcut");

                b.PutBoolean("test", true);
                b.PutString("test2", "yay");
            }));
    }

Como puedes ver, recibimos información de cada evento nativo de una aplicación nativa Android. Si plugins se enlazan de esta forma con estos eventos, se notificará tanto al plugin como a tu propia subscripción. Esto hará que el uso de plugins dónde se requiere un control de ciclo de vida sea más sencillo sin necesidad de añadir código de inicialización, etc.

¿Qué te parece?

Novedades en accesibilidad

Añadir más control y mejorar la API de accesibilidad para evitar confusiones además de alinear el comportamiento en todos los casos y plataformas es una de las prioridades en unos de los apartados con tanta importancia como es la accesibilidad.

<Entry
    Text="Entry text TH"
    FontSize="14"
    SemanticProperties.Description="Description text"
    SemanticProperties.Hint="Hint text"/>

Se añade el concepto de SemanticProperties. Hablamos de una serie de propiedades que añaden información extra a Views para permitir interpretar correctamente que ocurre cuando se utiliza el lector de pantalla, o navegación por teclado.

Habrá más novedades en próximas Previews. Puedes ver mas información en la Spec.

Soporte a Windows

Con la llegada de la versión 0.5 de Project Reunion, incluimos soporte a Windows en .NET MAUI con WinUI 3:

.NET MAUI en Windows
.NET MAUI en Windows!

Hasta aquí el pequeño repaso a algunas de las novedades en la Preview 3 de .NET MAUI. En la próxima Preview se esperan mas controles, novedades a nivel de UI, Microsoft Graphics y mucho más!. Por supuesto, estaremos aquí en el blog repasando con detallada cada novedad.

Más información

Un pensamiento en “.NET MAUI Preview 3

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s