Vamos dar uma olhada nalgumas das funcionalidades e melhorias incluídas no Xamarin 4.0 para o desenvolvimento de aplicações multi-plataformas, incluindo Android, iOS e UWP (Universal Windows Apps).
Apresentando Xamarin Forms 2.0
Desta vez começamos por um aplicativo simples chamado ” Lucky Winner” para selecionar aleatoriamente uma pessoa a partir de uma lista de participantes usando a classe System.Random
comumente usada para gerar números aleatórios tal como em qualquer outro programa para .Net.
Aqui estão alguns screenshots do aplicativo em execução em diferentes plataformas:
O código fonte completo para este aplicativo pode ser descarregado do meu repositório GitHub aqui.
Desenvolvendo um aplicativo Xamarin.Forms a partir do zero
Ao instalar a plataforma Xamarin e obter uma licença válida ou trial seremos capaz de criar uma PCL (Biblioteca de Classes Portável) que contém a maior parte do código para que possa ser compartilhado e compilado de forma nativa para Android, iOS e UWP.
Então, vamos escolher o modelo Xamarin.Forms da lista disponível dentro do Visual Studio.
Ao fazê-lo iremos receber:
- projeto Xamarin.Forms A para a partilha de código XAML / C# entre plataformas
- projeto de referência Android Xamarin.Forms
- projeto iOS
- projeto UWP
Se o leitor estiver familiarizado com MVVM, XAML e C# será bastante familiar para incluir facilmente Pages, ViewModels, Views no projeto como na imagem seguinte.
Construção de interfaces com MVVM, de uma forma multi-plataforma
Vamos dar vista de olhos no código XAML usado para definir a lista de participantes:
<ListView x:Name="PlayersSelector" ItemsSource="{Binding Path=Players}" SeparatorColor="Gray" SelectedItem="{Binding Path=Winner, Mode=TwoWay}"> <ListView.ItemTemplate> <DataTemplate> <ViewCell> <ViewCell.ContextActions> <ToolbarItem Command="{Binding DeleteCommand}" Text="Borrar" /> </ViewCell.ContextActions> <Grid> <StackLayout Orientation="Horizontal" HorizontalOptions="Start"> <Image IsVisible=" {Binding Path=IsWinner}" Source="Prize.png" HeightRequest="25" WidthRequest="25" /> <Label Text="¡GANADOR!" IsVisible="{Binding Path=IsWinner}" TextColor="Red" FontAttributes="Bold" VerticalTextAlignment="Center"/> <Label Text="{Binding Path=PlayerName}" VerticalTextAlignment="Center"/> </StackLayout> <Button HorizontalOptions="End" Command="{Binding Path=DeleteCommand}" Text="x" /> </Grid> </ViewCell> </DataTemplate> </ListView.ItemTemplate> </ListView>
O Binding atua como cola entre a View e os ViewModels para que permitir ter uma clara separação de tarefas entre eles. Outras características comuns suportados pelo Xamarin.Forms com MVVM incluem Two-way binding, Command Pattern and Value Converters.
Obter um “Lucky winner” com C# tal como se faria em qualquer outro programa
Lembra-se como se faz para gerar um número aleatório em C# ? Mas não temos a certeza se sabemos fazê-lo para uma aplicação mobile? Não existe preocupação! Podemos usar os recursos principais do sistema padrão em C# (até à versão 6.0) além de outros recursos interessantes, incluindo expressões lambda, delegates, actions, Linq e operações assíncronas.
private void Play() { ... var random = new Random(DateTime.Now.Millisecond); var lucky = random.Next(0, ViewModel.Players.Count); var selectedPlayer = ViewModel.Players.ElementAtOrDefault(lucky); if(selectedPlayer != null) { selectedPlayer.IsWinner = true; ViewModel.Winner = selectedPlayer; PlayersSelector.ScrollTo(selectedPlayer, ScrollToPosition.MakeVisible, true); } }
Trazer funcionalidades de desenho para as aplicações Android
Outra grande característica de Xamarin para Android é a capacidade de incorporar facilmente capacidades de desenho nos aplicativos do Android. Isto pode ser feito através da adição da biblioteca Support Design Library disponível em pacote de NuGet.