El libro "C # 7 y .NET Core. Desarrollo multiplataforma para profesionales. 3a edición

imagen Hola a todos, ya escribimos sobre el nuevo libro de Mark Price, ahora estamos publicando un extracto del libro "Desarrollo de aplicaciones móviles con Xamarin.Forms"

Crearemos una aplicación de administración de listas de clientes móviles en la base de datos Northwind, que se puede ejecutar en iOS o Android.

Instalar Android SDK


Para crear aplicaciones de Android, debe haber instalado al menos un SDK de Android. La instalación de Visual Studio para Mac de forma predeterminada ya incluye un SDK de Android, pero a menudo es una versión anterior que admite la mayor cantidad de dispositivos Android. Para usar las funciones más recientes de Xamarin.Forms, debe instalar una versión más reciente del SDK de Android.

Inicie Visual Studio para Mac y ejecute el comando Visual Studio Community -> Preferences (Visual Studio Community -> Preferences).

En el cuadro de diálogo Preferencias, vaya a la sección Proyectos → Ubicaciones de SDK y seleccione las plataformas deseadas, por ejemplo, Android 8.0 - Oreo (Fig. 18.1).
imagen

Crear una solución de Xamarin.Forms


Ejecute el comando Archivo → Nueva solución.

En el cuadro de diálogo que se abre, seleccione el elemento de la aplicación en la categoría Multiplataforma (Proyectos multiplataforma). En la sección Xamarin.Forms, seleccione la aplicación Blank Forms (Fig. 18.2).

imagen

Haz clic en el botón Siguiente.

En el campo Nombre de la aplicación, ingrese NorthwindMobile, y en el campo Identificador de la organización, ingrese com.packt. Establezca el interruptor Código compartido en la posición Usar biblioteca compartida y active la casilla de verificación Usar XAML para los archivos de la interfaz de usuario (Figura 18.3).

Haz clic en el botón Siguiente.

En el campo Nombre de la solución, especifique el valor de Part3Mobile, y en el campo Ubicación, el valor / Usuarios / su_nombre / Código (Fig. 18.4). Haz clic en el botón Crear. En unos momentos, se creará una solución y tres proyectos. En Visual Studio para Mac, ejecute el comando Build → Build All (Ensamblaje → Build All) y espere hasta que el programa descargue todos los paquetes actualizados y recopile los proyectos (Fig. 18.5).

Haga clic derecho en Part3Mobile y seleccione Actualizar paquetes NuGet.

imagen

imagen

imagen

Creación de modelos


Podríamos usar la biblioteca de modelos de datos creados anteriormente con entidades .NET Standard 2.0, pero necesitamos implementar el enlace de datos bidireccional, por lo que crearemos una nueva clase para representar entidades cliente en una aplicación móvil.

Haga clic con el botón derecho en el proyecto NorthwindMobile, en el menú contextual, haga clic en Agregar → Nueva carpeta y nombre el directorio creado Modelos.

Haga clic derecho en el directorio Modelos y en el menú contextual, haga clic en Agregar → Nuevo archivo.

En el cuadro de diálogo Nuevo archivo, ejecute el comando General → Clase vacía (General → Clase vacía), nombre la clase Cliente (Fig. 18.6) y haga clic en el botón Nuevo.

Modifique las instrucciones como se muestra en el listado a continuación:

