Xamarin 4 tem tudo que precisa para criar óptimas aplicações móveis!

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:

Xamarin 4: screenshots da aplicação desenvolvida

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.

Xamarin: MVVM

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.

Recursos adicionais e links