In this video, we are going to learn 
about a cool concept, building Hybrid Apps. Imagine combining the best parts 
of native apps, like the ones on your phone and web apps, like the ones you 
use in your browser. Well that's what we are going to do. Let's Jump Right In and 
discover how we can make this magic happen. I have created a fresh empty solution in 
Visual Studio named MAUI Hybrid Demo. Now let's proceed to create a new dotnet Maui Blazor 
app project. Within the project types drop down you can choose Maui to Access Project types 
associated with MAUI. In the provided list, you will find the option labeled .NET Maui Blazor 
app. Alternatively, you can locate the same option by filtering for Blazor project types. As you can 
see here the identical option is available. Let's proceed with the project creation process using 
the specified project name Maui Blazor app. I am creating it. Before we move ahead, I want to 
let you know that we have a special tutorial series all about DotNet MAUI. If you are looking 
to dive deeper into this exciting technology, you can find the entire playlist Link in the video 
description below. Within the Solution Explorer, you will notice a familiar arrangement of files 
and folders resembling those typically found in both Maui and Blazor projects. This combination 
includes parts of both types of projects. Inside the platforms folder, you'll find the folder 
specific to various platforms such as Android, iOS, Mac Catalyst, tizen and windows. Additionally, 
there is a resources folder similar to what you would find in a MAUI app. Within this structure, 
you will come across pages and shared folders, mirroring the arrangement you see in a Blazor 
project. I'll now open the index Razor Component. The content closely resembles what you would find 
in a Blazor project. You can create the design of these razor components using HTML elements. 
Just as we do in a normal Blazor project. Inside the counter Razor component, we can see a button 
that when clicked will increase the value of the current count variable. Moving on to the fetch data 
razor component, you will notice a table element designed to exhibit mock weather information. Now 
let's navigate to the MauiProgram.cs class. Inside this class you will observe the incorporation 
of a Maui webview service into the dependency service. Additionally, there is a designated section 
that will only run when the app is being debugged. Within this section, a Blazor WebView Developer 
Tools service is integrated. This facilitates the ability to press the F12 key and access 
developer options while debugging the application. I'll demonstrate this functionality to you. Let's 
proceed by opening the MainPage.xaml file. In this file, you will come across a Blazor WebView element. 
The Blazor webview serves as a component that allows you to incorporate a Blazor web application 
within your .NET Maui application. In this specific instance, you'll notice that the host page 
property has been set to "www.root/index.html". Consequently this page is essentially loaded 
within the Blazor webview control, establishing the connection between the two. Now let's explore 
the contents of the wwwroot folder. In this folder you will find a CSS directory where the CSS files 
are stored. Similar to the structure of a standard Blazor app. Now let's open the index.html file. 
Inside, you will notice the inclusion of essential CSS and JavaScript files that are imported for 
the Project's functionality. Firstly, let's attempt to run the application on Android and observe how 
the pages are presented within our Maui app. You'll notice that the Blazor webview control is directed 
to the root page. Now let's proceed to the counter page. Here the click me button is effectively 
increasing the counter value. On the FetchData Page, you will find the simulated weather information 
being displayed. Now I'll demonstrate how you can access the developer options. Let's execute 
the application on a Windows Machine. As you can observe, the MAUI app functions smoothly here as 
well. From any of the app's Pages, simply press F12 key and the developer options window will appear. 
You can utilize this window just as you would in a typical web application. If our goal is to create 
a hybrid application that can be deployed as both a mobile or desktop app and a web application, 
it's essential to share the codebase among these platforms. Let's explore how this can be 
achieved. To begin, we'll initiate the creation of a Blazor web project. In this example I am opting 
for the Blazor server app template from the available project templates. However, you have the 
flexibility to choose the Blazor WebAssembly app if you prefer. Let's proceed by providing the project 
name as Blazor server app and then creating the project. Before we proceed further, I would like 
to highlight that we also offer an informative tutorial series on Blazor. If you are eager to 
learn more about this technology, you can access the complete playlist through the link provided in 
the video description. At this point, the Solution Explorer displays two distinct projects a Dotnet 
Maui Blazor app and the newly added Blazor server app. The next step involves sharing the razor 
components between these two projects. To achieve this, I am adding another project to our solution. 
We'll change the project type to "All Project Types". From there, we'll search for Razor Class Library, 
which you can find listed at the top. I'll proceed by creating a project using this option. An 
automatically generated Razor component named "Component1" is present. But it's not necessary, you 
can delete it if desired. Let's proceed to create a new razor component. I am assigning it the name 
"CustomerComponent". In the code section, I'll create a model class called "Customer" with two properties, 
name and email. In this component, we'll implement the functionality to add customers to a table. 
To achieve this functionality, in the customer component, we'll need a list of customers to 
display in the table, a customer object named model that we'll use when adding a new customer, a method 
called "AddCustomer" to incorporate the process of adding a new customer to the list. We'll begin by 
placing an input element where users can enter the customer's name. To establish the connection 
we'll bind the value of this input to the name property of the model object. Subsequently, I'll add 
another input element. This time for entering the customer's email address. Similar to before we'll 
set up the necessary binding for this input. For the process of adding a customer, we'll incorporate 
a button. Within the onclick event of this button, we'll invoke the "AddCustomer" method. Lastly we'll 
include a table in the design. This table will be used to display the list of added customers. In the 
layout structure, you'll notice that if there are any customers present in the list, I am utilizing 
a foreach Loop to generate distinct rows within the table. On the other hand if the list is 
empty, the table will display the message "No Customers Added". Let's proceed to implement this 
razor component in both projects. We'll begin by integrating it into the index page of the Blazor 
server app project. To utilize the Razor component, we first need to reference the project. Once this 
is done, typing the component name will display it in the suggestions. I am simplifying the usage 
by removing the namespace from the component tag. As we can directly import it. Let's proceed to 
run the Blazor server app project and observe its functionality. You'll notice that the elements 
we integrated within the Razor component are now visible on the index page. Upon attempting to 
add a customer record you will find that the addition is successful and the customer data 
we entered is correctly presented in the table. Aligning with our expectations. Let's proceed to 
incorporate the same component into .NET MAUI Blazor app. To achieve this, I'll add the necessary 
project reference. Subsequently we can place the component within the index page of dotnet Maui 
Blazor app. Now we'll run the application in the Android emulator to determine whether it operates 
smoothly. The application loads successfully and you can observe the consistent design. Moving 
forward, I would like to highlight a significant aspect. Consider the scenario where there is a 
requirement to incorporate platform specific methods within the Maui framework. For instance 
consider the requirement to display an alert message using the DisplayAlert method available 
within the Maui platform. However this approach might not be suitable for browser environments. 
In such cases, an alternative method such as utilizing a JavaScript alert may be necessary in 
Blazor server app. Let's proceed to explore the implementation of these functionalities. Within 
our Customer Razor component, I'm introducing an additional button. When this button is clicked, 
an alert message should be displayed. To accomplish this, I am utilizing the Blazor parameter attribute. 
Subsequently I am creating a public event callback named "ShowAlert". For the newly added buttons click 
event, I am associating it with this event callback which can then be passed as a parameter. Firstly, 
let's pass this parameter from our Maui Blazor project. In the code section, I am introducing a new 
method. The method name is "ShowAlert". Although you can choose a different name if preferred. Within 
this method, I am utilizing application dot current dot mainpage dot DisplayAlert. Parameters like 
title, message and cancel text can be provided to this method. Finally, we can assign this method 
to the components parameter named "ShowAlert". Now let's move to the Blazor server app. Within this 
project, we need to display the alert using a JavaScript function. Similarly I am introducing 
a new method in this context. To interact with JavaScript methods, I am injecting the IJSRuntime 
service. We can then directly invoke the JavaScript alert method and provide the message. Subsequently 
we'll assign this method to the EventCallBack parameter. For seamless functionality, let's 
proceed to run both projects concurrently. Within the solution properties, I am selecting 
multiple startup projects and adjusting the action settings for both projects. Now I'll initiate the 
execution. This will open both the Android Emulator and the browser simultaneously. Let's begin by 
testing it on Android. As you can observe, the Android native alert dialog is displayed. On the 
other hand in the Blazor server app project, the conventional browser-based alert is being 
presented. In the Maui Blazor app, let's add another feature to examine internet connectivity. 
This functionality is commonly required in Mobile or desktop apps. I'll implement this by checking 
the connectivity within an if condition. If no connectivity is detected, I am displaying an 
additional alert. It's noteworthy that connectivity class is located under Microsoft.Maui.Networking.
Just like in a standard MAUI app, these methods can be utilized within a Maui Blazor app as 
well. Let's proceed to run the project in the Android emulator and conduct a test. Initially 
I'll enable airplane mode to simulate a lack of internet connectivity. As expected the app displays 
the connectivity alert upon clicking the button. Subsequently I'll disable the airplane mode and 
click the button again. At this point, you'll notice that the connectivity alert doesn't appear as 
connectivity has been restored. We hope you have enjoyed this tutorial and gained valuable insights 
into the art of building versatile apps. Thank you for joining us today and we look forward 
to seeing you in our next video. Happy Coding!