Github URL: https://github.com/mistrypragnesh40/FirebaseDemo
Youtube URL: https://youtu.be/LYAxYNN8s_s
Packages Required
Models
EmployeeModel.cs
using System;
using System.Collections.Generic; using System.Text; namespace FirebaseDemo.Models { public class EmployeeModel { public string Key { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string Gender { get; set; } public string MobileNumber { get; set; } public string Position { get; set; } public string Email { get; set; } } }Setting.cs
using System; using System.Collections.Generic; using System.Text; namespace FirebaseDemo.Models { public static class Setting { internal const string FireBaseDatabaseUrl = ""; internal const string FireBaseSeceret = ""; } }Services.cs
IEmployeeService.cs
using FirebaseDemo.Models; using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; namespace FirebaseDemo.Services.Interfaces { public interface IEmployeeService { Task<bool> AddOrUpdateEmployee(EmployeeModel employeeModel); Task<bool> DeleteEmployee(string key); Task<List<EmployeeModel>> GetAllEmployee(); } }EmployeeService.cs
using Firebase.Database; using Firebase.Database.Query; using FirebaseDemo.Models; using FirebaseDemo.Services.Interfaces; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FirebaseDemo.Services.Implementations { public class EmployeeService : IEmployeeService { FirebaseClient firebase = new FirebaseClient(Setting.FireBaseDatabaseUrl, new FirebaseOptions { AuthTokenAsyncFactory = () => Task.FromResult(Setting.FireBaseSeceret) }); public async Task<bool> AddOrUpdateEmployee(EmployeeModel employeeModel) { if (!string.IsNullOrWhiteSpace(employeeModel.Key)) { try { await firebase.Child(nameof(EmployeeModel)).Child(employeeModel.Key).PutAsync(employeeModel); return true; } catch(Exception ex) { return false; } } else { var response = await firebase.Child(nameof(EmployeeModel)).PostAsync(employeeModel); if (response.Key != null) { return true; } else { return false; } } } public async Task<bool> DeleteEmployee(string key) { try { await firebase.Child(nameof(EmployeeModel)).Child(key).DeleteAsync(); return true; } catch (Exception ex) { return false; } } public async Task<List<EmployeeModel>> GetAllEmployee() { return (await firebase.Child(nameof(EmployeeModel)).OnceAsync<EmployeeModel>()).Select(f => new EmployeeModel { Email = f.Object.Email, FirstName = f.Object.FirstName, Gender = f.Object.Gender, LastName = f.Object.LastName, MobileNumber = f.Object.MobileNumber, Position = f.Object.Position, Key = f.Key }).ToList(); } } }
Views
MainPage.xaml
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="FirebaseDemo.MainPage"> <StackLayout> <Frame BackgroundColor="#2196F3" Padding="24" CornerRadius="0"> <Label Text="Welcome to Xamarin.Forms!" HorizontalTextAlignment="Center" TextColor="White" FontSize="36"/> </Frame> <Label Text="Start developing now" FontSize="Title" Padding="30,10,30,10"/> <Button Text="Add Employee" x:Name="addEmployee" Clicked="addEmployee_Clicked" /> <Button Text="Show All Employee" x:Name="showEmployee" Clicked="showEmployee_Clicked" /> </StackLayout> </ContentPage>MainPage.xaml.cs
using FirebaseDemo.Views; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using Xamarin.Forms; namespace FirebaseDemo { public partial class MainPage : ContentPage { public MainPage() { InitializeComponent(); } private void addEmployee_Clicked(object sender, EventArgs e) { Navigation.PushAsync(new AddUpdateEmployee()); } private void showEmployee_Clicked(object sender, EventArgs e) { Navigation.PushAsync(new EmployeeList()); } } }
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:viewmodels="clr-namespace:FirebaseDemo.ViewModels" x:DataType="viewmodels:AddUpdateEmployeePageViewModel" Title="Add/Update Employee" x:Class="FirebaseDemo.Views.AddUpdateEmployee"> <ContentPage.Content> <StackLayout> <Entry Placeholder="First Name" Text="{Binding EmployeeDetail.FirstName}" /> <Entry Placeholder="Last Name" Text="{Binding EmployeeDetail.LastName}" /> <Entry Placeholder="Gender" Text="{Binding EmployeeDetail.Gender}" /> <Entry Placeholder="Mobile Number" Text="{Binding EmployeeDetail.MobileNumber}" Keyboard="Numeric" /> <Entry Placeholder="Position" Text="{Binding EmployeeDetail.Position}" /> <Entry Placeholder="Email" Text="{Binding EmployeeDetail.Email}" /> <Button Text="Save Details" Command="{Binding SaveEmployeeCommand}" /> </StackLayout> </ContentPage.Content> </ContentPage>
<?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:viewmodels="clr-namespace:FirebaseDemo.ViewModels" xmlns:models="clr-namespace:FirebaseDemo.Models" x:DataType="viewmodels:EmployeeListPageViewModel" Title="Employee List" x:Class="FirebaseDemo.Views.EmployeeList"> <ContentPage.Content> <StackLayout Margin="10,0,10,0"> <ActivityIndicator IsVisible="{Binding IsBusy}" IsRunning="True" /> <RefreshView Command="{Binding RefreshCommand}" IsRefreshing="{Binding IsRefreshing}" > <CollectionView ItemsSource="{Binding Employees}"> <CollectionView.ItemTemplate> <DataTemplate x:DataType="models:EmployeeModel"> <StackLayout Margin="10,5,10,0"> <StackLayout Orientation="Horizontal"> <Label Text="First Name: " /> <Label Text="{Binding FirstName}" /> </StackLayout> <StackLayout Orientation="Horizontal"> <Label Text="Last Name: " /> <Label Text="{Binding LastName}" /> </StackLayout> <StackLayout Orientation="Horizontal"> <Label Text="Email: " /> <Label Text="{Binding Email}" /> </StackLayout> <StackLayout Orientation="Horizontal"> <Label Text="Gender: " /> <Label Text="{Binding Gender}" /> </StackLayout> <StackLayout Orientation="Horizontal"> <Label Text="Position: " /> <Label Text="{Binding Position}" /> </StackLayout> <BoxView HeightRequest="1" Color="Gray" /> <StackLayout.GestureRecognizers> <TapGestureRecognizer Command="{Binding Source={x:RelativeSource AncestorType={x:Type viewmodels:EmployeeListPageViewModel}},Path=SelectedEmployeeCommand}" CommandParameter="{Binding .}" /> </StackLayout.GestureRecognizers> </StackLayout> </DataTemplate> </CollectionView.ItemTemplate> </CollectionView> </RefreshView> </StackLayout> </ContentPage.Content> </ContentPage>
ViewModels
BaseViewModel.cs
using System; using System.Collections.Generic; using System.ComponentModel; using System.Runtime.CompilerServices; using System.Text; namespace FirebaseDemo.ViewModels { public class BaseViewModel : INotifyPropertyChanged { #region Properties private bool _isBusy; public bool IsBusy { get => _isBusy; set => SetProperty(ref _isBusy, value); } #endregion protected bool SetProperty<T>(ref T backingStore, T value, [CallerMemberName] string propertyName = "", Action onChanged = null) { if (EqualityComparer<T>.Default.Equals(backingStore, value)) return false; backingStore = value; onChanged?.Invoke(); OnPropertyChanged(propertyName); return true; } #region INotifyPropertyChanged public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged([CallerMemberName] string propertyName = "") { var changed = PropertyChanged; if (changed == null) return; changed.Invoke(this, new PropertyChangedEventArgs(propertyName)); } #endregion } }AddUpdateEmployeePageViewModel.cs
using FirebaseDemo.Models; using FirebaseDemo.Services.Implementations; using FirebaseDemo.Services.Interfaces; using System; using System.Collections.Generic; using System.Text; using System.Windows.Input; using Xamarin.Forms; namespace FirebaseDemo.ViewModels { public class AddUpdateEmployeePageViewModel : BaseViewModel { #region Properties private readonly IEmployeeService _employeeService; private EmployeeModel _employeeDetail = new EmployeeModel(); public EmployeeModel EmployeeDetail { get => _employeeDetail; set => SetProperty(ref _employeeDetail, value); } #endregion #region Constructor public AddUpdateEmployeePageViewModel() { _employeeService = DependencyService.Resolve<IEmployeeService>(); } public AddUpdateEmployeePageViewModel(EmployeeModel employeeResponse) { _employeeService = DependencyService.Resolve<IEmployeeService>(); EmployeeDetail = new EmployeeModel { FirstName = employeeResponse.FirstName, LastName = employeeResponse.LastName, Key = employeeResponse.Key, Gender = employeeResponse.Gender, Email = employeeResponse.Email, MobileNumber =employeeResponse.MobileNumber, Position = employeeResponse.Position }; } #endregion #region Commands public ICommand SaveEmployeeCommand => new Command(async () => { if (IsBusy) return; IsBusy = true; bool res = await _employeeService.AddOrUpdateEmployee(EmployeeDetail); if (res) { if (!string.IsNullOrWhiteSpace(EmployeeDetail.Key)) { await App.Current.MainPage.DisplayAlert("Success!", "Record Updated successfully.", "Ok"); } else { EmployeeDetail = new EmployeeModel() { }; await App.Current.MainPage.DisplayAlert("Success!", "Record added successfully.", "Ok"); } } IsBusy = false; }); #endregion } }EmployeeListPageViewModel.cs
using FirebaseDemo.Models; using FirebaseDemo.Services.Interfaces; using FirebaseDemo.Views; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Text; using System.Threading.Tasks; using System.Windows.Input; using Xamarin.Forms; namespace FirebaseDemo.ViewModels { public class EmployeeListPageViewModel : BaseViewModel { #region Properties private bool _isRefreshing; public bool IsRefreshing { get => _isRefreshing; set => SetProperty(ref _isRefreshing, value); } private readonly IEmployeeService _employeeService; public ObservableCollection<EmployeeModel> Employees { get; set; } = new ObservableCollection<EmployeeModel>(); #endregion #region Constructor public EmployeeListPageViewModel() { _employeeService = DependencyService.Resolve<IEmployeeService>(); GetAllEmployee(); } #endregion #region Methods private void GetAllEmployee() { IsBusy = true; Task.Run(async () => { var employeeLIst = await _employeeService.GetAllEmployee(); Device.BeginInvokeOnMainThread(() => { Employees.Clear(); if (employeeLIst?.Count > 0) { foreach (var employee in employeeLIst) { Employees.Add(employee); } } IsBusy = IsRefreshing = false; }); }); } #endregion #region Commands public ICommand RefreshCommand => new Command(() => { IsRefreshing = true; GetAllEmployee(); }); public ICommand SelectedEmployeeCommand => new Command<EmployeeModel>(async (employee) => { if (employee != null) { var response = await App.Current.MainPage.DisplayActionSheet("Options!", "Cancel", null, "Update Employee", "Delete Employee"); if (response == "Update Employee") { await App.Current.MainPage.Navigation.PushAsync(new AddUpdateEmployee(employee)); } else if (response == "Delete Employee") { IsBusy = true; bool deleteResponse = await _employeeService.DeleteEmployee(employee.Key); if (deleteResponse) { GetAllEmployee(); } } } }); #endregion } }
Make a great name in the world of app development. Inwizards Xamarin development company is what you need to give a digital boost to your company. To get the best developers, hire xamarin developers from Inwizards.
ReplyDeleteWhy Choose Inwizards Xamarin Development Company?
Experienced Xamarin Developers
500+ successful projects delivered
Mastery in latest technologies
Transparent workflow
Affordable
Support and maintenance
Diverse medium to interact with developers
If you want to achieve success for your business, Inwizards LLC provides the best xamarin development services.
Feel free to get in touch with us for further discussions and pricing details. Here are our contact details:
Website Address: https://www.inwizards.com/hire-xamarin-developers.php
Email: info@inwizards.com
Call: USA- +1-(979)-599-0896 | IN- +91-9667584436
Nice Blog! I really loved reading through this Blog... Thanks for sharing.......
ReplyDeleteAwesome Blog thanks for share your valuable information
Inwizards Technology - Internet of Things IoT
iot development company
hire iot developer
Very informative blog. Thank you for sharing.
ReplyDeleteXamarin App Development Company Gurgaon
IoT app development Company Gurgaon
Mobile app development Company
This comment has been removed by the author.
ReplyDeleteHello. Nice to have your blog in search engine. It's really readers centric.
ReplyDeleteAre you looking for Best-in-class Mobile App Developers in India that offers easy for all complex projects? Fear not, we’ll make your mobile app for Android, iOS, web apps or a hybrid platform that offers centralized marketing tools for personalized campaigning with guaranteed results.
Join us at maventechie.com, to get top-notch application solutions tailored to your specific needs.