Vamos a analizar la clase App de nuestro proyecto PCL. Esta clase puede ir en codigo C# o XAML. La clase base Application ofrece las siguientes caracteristicas:
- La propiedad MainPage, es la cual establece la pagina inicial de la aplicación.
- Propiedades globales de diccionario (Dictionary) para almacenar valores a lo largo de los cambios de estado del ciclo de vida de la aplicación.
- Una propiedad estática Current que contiene la referencia al objeto actual de la aplicación.
También tiene metodos del ciclo de vida como OnStart, OnSleep y OnResume asi como eventos de navegación modal.
Dependiendo del la plantilla elegida, la clase App puede esta definida de una de las siguientes maneras
- Usando codigo C#
- Mediante XAML y uso de la clase parcial en C#
Para crear la clase App usando XAML, la clase App por defecto debe res reemplazada con una clase XAML App y ser asociada con el código como se muestra a continuación:
1 2 3 |
<Application xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="Photos.App"> </Application> |
Y a continuación el ejemplo muestra el código asociado:
1 2 3 4 5 6 7 8 9 |
public partial class App : Application { public App () { InitializeComponent (); MainPage = new HomePage (); } ... } |
Igual que al establecer la propiedad MainPage, el código tiene también que llamar al método InitializeComponent para cargar y procesar el código XAML asociado.
Propiedad MainPage
La propiedad MainPage en la clase Application establece la página principal de la aplicación.
Por ejemplo, se puede crear lógica en la clase App para mostrar una página diferente dependiendo de si el usuario esta registrado o no.
La propiedad MainPage debe establecerse en el constructor de la clase App.
1 2 3 4 5 6 7 |
public class App : Xamarin.Forms.Application { public App () { MainPage = new ContentPage { Title = "Ejemplo de la clase App" }; // la página } } |
Diccionario de propiedades
La subclase Application tiene un diccionario de propiedades estáticas el cual puede ser usado para almacenar datos, en concreto para usarlo cuando la aplicación comienza (OnStart), al suspenderse (OnSleep) y al restaurarse (OnResume).
Este diccionario puede ser accedido desde cualquier parte del código de Xamarin.Forms usando Application.Current.Properties.
El diccionarion de propiedades usa una clave de tipo string y almacena un valor de tipo object.
Por ejemplo, se puede usar una propiedad id persistente en cualquier parte del código de la siguiente forma.
1 |
Application.Current.Properties ["id"] = miClase.ID; |
En los métodos OnStart o OnResume se puede usar este valor para mejorar la experiencia de usuario de alguna manera. El diccionario Properties almacena objetos de tipo object así que los valores necesitan ser invocados al tipo correspondiente antes de ser usados.
1 2 3 4 5 |
if (Application.Current.Properties.ContainsKey("id")) { var id = Application.Current.Properties ["id"] as int; // hacer algo con el id } |
Siempre hay que chequear la presencia de la clave antes de acceder a ella para prevenir errores inesperados.
Persistencia
El diccionario Properties es almacenado en el dispositivo automáticamente. La información añadida al diccionario estará disponible cuando la aplicación regrese de un segundo plano o aunque sea restaurada e incluso reiniciada.
En el próximo artículo entraré más en detalle en como afecta la clase App en los diferentes proyectos de Android, iOS y Windows.