O livro "C # 7 e .NET Core. Desenvolvimento multiplataforma para profissionais. 3ª edição

imagem Olá pessoal, já escrevemos sobre o novo livro de Mark Price, agora estamos publicando um trecho do livro "Mobile Application Development Using Xamarin.Forms"

Criaremos um aplicativo de gerenciamento de lista de clientes móveis no banco de dados Northwind, que pode ser executado no iOS ou Android.

Instale o SDK do Android


Para criar aplicativos Android, você deve ter instalado pelo menos um SDK do Android. A instalação do Visual Studio para Mac por padrão já inclui um SDK do Android, mas geralmente é uma versão mais antiga para oferecer suporte ao maior número de dispositivos Android. Para usar os recursos mais recentes do Xamarin.Forms, você precisa instalar uma versão mais recente do SDK do Android.

Inicie o Visual Studio para Mac e execute o comando Comunidade do Visual Studio -> Preferências (Comunidade do Visual Studio -> Preferências).

Na caixa de diálogo Preferências, vá para a seção Projetos → Locais do SDK e selecione as plataformas desejadas, por exemplo, Android 8.0 - Oreo (Fig. 18.1).
imagem

Criando uma solução Xamarin.Forms


Execute o comando Arquivo → Nova solução.

Na caixa de diálogo exibida, selecione o item Aplicativo na categoria Multiplataforma (projetos de plataforma cruzada). Na seção Xamarin.Forms, selecione Aplicativo de formulários em branco (Fig. 18.2).

imagem

Clique no botão Avançar.

No campo Nome do aplicativo, insira NorthwindMobile e, no campo Identificador da organização, insira com.packt. Defina a opção Código compartilhado na posição Usar biblioteca compartilhada e ative a caixa de seleção Usar XAML para os arquivos da interface do usuário (Figura 18.3).

Clique no botão Avançar.

No campo Nome da solução, especifique o valor do Part3Mobile e, no campo Local - o valor / Users / your_name / Code (Fig. 18.4). Clique no botão Criar. Em alguns instantes, uma solução e três projetos serão criados. No Visual Studio para Mac, execute o comando Compilar → Compilar tudo (Montagem → Compilar tudo) e aguarde até o programa baixar todos os pacotes atualizados e coletar os projetos (Fig. 18.5).

Clique com o botão direito do mouse em Part3Mobile e selecione Atualizar Pacotes NuGet.

imagem

imagem

imagem

Criação de modelo


Poderíamos usar a biblioteca de modelos de dados criados anteriormente com entidades do .NET Standard 2.0, mas precisamos implementar a ligação de dados bidirecional, portanto, criaremos uma nova classe para representar as entidades clientes em um aplicativo móvel.

Clique com o botão direito do mouse no projeto NorthwindMobile, no menu de contexto, clique em Adicionar → Nova Pasta e atribua um nome ao diretório criado Modelos.

Clique com o botão direito do mouse no diretório Modelos e, no menu de atalho, clique em Adicionar → Novo arquivo.

Na caixa de diálogo Novo arquivo, execute o comando Geral → Classe vazia (Geral → Classe vazia), nomeie a classe Cliente (Fig. 18.6) e clique no botão Novo.

Modifique as instruções conforme mostrado na lista abaixo:

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


imagem


 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" });    }  } } 

Preste atenção aos seguintes pontos.

  • A classe implementa INotifyPropertyChanged, portanto, os componentes bidirecionais da interface com o usuário, como o Editor, atualizarão a propriedade e vice-versa. Tudo depende do evento PropertyChanged, que ocorre quando uma das propriedades é alterada.
  • Após o download do serviço, os dados do cliente serão armazenados em cache localmente no aplicativo móvel usando o ObservableCollection. Isso fornece suporte de notificação para qualquer componente da interface do usuário relacionado, como o ListView.
  • Além das propriedades para armazenar valores recuperados do serviço REST, a classe define uma propriedade Localização somente leitura. Servirá como uma ligação na lista consolidada do cliente.
  • Para fins de teste, quando o serviço REST está indisponível, um método é usado para usar os dados de três clientes de demonstração.

Criando uma interface para discar números de telefone


Clique com o botão direito do mouse no diretório NorthwindMobile e selecione Adicionar → Novo arquivo no menu de contexto.

Na caixa de diálogo Novo arquivo, escolha Geral → Interface vazia, nomeie o IDialer da interface e clique em Novo.
Altere o código da interface do IDialer, conforme mostrado na listagem a seguir:

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