using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; namespace NorthwindMobile.Models { public class Customer : INotifyPropertyChanged { 


imagen


 public static IList<Customer> Customers; static Customer() { Customers = new ObservableCollection<Customer>(); } public event PropertyChangedEventHandler PropertyChanged; private string customerID; private string companyName; private string contactName; private string city; private string country; private string phone; public string CustomerID { get { return customerID; } set   { customerID = value;  PropertyChanged?.Invoke(this,  new PropertyChangedEventArgs("CustomerID"));  } } public string CompanyName { get { return companyName; } set  {  companyName = value; PropertyChanged?.Invoke(this,  new PropertyChangedEventArgs("CompanyName")); } } public string ContactName { get { return contactName; } set { contactName = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("ContactName"));  } } public string City { get { return city; } set { city = value;   PropertyChanged?.Invoke(this,   new PropertyChangedEventArgs("City"));    }    }    public string Country { get { return country; } set { country = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Country")); } } public string Phone { get { return phone; } set { phone = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Phone")); } }  public string Location { get { return string.Format("{0}, {1}", City, Country); } } //     - public static void SampleData() {   Customers.Clear(); Customers.Add(new Customer { CustomerID = "ALFKI", CompanyName = "Alfreds Futterkiste",  ContactName = "Maria Anders", City = "Berlin", Country = "Germany", Phone = "030-0074321" }); Customers.Add(new Customer { CustomerID = "FRANK",  CompanyName = "Frankenversand",    ContactName = "Peter Franken",   City = "München", Country = "Germany", Phone = "089-0877310"  }); Customers.Add(new Customer  {  CustomerID = "SEVES", CompanyName = "Seven Seas Imports", ContactName = "Hari Kumar", City = "London", Country = "UK", Phone = "(171) 555-1717" });    }  } } 

Presta atención a los siguientes puntos.

  • La clase implementa INotifyPropertyChanged, por lo que los componentes bidireccionales de la interfaz de usuario, como el Editor, actualizarán la propiedad y viceversa. Todo se basa en el evento PropertyChanged, que ocurre cuando una de las propiedades cambia.
  • Después de la descarga del servicio, los datos del cliente se almacenarán en caché localmente en la aplicación móvil utilizando ObservableCollection. Esto proporciona soporte de notificación para cualquier componente de interfaz de usuario relacionado, como ListView.
  • Además de las propiedades para almacenar valores recuperados del servicio REST, la clase define una propiedad Ubicación de solo lectura. Servirá como un enlace en la lista consolidada del cliente.
  • Para fines de prueba, cuando el servicio REST no está disponible, se utiliza un método para usar los datos de tres clientes de demostración.

Crear una interfaz para marcar números telefónicos


Haga clic derecho en el directorio NorthwindMobile y seleccione Agregar → Nuevo archivo en el menú contextual.

En el cuadro de diálogo Nuevo archivo, elija General → Interfaz vacía, asigne un nombre al IDialer de interfaz y haga clic en Nuevo.
Cambie el código de interfaz IDialer como se muestra en la siguiente lista:

 namespace NorthwindMobile { public interface IDialer { bool Dial(string number); } } 

Implementación de una interfaz para marcar números de teléfono para iOS


Haga clic derecho en el directorio NorthwindMobile.iOS y desde el menú contextual, haga clic en Agregar → Nuevo archivo.

En el cuadro de diálogo Nuevo archivo, seleccione General → Clase vacía (General → Clase vacía), asigne a la clase el nombre PhoneDialer y haga clic en el botón Nuevo.

Cambie su contenido como se muestra en el listado a continuación:

 using Foundation; using NorthwindMobile.iOS; using UIKit; using Xamarin.Forms; [assembly: Dependency(typeof(PhoneDialer))] namespace NorthwindMobile.iOS {  public class PhoneDialer : IDialer {    public bool Dial(string number) { return UIApplication.SharedApplication.OpenUrl( new NSUrl("tel:" + number));  }  } } 

Implementación de una interfaz para marcar números de teléfono para Android


Haga clic derecho en el directorio NorthwindMobile.Droid en el menú contextual y ejecute el comando Agregar—> Nuevo archivo.

En el cuadro de diálogo Nuevo archivo, ejecute el comando General—> Clase vacía (General—> Clase vacía), nombre la clase PhoneDialer y haga clic en el botón Nuevo.

Modifique su contenido como se muestra en el siguiente listado:

 using Android.Content; using Android.Telephony; using NorthwindMobile.Droid; using System.Linq; using Xamarin.Forms; using Uri = Android.Net.Uri; [assembly: Dependency(typeof(PhoneDialer))] namespace NorthwindMobile.Droid { public class PhoneDialer : IDialer { public bool Dial(string number) { var context = Forms.Context; if (context == null) return false; var intent = new Intent(Intent.ActionCall); intent.SetData(Uri.Parse("tel:" + number)); if (IsIntentAvailable(context, intent))  {  context.StartActivity(intent); return true; } return false; } public static bool IsIntentAvailable(Context context, Intent intent) { var packageManager = context.PackageManager; var list = packageManager.QueryIntentServices(intent, 0) .Union(packageManager.QueryIntentActivities(intent, 0)); if (list.Any()) return true; var manager = TelephonyManager.FromContext(context); return manager.PhoneType != PhoneType.None; } } } 

En el directorio NorthwindMobile.Droid, expanda el subdirectorio Propiedades y abra el archivo AndroidManifest.xml. En el área Permisos requeridos, seleccione la casilla de verificación CallPhone (Figura 18.7).

imagen

Sobre el autor


Mark J. Price es un desarrollador certificado de soluciones de Microsoft (MCSD), especialista de Microsoft: programación en C # y desarrollador certificado de Episerver con más de 20 años de experiencia en capacitación y programación.

Desde 1993, Mark aprobó más de 80 exámenes de programación de Microsoft y se especializa en preparar a otros para realizar pruebas exitosas. Sus alumnos son jóvenes de 16 años y profesionales con muchos años de experiencia. Mark brinda capacitación efectiva, combinando actividades educativas con práctica real en consultoría y diseño de sistemas para corporaciones de todo el mundo.

Entre 2001 y 2003, Mark dedicó todo su tiempo a desarrollar software de capacitación oficial en la sede de Microsoft en la ciudad estadounidense de Redmond. Como parte del equipo, escribió el primer curso de capacitación en C #, cuando solo se lanzó la versión alfa del lenguaje. Durante una colaboración con Microsoft, trabajó como instructor de educación continua para corporaciones certificadas en cursos especiales de capacitación en C # y .NET.

Mark actualmente está desarrollando y apoyando cursos de capacitación para Digital Experience Cloud de Episerver, el mejor .NET CMS en marketing digital y comercio electrónico.

En 2010, Mark recibió un certificado de finalización de un programa de estudios de posgrado, que le otorga el derecho a enseñar. Enseña matemáticas de secundaria en Londres en dos escuelas secundarias de Londres para prepararse para los certificados GCSE y A-Level. Además, Mark recibió la certificación BSc en informática. Hons Licenciada en la Universidad de Bristol, Inglaterra.

Sobre revisores


Dustin Heffron es un desarrollador de software y juegos. Tiene más de una década de experiencia en programación en varios lenguajes, ocho de los cuales están relacionados con C # y .NET.

Actualmente desarrollando software para automatización y pruebas de instrumentos médicos en Becton Dickinson. También es cofundador y CEO de SunFlake Studios.

Dustin ha estado colaborando con Packt durante mucho tiempo y ha contribuido a libros como XNA 4.0 Game Development por ejemplo: Guía para principiantes, C # 6 y .NET Core 1.0: Desarrollo multiplataforma moderno, así como la serie de videos tutoriales de programación XNA 3D. por ejemplo. Además, Dustin, junto con Larry Louisiana (Larry Louisiana) fueron coautores de una serie de video tutoriales XNA 3D Toolkit.

Efraim Kyriakidis es un ingeniero de software con más de diez años de experiencia desarrollando e implementando soluciones de software para varios clientes y proyectos. Está bien versado en todas las etapas del ciclo de desarrollo de software. Su primer contacto con las computadoras y la programación se produjo en la infancia, durante la popularidad de la computadora Commodore 64, en los años 80 del siglo XX. Desde entonces, creció y recibió un diploma en la Universidad Aristóteles de Salónica, Grecia. A lo largo de su carrera, ha trabajado principalmente con tecnologías de Microsoft, utilizando C # y .NET, comenzando con la versión 1.0. Actualmente trabaja en Siemens AG en Alemania como desarrollador de software.

»Se puede encontrar más información sobre el libro en el sitio web del editor
» Contenidos
» Extracto

Cupón de 20% de descuento para vendedores ambulantes - Packt

Source: https://habr.com/ru/post/es415275/


All Articles