Xamarin.Forms (Shared) utilizando Realm como banco de dados – Básico 1/2

Padrão

Fala Jovem.

Estava me enrolando com esse artigo sobre Realm desde Dezembro/2016. Mas hoje finalmente consegui parar um tempinho e fechar o primeiro post. =)

Vou dividir o básico de Realm com Xamarin.forms em dois posts. Esse aqui que veremos o Cadastro e Listagem e o segundo onde veremos Edição/Exclusão, fechando o CRUD.

Nesse projeto Xamarin Forms não estarei usando nenhum framework MVVM, será tudo na mão, no estilo velha guarda, rsrsrs. Mas muito em breve vamos fazer um app completo com MVVM Prism e Realm, aguardem.

Tá, mais o que é esse Realm?

Realm é um banco de dados móvel, que foi projetado e construído do zero para o mundo Mobile. É OpenSource. Trabalha diretamente com Objetos, ou seja, não precisamos de um ORM. Podemos usar Linq…. Sendo assim uma ótima alternativa para SQLite e Core Data.

Olha um exemplo do Realm e Xamarin:

Mamão com açúcar esse Realm.

Mas ele é rápido?

Hoje Realm é muito mais rápido que SQLite. Mesmo em operações simples.

Será que vale apena usar???

Eu acredito que sim. Realm tem atualmente mais de 1 Bilhão de usuários. Olha alguns nomes:

Obs: O SQLite não foi criado para o mundo mobile. Ele foi uma alternativa para resolver a questão de bancos mobile em um primeiro momento.

Então vamos começar a brincadeira.

  • Crie um projeto Xamarin.Forms (Shared).

Nesse projeto vamos adicionar o pacote nuget do Realm. (Clique com o botão direito no mouse na solution e vá em “Manage Nuget Packages for Solutions”)

Busque por “Realm” e instale o pacote. No meu caso estou fazendo apenas para Android. Se for fazer para ios você terá que adicionar o Realm no projeto IOS.

OBS:  O projeto Shared não tem referências, por isso não adicionamos o Realm nele, mas apenas nos projetos específicos de cada plataforma mobile que temos em nossa solution.

  • No projeto Shared adicione três pastas: Model, View e ViewModel

Em nosso exemplo iremos fazer um mini cadastro de cliente. Apenas para mostrar o Realm em ação.

  • Adicione uma classe Cliente.cs na pasta Model. Nela vamos criar duas propriedades Nome e Cidade. Nossa classe vai implementar a interface RealmObject. Aqui começa a mágica!

  • Para facilitar nossa navegação entre as telas vamos criar uma classe ControleApp.cs ela irá cuidar da navegação e mensagens.

  • Vamos agora criar uma classe ViewModelBase.cs na pasta ViewModel. Essa classe irá implementar o INotifyPropertyChanged e assim as demais classes que herdarem dela irão notificar as Views sobre mudanças (Binding).

  • Vamos criar a nossa primeira tela, MainPage.xaml que ficará dentro da nossa pasta View. Nela vamos ter dois botões, um para ir para tela de cadastro e outro para a lista de clientes. Ao clicar no botão ele irá executar um command que vamos implementar MainPageViewModel.cs

  • Vamos incluir um BindingContext no MaisPage.xaml.cs

  • Agora Vamos criar o MainPageViewModel.cs na pasta ViewModel. Vamos criar um atributo controle e duas propriedades Icommand (Uma para cada botão, tela de listar e cadastrar). Vamos criar dois eventos Clicked que irão nos levar para a tela em si. Esses eventos serão chamados nos commands dentro do construtor.

  • Feito isso iremos criar a tela de cadastro de cliente. Na pasta View adicione a tela Cliente.xaml. Nela teremos dois campos texto e um botão salvar. O botão salvar irá chamar o SalvarCommand que iremos implementar em ClienteViewModel.cs

  • Agora vamos criar o ClienteViewModel.cs na pasta ViewModel. Essa classe deve herdar de ViewModelBase.cs . Vamos adicionar alguns objetos , nosso Icommand e duas propriedades TxtNome e TxtCidade.

  • Em nosso construtor vamos passar o ControleApp e executar o Evento “bt_Salvar_Clicked” através do command.

No bt_Salvar_Clicked é que vamos usar o Realm em si.  O Realm.GetInstance(); me retorna uma instancia ativa do Realm. Para ter um controle de transação vou colocar os comandos dentro de um using. E informo o Realm através do BeginWrite.

Através do método CreateObject do Realm eu crio um objeto do tipo Cliente, sento nele os valores das minhas propriedades criadas na ViewModel e faço um commit para salvar. Logo em seguida eu conto quantos clientes tenho no banco e passo para o ControleApp exibir na tela em forma de mensagem. Executo também o metodo Close() apenas para garantir que a instancia do Realm fechou, eu posso não executar ele e deixar a cargo Realm esse controle.

  • Agora que já podemos cadastrar clientes vamos listar os que estão salvos no Realm. Crie a tela Listar.xaml na pasta View. Nela teremos um ListView para exibir o Nome e Cidade do Cliente.

  • Edite o Listar.xaml.cs e adicione o BindingContext = new ListarViewModel(); no construtor.
  • Precisamos criar agora o ListarViewModel.cs . Nele criamos uma propriedade Lista do tipo Cliente e nosso ControleApp. No construtor vamos carregar a instancia ativa do Realm e fazer uma consulta na base, trazendo todos os clientes. Assim eles serão exibidos em nossa view. Nada impede de usar LINQ para Filtrar sua consulta.

  • Para finalizar vamos no App.xaml.cs e no construtor APP utilize o NavigationPage para chamar a MainPage. Lembrando que o MainPage é nossa tela inicial.

Agora vamos fazer um build e ver como ficou nosso app com Realm.

O fonte completo está no gitHub: https://github.com/mhbsti/xamarin-forms-realm

Forte abraço.

Marcos Hitanael Barchiki dos Santos.

2 comentários sobre “Xamarin.Forms (Shared) utilizando Realm como banco de dados – Básico 1/2

  1. Renier

    Olá Boa noite obrigado pelo tutorial, estou começando a programar C#, Gostei muito da forma que vocês explicam, ficou fácil de entender, mas, mesmo assim surgiu uma dúvida, se eu instalar esse app em um celular e cadastrar um cliente, depois instalar o app em outro dispositivo, o cliente cadastrado vai estar na lista do outro dispositivo ?

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *