Back-End

28 jan, 2019

Criando um site ASP.Net Core com Xamarin Forms

Publicidade

Fala, galera!

Hoje lhes trago um artigo que se não acharem útil, acharão, no minimo, curioso. Vamos criar um site ASP.Net Core com Xamarin Forms!

Não, você não leu errado. Essa “doideira” é possível graças a incrível biblioteca cross-platform Ooui. Ela simplifica o desenvolvimento Web utilizando o XAML, o mesmo que estamos acostumados no Xamarin.

Mas pra quê falar se posso mostrar? Vamos lá!

1 –  Novo projeto

Crie um projeto Asp.Core no Visual Studio (Windows ou Mac):

File -> new — project

Agora vamos adicionar os pacotes nuget. Devemos adicionar os seguintes pacotes :

Precisamos instalar o Xamarin.Forms também – porém, a versão 2.4:

Instale a versão acima

Simples, não?

2 – Configurando e codificando

Ooui oferece várias maneiras de renderizar a interface, incluindo o uso de Xamarin.Forms XAML ou C#. Você pode usar qualquer ContentPage e diversos controles são suportados (clique aqui para saber os controles suportados).

Vamos criar uma página simples xaml como exemplo:

<?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="OouiAspCore.Pages.MainPage">
    <ContentPage.Content>
        <StackLayout>
            <Label Text="Minha Nossa!" FontSize="Large" 
                   HorizontalOptions="Center" HorizontalTextAlignment="Center"/>
            <Button Text="Me aperta ( ͡° ͜ʖ ͡°)" Clicked="Handle_Clicked" HeightRequest="50"/>
        </StackLayout>
    </ContentPage.Content>
</ContentPage>
using System;
using System.Collections.Generic;

using Xamarin.Forms;

namespace OouiAspCore.Pages
{
    public partial class MainPage : ContentPage
    {

        public MainPage()
        {
            InitializeComponent();
        }

        int count = 0;
        void Handle_Clicked(object sender, System.EventArgs e)
        {
            var button = sender as Button;

            if (button == null)
                return;

            count++;
            button.Text = $"Você clicou {count} vezes!";
        }

    }
}

Agora precisamos configurar o asp.core. Para ele entender o componente é necessário adicionar o UseOoui() e Forms.Init();. Deixe o arquivo Startup.cs da seguinte forma:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

namespace OouiAspCore
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseBrowserLink();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }

            app.UseStaticFiles();

            app.UseOoui();

            Xamarin.Forms.Forms.Init();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
        }
    }
}

Agora precisamos alterar o HomeController para abrir nossa page ao invés da cshtml. Por padrão, o asp.core mvc abre as páginas razor, então precisamos alterá-lo:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using OouiAspCore.Models;
using OouiAspCore.Pages;
using Ooui.AspNetCore;
using Xamarin.Forms;

namespace OouiAspCore.Controllers
{
    public class HomeController : Controller
    {
        public IActionResult Index()
        {
            var page = new MainPage();
            var element = page.GetOouiElement();
            return new ElementResult(element, "Minha Nossa!");
        }

     

        public IActionResult Error()
        {
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }
    }
}

Vamos rodar nosso app (site):

Muito louco, né? Se quiser saber mais sobre as possibilidades do Ooui, acesse o site oficial ou o GitHub do projeto.

O projeto que criei está disponível neste link.

Espero ter ajudado, galera. Aquele abraço!