![]() |
![]() |
Neste artigo vamos concluir o CRUD básico usando o base de dados Firebase em uma aplicação Xamarin Forms. |
Continuando a primeira parte do artigo vamos implementar os demais métodos para realizar o CRUD no Firebase.
Obtendo um contato, deletando e atualizando dados
Vamos agora concluir o código da classe FirebaseService incluindo os métodos :
using Firebase.Database;
using Firebase.Database.Query;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using XF_CrudFirebase.Models;
namespace XF_CrudFirebase.Services
{
public class FirebaseService
{
FirebaseClient firebase =
new FirebaseClient("https://xamarinfirestoreapp.firebaseio.com/");
public async Task AddContato(int contatoId, string nome, string email)
{
await firebase
.Child("Contatos")
.PostAsync(new Contato()
{ ContatoId = contatoId, Nome = nome, Email= email });
}
public async Task<List<Contato>> GetContatos()
{
return (await firebase
.Child("Contatos")
.OnceAsync<Contato>()).Select(item => new Contato
{
Nome = item.Object.Nome,
Email = item.Object.Email,
ContatoId = item.Object.ContatoId
}).ToList();
}
public async Task<Contato> GetContato(int ContatoId)
{
var contatos = await GetContatos();
await firebase
.Child("Contatos")
.OnceAsync<Contato>();
return contatos.Where(a => a.ContatoId == ContatoId)
.FirstOrDefault();
}
public async Task UpdateContato(int ContatoId, string nome, string email)
{
var toUpdateContato = (await firebase
.Child("Contatos")
.OnceAsync<Contato>())
.Where(a => a.Object.ContatoId == ContatoId).FirstOrDefault();
await firebase
.Child("Contatos")
.Child(toUpdateContato.Key)
.PutAsync(new Contato()
{ ContatoId = ContatoId, Nome = nome, Email= email });
}
public async Task DeleteContato(int ContatoId)
{
var toDeleteContato = (await firebase
.Child("Contatos")
.OnceAsync<Contato>())
.Where(a => a.Object.ContatoId == ContatoId).FirstOrDefault();
await firebase.Child("Contatos")
.Child(toDeleteContato.Key)
.DeleteAsync();
}
}
}
|
E no arquivo MainPage.xaml.cs vamos incluir o código para os eventos Click dos botões de comando:
using System;
using System.ComponentModel;
using System.Threading.Tasks;
using Xamarin.Forms;
using XF_CrudFirebase.Services;
namespace XF_CrudFirebase
{
[DesignTimeVisible(false)]
public partial class MainPage : ContentPage
{
FirebaseService fbService = new FirebaseService();
public MainPage()
{
InitializeComponent();
}
protected async override void OnAppearing()
{
base.OnAppearing();
await ExibeContatos();
}
private async void BtnIncluir_Clicked(object sender, System.EventArgs e)
{
await fbService.AddContato(Convert.ToInt32(txtId.Text), txtNome.Text, txtEmail.Text);
txtId.Text = string.Empty;
txtNome.Text = string.Empty;
txtEmail.Text = string.Empty;
await DisplayAlert("Success", "Contato incluído com sucesso", "OK");
await ExibeContatos();
}
private async void BtnExibir_Clicked(object sender, System.EventArgs e)
{
var contato = await fbService.GetContato(Convert.ToInt32(txtId.Text));
if (contato != null)
{
txtId.Text = contato.ContatoId.ToString();
txtNome.Text = contato.Nome;
txtEmail.Text = contato.Email;
}
else
{
await DisplayAlert("Success", "Não existe contato com esse ID", "OK");
}
}
private async void BtnDeletar_Clicked(object sender, System.EventArgs e)
{
await fbService.DeleteContato(Convert.ToInt32(txtId.Text));
txtId.Text = string.Empty;
await DisplayAlert("Success", "Contato deletado com sucesso", "OK");
await ExibeContatos();
}
private async void BtnAtualizar_Clicked(object sender, System.EventArgs e)
{
await fbService.UpdateContato(Convert.ToInt32(txtId.Text), txtNome.Text, txtEmail.Text);
txtId.Text = string.Empty;
txtNome.Text = string.Empty;
txtEmail.Text = string.Empty;
await DisplayAlert("Success", "Contato atualizado com sucesso", "OK");
await ExibeContatos();
}
private async Task ExibeContatos()
{
var contatos = await fbService.GetContatos();
listaContatos.ItemsSource = contatos;
}
}
}
|
Para otimizar o código criamos também o método ExibeContatos() que será chamada mais de um vez.
Executando o projeto e realizando as operações para obter contato, deletar e atualizar teremos o resultado a seguir:
Pegue o código do
projeto compartilhado aqui:
XF_CrudFirebase.zip
Tu, pois, meu filho,
fortifica-te na graça que há em Cristo Jesus.
2 Timóteo 2:1
Referências:
NET - Apresentando o padrão Model-View-ViewModel
Xamarin Forms - MVVM - Macoratti.net
NET - O padrão MVVM (Model-View-ViewModel) ...
Xamarin Forms - MVVM - A interface ICommand
Padrão de Projeto - Aprendendo o padrão MVVM ...