Implementando uma interface para discar números de telefone para iOS


Clique com o botão direito do mouse no diretório NorthwindMobile.iOS e, no menu de contexto, clique em Adicionar → Novo Arquivo.

Na caixa de diálogo Novo arquivo, selecione Geral → Classe vazia (Geral → Classe vazia), atribua à classe o nome PhoneDialer e clique no botão Novo.

Altere seu conteúdo conforme mostrado na lista abaixo:

 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));  }  } } 

Implementando uma interface para discar números de telefone para Android


Clique com o botão direito do mouse no diretório NorthwindMobile.Droid no menu de contexto e execute o comando Adicionar—> Novo arquivo.

Na caixa de diálogo Novo arquivo, execute o comando Geral—> Classe vazia (Geral—> Classe vazia), nomeie a classe PhoneDialer e clique no botão Novo.

Modifique seu conteúdo conforme mostrado na lista a seguir:

 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; } } } 

No diretório NorthwindMobile.Droid, expanda o subdiretório Propriedades e abra o arquivo AndroidManifest.xml. Na área Permissões necessárias, marque a caixa de seleção CallPhone (Figura 18.7).

imagem

Sobre o autor


Mark J. Price é um Microsoft Certified Solutions Developer (MCSD), especialista da Microsoft: programação em C # e Episerver Certified Developer, com mais de 20 anos de experiência em treinamento e programação.

Desde 1993, Mark passou em mais de 80 exames de programação da Microsoft e é especializado em preparar outras pessoas para testes bem-sucedidos. Seus alunos são jovens de 16 anos e profissionais com muitos anos de experiência. Mark fornece treinamento eficaz, combinando atividades educacionais com práticas reais em consultoria e design de sistemas para empresas em todo o mundo.

Entre 2001 e 2003, Mark dedicou todo o seu tempo ao desenvolvimento de software de treinamento oficial na sede da Microsoft na cidade americana de Redmond. Como parte da equipe, ele escreveu o primeiro curso de treinamento em C #, quando apenas a versão alfa do idioma foi lançada. Durante uma colaboração com a Microsoft, ele trabalhou como instrutor de educação continuada para empresas certificadas em cursos de treinamento especiais em C # e .NET.

Atualmente, Mark está desenvolvendo e apoiando cursos de treinamento para o Digital Experience Cloud da Episerver, o melhor .NET CMS em marketing digital e e-commerce.

Em 2010, Mark recebeu um certificado de conclusão de um programa de estudos de pós-graduação, que dá o direito de ensinar. Ele ensina matemática do ensino médio em Londres em duas escolas de ensino médio em Londres para se preparar para os certificados GCSE e A-Level. Além disso, Mark recebeu a certificação em Ciência da Computação. Hons. Graduado na Universidade de Bristol, Inglaterra.

Sobre revisores


Dustin Heffron é desenvolvedor de software e jogos. Ele tem mais de uma década de experiência em programação em várias linguagens, oito das quais relacionadas a C # e .NET.

Atualmente desenvolvendo software para automação e teste de instrumentos médicos na Becton Dickinson. Ele também é o co-fundador e CEO da SunFlake Studios.

Dustin colabora com o Packt há muito tempo e contribui com livros como o XNA 4.0 Game Development por exemplo: Guia do Iniciante, C # 6 e .NET Core 1.0: Modern Cross-Platform Development, bem como a série de tutoriais em vídeo sobre programação 3D do XNA. pelo exemplo. Além disso, Dustin, juntamente com Larry Louisiana (Larry Louisiana), foi co-autor de uma série de tutoriais em vídeo XNA 3D Toolkit.

Efraim Kyriakidis é um engenheiro de software com mais de dez anos de experiência no desenvolvimento e implementação de soluções de software para vários clientes e projetos. Ele é bem versado em todas as etapas do ciclo de desenvolvimento de software. Seu primeiro conhecimento com computadores e programação ocorreu na infância, durante a popularidade do computador Commodore 64, nos anos 80 do século XX. Desde então, ele cresceu e recebeu um diploma na Universidade Aristóteles de Thessaloniki, na Grécia. Ao longo de sua carreira, ele trabalhou principalmente com as tecnologias da Microsoft, usando C # e .NET, começando na versão 1.0. Atualmente, ele trabalha na Siemens AG na Alemanha como desenvolvedor de software.

»Mais informações sobre o livro podem ser encontradas no site do editor
» Conteúdo
» Trecho

Cupom de 20% de desconto para vendedores ambulantes - Packt

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


All Articles