<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8952965959597039944</id><updated>2026-04-30T04:20:14.778+05:30</updated><category term=".net maui"/><category term="Xamarin"/><category term="android"/><category term="Kotlin"/><category term="Xamarin Forms"/><category term="Xamarin.Forms"/><category term=".net maui community toolkit"/><category term="Kotlin Android"/><category term=".net multi-platform app ui"/><category term="Xamarin Community Toolkit"/><category term="library"/><category term="Cross Platform App Development"/><category term="sqlite"/><category term="Retrofit"/><category term="android sqlite"/><category term="firebase"/><category term=".NET MAUI Development"/><category term="Fresh MVVM"/><category term="UI"/><category term="Xamarin.Android"/><category term="ZXing"/><category term="ZXing Intent Integrator"/><category term="excel"/><category term="export sqlite"/><category term="firebase android"/><category term="firebase user authentication"/><category term="Android N File Uri"/><category term="MVVM"/><category term="Master Detail Page"/><category term="Material Design"/><category term="OCR"/><category term="OCR Android"/><category term="QR code generator"/><category term="Rest API"/><category term="SCRCPY"/><category term="SCRCPY GUI"/><category term="Screen Mirroring"/><category term="Video Player App"/><category term="Xamarin Dropdown"/><category term="android 15"/><category term="android qrcode"/><category term="android qrcode generator"/><category term="custom fonts"/><category term="devexpress"/><category term="digital signature"/><category term="download file"/><category term="import sqlite from excel"/><category term=".NET 10"/><category term=".NET 9"/><category term=".NET MAUI Tutorial"/><category term=".NET PDF Automation"/><category term="AI"/><category term="AI in Mobile Development"/><category term="API Usage in MAUI"/><category term="Alert Builder"/><category term="Android Development"/><category term="Android N Camera API"/><category term="Android Pdf generator"/><category term="Android Place Picker API"/><category term="Android Room Architecture"/><category term="Android Snackbar"/><category term="AndroidDevelopers"/><category term="AndroidDevelopment"/><category term="Androird reCaptcha"/><category term="App Actions"/><category term="App Performance"/><category term="AppSecurity"/><category term="Automated PDF Reports"/><category term="AvaloniaUI"/><category term="Barcode Scanner"/><category term="Base64"/><category term="Base64 Image Encode/Decode"/><category term="Behaviors"/><category term="Buffer Sink"/><category term="C#"/><category term="C# PDF Generation"/><category term="CRUD Ops in .NET MAUI"/><category term="Calendar Control"/><category term="Calendar View"/><category term="Circle Imageview"/><category term="Circle Transformations android"/><category term="Clearable EditText"/><category term="Convert link to PDF"/><category term="Cross-Platform App"/><category term="Cross-Platform Applications"/><category term="Cross-Platform Dev"/><category term="CrossPlatformDevelopment"/><category term="Custom Snackbar"/><category term="Cystom control"/><category term="Data Grid Control"/><category term="Data Management"/><category term="Data Visualization"/><category term="Developer Guide"/><category term="Development"/><category term="Display Data"/><category term="Document Automation"/><category term="DotNetMAUI"/><category term="Drawer Activity"/><category term="DreamFlow"/><category term="Dropdown"/><category term="EditText Android"/><category term="Efficient App Prototyping"/><category term="Enterprise .NET"/><category term="Extensions"/><category term="Extensions for LINQ"/><category term="External Maps"/><category term="Filter Data"/><category term="FlowListView"/><category term="Flutter App Development"/><category term="Flutter Ecosystem"/><category term="Flyout page"/><category term="Free Plugin"/><category term="Fresh MVVM Popup"/><category term="Glide Android"/><category term="Google Antigravity"/><category term="Google Play"/><category term="Google Play Requirements"/><category term="Google Vision API"/><category term="GooglePlayConsole"/><category term="Gradient Background"/><category term="Gradient View"/><category term="HTML to PDF .NET"/><category term="HttpClient Example"/><category term="HttpClient in .NET MAUI"/><category term="IPA release"/><category term="Image Upload"/><category term="InstallOnAir"/><category term="Interactive Quick Tour"/><category term="Invoice PDF Automation"/><category term="IronPDF"/><category term="Ironbarcode"/><category term="JSON in C#"/><category term="Kerala Lottery App Review&#xa;Lucky Kudam App&#xa;Lottery Results App&#xa;Android Utility App&#xa;Indian Android Apps"/><category term="Kotlin Alert"/><category term="Kotlin Basics"/><category term="Kotlin-Hello World"/><category term="LINQ"/><category term="LinuxSupport"/><category term="Magic Gradient"/><category term="Maps API"/><category term="Master Details Page"/><category term="MessagingCenter"/><category term="Mobile App Dev"/><category term="Mobile App Optimization"/><category term="Mobile Development"/><category term="Multi-Selection Picker"/><category term="Multi-platform App UI"/><category term="Multilingual"/><category term="Multipart"/><category term="Multiple files Upload"/><category term="Navigation Drawer Android"/><category term="No-Code App Builder"/><category term="Okhttp"/><category term="Okio"/><category term="OpenSource"/><category term="PDF Processing C#"/><category term="PDF/A Compliance"/><category term="Php Api"/><category term="Php Api Builder"/><category term="Picasso android"/><category term="Place Picker API"/><category term="Place Picker Android"/><category term="Placeholder"/><category term="PlayStorePolicy"/><category term="PlayStoreUpdate"/><category term="Proguard"/><category term="QR Code Scanning"/><category term="QR code scanner"/><category term="QRCode"/><category term="REST API Integration"/><category term="Recyclerview"/><category term="Reduce APK Size"/><category term="Retrieving UDID on iOS devices"/><category term="Rg.Plugin.Popup"/><category term="Shortcuts"/><category term="Skia Sharp"/><category term="Snackbar"/><category term="SoftwareDevelopment"/><category term="SoftwareUpdatec"/><category term="Sort Data"/><category term="State Layout"/><category term="Tabbed Page"/><category term="Tech Innovations"/><category term="TechCommunity"/><category term="TechNews"/><category term="Text Recognition"/><category term="Text to Speech"/><category term="UDID retrieval methods"/><category term="User Experience Enhancement"/><category term="VYSOR"/><category term="Verify OTP without SMS permission in Android"/><category term="Visual Studio 2022"/><category term="WeakReferenceMessenger"/><category term="WebAssembly"/><category term="Xamarin.Essentials"/><category term="Xamarin.iOS"/><category term="accessibility service android example"/><category term="active android"/><category term="android 13 runtime notification permission"/><category term="android 16"/><category term="android Image Upload using retrofit"/><category term="android firebase cloud messaging"/><category term="android mail api"/><category term="android runtime permission"/><category term="android smart lock api"/><category term="android sms"/><category term="android studio"/><category term="android tips"/><category term="android volley"/><category term="android.os.FileUriExposedException"/><category term="android13"/><category term="animation"/><category term="app development"/><category term="app subscription"/><category term="async task"/><category term="avatarview"/><category term="blob"/><category term="border control"/><category term="butterknife"/><category term="canvas"/><category term="cardview"/><category term="chart"/><category term="circular reveal"/><category term="cloud firestore"/><category term="crud operation"/><category term="data binding"/><category term="datagrid"/><category term="digital signature capture"/><category term="dynamic grid"/><category term="dynamic status bar"/><category term="external db"/><category term="external sqlite import"/><category term="file picker"/><category term="file picker in .net maui"/><category term="firebase authentication"/><category term="firebase cloud messaging"/><category term="firebase phone authentication"/><category term="gmail oauth 2"/><category term="google forms"/><category term="google forms in android"/><category term="google play version update"/><category term="google play version update checker"/><category term="handlers"/><category term="how to get runtime permission in android"/><category term="hyper link label"/><category term="iText Alternative library"/><category term="import sqlite"/><category term="jail broken detection"/><category term="javamail api"/><category term="kenburnsview"/><category term="kotlin Android Extensions"/><category term="kotlin http"/><category term="listview"/><category term="live templates in android studio"/><category term="local notification"/><category term="local storage"/><category term="localisation"/><category term="longpress"/><category term="lottie animation"/><category term="maui"/><category term="mopups"/><category term="music player"/><category term="notes on android versions"/><category term="onbackpresseddispatcher"/><category term="open weather api"/><category term="page navigation"/><category term="phpmyadmin"/><category term="popups"/><category term="preferences"/><category term="reCaptcha"/><category term="registration form"/><category term="root detection"/><category term="saripaar android"/><category term="security"/><category term="signature capture"/><category term="smart lock"/><category term="smart lock for password"/><category term="swipe view"/><category term="syncfusion open source"/><category term="toast"/><category term="toast in .net maui"/><category term="unified sma api"/><category term="update checker"/><category term="validation library"/><category term="vibe coding"/><category term="view binding"/><category term="virtual back button"/><category term="weather app"/><category term="webview"/><category term="webview downloader"/><category term="xamarindevs"/><category term="xamarininterviewquestions"/><category term="youtube"/><category term="youtube player"/><title type='text'>Android Mad - Development Guide for Mobile App Development</title><subtitle type='html'>Androidmad the Advanced Android Development Guide for Beginners and Professionals</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.androidmads.info/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://www.androidmads.info/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Mushtaq</name><uri>http://www.blogger.com/profile/16822127241692763805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>153</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8952965959597039944.post-896373201381536422</id><published>2026-04-15T00:59:00.002+05:30</published><updated>2026-04-15T01:07:54.192+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="AndroidDevelopers"/><category scheme="http://www.blogger.com/atom/ns#" term="AppSecurity"/><category scheme="http://www.blogger.com/atom/ns#" term="GooglePlayConsole"/><category scheme="http://www.blogger.com/atom/ns#" term="PlayStorePolicy"/><category scheme="http://www.blogger.com/atom/ns#" term="PlayStoreUpdate"/><title type='text'>Google Play Console now requires package name verification for all Android developers</title><content type='html'>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot; /&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot; /&gt;
  &lt;title&gt;Google Play Console Now Requires Package Name Verification&lt;/title&gt;
  &lt;style&gt;
    @import url(&#39;https://fonts.googleapis.com/css2?family=Sora:wght@400;500;600&amp;family=Source+Serif+4:ital,wght@0,400;0,600;1,400&amp;display=swap&#39;);

    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

    body {
      font-family: &#39;Sora&#39;, sans-serif;
      background: #f9f8f5;
      color: #1a1a18;
      line-height: 1.7;
    }

    .blog-wrap {
      max-width: 780px;
      margin: 0 auto;
      padding: 2.5rem 1.5rem 4rem;
    }

    .tag {
      display: inline-block;
      font-size: 11px;
      font-weight: 500;
      letter-spacing: 0.08em;
      text-transform: uppercase;
      background: #e6f1fb;
      color: #185fa5;
      padding: 4px 14px;
      border-radius: 999px;
      margin-bottom: 1.2rem;
    }

    h1.blog-title {
      font-family: &#39;Source Serif 4&#39;, serif;
      font-size: clamp(24px, 4vw, 36px);
      font-weight: 600;
      line-height: 1.25;
      color: #1a1a18;
      margin-bottom: 1rem;
    }

    .meta {
      font-size: 13px;
      color: #888780;
      margin-bottom: 2rem;
      display: flex;
      align-items: center;
      gap: 1rem;
      flex-wrap: wrap;
    }

    .blog-hero {
      overflow: hidden;
      margin-bottom: 2rem;
      justify-content: center;
    }

    .blog-hero img {
      width: 100%;
      display: block;
    }

    p.lead {
      font-size: 17px;
      line-height: 1.8;
      color: #1a1a18;
      font-family: &#39;Source Serif 4&#39;, serif;
      font-weight: 400;
      margin-bottom: 2rem;
    }

    hr.divider {
      border: none;
      border-top: 0.5px solid #d3d1c7;
      margin: 2rem 0;
    }

    .section-label {
      font-size: 12px;
      font-weight: 500;
      letter-spacing: 0.1em;
      text-transform: uppercase;
      color: #888780;
      margin-bottom: 0.4rem;
    }

    h2.section-title {
      font-size: 20px;
      font-weight: 600;
      color: #1a1a18;
      margin-bottom: 1rem;
    }

    p.body {
      font-size: 15px;
      line-height: 1.8;
      color: #5f5e5a;
      margin-bottom: 1rem;
    }

    .callout {
      border-left: 3px solid #378add;
      background: #e6f1fb;
      border-radius: 0 8px 8px 0;
      padding: 0.9rem 1.2rem;
      margin: 1.5rem 0;
    }

    .callout p {
      font-size: 14px;
      color: #185fa5;
      margin: 0;
      line-height: 1.65;
    }

    .cards-grid {
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
      gap: 12px;
      margin: 1.5rem 0;
    }

    .card {
      background: #f1efe8;
      border-radius: 12px;
      padding: 1rem 1.1rem;
      border: 0.5px solid #d3d1c7;
    }

    .card-icon {
      font-size: 20px;
      margin-bottom: 8px;
    }

    .card-title {
      font-size: 14px;
      font-weight: 500;
      color: #1a1a18;
      margin-bottom: 4px;
    }

    .card-desc {
      font-size: 13px;
      color: #5f5e5a;
      line-height: 1.55;
    }

    .steps {
      list-style: none;
      padding: 0;
      margin: 1.2rem 0;
      counter-reset: step;
    }

    .steps li {
      display: flex;
      align-items: flex-start;
      gap: 12px;
      padding: 10px 0;
      border-bottom: 0.5px solid #d3d1c7;
      font-size: 14px;
      color: #5f5e5a;
      line-height: 1.6;
    }

    .steps li:last-child {
      border-bottom: none;
    }

    .step-num {
      flex-shrink: 0;
      width: 26px;
      height: 26px;
      border-radius: 50%;
      background: #e6f1fb;
      color: #185fa5;
      font-size: 12px;
      font-weight: 600;
      display: flex;
      align-items: center;
      justify-content: center;
    }

    .warn-box {
      background: #faeeda;
      border: 0.5px solid #ef9f27;
      border-radius: 12px;
      padding: 1rem 1.2rem;
      margin: 1.5rem 0;
    }

    .warn-box p.warn-title {
      font-size: 14px;
      color: #633806;
      font-weight: 500;
      margin-bottom: 8px;
    }

    .warn-box ul {
      padding-left: 1.2rem;
    }

    .warn-box li {
      font-size: 13px;
      color: #854f0b;
      line-height: 1.65;
    }

    .tips-grid {
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
      gap: 10px;
      margin: 1.2rem 0;
    }

    .tip {
      display: flex;
      align-items: flex-start;
      gap: 10px;
      font-size: 13px;
      color: #5f5e5a;
      line-height: 1.6;
    }

    .tip-dot {
      flex-shrink: 0;
      width: 6px;
      height: 6px;
      border-radius: 50%;
      background: #378add;
      margin-top: 7px;
    }

    .final-box {
      background: #f1efe8;
      border-radius: 12px;
      padding: 1.4rem 1.5rem;
      border: 0.5px solid #d3d1c7;
      margin-top: 2rem;
    }

    .final-box h3 {
      font-size: 16px;
      font-weight: 600;
      color: #1a1a18;
      margin-bottom: 0.5rem;
    }

    .final-box p {
      font-size: 14px;
      color: #5f5e5a;
      line-height: 1.7;
    }

    @media (max-width: 600px) {
      .blog-wrap { padding: 1.5rem 1rem 3rem; }
      .cards-grid { grid-template-columns: 1fr; }
      .tips-grid { grid-template-columns: 1fr; }
    }
  &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;div class=&quot;blog-wrap&quot;&gt;

    &lt;span class=&quot;tag&quot;&gt;Android development&lt;/span&gt;

    &lt;div class=&quot;blog-hero&quot;&gt;
      &lt;img
        src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrMeYTVJcTJE8VkbbtmYLlRzSgZdyQjtYEq7iFZ5wdwUWV2cB9oKbtCPEfa5MpCJTBGP29Miy3fQZayX441w3vn-_goBplGyoDnSErp7wRNqKddCMWbfpa7XzDXZ9zff7MUf-Be3czPNMDtd-nGxG75tadj_bjsKzklyeXkZwwgNNZ-_elWC2gbfB7HLbO/s600/ChatGPT%20Image%20Apr%2015,%202026,%2012_16_47%20AM.png&quot;
        alt=&quot;Google Play Console package name verification update&quot;
      /&gt;
    &lt;/div&gt;

    &lt;p class=&quot;lead&quot;&gt;Google has rolled out a major update to the Play Console — a mandatory package name verification system that changes how developers publish and manage apps on the Play Store. If you&#39;re building for Android, here&#39;s everything you need to know.&lt;/p&gt;

    &lt;hr class=&quot;divider&quot; /&gt;

    &lt;!-- Section 1 --&gt;
    &lt;p class=&quot;section-label&quot;&gt;What changed&lt;/p&gt;
    &lt;h2 class=&quot;section-title&quot;&gt;What is package name verification?&lt;/h2&gt;
    &lt;p class=&quot;body&quot;&gt;Package name verification is a new security requirement where developers must prove ownership of their app&#39;s package name before publishing a new app, releasing updates to existing apps, or managing apps within the Play Console.&lt;/p&gt;

    &lt;div class=&quot;callout&quot;&gt;
      &lt;p&gt;In short: Google now verifies that the person uploading or updating an app is the legitimate owner of that app&#39;s package identity — not just someone who happens to know the package name.&lt;/p&gt;
    &lt;/div&gt;

    &lt;hr class=&quot;divider&quot; /&gt;

    &lt;!-- Section 2 --&gt;
    &lt;p class=&quot;section-label&quot;&gt;Why it matters&lt;/p&gt;
    &lt;h2 class=&quot;section-title&quot;&gt;Google&#39;s goals with this update&lt;/h2&gt;

    &lt;div class=&quot;cards-grid&quot;&gt;
      &lt;div class=&quot;card&quot;&gt;
        &lt;div class=&quot;card-icon&quot;&gt;🛡️&lt;/div&gt;
        &lt;p class=&quot;card-title&quot;&gt;Prevent fake apps&lt;/p&gt;
        &lt;p class=&quot;card-desc&quot;&gt;Stops bad actors from misusing or impersonating package names from legitimate apps.&lt;/p&gt;
      &lt;/div&gt;
      &lt;div class=&quot;card&quot;&gt;
        &lt;div class=&quot;card-icon&quot;&gt;🔒&lt;/div&gt;
        &lt;p class=&quot;card-title&quot;&gt;Strengthen platform security&lt;/p&gt;
        &lt;p class=&quot;card-desc&quot;&gt;Ensures only authorized developers can manage apps tied to a specific package name.&lt;/p&gt;
      &lt;/div&gt;
      &lt;div class=&quot;card&quot;&gt;
        &lt;div class=&quot;card-icon&quot;&gt;✅&lt;/div&gt;
        &lt;p class=&quot;card-title&quot;&gt;Protect genuine developers&lt;/p&gt;
        &lt;p class=&quot;card-desc&quot;&gt;Reduces the risk of app hijacking and protects the hard work of original creators.&lt;/p&gt;
      &lt;/div&gt;
    &lt;/div&gt;

    &lt;hr class=&quot;divider&quot; /&gt;

    &lt;!-- Section 3 --&gt;
    &lt;p class=&quot;section-label&quot;&gt;Action required&lt;/p&gt;
    &lt;h2 class=&quot;section-title&quot;&gt;What developers should do right now&lt;/h2&gt;
    &lt;p class=&quot;body&quot;&gt;To avoid any interruptions in publishing or updates, complete these steps as soon as possible:&lt;/p&gt;

    &lt;ol class=&quot;steps&quot;&gt;
      &lt;li&gt;&lt;span class=&quot;step-num&quot;&gt;1&lt;/span&gt; Log in to your Google Play Console&lt;/li&gt;
      &lt;li&gt;&lt;span class=&quot;step-num&quot;&gt;2&lt;/span&gt; Navigate to your app&#39;s dashboard&lt;/li&gt;
      &lt;li&gt;&lt;span class=&quot;step-num&quot;&gt;3&lt;/span&gt; Look for the Package Name Verification section&lt;/li&gt;
      &lt;li&gt;&lt;span class=&quot;step-num&quot;&gt;4&lt;/span&gt; Complete all required verification steps&lt;/li&gt;
      &lt;li&gt;&lt;span class=&quot;step-num&quot;&gt;5&lt;/span&gt; Ensure any documentation requested is accurate and up to date&lt;/li&gt;
    &lt;/ol&gt;

    &lt;div class=&quot;warn-box&quot;&gt;
      &lt;p class=&quot;warn-title&quot;&gt;⚠️ If you skip verification, you may face:&lt;/p&gt;
      &lt;ul&gt;
        &lt;li&gt;Inability to publish new apps&lt;/li&gt;
        &lt;li&gt;Updates being blocked or delayed&lt;/li&gt;
        &lt;li&gt;Potential account or app restrictions&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;

    &lt;hr class=&quot;divider&quot; /&gt;

    &lt;!-- Section 4 --&gt;
    &lt;p class=&quot;section-label&quot;&gt;Best practices&lt;/p&gt;
    &lt;h2 class=&quot;section-title&quot;&gt;Pro tips going forward&lt;/h2&gt;

    &lt;div class=&quot;tips-grid&quot;&gt;
      &lt;div class=&quot;tip&quot;&gt;&lt;span class=&quot;tip-dot&quot;&gt;&lt;/span&gt;Always use a unique and consistent package name across releases&lt;/div&gt;
      &lt;div class=&quot;tip&quot;&gt;&lt;span class=&quot;tip-dot&quot;&gt;&lt;/span&gt;Keep documentation of app ownership on hand&lt;/div&gt;
      &lt;div class=&quot;tip&quot;&gt;&lt;span class=&quot;tip-dot&quot;&gt;&lt;/span&gt;Avoid package names that closely resemble popular apps&lt;/div&gt;
      &lt;div class=&quot;tip&quot;&gt;&lt;span class=&quot;tip-dot&quot;&gt;&lt;/span&gt;Complete verification early — don&#39;t wait until a release deadline&lt;/div&gt;
    &lt;/div&gt;

    &lt;div class=&quot;final-box&quot;&gt;
      &lt;h3&gt;The bottom line&lt;/h3&gt;
      &lt;p&gt;This update is a meaningful step toward a more trustworthy Play Store. While it adds a step to the publishing workflow, it ultimately benefits everyone by reducing fraud and protecting legitimate developers. Stay on top of Play Console announcements so you&#39;re never caught off guard by future policy changes.&lt;/p&gt;
    &lt;/div&gt;

  &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.androidmads.info/feeds/896373201381536422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.androidmads.info/2026/04/google-play-console-now-requires.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/896373201381536422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/896373201381536422'/><link rel='alternate' type='text/html' href='http://www.androidmads.info/2026/04/google-play-console-now-requires.html' title='Google Play Console now requires package name verification for all Android developers'/><author><name>Mushtaq</name><uri>http://www.blogger.com/profile/16822127241692763805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrMeYTVJcTJE8VkbbtmYLlRzSgZdyQjtYEq7iFZ5wdwUWV2cB9oKbtCPEfa5MpCJTBGP29Miy3fQZayX441w3vn-_goBplGyoDnSErp7wRNqKddCMWbfpa7XzDXZ9zff7MUf-Be3czPNMDtd-nGxG75tadj_bjsKzklyeXkZwwgNNZ-_elWC2gbfB7HLbO/s72-c/ChatGPT%20Image%20Apr%2015,%202026,%2012_16_47%20AM.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952965959597039944.post-6793654214064446625</id><published>2026-04-04T14:57:00.004+05:30</published><updated>2026-04-04T14:57:26.392+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI"/><category scheme="http://www.blogger.com/atom/ns#" term="Google Antigravity"/><category scheme="http://www.blogger.com/atom/ns#" term="vibe coding"/><title type='text'>Google Antigravity Tutorial: Build Real Applications with AI Agents</title><content type='html'>&lt;p&gt;
  &lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3O1GgTXEwGIMtUuufk9o9a1JRHmezw0YIx9n4MQZIPh4OnHzylqejfydlwCCl85rIZq9CmyhJ8poJ50wfpuClQar7V6dX3sMPRdDaHcEDh1ODyU9wiBi46VGPwB_iSttnZ6PeANG6dgl3X5pahA9tMglPRknecjyhvPzfPGs5aXMgiWClDXdPpCiqlwD8/s1536/ChatGPT%20Image%20Apr%204,%202026,%2003_20_13%20AM.png&quot; style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1536&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3O1GgTXEwGIMtUuufk9o9a1JRHmezw0YIx9n4MQZIPh4OnHzylqejfydlwCCl85rIZq9CmyhJ8poJ50wfpuClQar7V6dX3sMPRdDaHcEDh1ODyU9wiBi46VGPwB_iSttnZ6PeANG6dgl3X5pahA9tMglPRknecjyhvPzfPGs5aXMgiWClDXdPpCiqlwD8/s600/ChatGPT%20Image%20Apr%204,%202026,%2003_20_13%20AM.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;AI is changing how software is built. &lt;strong&gt;Google Antigravity&lt;/strong&gt; introduces a powerful shift where developers no longer write everything manually—instead, they manage intelligent AI agents that plan, code, test, and execute tasks.&lt;/div&gt;&lt;p&gt;&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
This is a &lt;strong&gt;hands-on, real-world tutorial&lt;/strong&gt; that will take you from beginner to advanced usage, including workflows, prompts, debugging, and building an actual project.
&lt;/p&gt;

&lt;hr style=&quot;text-align: justify;&quot; /&gt;

&lt;h2 style=&quot;text-align: justify;&quot;&gt;📌 Table of Contents&lt;/h2&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;What is Google Antigravity?&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Core Concepts You Must Understand&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Setup &amp;amp; Installation&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Interface Deep Dive&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;How AI Agents Work&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Your First Project (Step-by-Step)&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Advanced Features&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Best Prompts for Better Results&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Debugging &amp;amp; Optimization&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Real-World Use Cases&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Limitations &amp;amp; Best Practices&lt;/li&gt;
&lt;/ul&gt;

&lt;hr style=&quot;text-align: justify;&quot; /&gt;

&lt;h2 style=&quot;text-align: justify;&quot;&gt;🌌 What is Google Antigravity?&lt;/h2&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
Google Antigravity is an &lt;strong&gt;AI-driven development platform&lt;/strong&gt; that uses autonomous agents to perform coding tasks. Instead of writing code line-by-line, you define goals, and AI agents execute them.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
It combines:
&lt;/p&gt;

&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;AI reasoning&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Code generation&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Execution environment&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Browser automation&lt;/li&gt;
&lt;/ul&gt;

&lt;hr style=&quot;text-align: justify;&quot; /&gt;

&lt;h2 style=&quot;text-align: justify;&quot;&gt;🧠 Core Concepts You Must Understand&lt;/h2&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;1. AI Agents&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
Agents are intelligent workers that can:
&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Understand tasks&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Break them into steps&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Execute code&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Fix errors automatically&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;2. Tasks&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
A task is simply a goal you assign, like:
&lt;/p&gt;
&lt;pre style=&quot;text-align: justify;&quot;&gt;Create a blog website with login system&lt;/pre&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;3. Artifacts&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
Artifacts are outputs generated by agents:
&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Code files&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Logs&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Plans&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Screenshots&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;4. Mission Control&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
A dashboard where you manage multiple agents working simultaneously.
&lt;/p&gt;

&lt;hr style=&quot;text-align: justify;&quot; /&gt;

&lt;h2 style=&quot;text-align: justify;&quot;&gt;⚙️ Setup &amp;amp; Installation&lt;/h2&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;Step 1: Requirements&lt;/h3&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Google account&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Chrome browser&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Minimum 8GB RAM (recommended)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;Step 2: Install&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
Download and install Antigravity from the official platform.
&lt;/p&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;Step 3: Login &amp;amp; Model Selection&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
Choose an AI model based on:
&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Speed&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Accuracy&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Cost (if applicable)&lt;/li&gt;
&lt;/ul&gt;

&lt;hr style=&quot;text-align: justify;&quot; /&gt;

&lt;h2 style=&quot;text-align: justify;&quot;&gt;🖥️ Interface Deep Dive&lt;/h2&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;1. Editor Panel&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;Where code is written and modified.&lt;/p&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;2. Agent Panel&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;Shows active AI agents and their progress.&lt;/p&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;3. Artifact Viewer&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;Displays outputs like logs, files, and execution results.&lt;/p&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;4. Console&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;Shows runtime execution and errors.&lt;/p&gt;

&lt;hr style=&quot;text-align: justify;&quot; /&gt;

&lt;h2 style=&quot;text-align: justify;&quot;&gt;🤖 How AI Agents Work (Real Flow)&lt;/h2&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
When you give a prompt, the system follows this pipeline:
&lt;/p&gt;

&lt;ol&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Understand the goal&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Create a plan&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Generate code&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Execute code&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Debug errors&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Return final output&lt;/li&gt;
&lt;/ol&gt;

&lt;hr style=&quot;text-align: justify;&quot; /&gt;

&lt;h2 style=&quot;text-align: justify;&quot;&gt;🛠️ Your First Project: Expense Tracker App&lt;/h2&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;Step 1: Give Prompt&lt;/h3&gt;

&lt;pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Build a simple expense tracker web app with:&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;- Add expense&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;- List expenses&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;- Total calculation&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;- Clean UI&lt;/div&gt;&lt;/pre&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;Step 2: Agent Planning&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
The agent will:
&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Create project structure&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Decide frontend + backend&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Prepare database logic&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;Step 3: Code Generation&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
Files created may include:
&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;index.html&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;style.css&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;app.js&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;Step 4: Execution&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
The app runs inside the environment or browser.&lt;/p&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;Step 5: Refinement Prompt&lt;/h3&gt;

&lt;pre style=&quot;text-align: justify;&quot;&gt;Improve UI with modern design and add category filter
&lt;/pre&gt;

&lt;hr style=&quot;text-align: justify;&quot; /&gt;

&lt;h2 style=&quot;text-align: justify;&quot;&gt;⚡ Advanced Features&lt;/h2&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;1. Multi-Agent Collaboration&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
Run multiple agents:
&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Frontend agent&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Backend agent&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Testing agent&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;2. Browser Automation&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
Agents can:
&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Open websites&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Scrape data&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Test UI flows&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;3. Iterative Development&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
You can continuously improve apps using prompts:
&lt;/p&gt;
&lt;pre style=&quot;text-align: justify;&quot;&gt;Add authentication system&lt;/pre&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;4. Debug Mode&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
Agents automatically:
&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Detect errors&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Fix bugs&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Re-run code&lt;/li&gt;
&lt;/ul&gt;

&lt;hr style=&quot;text-align: justify;&quot; /&gt;

&lt;h2 style=&quot;text-align: justify;&quot;&gt;💡 Best Prompts for Better Results&lt;/h2&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;Bad Prompt ❌&lt;/h3&gt;
&lt;pre style=&quot;text-align: justify;&quot;&gt;Create app&lt;/pre&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;Good Prompt ✅&lt;/h3&gt;
&lt;pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Create a responsive expense tracker using HTML, CSS, and JavaScript.&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Include add, delete, and total calculation features.&lt;/div&gt;&lt;/pre&gt;

&lt;h3 style=&quot;text-align: justify;&quot;&gt;Pro Tip&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
Always include:
&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Tech stack&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Features&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;UI expectations&lt;/li&gt;
&lt;/ul&gt;

&lt;hr style=&quot;text-align: justify;&quot; /&gt;

&lt;h2 style=&quot;text-align: justify;&quot;&gt;🐞 Debugging &amp;amp; Optimization&lt;/h2&gt;

&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Check console logs&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Review artifacts&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Refine prompts instead of rewriting everything&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Break large tasks into smaller steps&lt;/li&gt;
&lt;/ul&gt;

&lt;hr style=&quot;text-align: justify;&quot; /&gt;

&lt;h2 style=&quot;text-align: justify;&quot;&gt;🌍 Real-World Use Cases&lt;/h2&gt;

&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Startup MVP development&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Internal tools&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Automation scripts&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;AI-powered dashboards&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Rapid prototyping&lt;/li&gt;
&lt;/ul&gt;

&lt;hr style=&quot;text-align: justify;&quot; /&gt;

&lt;h2 style=&quot;text-align: justify;&quot;&gt;⚠️ Limitations&lt;/h2&gt;

&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Not always 100% accurate&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Complex apps may need manual fixes&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Requires prompt clarity&lt;/li&gt;
&lt;/ul&gt;

&lt;hr style=&quot;text-align: justify;&quot; /&gt;

&lt;h2 style=&quot;text-align: justify;&quot;&gt;✅ Best Practices&lt;/h2&gt;

&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Start small&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Use clear prompts&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Iterate step-by-step&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Review before execution&lt;/li&gt;
&lt;/ul&gt;

&lt;hr style=&quot;text-align: justify;&quot; /&gt;

&lt;h2 style=&quot;text-align: justify;&quot;&gt;🏁 Conclusion&lt;/h2&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
Google Antigravity is not just a tool—it’s a new way of building software. By combining AI agents with development workflows, it allows you to build faster, smarter, and more efficiently.
&lt;/p&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
If you master prompt-driven development today, you’ll stay ahead in the future of programming.
&lt;/p&gt;

&lt;hr style=&quot;text-align: justify;&quot; /&gt;

&lt;h2 style=&quot;text-align: justify;&quot;&gt;📌 SEO Keywords&lt;/h2&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
Google Antigravity tutorial, AI coding platform, agent-based development, AI app builder, build apps with AI, future programming tools, AI development workflow
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.androidmads.info/feeds/6793654214064446625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.androidmads.info/2026/04/google-antigravity-tutorial-build-real.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/6793654214064446625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/6793654214064446625'/><link rel='alternate' type='text/html' href='http://www.androidmads.info/2026/04/google-antigravity-tutorial-build-real.html' title='Google Antigravity Tutorial: Build Real Applications with AI Agents'/><author><name>Mushtaq</name><uri>http://www.blogger.com/profile/16822127241692763805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3O1GgTXEwGIMtUuufk9o9a1JRHmezw0YIx9n4MQZIPh4OnHzylqejfydlwCCl85rIZq9CmyhJ8poJ50wfpuClQar7V6dX3sMPRdDaHcEDh1ODyU9wiBi46VGPwB_iSttnZ6PeANG6dgl3X5pahA9tMglPRknecjyhvPzfPGs5aXMgiWClDXdPpCiqlwD8/s72-c/ChatGPT%20Image%20Apr%204,%202026,%2003_20_13%20AM.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952965959597039944.post-4413607182831434282</id><published>2026-01-08T01:29:00.002+05:30</published><updated>2026-01-08T01:29:26.505+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Kerala Lottery App Review&#xa;Lucky Kudam App&#xa;Lottery Results App&#xa;Android Utility App&#xa;Indian Android Apps"/><title type='text'>Lucky Kudam App Review – Your Go-To Kerala Lottery Results Checker</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;img 
    src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizMW8SOQ6GpdezgweTuU8Aht42HwYeJReU-DdLZIZHySe9fNclNqHEVEV3zyaYXBpZFS66VGhwtVEebenlODHNYY6BBzRAtt7r9KEeNftZhBjdmhAAZzLQ2tWlxY4UKPOkNhDqKY08DJiiJZ8lD57xR8LLN0UkDASCAtDBeISisuy-qrBRDe2duc2z88Q-/s600/unnamed.png&quot; 
    alt=&quot;Lucky Kudam Kerala Lottery Results App&quot;
    width=&quot;600&quot; /&gt;
&lt;/div&gt;

&lt;p&gt;
If you regularly follow &lt;strong&gt;Kerala State Lottery results&lt;/strong&gt;, the 
&lt;strong&gt;Lucky Kudam&lt;/strong&gt; Android app is a simple and useful solution. 
It helps you check official lottery results directly on your mobile without 
visiting multiple websites or checking newspapers.
&lt;/p&gt;

&lt;hr&gt;

&lt;h3&gt;🔎 What Is Lucky Kudam?&lt;/h3&gt;
&lt;p&gt;
&lt;strong&gt;Lucky Kudam&lt;/strong&gt; is an Android application developed by 
&lt;strong&gt;AJ Softwares&lt;/strong&gt; that displays &lt;strong&gt;Kerala State Lottery results&lt;/strong&gt; 
in one place. It is ideal for users who want quick access to winning numbers 
after the official result announcement.
&lt;/p&gt;

&lt;hr&gt;

&lt;h3&gt;🚀 Key Features&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Daily Kerala Lottery Results&lt;/strong&gt; – Updated as soon as results are published&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Prize-wise Results&lt;/strong&gt; – Easily check winning numbers by prize category&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Notifications&lt;/strong&gt; – Get alerts when new results are available&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Simple &amp; Lightweight UI&lt;/strong&gt; – Clean design with no unnecessary options&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Mobile Optimized&lt;/strong&gt; – Works smoothly on most Android devices&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Official Results Only&lt;/strong&gt; – Results shown only after confirmation&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h3&gt;📊 Supported Lotteries&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;Karunya&lt;/li&gt;
  &lt;li&gt;Karunya Plus&lt;/li&gt;
  &lt;li&gt;Nirmal&lt;/li&gt;
  &lt;li&gt;Win-Win&lt;/li&gt;
  &lt;li&gt;Sthree Sakthi&lt;/li&gt;
  &lt;li&gt;Bhagyalakshmi&lt;/li&gt;
  &lt;li&gt;Samrudhi&lt;/li&gt;
  &lt;li&gt;And more&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
This wide coverage makes the app helpful for users who track multiple Kerala 
lottery draws.
&lt;/p&gt;

&lt;hr&gt;

&lt;h3&gt;🧠 User Experience&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;Easy and clutter-free navigation&lt;/li&gt;
  &lt;li&gt;Fast loading performance&lt;/li&gt;
  &lt;li&gt;No login or registration required&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
The app does not include advanced features like ticket scanning, result history, 
or prediction tools.
&lt;/p&gt;

&lt;hr&gt;

&lt;h3&gt;⚠️ Data Privacy &amp; Safety&lt;/h3&gt;
&lt;p&gt;
According to the app listing, &lt;strong&gt;no personal data is collected or shared&lt;/strong&gt;. 
This makes Lucky Kudam a safe option for privacy-conscious users.
&lt;/p&gt;

&lt;hr&gt;

&lt;h3&gt;📈 Pros &amp; Cons&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;👍 Pros&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Fast and reliable lottery result updates&lt;/li&gt;
  &lt;li&gt;Simple and lightweight application&lt;/li&gt;
  &lt;li&gt;Notification support for new results&lt;/li&gt;
  &lt;li&gt;No personal information required&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;👎 Cons&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;No past result history&lt;/li&gt;
  &lt;li&gt;Limited only to Kerala lotteries&lt;/li&gt;
  &lt;li&gt;Ads included (common in free apps)&lt;/li&gt;
&lt;/ul&gt;

&lt;hr&gt;

&lt;h3&gt;📌 Final Verdict&lt;/h3&gt;
&lt;p&gt;
&lt;strong&gt;Lucky Kudam&lt;/strong&gt; is a great choice for Kerala lottery players who want a 
&lt;strong&gt;fast, reliable, and easy way to check results&lt;/strong&gt;. While it keeps things 
basic, it delivers exactly what it promises—official lottery results without 
distractions.
&lt;/p&gt;

&lt;p&gt;
If you regularly check Kerala lottery results, this app is definitely worth trying.
&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.androidmads.info/feeds/4413607182831434282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.androidmads.info/2026/01/lucky-kudam-app-review-your-go-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/4413607182831434282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/4413607182831434282'/><link rel='alternate' type='text/html' href='http://www.androidmads.info/2026/01/lucky-kudam-app-review-your-go-to.html' title='Lucky Kudam App Review – Your Go-To Kerala Lottery Results Checker'/><author><name>Mushtaq</name><uri>http://www.blogger.com/profile/16822127241692763805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizMW8SOQ6GpdezgweTuU8Aht42HwYeJReU-DdLZIZHySe9fNclNqHEVEV3zyaYXBpZFS66VGhwtVEebenlODHNYY6BBzRAtt7r9KEeNftZhBjdmhAAZzLQ2tWlxY4UKPOkNhDqKY08DJiiJZ8lD57xR8LLN0UkDASCAtDBeISisuy-qrBRDe2duc2z88Q-/s72-c/unnamed.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952965959597039944.post-7099812696353361256</id><published>2025-12-13T02:00:00.003+05:30</published><updated>2025-12-13T09:51:02.309+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET PDF Automation"/><category scheme="http://www.blogger.com/atom/ns#" term="Automated PDF Reports"/><category scheme="http://www.blogger.com/atom/ns#" term="C# PDF Generation"/><category scheme="http://www.blogger.com/atom/ns#" term="Document Automation"/><category scheme="http://www.blogger.com/atom/ns#" term="Enterprise .NET"/><category scheme="http://www.blogger.com/atom/ns#" term="HTML to PDF .NET"/><category scheme="http://www.blogger.com/atom/ns#" term="Invoice PDF Automation"/><category scheme="http://www.blogger.com/atom/ns#" term="IronPDF"/><category scheme="http://www.blogger.com/atom/ns#" term="PDF Processing C#"/><category scheme="http://www.blogger.com/atom/ns#" term="PDF/A Compliance"/><title type='text'>Building End-to-End PDF Automation in .NET Using IronPDF: A Complete Practical Guide</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbLPXP58mtknsCMeiLOjRN4lu891yaVUczAMjK7dPsKaSQQ8hO9lsveTUDAXF_JspmdSmSNSLa_zy04qYQ1ZbZ09hyphenhyphenCBiuan-X1zEHhCPyQIol4hyHYLxPSkyeFtIXXOLELoXenqltNQ3wBwekOwnwt5hfe6VCo4sDLhZ8CIMTVeOyW9Nwk_IFgYesMst2/s1600/Building_End-to-End_PDF_Automation_in_.NET_Using_IronPDF__A_Complete_Practical_Guide%20%281%29.png&quot; style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1024&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbLPXP58mtknsCMeiLOjRN4lu891yaVUczAMjK7dPsKaSQQ8hO9lsveTUDAXF_JspmdSmSNSLa_zy04qYQ1ZbZ09hyphenhyphenCBiuan-X1zEHhCPyQIol4hyHYLxPSkyeFtIXXOLELoXenqltNQ3wBwekOwnwt5hfe6VCo4sDLhZ8CIMTVeOyW9Nwk_IFgYesMst2/w400-h400/Building_End-to-End_PDF_Automation_in_.NET_Using_IronPDF__A_Complete_Practical_Guide%20(1).png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;PDF files play a major role in almost every industry. Whether it’s invoices, reports, onboarding forms, medical summaries, account statements, contracts, or audit logs, companies rely heavily on documents that must be accurate, secure, and consistent. As the volume of data grows, so does the need for a dependable way to generate and manage PDFs without manually stitching everything together.&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;This is where &lt;a href=&quot;https://ironpdf.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;IronPDF&lt;/a&gt;
 steps in and makes a meaningful difference for .NET developers.&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;Instead of wrestling with low-level PDF internals or outdated libraries, &lt;a href=&quot;https://ironpdf.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;IronPDF&lt;/a&gt;
 lets you work with familiar tools like &lt;strong&gt;HTML, CSS, and C#&lt;/strong&gt;, while still delivering polished, professional PDFs. In this guide, we’ll walk through a full, practical setup that shows how to build a robust automation system using &lt;a href=&quot;https://ironpdf.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;IronPDF&lt;/a&gt;
—complete with rendering, merging, extracting content, securing documents, converting to PDF/A, and even generating monthly statements automatically.&lt;/p&gt;
&lt;br/&gt;

&lt;h2 id=&quot;-1-why-IronPDF-makes-pdf-work-so-much-easier-&quot; style=&quot;text-align: justify;&quot;&gt;&lt;strong&gt;1. Why &lt;a href=&quot;https://ironpdf.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;IronPDF&lt;/a&gt;
 Makes PDF Work So Much Easier&lt;/strong&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;a href=&quot;https://ironpdf.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;IronPDF&lt;/a&gt;
 stands out because it uses a Chrome-based rendering engine behind the scenes. That means whatever you can build for a browser—layouts, styles, scripts—you can turn into a PDF with very little effort.&lt;/p&gt;
&lt;h4 id=&quot;highlights-at-a-glance-&quot; style=&quot;text-align: justify;&quot;&gt;Highlights at a glance:&lt;/h4&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Convert &lt;strong&gt;HTML to PDF&lt;/strong&gt; with full CSS support&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Generate PDFs straight from &lt;strong&gt;URLs&lt;/strong&gt;&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Work with PDF merging, splitting, and page-level manipulation&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Extract text and images from existing PDFs&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Apply passwords and permissions&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Convert documents into &lt;strong&gt;PDF/A&lt;/strong&gt;, which is often required for compliance&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Works seamlessly across &lt;strong&gt;.NET Framework&lt;/strong&gt;, &lt;strong&gt;.NET 6/7/8&lt;/strong&gt;, Azure, Linux, Docker, and more&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;Everything demonstrated in this guide mirrors real project requirements found in finance, SaaS, e-commerce, HR, logistics, and enterprise reporting systems.&lt;/p&gt;

&lt;h2 id=&quot;-2-installing-IronPDF&quot; style=&quot;text-align: justify;&quot;&gt;&lt;strong&gt;2. Installing &lt;a href=&quot;https://ironpdf.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;IronPDF&lt;/a&gt;
&lt;/strong&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;Getting started is as simple as adding the package:&lt;/p&gt;
&lt;h4 id=&quot;nuget-package-manager&quot; style=&quot;text-align: justify;&quot;&gt;NuGet Package Manager&lt;/h4&gt;
&lt;pre style=&quot;text-align: justify;&quot;&gt;&lt;code class=&quot;lang-bash&quot;&gt;Install-&lt;span class=&quot;hljs-keyword&quot;&gt;Package&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;IronPDF&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;-net-cli&quot; style=&quot;text-align: justify;&quot;&gt;.NET CLI&lt;/h4&gt;
&lt;pre style=&quot;text-align: justify;&quot;&gt;&lt;code class=&quot;lang-bash&quot;&gt;dotnet add &lt;span class=&quot;hljs-keyword&quot;&gt;package&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;IronPDF&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&quot;-3-what-this-sample-project-demonstrates-&quot; style=&quot;text-align: justify;&quot;&gt;&lt;strong&gt;3. What This Sample Project Demonstrates&lt;/strong&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;Here’s everything covered inside our complete example setup:&lt;/p&gt;
&lt;table style=&quot;text-align: justify;&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Included&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Converting HTML to PDF&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rendering website URLs&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Using template-driven PDF generation&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Merging and splitting documents&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Extracting text and images&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Converting PDF pages to images&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Adding passwords and permissions&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Generating PDF/A compliant files&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Automated monthly statement workflow&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;The goal is for you to have a blueprint that can fit into any production system.&lt;/p&gt;
&lt;p/&gt;
&lt;h2 id=&quot;-full-sample-project-ironpdfdemo-net-8-&quot; style=&quot;text-align: justify;&quot;&gt;📁 &lt;strong&gt;Full Sample Project: IronPdfDemo (.NET 8)&lt;/strong&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;Below is a complete runnable project. Simply place the files in a folder, restore dependencies, and run it.&lt;/p&gt;
&lt;br/&gt;
&lt;h2 id=&quot;-project-structure-&quot; style=&quot;text-align: justify;&quot;&gt;&lt;strong&gt;Project Structure&lt;/strong&gt;&lt;/h2&gt;
&lt;pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;IronPdfDemo/&lt;/div&gt;&lt;code&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;│&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;├── IronPdfDemo&lt;span class=&quot;hljs-selector-class&quot;&gt;.csproj&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;├── Program&lt;span class=&quot;hljs-selector-class&quot;&gt;.cs&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;│&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;├── Templates/&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;│     └── InvoiceTemplate&lt;span class=&quot;hljs-selector-class&quot;&gt;.html&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;│&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;├── Statements/&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;│&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;├── Models/&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;│     └── User&lt;span class=&quot;hljs-selector-class&quot;&gt;.cs&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;│&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;└── Services/&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;      ├── PdfService&lt;span class=&quot;hljs-selector-class&quot;&gt;.cs&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;      ├── HtmlTemplateService&lt;span class=&quot;hljs-selector-class&quot;&gt;.cs&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;      ├── StatementService&lt;span class=&quot;hljs-selector-class&quot;&gt;.cs&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;      └── EmailService.cs&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;hr style=&quot;text-align: justify;&quot; /&gt;
&lt;h3 id=&quot;-1-ironpdfdemo-csproj-&quot; style=&quot;text-align: justify;&quot;&gt;&lt;strong&gt;1. IronPdfDemo.csproj&lt;/strong&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;Project&lt;/span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;Sdk&lt;/span&gt;=&lt;span class=&quot;hljs-string&quot;&gt;&quot;Microsoft.NET.Sdk&quot;&lt;/span&gt;&amp;gt;&lt;/div&gt;&lt;code class=&quot;lang-xml&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;  &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;PropertyGroup&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;OutputType&lt;/span&gt;&amp;gt;&lt;/span&gt;Exe&lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;OutputType&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;TargetFramework&lt;/span&gt;&amp;gt;&lt;/span&gt;net8.0&lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;TargetFramework&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;ImplicitUsings&lt;/span&gt;&amp;gt;&lt;/span&gt;enable&lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;ImplicitUsings&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;Nullable&lt;/span&gt;&amp;gt;&lt;/span&gt;enable&lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;Nullable&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;  &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;PropertyGroup&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;  &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;ItemGroup&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;PackageReference&lt;/span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;Include&lt;/span&gt;=&lt;span class=&quot;hljs-string&quot;&gt;&quot;IronPDF&quot;&lt;/span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;Version&lt;/span&gt;=&lt;span class=&quot;hljs-string&quot;&gt;&quot;2024.9.2&quot;&lt;/span&gt; /&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;  &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;ItemGroup&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;span class=&quot;hljs-tag&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;Project&lt;/span&gt;&amp;gt;&lt;/div&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;-2-templates-invoicetemplate-html-&quot; style=&quot;text-align: justify;&quot;&gt;&lt;strong&gt;2. Templates/InvoiceTemplate.html&lt;/strong&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/div&gt;&lt;code class=&quot;lang-html&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;html&lt;/span&gt;&amp;gt;&lt;/div&gt;&lt;span class=&quot;xml&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;head&lt;/span&gt;&amp;gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;style&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;css&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-selector-tag&quot;&gt;body&lt;/span&gt; { &lt;span class=&quot;hljs-attribute&quot;&gt;font-family&lt;/span&gt;: Arial; &lt;span class=&quot;hljs-attribute&quot;&gt;padding&lt;/span&gt;: &lt;span class=&quot;hljs-number&quot;&gt;20px&lt;/span&gt;; }&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-selector-tag&quot;&gt;h1&lt;/span&gt; { &lt;span class=&quot;hljs-attribute&quot;&gt;color&lt;/span&gt;: &lt;span class=&quot;hljs-number&quot;&gt;#0077cc&lt;/span&gt;; }&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-selector-class&quot;&gt;.amount&lt;/span&gt; { &lt;span class=&quot;hljs-attribute&quot;&gt;font-size&lt;/span&gt;: &lt;span class=&quot;hljs-number&quot;&gt;22px&lt;/span&gt;; &lt;span class=&quot;hljs-attribute&quot;&gt;margin-top&lt;/span&gt;: &lt;span class=&quot;hljs-number&quot;&gt;20px&lt;/span&gt;; }&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;css&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;style&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;span class=&quot;hljs-tag&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;head&lt;/span&gt;&amp;gt;&lt;/div&gt;&lt;/span&gt;&lt;span class=&quot;hljs-tag&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;body&lt;/span&gt;&amp;gt;&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;xml&quot;&gt;    &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;h1&lt;/span&gt;&amp;gt;&lt;/span&gt;Invoice #&lt;/span&gt;&lt;span class=&quot;hljs-template-variable&quot;&gt;{{InvoiceNumber}}&lt;/span&gt;&lt;span class=&quot;xml&quot;&gt;&lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;h1&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;span class=&quot;xml&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;xml&quot;&gt;    &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;p&lt;/span&gt;&amp;gt;&lt;/span&gt;Customer Name: &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;b&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;hljs-template-variable&quot;&gt;{{CustomerName}}&lt;/span&gt;&lt;span class=&quot;xml&quot;&gt;&lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;b&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;p&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;span class=&quot;xml&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;xml&quot;&gt;    &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;p&lt;/span&gt;&amp;gt;&lt;/span&gt;Date: &lt;/span&gt;&lt;span class=&quot;hljs-template-variable&quot;&gt;{{&lt;span class=&quot;hljs-name&quot;&gt;Date&lt;/span&gt;}}&lt;/span&gt;&lt;span class=&quot;xml&quot;&gt;&lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;p&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;span class=&quot;xml&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;xml&quot;&gt;    &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;p&lt;/span&gt; &lt;span class=&quot;hljs-attr&quot;&gt;class&lt;/span&gt;=&lt;span class=&quot;hljs-string&quot;&gt;&quot;amount&quot;&lt;/span&gt;&amp;gt;&lt;/span&gt;Total Amount: &lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-name&quot;&gt;b&lt;/span&gt;&amp;gt;&lt;/span&gt;$&lt;/span&gt;&lt;span class=&quot;hljs-template-variable&quot;&gt;{{Amount}}&lt;/span&gt;&lt;span class=&quot;xml&quot;&gt;&lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;b&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;hljs-tag&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;p&lt;/span&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;span class=&quot;xml&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;body&lt;/span&gt;&amp;gt;&lt;/div&gt;&lt;span class=&quot;hljs-tag&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&amp;lt;/&lt;span class=&quot;hljs-name&quot;&gt;html&lt;/span&gt;&amp;gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;-3-models-user-cs-&quot; style=&quot;text-align: justify;&quot;&gt;&lt;strong&gt;3. Models/User.cs&lt;/strong&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;IronPdfDemo.Models&lt;/span&gt;;&lt;/div&gt;&lt;code class=&quot;lang-csharp&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;User&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;int&lt;/span&gt; Id { &lt;span class=&quot;hljs-keyword&quot;&gt;get&lt;/span&gt;; &lt;span class=&quot;hljs-keyword&quot;&gt;set&lt;/span&gt;; }&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; CustomerName { &lt;span class=&quot;hljs-keyword&quot;&gt;get&lt;/span&gt;; &lt;span class=&quot;hljs-keyword&quot;&gt;set&lt;/span&gt;; } = &lt;span class=&quot;hljs-string&quot;&gt;&quot;&quot;&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;double&lt;/span&gt; Amount { &lt;span class=&quot;hljs-keyword&quot;&gt;get&lt;/span&gt;; &lt;span class=&quot;hljs-keyword&quot;&gt;set&lt;/span&gt;; }&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; Email { &lt;span class=&quot;hljs-keyword&quot;&gt;get&lt;/span&gt;; &lt;span class=&quot;hljs-keyword&quot;&gt;set&lt;/span&gt;; } = &lt;span class=&quot;hljs-string&quot;&gt;&quot;&quot;&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; InvoiceNumber { &lt;span class=&quot;hljs-keyword&quot;&gt;get&lt;/span&gt;; &lt;span class=&quot;hljs-keyword&quot;&gt;set&lt;/span&gt;; } = &lt;span class=&quot;hljs-string&quot;&gt;&quot;&quot;&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;}&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr style=&quot;text-align: justify;&quot; /&gt;
&lt;h3 id=&quot;-4-services-htmltemplateservice-cs-&quot; style=&quot;text-align: justify;&quot;&gt;&lt;strong&gt;4. Services/HtmlTemplateService.cs&lt;/strong&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;using&lt;/span&gt; System.IO;&lt;/div&gt;&lt;code class=&quot;lang-csharp&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;IronPdfDemo.Services&lt;/span&gt;;&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;HtmlTemplateService&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;RenderTemplate&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; filePath, Dictionary&amp;lt;&lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt;, &lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt;&amp;gt; data&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;hljs-function&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-function&quot;&gt;    &lt;/span&gt;{&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; html = File.ReadAllText(filePath);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;foreach&lt;/span&gt; (&lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; kv &lt;span class=&quot;hljs-keyword&quot;&gt;in&lt;/span&gt; data)&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;            html = html.Replace(&lt;span class=&quot;hljs-string&quot;&gt;$&quot;{{{{&lt;span class=&quot;hljs-subst&quot;&gt;{kv.Key}&lt;/span&gt;}}}}&quot;&lt;/span&gt;, kv.Value);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;/span&gt; html;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    }&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;}&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;-5-services-pdfservice-cs-all-core-IronPDF-features-&quot; style=&quot;text-align: justify;&quot;&gt;&lt;strong&gt;5. Services/PdfService.cs — All Core IronPDF Features&lt;/strong&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;using&lt;/span&gt; IronPDF
;&lt;/div&gt;&lt;code class=&quot;lang-csharp&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;IronPdfDemo.Services&lt;/span&gt;;&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;PdfService&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;readonly&lt;/span&gt; ChromePdfRenderer renderer;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;PdfService&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;hljs-function&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-function&quot;&gt;    &lt;/span&gt;{&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        renderer = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; ChromePdfRenderer();&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    }&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; PdfDocument &lt;span class=&quot;hljs-title&quot;&gt;RenderHtml&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; html&lt;/span&gt;) &lt;/span&gt;=&amp;gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        renderer.RenderHtmlAsPdf(html);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; PdfDocument &lt;span class=&quot;hljs-title&quot;&gt;RenderUrl&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; url&lt;/span&gt;) &lt;/span&gt;=&amp;gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        renderer.RenderUrlAsPdf(url);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;Save&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;PdfDocument pdf, &lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; path&lt;/span&gt;) &lt;/span&gt;=&amp;gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        pdf.SaveAs(path);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; PdfDocument &lt;span class=&quot;hljs-title&quot;&gt;Merge&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;params&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt;[] files&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;hljs-function&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-function&quot;&gt;    &lt;/span&gt;{&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; docs = files.Select(PdfDocument.FromFile).ToList();&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; merged = docs.First();&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;foreach&lt;/span&gt; (&lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; doc &lt;span class=&quot;hljs-keyword&quot;&gt;in&lt;/span&gt; docs.Skip(&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;))&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;            merged.AppendPdf(doc);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;/span&gt; merged;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    }&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; List&amp;lt;PdfDocument&amp;gt; &lt;span class=&quot;hljs-title&quot;&gt;Split&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; path&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;hljs-function&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-function&quot;&gt;    &lt;/span&gt;{&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; pdf = PdfDocument.FromFile(path);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;/span&gt; pdf.SplitToIndividualPages().ToList();&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    }&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;ExtractText&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; path&lt;/span&gt;) &lt;/span&gt;=&amp;gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        PdfDocument.FromFile(path).ExtractAllText();&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;ExtractImages&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; path&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;hljs-function&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-function&quot;&gt;    &lt;/span&gt;{&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; pdf = PdfDocument.FromFile(path);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; images = pdf.ExtractAllImages();&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;int&lt;/span&gt; i = &lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;foreach&lt;/span&gt; (&lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; img &lt;span class=&quot;hljs-keyword&quot;&gt;in&lt;/span&gt; images)&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;            img.Save(&lt;span class=&quot;hljs-string&quot;&gt;$&quot;image-&lt;span class=&quot;hljs-subst&quot;&gt;{i++}&lt;/span&gt;.png&quot;&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    }&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;ConvertToImages&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; path&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;hljs-function&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-function&quot;&gt;    &lt;/span&gt;{&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; pdf = PdfDocument.FromFile(path);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; pages = pdf.ToPngs();&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;int&lt;/span&gt; i = &lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;foreach&lt;/span&gt; (&lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; img &lt;span class=&quot;hljs-keyword&quot;&gt;in&lt;/span&gt; pages)&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;            img.Save(&lt;span class=&quot;hljs-string&quot;&gt;$&quot;page-&lt;span class=&quot;hljs-subst&quot;&gt;{i++}&lt;/span&gt;.png&quot;&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    }&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;SecurePdf&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; path, &lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; password&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;hljs-function&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-function&quot;&gt;    &lt;/span&gt;{&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; pdf = PdfDocument.FromFile(path);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        pdf.Password = password;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        pdf.SecuritySettings.AllowUserPrinting = &lt;span class=&quot;hljs-literal&quot;&gt;false&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        pdf.SaveAs(&lt;span class=&quot;hljs-string&quot;&gt;&quot;secured.pdf&quot;&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    }&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;ConvertToPdfA&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; path&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;hljs-function&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-function&quot;&gt;    &lt;/span&gt;{&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; pdf = PdfDocument.FromFile(path);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; pdfA = pdf.ConvertToPdfA(PdfAStandard.A2A);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        pdfA.SaveAs(&lt;span class=&quot;hljs-string&quot;&gt;&quot;output-pdfa.pdf&quot;&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    }&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;}&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;-6-services-emailservice-cs-mock-for-demo-&quot; style=&quot;text-align: justify;&quot;&gt;&lt;strong&gt;6. Services/EmailService.cs (Mock for Demo)&lt;/strong&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;IronPdfDemo.Services&lt;/span&gt;;&lt;/div&gt;&lt;code class=&quot;lang-csharp&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;EmailService&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; Task &lt;span class=&quot;hljs-title&quot;&gt;SendAsync&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; to, &lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; subject, &lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; message, &lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; attachmentPath&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;hljs-function&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-function&quot;&gt;    &lt;/span&gt;{&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        Console.WriteLine(&lt;span class=&quot;hljs-string&quot;&gt;$&quot;(Mock Email Sent) -&amp;gt; &lt;span class=&quot;hljs-subst&quot;&gt;{to}&lt;/span&gt; : &lt;span class=&quot;hljs-subst&quot;&gt;{attachmentPath}&lt;/span&gt;&quot;&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;/span&gt; Task.CompletedTask;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    }&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;}&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;-7-services-statementservice-cs-automated-statement-workflow-&quot; style=&quot;text-align: justify;&quot;&gt;&lt;strong&gt;7. Services/StatementService.cs — Automated Statement Workflow&lt;/strong&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;using&lt;/span&gt; IronPdfDemo.Models;&lt;/div&gt;&lt;code class=&quot;lang-csharp&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;namespace&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;IronPdfDemo.Services&lt;/span&gt;;&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;StatementService&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;readonly&lt;/span&gt; PdfService pdfService;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;readonly&lt;/span&gt; HtmlTemplateService templateService;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;readonly&lt;/span&gt; EmailService emailService;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;StatementService&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;PdfService pdf, HtmlTemplateService template, EmailService email&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;hljs-function&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-function&quot;&gt;    &lt;/span&gt;{&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        pdfService = pdf;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        templateService = template;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        emailService = email;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    }&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;async&lt;/span&gt; Task &lt;span class=&quot;hljs-title&quot;&gt;GenerateStatementAsync&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;User user&lt;/span&gt;)&lt;/span&gt;&lt;/div&gt;&lt;span class=&quot;hljs-function&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-function&quot;&gt;    &lt;/span&gt;{&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; data = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; Dictionary&amp;lt;&lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt;, &lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt;&amp;gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        {&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;            { &lt;span class=&quot;hljs-string&quot;&gt;&quot;CustomerName&quot;&lt;/span&gt;, user.CustomerName },&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;            { &lt;span class=&quot;hljs-string&quot;&gt;&quot;Amount&quot;&lt;/span&gt;, user.Amount.ToString(&lt;span class=&quot;hljs-string&quot;&gt;&quot;F2&quot;&lt;/span&gt;) },&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;            { &lt;span class=&quot;hljs-string&quot;&gt;&quot;Date&quot;&lt;/span&gt;, DateTime.Now.ToShortDateString() },&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;            { &lt;span class=&quot;hljs-string&quot;&gt;&quot;InvoiceNumber&quot;&lt;/span&gt;, user.InvoiceNumber }&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        };&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; html = templateService.RenderTemplate(&lt;span class=&quot;hljs-string&quot;&gt;&quot;Templates/InvoiceTemplate.html&quot;&lt;/span&gt;, data);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; pdf = pdfService.RenderHtml(html);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; filePath = &lt;span class=&quot;hljs-string&quot;&gt;$&quot;Statements/Statement-&lt;span class=&quot;hljs-subst&quot;&gt;{user.Id}&lt;/span&gt;-&lt;span class=&quot;hljs-subst&quot;&gt;{DateTime.Now:yyyy-MM}&lt;/span&gt;.pdf&quot;&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        pdf.SaveAs(filePath);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        pdfService.ConvertToPdfA(filePath);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;        &lt;span class=&quot;hljs-keyword&quot;&gt;await&lt;/span&gt; emailService.SendAsync(user.Email, &lt;span class=&quot;hljs-string&quot;&gt;&quot;Your Monthly Statement&quot;&lt;/span&gt;, &lt;span class=&quot;hljs-string&quot;&gt;&quot;Attached PDF&quot;&lt;/span&gt;, filePath);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    }&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;}&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;-8-program-cs-running-all-features-&quot; style=&quot;text-align: justify;&quot;&gt;&lt;strong&gt;8. Program.cs — Running All Features&lt;/strong&gt;&lt;/h3&gt;
&lt;pre&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;﻿&lt;span class=&quot;hljs-keyword&quot;&gt;using&lt;/span&gt; IronPdfDemo.Models;&lt;/div&gt;&lt;code class=&quot;lang-csharp&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;using&lt;/span&gt; IronPdfDemo.Services;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; pdfService = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;hljs-type&quot;&gt;PdfService&lt;/span&gt;();&lt;/div&gt;&lt;/span&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; templateService = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;hljs-type&quot;&gt;HtmlTemplateService&lt;/span&gt;();&lt;/div&gt;&lt;/span&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; emailService = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;hljs-type&quot;&gt;EmailService&lt;/span&gt;();&lt;/div&gt;&lt;/span&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; statementService = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;hljs-type&quot;&gt;StatementService&lt;/span&gt;(pdfService, templateService, emailService);&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;// 1. HTML → PDF&lt;/div&gt;&lt;/span&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; htmlPdf = pdfService.RenderHtml(&lt;span class=&quot;hljs-string&quot;&gt;&quot;&amp;lt;h1&amp;gt;Hello from &lt;a href=&quot;https://ironpdf.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;IronPDF&lt;/a&gt;
&amp;lt;/h1&amp;gt;&quot;&lt;/span&gt;);&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;pdfService.Save(htmlPdf, &lt;span class=&quot;hljs-string&quot;&gt;&quot;hello.pdf&quot;&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;// 2. URL → PDF&lt;/div&gt;&lt;/span&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; urlPdf = pdfService.RenderUrl(&lt;span class=&quot;hljs-string&quot;&gt;&quot;https://example.com&quot;&lt;/span&gt;);&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;pdfService.Save(urlPdf, &lt;span class=&quot;hljs-string&quot;&gt;&quot;webpage.pdf&quot;&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;// 3. Merge&lt;/div&gt;&lt;/span&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; merged = pdfService.Merge(&lt;span class=&quot;hljs-string&quot;&gt;&quot;hello.pdf&quot;&lt;/span&gt;, &lt;span class=&quot;hljs-string&quot;&gt;&quot;webpage.pdf&quot;&lt;/span&gt;);&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;pdfService.Save(merged, &lt;span class=&quot;hljs-string&quot;&gt;&quot;merged.pdf&quot;&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;// 4. Split&lt;/div&gt;&lt;/span&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; pages = pdfService.Split(&lt;span class=&quot;hljs-string&quot;&gt;&quot;merged.pdf&quot;&lt;/span&gt;);&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;int i = &lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;foreach (&lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; page &lt;span class=&quot;hljs-keyword&quot;&gt;in&lt;/span&gt; pages)&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    page.SaveAs($&lt;span class=&quot;hljs-string&quot;&gt;&quot;page-{i++}.pdf&quot;&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;// 5. Extract Text&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Console.WriteLine(pdfService.ExtractText(&lt;span class=&quot;hljs-string&quot;&gt;&quot;hello.pdf&quot;&lt;/span&gt;));&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;// 6. Extract Images&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;pdfService.ExtractImages(&lt;span class=&quot;hljs-string&quot;&gt;&quot;merged.pdf&quot;&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;// 7. Convert Pages to Images&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;pdfService.ConvertToImages(&lt;span class=&quot;hljs-string&quot;&gt;&quot;merged.pdf&quot;&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;// 8. Secure PDF&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;pdfService.SecurePdf(&lt;span class=&quot;hljs-string&quot;&gt;&quot;hello.pdf&quot;&lt;/span&gt;, &lt;span class=&quot;hljs-string&quot;&gt;&quot;mypassword123&quot;&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;// 9. Convert to PDF/A&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;pdfService.ConvertToPdfA(&lt;span class=&quot;hljs-string&quot;&gt;&quot;hello.pdf&quot;&lt;/span&gt;);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;span class=&quot;hljs-comment&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;// 10. Automated Monthly Statement&lt;/div&gt;&lt;/span&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; user = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;hljs-type&quot;&gt;User&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    Id = &lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    CustomerName = &lt;span class=&quot;hljs-string&quot;&gt;&quot;John Doe&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    Amount = &lt;span class=&quot;hljs-number&quot;&gt;349.99&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    Email = &lt;span class=&quot;hljs-string&quot;&gt;&quot;john@example.com&quot;&lt;/span&gt;,&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    InvoiceNumber = &lt;span class=&quot;hljs-string&quot;&gt;&quot;INV-2025-001&quot;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;};&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;await statementService.GenerateStatementAsync(user);&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;Console.WriteLine(&lt;span class=&quot;hljs-string&quot;&gt;&quot;All IronPDF operations completed successfully!&quot;&lt;/span&gt;);&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;-conclusion-a-practical-production-ready-pdf-automation-workflow-&quot; style=&quot;text-align: justify;&quot;&gt;&lt;strong&gt;Conclusion: A Practical, Production-Ready PDF Automation Workflow&lt;/strong&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;With &lt;a href=&quot;https://ironpdf.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;IronPDF&lt;/a&gt;, .NET developers can avoid the tedious parts of PDF manipulation and instead focus on building clean, predictable workflows. The combination of HTML rendering, structured APIs, and compliance features like PDF/A support makes it suitable for everything from financial statements and HR documents to automated reporting systems in SaaS platforms.&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;This guide gives you:&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;A refined, publication-ready article&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;A complete example project you can integrate or expand&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Real-world use cases covering extraction, security, automation, and conversions&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;You now have everything needed for a strong contest submission or for building real enterprise-grade PDF solutions.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.androidmads.info/feeds/7099812696353361256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.androidmads.info/2025/12/building-end-to-end-pdf-automation-in.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/7099812696353361256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/7099812696353361256'/><link rel='alternate' type='text/html' href='http://www.androidmads.info/2025/12/building-end-to-end-pdf-automation-in.html' title='Building End-to-End PDF Automation in .NET Using IronPDF: A Complete Practical Guide'/><author><name>Mushtaq</name><uri>http://www.blogger.com/profile/16822127241692763805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbLPXP58mtknsCMeiLOjRN4lu891yaVUczAMjK7dPsKaSQQ8hO9lsveTUDAXF_JspmdSmSNSLa_zy04qYQ1ZbZ09hyphenhyphenCBiuan-X1zEHhCPyQIol4hyHYLxPSkyeFtIXXOLELoXenqltNQ3wBwekOwnwt5hfe6VCo4sDLhZ8CIMTVeOyW9Nwk_IFgYesMst2/s72-w400-h400-c/Building_End-to-End_PDF_Automation_in_.NET_Using_IronPDF__A_Complete_Practical_Guide%20(1).png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952965959597039944.post-8282049678402581850</id><published>2025-11-18T01:35:00.000+05:30</published><updated>2025-11-18T01:35:45.186+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET 10"/><category scheme="http://www.blogger.com/atom/ns#" term=".net maui"/><category scheme="http://www.blogger.com/atom/ns#" term="app development"/><category scheme="http://www.blogger.com/atom/ns#" term="MessagingCenter"/><category scheme="http://www.blogger.com/atom/ns#" term="WeakReferenceMessenger"/><title type='text'>.NET 10 Kills MessagingCenter — Here’s the Modern Replacement for Your MAUI App</title><content type='html'>&lt;style&gt;
  h2 {
    font-size: 26px;
    font-weight: 600;
    margin-top: 30px;
    margin-bottom: 15px;
    color: #222;
    border-left: 4px solid #0078d4;
    padding-left: 12px;
}

h3 {
    font-size: 20px;   /* Smaller than h2 */
    font-weight: 600;
    margin-top: 25px;
    margin-bottom: 10px;
    color: #333;
}
&lt;/style&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDQ4VSTunERRAHVY1vJR0ZlnMwE-gAypWBs1vMZxNprTnxGzznW-v2vQzV25C5HErMjbMD4uN1SnVYSbqVhYefrja5cYtCoNnm7kZ1YTyZ7AFT_UdgOOJmOr5WT5Jkv3m5FP8pyc9mwJ1KPPrOWqbXNbRMwgLWtgHBc3FpFN0HYfSakiPQnBeTbL238-P/s1056/download%20(4).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot;  src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDQ4VSTunERRAHVY1vJR0ZlnMwE-gAypWBs1vMZxNprTnxGzznW-v2vQzV25C5HErMjbMD4uN1SnVYSbqVhYefrja5cYtCoNnm7kZ1YTyZ7AFT_UdgOOJmOr5WT5Jkv3m5FP8pyc9mwJ1KPPrOWqbXNbRMwgLWtgHBc3FpFN0HYfSakiPQnBeTbL238-P/s320/download%20(4).png&quot; style=&quot;display: block; height: 500px; margin-left: auto; margin-right: auto; text-align: justify;&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
  With the release of
  &lt;strong&gt;
    .NET 10
  &lt;/strong&gt;
  , Microsoft has officially removed
  &lt;strong&gt;
    MessagingCenter
  &lt;/strong&gt;
  , a long-standing feature that many Xamarin.Forms and early MAUI developers relied on for lightweight communication between components. If your app still uses MessagingCenter, this change may feel disruptive — but the truth is, better, safer, and more maintainable options have already replaced it.
&lt;/p&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
  This article explains why MessagingCenter is gone, the recommended modern alternatives, and how you can migrate your MAUI app smoothly without breaking existing functionality.
&lt;/p&gt;

&lt;h2 style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;
    Why MessagingCenter Was Removed
  &lt;/strong&gt;
&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
  MessagingCenter was originally introduced for simple publish–subscribe messaging, but over time developers ran into repeated issues:
&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;
      Hidden communication made debugging difficult
  &lt;/li&gt;
  &lt;li&gt;
      Subscriptions often caused memory leaks
  &lt;/li&gt;
  &lt;li&gt;
      It didn’t align with dependency injection or MVVM best practices
  &lt;/li&gt;
  &lt;li&gt;
      Modern .NET messaging tools are cleaner and more efficient
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
  To encourage better architecture and avoid unpredictable behavior, Microsoft removed MessagingCenter entirely in .NET 10.
&lt;/p&gt;
&lt;h2 style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;
    Meet the Modern Replacement: WeakReferenceMessenger
  &lt;/strong&gt;
&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
  The best replacement — and Microsoft’s deliberate direction — is
  &lt;strong&gt;
    WeakReferenceMessenger
  &lt;/strong&gt;
  , part of the .NET Community Toolkit.
&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;
    Why it’s better
  &lt;/strong&gt;
&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;
      Strongly typed messages
  &lt;/li&gt;
  &lt;li&gt;
      No memory leaks thanks to weak references
  &lt;/li&gt;
  &lt;li&gt;
      Great for MVVM
  &lt;/li&gt;
  &lt;li&gt;
      Fully supported and actively updated
  &lt;/li&gt;
  &lt;li&gt;
    Faster and more optimized than MessagingCenter
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
  It provides the same pub/sub workflow, but without the pitfalls.
&lt;/p&gt;
&lt;h2 style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;
    Basic Usage Examples
  &lt;/strong&gt;
&lt;/h2&gt;
&lt;h3 style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;
    Send a message
  &lt;/strong&gt;
&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-plaintext&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;WeakReferenceMessenger.Default.Send(new UserLoggedInMessage(userId));&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;
    Receive a message
  &lt;/strong&gt;
&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-plaintext&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;WeakReferenceMessenger.Default.Register&amp;lt;UserLoggedInMessage&amp;gt;(this, (r, m) =&amp;gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    // Handle login message&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;});&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;
    Message definition
  &lt;/strong&gt;
&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-plaintext&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;public class UserLoggedInMessage : ValueChangedMessage&amp;lt;string&amp;gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    public UserLoggedInMessage(string value) : base(value) { }&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;}&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
  This pattern is clean, simple, and scales beautifully as your app grows.
&lt;/p&gt;
&lt;h2 style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;
    Migrating From MessagingCenter to WeakReferenceMessenger
  &lt;/strong&gt;
&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
  Here’s a common real-world example.
&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;
    Old (MessagingCenter):
  &lt;/strong&gt;
&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-plaintext&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;MessagingCenter.Subscribe&amp;lt;HomePage, string&amp;gt;(this, &quot;LoggedIn&quot;, (sender, value) =&amp;gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    // handle login&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;});&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;
    New (WeakReferenceMessenger):
  &lt;/strong&gt;
&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-plaintext&quot;&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    WeakReferenceMessenger.Default.Register&amp;lt;LoggedInMessage&amp;gt;(this, (r, m) =&amp;gt;&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;    // handle login&lt;/div&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;});&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;
    Send the message
  &lt;/strong&gt;
&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-plaintext&quot;&gt;WeakReferenceMessenger.Default.Send(new LoggedInMessage(&quot;success&quot;));&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;
    Migration Tips for Large Apps
  &lt;/strong&gt;
&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
  If your MAUI app uses MessagingCenter heavily, follow this structured migration path:
&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;
      Search for all
      &lt;code&gt;
        MessagingCenter
      &lt;/code&gt;
      usages
  &lt;/li&gt;
  &lt;li&gt;
      Create equivalent message classes
  &lt;/li&gt;
  &lt;li&gt;
      Replace subscriptions with registrations
  &lt;/li&gt;
  &lt;li&gt;
      Replace publish calls with messenger sends
  &lt;/li&gt;
  &lt;li&gt;
      Test navigation scenarios for memory leaks
  &lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
  With WeakReferenceMessenger’s weak references, cleanup becomes much easier.
&lt;/p&gt;
&lt;h2 style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;
    Why the New Approach Is Better for Your App
  &lt;/strong&gt;
&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
  Switching to modern messaging patterns gives you:
&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;
    
      Cleaner, more predictable architecture
    
  &lt;/li&gt;
  &lt;li&gt;
    
      Faster message handling
    
  &lt;/li&gt;
  &lt;li&gt;
    
      Zero hidden dependencies
    
  &lt;/li&gt;
  &lt;li&gt;
    
      Fewer memory leaks
    
  &lt;/li&gt;
  &lt;li&gt;
      Easier debugging and testing
    
  &lt;/li&gt;
  &lt;li&gt;
    
      Future-proofing for new .NET MAUI updates
    
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
  MessagingCenter may be gone, but the alternatives are significantly better.
&lt;/p&gt;
&lt;h2 style=&quot;text-align: justify;&quot;&gt;
  &lt;strong&gt;
    Final Thoughts
  &lt;/strong&gt;
&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
  The removal of MessagingCenter in .NET 10 marks the end of an old era — and the beginning of a cleaner, more modern approach to app communication. Whether you migrate to
  &lt;strong&gt;
    WeakReferenceMessenger
  &lt;/strong&gt;
  , traditional events, or a DI-driven pattern, your MAUI app will benefit from improved maintainability and performance.
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.androidmads.info/feeds/8282049678402581850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.androidmads.info/2025/11/net-10-kills-messagingcenter-heres.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/8282049678402581850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/8282049678402581850'/><link rel='alternate' type='text/html' href='http://www.androidmads.info/2025/11/net-10-kills-messagingcenter-heres.html' title='.NET 10 Kills MessagingCenter — Here’s the Modern Replacement for Your MAUI App'/><author><name>Mushtaq</name><uri>http://www.blogger.com/profile/16822127241692763805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBDQ4VSTunERRAHVY1vJR0ZlnMwE-gAypWBs1vMZxNprTnxGzznW-v2vQzV25C5HErMjbMD4uN1SnVYSbqVhYefrja5cYtCoNnm7kZ1YTyZ7AFT_UdgOOJmOr5WT5Jkv3m5FP8pyc9mwJ1KPPrOWqbXNbRMwgLWtgHBc3FpFN0HYfSakiPQnBeTbL238-P/s72-c/download%20(4).png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952965959597039944.post-9096023715288970026</id><published>2025-11-15T00:14:00.003+05:30</published><updated>2025-11-15T00:26:54.131+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="AvaloniaUI"/><category scheme="http://www.blogger.com/atom/ns#" term="CrossPlatformDevelopment"/><category scheme="http://www.blogger.com/atom/ns#" term="DotNetMAUI"/><category scheme="http://www.blogger.com/atom/ns#" term="LinuxSupport"/><category scheme="http://www.blogger.com/atom/ns#" term="SoftwareDevelopment"/><category scheme="http://www.blogger.com/atom/ns#" term="TechNews"/><category scheme="http://www.blogger.com/atom/ns#" term="WebAssembly"/><title type='text'>.NET MAUI is Coming to Linux and the Browser like Flutter</title><content type='html'>&lt;!--SEO Meta Tags--&gt;
&lt;title&gt;.NET MAUI is Coming to Linux and the Browser — Powered by Avalonia&lt;/title&gt;
&lt;meta content=&quot;.NET MAUI expands beyond Windows and macOS as Avalonia introduces a new backend that brings MAUI apps to Linux and WebAssembly. Discover how this integration reshapes cross-platform app development.&quot; name=&quot;description&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;.NET MAUI, Avalonia UI, MAUI Linux, MAUI browser support, Avalonia backend, MAUI WebAssembly, cross-platform UI, .NET MAUI news, Avalonia Linux, Avalonia WebAssembly&quot; name=&quot;keywords&quot;&gt;&lt;/meta&gt;

&lt;!--Blog Post--&gt;
&lt;div class=&quot;post-body&quot; style=&quot;text-align: left;&quot;&gt;
  &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWBW_Oy09rv83W3rWNdGGi8IncqmoZ5s6eRTJTe3FkSFCw5VMI-bPIOyMJYd_XuPUlkKLajCin8p2DoN34R2d4B29CbWAtu9P4sjQO8Oq8RxK4O6d5sVus4jEhQogbUDQhHOBMYxeIMzhBagO2p9joqhKNizrrShR665Yynsy7rPzl4QY7Njjz2G13i_MW/s1600/image.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;462&quot; data-original-width=&quot;100%&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWBW_Oy09rv83W3rWNdGGi8IncqmoZ5s6eRTJTe3FkSFCw5VMI-bPIOyMJYd_XuPUlkKLajCin8p2DoN34R2d4B29CbWAtu9P4sjQO8Oq8RxK4O6d5sVus4jEhQogbUDQhHOBMYxeIMzhBagO2p9joqhKNizrrShR665Yynsy7rPzl4QY7Njjz2G13i_MW/s1600/image.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    The Avalonia UI team has announced a groundbreaking update for .NET developers — 
    &lt;strong&gt;.NET MAUI applications are now coming to Linux and the browser&lt;/strong&gt;, powered by an Avalonia-based backend.
    This exciting development opens the door for MAUI apps to run seamlessly across desktop Linux, embedded systems, and even WebAssembly.
  &lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

  &lt;h3 style=&quot;text-align: justify;&quot;&gt;Expanding MAUI’s Reach&lt;/h3&gt;
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    Until now, .NET MAUI primarily supported Windows, macOS, Android, and iOS. With Avalonia’s new rendering backend, 
    developers can extend their MAUI apps to &lt;strong&gt;Linux desktops (Ubuntu, Fedora, Debian)&lt;/strong&gt; and 
    &lt;strong&gt;embedded devices like Raspberry Pi&lt;/strong&gt;. Even more impressively, early builds already demonstrate MAUI 
    applications running inside browsers via &lt;strong&gt;WebAssembly&lt;/strong&gt; — without plugins or external dependencies.&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

  &lt;h3 style=&quot;text-align: justify;&quot;&gt;Why Avalonia?&lt;/h3&gt;
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    Avalonia’s cross-platform rendering engine provides a consistent UI experience across all systems. 
    It’s known for its performance and lightweight design, which make it ideal for embedded and browser environments.
    On macOS, early performance tests show more than &lt;strong&gt;2× improvement&lt;/strong&gt; compared to the native Mac Catalyst backend.
  &lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

  &lt;h3 style=&quot;text-align: justify;&quot;&gt;Highlights from the Avalonia Team&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li style=&quot;text-align: justify;&quot;&gt;MAUI apps now run on Linux and WebAssembly using Avalonia as the rendering layer.&lt;/li&gt;
    &lt;li style=&quot;text-align: justify;&quot;&gt;Open-source backend under the MIT license (in development).&lt;/li&gt;
    &lt;li style=&quot;text-align: justify;&quot;&gt;Improved consistency and performance across platforms.&lt;/li&gt;
    &lt;li style=&quot;text-align: justify;&quot;&gt;Early demo shows MAUI apps running directly in browsers.&lt;/li&gt;
    &lt;li style=&quot;text-align: justify;&quot;&gt;Support for desktop, embedded, and browser-based deployments.&lt;/li&gt;
  &lt;/ul&gt;&lt;div style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/div&gt;

  &lt;h3 style=&quot;text-align: justify;&quot;&gt;What This Means for Developers&lt;/h3&gt;
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    This integration means developers can finally target a &lt;strong&gt;broader range of platforms&lt;/strong&gt; without rewriting their apps.
    Instead of relying on multiple native toolkits, MAUI developers can use Avalonia to deliver a unified experience everywhere.
  &lt;/p&gt;

  &lt;p style=&quot;text-align: justify;&quot;&gt;
    For teams maintaining large cross-platform applications, this reduces platform-specific bugs, 
    simplifies maintenance, and significantly improves deployment flexibility.
  &lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

  &lt;h3 style=&quot;text-align: justify;&quot;&gt;Looking Ahead&lt;/h3&gt;
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    The Avalonia backend for .NET MAUI is still in its early stages, but the future looks promising. 
    As the feature matures, MAUI could truly achieve its original goal: &lt;em&gt;“write once, run everywhere.”&lt;/em&gt;
  &lt;/p&gt;

  &lt;p style=&quot;text-align: justify;&quot;&gt;
    The full article and official demo are available on Avalonia’s blog. 
    &lt;a href=&quot;https://avaloniaui.net/blog/net-maui-is-coming-to-linux-and-the-browser-powered-by-avalonia&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;
      Read the full announcement here
    &lt;/a&gt;.
  &lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

  &lt;h3 style=&quot;text-align: justify;&quot;&gt;General Analysis&lt;/h3&gt;
  &lt;p style=&quot;text-align: justify;&quot;&gt;
    This move marks a major step toward unifying the .NET ecosystem. 
    The combination of MAUI’s developer productivity and Avalonia’s rendering flexibility could redefine how 
    cross-platform .NET apps are built and deployed. If successful, it will bring .NET applications to devices and environments 
    that were previously unreachable — from industrial embedded systems to browser-based user interfaces.
  &lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

  &lt;hr style=&quot;text-align: justify;&quot; /&gt;
  &lt;p style=&quot;color: #666666; font-size: 0.9em; text-align: justify;&quot;&gt;
    Source: Avalonia UI Blog — “.NET MAUI is Coming to Linux and the Browser, Powered by Avalonia” (Published Nov 11 2025)
  &lt;/p&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.androidmads.info/feeds/9096023715288970026/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.androidmads.info/2025/11/net-maui-is-coming-to-linux-and-browser.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/9096023715288970026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/9096023715288970026'/><link rel='alternate' type='text/html' href='http://www.androidmads.info/2025/11/net-maui-is-coming-to-linux-and-browser.html' title='.NET MAUI is Coming to Linux and the Browser like Flutter'/><author><name>Mushtaq</name><uri>http://www.blogger.com/profile/16822127241692763805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWBW_Oy09rv83W3rWNdGGi8IncqmoZ5s6eRTJTe3FkSFCw5VMI-bPIOyMJYd_XuPUlkKLajCin8p2DoN34R2d4B29CbWAtu9P4sjQO8Oq8RxK4O6d5sVus4jEhQogbUDQhHOBMYxeIMzhBagO2p9joqhKNizrrShR665Yynsy7rPzl4QY7Njjz2G13i_MW/s72-c/image.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952965959597039944.post-3715901998666413936</id><published>2025-10-01T10:07:00.002+05:30</published><updated>2025-10-01T10:07:59.947+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET 9"/><category scheme="http://www.blogger.com/atom/ns#" term=".net maui"/><category scheme="http://www.blogger.com/atom/ns#" term="android 15"/><category scheme="http://www.blogger.com/atom/ns#" term="Android Development"/><category scheme="http://www.blogger.com/atom/ns#" term="App Performance"/><category scheme="http://www.blogger.com/atom/ns#" term="Developer Guide"/><category scheme="http://www.blogger.com/atom/ns#" term="Google Play"/><category scheme="http://www.blogger.com/atom/ns#" term="Google Play Requirements"/><category scheme="http://www.blogger.com/atom/ns#" term="Mobile App Optimization"/><category scheme="http://www.blogger.com/atom/ns#" term="Mobile Development"/><title type='text'>Getting Your .NET MAUI Applications Ready for Google Play&#39;s 16 KB Memory Page Requirement</title><content type='html'>    &lt;style&gt;
        
        
        .featured-image {
            text-align: center;
            margin: 30px 0;
        }
        
        .featured-image img {
            max-width: 100%;
            height: auto;
            border-radius: 8px;
            box-shadow: 0 4px 15px rgba(0,0,0,0.1);
        }
        
        h2 {
            color: #0066cc;
            font-size: 1.6em;
            margin-top: 40px;
            margin-bottom: 20px;
            border-bottom: 2px solid #0066cc;
            padding-bottom: 10px;
            text-align: justify;
        }
        
        p {
            margin-bottom: 20px;
            text-align: justify;
            text-justify: inter-word;
        }
        
        ul, ol {
            margin: 20px 0;
            padding-left: 30px;
        }
        
        li {
            margin-bottom: 12px;
            text-align: justify;
            text-justify: inter-word;
        }
        
        strong {
            color: #0066cc;
            font-weight: 600;
        }
        
        code {
            background-color: #f5f5f5;
            padding: 2px 6px;
            border-radius: 3px;
            font-family: &#39;Courier New&#39;, monospace;
            font-size: 0.9em;
            color: #c7254e;
        }
        
        pre {
            background-color: #2d2d2d;
            color: #f8f8f2;
            padding: 20px;
            border-radius: 5px;
            overflow-x: auto;
            margin: 20px 0;
            font-family: &#39;Courier New&#39;, monospace;
            font-size: 0.9em;
            line-height: 1.5;
        }
        
        pre code {
            background-color: transparent;
            color: #f8f8f2;
            padding: 0;
        }
        
        .highlight {
            background-color: #fff3cd;
            padding: 20px;
            border-left: 4px solid #ffc107;
            margin: 25px 0;
            border-radius: 4px;
        }
        
        .highlight strong {
            color: #856404;
        }
        
        .tip {
            background-color: #d1ecf1;
            padding: 20px;
            border-left: 4px solid #0c5460;
            margin: 25px 0;
            border-radius: 4px;
        }
        
        .intro {
            font-size: 1.1em;
            color: #555;
            font-style: italic;
            margin: 30px 0;
            padding: 20px;
            background-color: #f8f9fa;
            border-left: 4px solid #0066cc;
            text-align: justify;
        }
        
        @media (max-width: 768px) {
            body {
                padding: 10px;
            }
            
            .container {
                padding: 20px;
            }
            
            h1 {
                font-size: 1.8em;
            }
            
            h2 {
                font-size: 1.4em;
            }
        }
    &lt;/style&gt;
&lt;body&gt;
    &lt;div class=&quot;container&quot;&gt;
        &lt;div class=&quot;featured-image&quot;&gt;
            &lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfBCSlRmPs3z2rvmxbxiPGUz9AToV7G_6jrtsBlvRzNNtcu3_uKYn4cFrAIikBPa57FRZQq3WmsSXD3W4JvzqxWA9b_WQYl6bRWkg8slkPsKBKSTuekpymx41DvbApfVOB2FEld3gqGP7fmquhim1juJdJtHCJj72vZIsmM9zm_QfUrMpX4t31wtupDzwu/s600/ChatGPT%20Image%20Oct%201,%202025,%2009_59_41%20AM.png&quot; 
                 alt=&quot;.NET MAUI Google Play 16 KB Page Size Requirement Illustration&quot; 
                 loading=&quot;lazy&quot;&gt;
        &lt;/div&gt;
        
        &lt;div class=&quot;intro&quot;&gt;
            A critical deadline is approaching for .NET MAUI developers who distribute applications through Google Play. Beginning November 1, 2025, Google Play will mandate that all new applications and updates designed for Android 15 and higher must be compatible with 16 KB page sizes on 64-bit devices.
        &lt;/div&gt;
        
        &lt;h2&gt;Understanding the 16 KB Memory Page Requirement&lt;/h2&gt;
        
        &lt;p&gt;Android is transitioning from its traditional 4 KB memory page architecture to a larger 16 KB format. This shift is designed to enhance performance on modern devices equipped with substantial RAM. The benefits of this architectural change extend beyond system-level improvements and directly impact individual applications:&lt;/p&gt;
        
        &lt;ul&gt;
            &lt;li&gt;&lt;strong&gt;Faster Application Launch:&lt;/strong&gt; Applications experience an average 3.16% reduction in launch time, with some apps seeing improvements up to 30%&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Enhanced Energy Efficiency:&lt;/strong&gt; Power consumption during app launch decreases by an average of 4.56%&lt;/li&gt;
            &lt;li&gt;&lt;strong&gt;Better System Responsiveness:&lt;/strong&gt; The overall Android operating system becomes more responsive. For example, the native camera app shows 4.48% faster hot starts and 6.60% faster cold starts&lt;/li&gt;
        &lt;/ul&gt;
        
        &lt;h2&gt;Compatibility with .NET MAUI&lt;/h2&gt;
        
        &lt;p&gt;The positive news for developers is that .NET MAUI 9 includes native support for 16 KB page sizes. To ensure your application meets Google&#39;s requirements, simply migrate your .NET MAUI (or .NET for Android) project to .NET 9. Once upgraded, your application will automatically comply with the 16 KB page size standard.&lt;/p&gt;
        
        &lt;div class=&quot;tip&quot;&gt;
            &lt;strong&gt;Important Note:&lt;/strong&gt; Keep in mind that .NET MAUI 8 reached its end-of-support date on May 14, 2025, according to the official .NET MAUI support policy.
        &lt;/div&gt;
        
        &lt;h2&gt;Auditing Your Project Dependencies&lt;/h2&gt;
        
        &lt;p&gt;Compliance isn&#39;t just about your main application—every dependency in your .NET MAUI project must also support 16 KB page sizes. During the build process, the system will alert you to any non-compliant dependencies with warnings similar to:&lt;/p&gt;
        
      &lt;div class=&quot;tip&quot;&gt;
            Android 16 will require 16 KB page sizes, shared library &#39;{library_name}&#39; 
does not have a 16 KB page size. Please inform the authors of the NuGet 
package &#39;{package_name}&#39; version &#39;{version}&#39; which contains &#39;{file_path}&#39;. 
See https://developer.android.com/guide/practices/page-sizes for more details.
        &lt;/div&gt;
        
        &lt;p&gt;When encountering these warnings, follow this approach:&lt;/p&gt;
        
        &lt;ul&gt;
            &lt;li&gt;Upgrade the problematic dependency to a newer version with 16 KB support&lt;/li&gt;
            &lt;li&gt;Reach out to package maintainers if no compatible version exists&lt;/li&gt;
            &lt;li&gt;Consider alternative packages if the original is no longer actively maintained&lt;/li&gt;
        &lt;/ul&gt;
        
        &lt;p&gt;For developers who want to perform additional verification, Google provides command-line tools in their documentation that can help validate compliance for your application and its dependencies.&lt;/p&gt;
        
        &lt;h2&gt;Your Preparation Checklist&lt;/h2&gt;
        
        &lt;p&gt;To meet the November 2025 deadline, follow these steps:&lt;/p&gt;
        
        &lt;ul&gt;
            &lt;li&gt;Migrate to .NET 9 if you&#39;re currently on an earlier version&lt;/li&gt;
            &lt;li&gt;Analyze all dependencies for 16 KB page size compatibility&lt;/li&gt;
            &lt;li&gt;Update or substitute any dependencies that don&#39;t meet the requirements&lt;/li&gt;
            &lt;li&gt;Thoroughly test your application in a 16 KB environment using Android emulators or developer options on physical Android devices&lt;/li&gt;
        &lt;/ul&gt;
        
        &lt;div class=&quot;highlight&quot;&gt;
            &lt;strong&gt;Critical Reminder:&lt;/strong&gt; Don&#39;t postpone this work until the last moment. Begin your preparation immediately to ensure smooth app submissions that comply with Google Play policies and maintain uninterrupted release schedules.
        &lt;/div&gt;
        
        &lt;h2&gt;Final Thoughts&lt;/h2&gt;
        
        &lt;p&gt;While the 16 KB page size requirement introduces a new compliance obligation, it also delivers tangible performance improvements. The .NET MAUI 9 framework is already equipped to handle this requirement—your responsibility is ensuring your dependencies are equally prepared. Upgrade to .NET 9, conduct a thorough dependency audit, and validate your application in 16 KB testing environments to be ready well before the November 2025 cutoff date.&lt;/p&gt;
    &lt;/div&gt;
&lt;/body&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.androidmads.info/feeds/3715901998666413936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.androidmads.info/2025/10/dotnet-maui-google-play-16kb-page-size-guide-2025.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/3715901998666413936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/3715901998666413936'/><link rel='alternate' type='text/html' href='http://www.androidmads.info/2025/10/dotnet-maui-google-play-16kb-page-size-guide-2025.html' title='Getting Your .NET MAUI Applications Ready for Google Play&#39;s 16 KB Memory Page Requirement'/><author><name>Mushtaq</name><uri>http://www.blogger.com/profile/16822127241692763805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfBCSlRmPs3z2rvmxbxiPGUz9AToV7G_6jrtsBlvRzNNtcu3_uKYn4cFrAIikBPa57FRZQq3WmsSXD3W4JvzqxWA9b_WQYl6bRWkg8slkPsKBKSTuekpymx41DvbApfVOB2FEld3gqGP7fmquhim1juJdJtHCJj72vZIsmM9zm_QfUrMpX4t31wtupDzwu/s72-c/ChatGPT%20Image%20Oct%201,%202025,%2009_59_41%20AM.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952965959597039944.post-3332413096289833362</id><published>2025-06-29T16:20:00.003+05:30</published><updated>2025-06-29T16:20:48.206+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI in Mobile Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Cross-Platform App"/><category scheme="http://www.blogger.com/atom/ns#" term="Development"/><category scheme="http://www.blogger.com/atom/ns#" term="DreamFlow"/><category scheme="http://www.blogger.com/atom/ns#" term="Efficient App Prototyping"/><category scheme="http://www.blogger.com/atom/ns#" term="Flutter App Development"/><category scheme="http://www.blogger.com/atom/ns#" term="Flutter Ecosystem"/><category scheme="http://www.blogger.com/atom/ns#" term="No-Code App Builder"/><category scheme="http://www.blogger.com/atom/ns#" term="Tech Innovations"/><title type='text'>DreamFlow: Revolutionizing Flutter App Development – A No-Code Solution for the Future</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKEFCCtDo5n17DHVEfgwG62HFo5Yeg58n9vcBqsJDBD7gHq8pwmmQEup1J3tI2swuLEyShlo2Na1TnZ-JZqqc2iDkZyY-o2XqrHAM5v2DNWa_YuUQvnCk-BDr-OLMwCQd_W_P54MuM4aRz_1lfPrcRqvJN3dDa63NHeOTb4R4ImT41TweqtYAjy5mCWvr4/s1920/Copy%20of%20Follow%20for%20More.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1080&quot; data-original-width=&quot;1920&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKEFCCtDo5n17DHVEfgwG62HFo5Yeg58n9vcBqsJDBD7gHq8pwmmQEup1J3tI2swuLEyShlo2Na1TnZ-JZqqc2iDkZyY-o2XqrHAM5v2DNWa_YuUQvnCk-BDr-OLMwCQd_W_P54MuM4aRz_1lfPrcRqvJN3dDa63NHeOTb4R4ImT41TweqtYAjy5mCWvr4/w640-h360/Copy%20of%20Follow%20for%20More.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;In the fast-paced world of mobile app development, efficiency and speed are paramount. For Flutter developers, a new tool is emerging that promises to significantly accelerate the initial stages of app creation: &lt;strong&gt;DreamFlow&lt;/strong&gt;.&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;This innovative no-code AI app builder is designed to generate actual cross-platform Flutter applications, offering a unique advantage for those working within the Flutter ecosystem. Facing long development cycles and costly initial prototyping? DreamFlow transforms the game for Flutter developers.&lt;/p&gt;
&lt;h3 id=&quot;what-makes-dreamflow-stand-out-&quot;&gt;What Makes DreamFlow Stand Out?&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;Unlike many other no-code platforms, DreamFlow specifically focuses on Flutter, providing a dedicated solution that understands the nuances of this popular framework. This specialization means that developers can expect outputs that are genuinely Flutter-native, rather than generic code that might require extensive modifications.&lt;/p&gt;
&lt;h4 id=&quot;key-features-&quot; style=&quot;text-align: justify;&quot;&gt;Key Features:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Flutter-native outputs for seamless integration.&lt;/li&gt;
&lt;li&gt;AI-powered app design tailored to developer prompts.&lt;/li&gt;
&lt;li&gt;Cross-platform compatibility, reducing development time.&lt;/li&gt;&lt;/ul&gt;
&lt;h3 id=&quot;the-simple-workflow&quot;&gt;The Simple Workflow&lt;/h3&gt;
&lt;p&gt;Getting started with DreamFlow is straightforward, simplifying the app development process into a few easy steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Create an Account:&lt;/strong&gt; Begin by setting up your &lt;a href=&quot;https://app.dreamflow.com/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;DreamFlow &lt;/a&gt;account.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Frame Your Prompt:&lt;/strong&gt; Describe your desired application using a clear and concise prompt, such as: &lt;em&gt;“Create a weather app with a 5-day forecast, daily temperature graphs, and location-based data.”&lt;/em&gt; The more detailed your prompt, the better the generated outcome will be.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Generate the App:&lt;/strong&gt; With your prompt in place, DreamFlow&#39;s AI takes over, quickly generating your Flutter application.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Preview and Refine:&lt;/strong&gt; Once generated, you can preview your app to ensure it meets your vision.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJqOfx8Y2D1OW9HwaKHNfrhAfweniokjX18d2-8yRCcJdAEQ-WH3UmvZT2y2AIfQ3so8U8ERY-4kV0BAMzqqlAZr-3_ET5zJfmf3CaZlCVk2S6OF-6DhNJ5Oy8xTKsDfMVsrxGhNFRPcT9raRH59DoADzMThF5DK_bjGZUJ5N1AlW7U0v5A8HjVYTa7fS3/s1915/dream1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;760&quot; data-original-width=&quot;1915&quot; height=&quot;238&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJqOfx8Y2D1OW9HwaKHNfrhAfweniokjX18d2-8yRCcJdAEQ-WH3UmvZT2y2AIfQ3so8U8ERY-4kV0BAMzqqlAZr-3_ET5zJfmf3CaZlCVk2S6OF-6DhNJ5Oy8xTKsDfMVsrxGhNFRPcT9raRH59DoADzMThF5DK_bjGZUJ5N1AlW7U0v5A8HjVYTa7fS3/w601-h238/dream1.png&quot; width=&quot;601&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNxkutVNQmiPa_wslnuSpUNUaVuPxgzLzawC6cR9DKtZI70d0KgKPRDhV-PO9UwCBRXaBD6cNcI6eZ9GuM3VEg8EToNvxR6J9IIlHzYNBrOeyRbBqUT2wOrS8-v4DfIf7UlCl6x61WA1kMBz0YTzKp1kD5BF7R7LOfDJ_x7KrliMOoVSG4LpL4YZvVpqbH/s1888/dream2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;772&quot; data-original-width=&quot;1888&quot; height=&quot;243&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNxkutVNQmiPa_wslnuSpUNUaVuPxgzLzawC6cR9DKtZI70d0KgKPRDhV-PO9UwCBRXaBD6cNcI6eZ9GuM3VEg8EToNvxR6J9IIlHzYNBrOeyRbBqUT2wOrS8-v4DfIf7UlCl6x61WA1kMBz0YTzKp1kD5BF7R7LOfDJ_x7KrliMOoVSG4LpL4YZvVpqbH/w595-h243/dream2.png&quot; width=&quot;595&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;
&lt;h3 id=&quot;a-practical-example-event-management-app&quot;&gt;A Practical Example: Event Management App&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;Imagine needing a tech event management and booking application. Using a prompt generated by ChatGPT, DreamFlow can conjure a polished app within minutes. This includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;A clean and modern design.&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Intuitive navigation for seamless user experience.&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Smooth animations.&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Functional data modules for booking and event management.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;The beauty of DreamFlow lies in its ability to provide a solid foundation. If further customization is needed, the generated app can even be edited in tools like FlutterFlow.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZAXrLrE_t9ZeLlTh3LK66Ecx5VUEEtyOHscO3wjOVFLwcRLHmO4sblXfzMJcLS2pJP7P9hywAf4ktfl19Ihm-Wew0hiATLNiK7nzfLZ7nOHxPnGxSg7OrTReYsD56MC3MaIOz2NkMYVMN6zjWmSn_yumge6nO6RQvQu93u1Hy0dILJN9Ka5J_ZJG2mVmg/s673/1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;673&quot; data-original-width=&quot;319&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZAXrLrE_t9ZeLlTh3LK66Ecx5VUEEtyOHscO3wjOVFLwcRLHmO4sblXfzMJcLS2pJP7P9hywAf4ktfl19Ihm-Wew0hiATLNiK7nzfLZ7nOHxPnGxSg7OrTReYsD56MC3MaIOz2NkMYVMN6zjWmSn_yumge6nO6RQvQu93u1Hy0dILJN9Ka5J_ZJG2mVmg/s320/1.png&quot; width=&quot;152&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMx7HHUtQDyiZRoi1pMN9seDaWr5vZqVMZUdh_YMswYHaZB19kBDcPdKPEnYCDbZO5WGw0iJ7cJNiRWkfaJTJFhGtN83L-Rncump3h6dUuwhvZ81ev7jpYdqpSoMkSj0gFiF4mT4Pq7pIA2CcTxoyPGxWmImi1M5wAg9cL2LcwowSaeMlpg_YcdopJqtYh/s657/2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;657&quot; data-original-width=&quot;325&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMx7HHUtQDyiZRoi1pMN9seDaWr5vZqVMZUdh_YMswYHaZB19kBDcPdKPEnYCDbZO5WGw0iJ7cJNiRWkfaJTJFhGtN83L-Rncump3h6dUuwhvZ81ev7jpYdqpSoMkSj0gFiF4mT4Pq7pIA2CcTxoyPGxWmImi1M5wAg9cL2LcwowSaeMlpg_YcdopJqtYh/s320/2.png&quot; width=&quot;158&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfYY-alnpCmKxhnA1yX-y_7ytGCa9k6fCjFaUOm63i5oGLDf-zYpTkO6XjsN1fgNat1320dA_ctPfupTM2dinE9MKTs0gHuj4Am9AuFQpzHIL1aFkkb4ArN2M_sS6TOeRatlC2WoDf9HcvquRAHx0XTNEQpVyPeTyNUB_j-pP_4PTAXdYvpdH_7Yo-i6MQ/s663/3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;663&quot; data-original-width=&quot;310&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfYY-alnpCmKxhnA1yX-y_7ytGCa9k6fCjFaUOm63i5oGLDf-zYpTkO6XjsN1fgNat1320dA_ctPfupTM2dinE9MKTs0gHuj4Am9AuFQpzHIL1aFkkb4ArN2M_sS6TOeRatlC2WoDf9HcvquRAHx0XTNEQpVyPeTyNUB_j-pP_4PTAXdYvpdH_7Yo-i6MQ/s320/3.png&quot; width=&quot;150&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4p29_vGMPyRMIinHWLZYSvNHvCR0MLM7Ur_JLNxKIbFqYtVX9yFGGDQGXKv-XEG5nn3ctbjZFTqg6yWnLoe7SMoF4MKSQIwkOdAxLetTy527u2WN_5sG9RCXM3PkmoCUuntp6W6P2vjY4vhea4YvrUImnJL_F1Lv24fcjVYZ-sbeXC2g7Bejw0iADxLpk/s664/4.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;664&quot; data-original-width=&quot;336&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4p29_vGMPyRMIinHWLZYSvNHvCR0MLM7Ur_JLNxKIbFqYtVX9yFGGDQGXKv-XEG5nn3ctbjZFTqg6yWnLoe7SMoF4MKSQIwkOdAxLetTy527u2WN_5sG9RCXM3PkmoCUuntp6W6P2vjY4vhea4YvrUImnJL_F1Lv24fcjVYZ-sbeXC2g7Bejw0iADxLpk/s320/4.png&quot; width=&quot;162&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUcPC4_dxcDRkPgrARqCx26HYcjQV_iVLXn5SJXxPxLinnhrLuWkPGfphHgiGTcpZHj0IkWKVfMIpbZATyao2IUlToZekf2i53Qpng3n9cPAz9QP8YPjLgL6LhvGU3T-NU5Oarpyufm_my-11ZM8GwRn7GNBwBaPwGpEhv9gsMbzXUYHtua9aE_uv10AY7/s675/5.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;675&quot; data-original-width=&quot;337&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUcPC4_dxcDRkPgrARqCx26HYcjQV_iVLXn5SJXxPxLinnhrLuWkPGfphHgiGTcpZHj0IkWKVfMIpbZATyao2IUlToZekf2i53Qpng3n9cPAz9QP8YPjLgL6LhvGU3T-NU5Oarpyufm_my-11ZM8GwRn7GNBwBaPwGpEhv9gsMbzXUYHtua9aE_uv10AY7/s320/5.png&quot; width=&quot;160&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h3 id=&quot;current-limitations-to-consider&quot; style=&quot;text-align: justify;&quot;&gt;Current Limitations to Consider&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;While DreamFlow offers significant advantages, it&#39;s important to acknowledge its current limitations. It&#39;s not designed to handle:&lt;/p&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Deep state management.&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Complex custom business logic.&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Scalable architectural patterns.&lt;/li&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;Intricate API integration patterns.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;However, many of these limitations can be mitigated by extending the functionality of the generated app using Flutter libraries and manual coding.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh34usobZ4upliOOVG2-3lw2tJ5-JC7MMoqvZpJWPN0dhVaE7d_rBBo_k8NQX2gLkbIKztA2qPRDI83OgqpDwRzjMoE1O8Ra5eYaCWRLHUNmt70U2Gs0x7HdDdHx9_ZPPa6UIN3WYQhqJYrz6-SO8QuxtNQMoIDKjbDx2RI5Eo1pneY-AJoBwOlR08JOwKx/s814/code1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;814&quot; data-original-width=&quot;727&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh34usobZ4upliOOVG2-3lw2tJ5-JC7MMoqvZpJWPN0dhVaE7d_rBBo_k8NQX2gLkbIKztA2qPRDI83OgqpDwRzjMoE1O8Ra5eYaCWRLHUNmt70U2Gs0x7HdDdHx9_ZPPa6UIN3WYQhqJYrz6-SO8QuxtNQMoIDKjbDx2RI5Eo1pneY-AJoBwOlR08JOwKx/s320/code1.png&quot; width=&quot;286&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL-yp2TCi-edTaeAh6B9CwgU1PX7hdk-TiYqFrROxiyX2zGEOQUcptU7AaeJj1HzKuZwWoHYqukyia97cfObmfuLB7gR4zjjPytnezLuLmoIW2HABoCoBNcnO8F8b-MFWoxOZsUSd3Uq5mzFe32Q-PTTXXKX3UKtj4rHPNnib-mMbxiXNrJgKchE53kmyG/s1279/code2.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;880&quot; data-original-width=&quot;1279&quot; height=&quot;289&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL-yp2TCi-edTaeAh6B9CwgU1PX7hdk-TiYqFrROxiyX2zGEOQUcptU7AaeJj1HzKuZwWoHYqukyia97cfObmfuLB7gR4zjjPytnezLuLmoIW2HABoCoBNcnO8F8b-MFWoxOZsUSd3Uq5mzFe32Q-PTTXXKX3UKtj4rHPNnib-mMbxiXNrJgKchE53kmyG/w420-h289/code2.png&quot; width=&quot;420&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h3 id=&quot;the-verdict-a-time-saving-power-tool&quot; style=&quot;text-align: justify;&quot;&gt;The Verdict: A Time-Saving Power Tool&lt;/h3&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;Despite these limitations, DreamFlow proves to be an excellent asset for swiftly building base applications, creating demos, or testing new concepts. It excels at saving substantial UI development time, allowing developers to focus on the more complex, custom aspects of their projects. DreamFlow isn’t just a tool; it’s a time-saving revolution for Flutter developers. Start your journey today!&lt;/p&gt;&lt;h3 id=&quot;the-verdict-a-time-saving-power-tool&quot; style=&quot;text-align: justify;&quot;&gt;Demo&lt;/h3&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe allowfullscreen=&quot;&quot; class=&quot;BLOG_video_class&quot; height=&quot;411&quot; src=&quot;https://www.youtube.com/embed/lQQvAbmVuA4&quot; width=&quot;494&quot; youtube-src-id=&quot;lQQvAbmVuA4&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;br /&gt;&lt;p style=&quot;text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.androidmads.info/feeds/3332413096289833362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.androidmads.info/2025/06/dreamflow-revolutionizing-flutter-app.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/3332413096289833362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/3332413096289833362'/><link rel='alternate' type='text/html' href='http://www.androidmads.info/2025/06/dreamflow-revolutionizing-flutter-app.html' title='DreamFlow: Revolutionizing Flutter App Development – A No-Code Solution for the Future'/><author><name>Mushtaq</name><uri>http://www.blogger.com/profile/16822127241692763805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKEFCCtDo5n17DHVEfgwG62HFo5Yeg58n9vcBqsJDBD7gHq8pwmmQEup1J3tI2swuLEyShlo2Na1TnZ-JZqqc2iDkZyY-o2XqrHAM5v2DNWa_YuUQvnCk-BDr-OLMwCQd_W_P54MuM4aRz_1lfPrcRqvJN3dDa63NHeOTb4R4ImT41TweqtYAjy5mCWvr4/s72-w640-h360-c/Copy%20of%20Follow%20for%20More.png" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952965959597039944.post-6395634267720316752</id><published>2025-04-20T22:39:00.000+05:30</published><updated>2025-04-20T22:39:49.339+05:30</updated><title type='text'>Hands-On with Android Studio Cloud: Streamlined Development in Your Browser</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhA7ofJ_9U7tzLubZQnJCNlq3wfwVXyk6lkOHD33ncGZjLhJjMD9G3-4B38SnPir2XAKIhmhxN7fMydk3lDyckBbv8Ebp7AR4JtkhwcpCsm3Xca05Vd0CrO7vQjU0_P4xH2tU0zlYeyM3JdHR-yc2Pq8_iHGryEwNgN8XCw9j8bmlqyiaj1HmATfDOV4C5j/s1600/ChatGPT%20Image%20Apr%2020,%202025,%2006_16_33%20PM-min.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1536&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhA7ofJ_9U7tzLubZQnJCNlq3wfwVXyk6lkOHD33ncGZjLhJjMD9G3-4B38SnPir2XAKIhmhxN7fMydk3lDyckBbv8Ebp7AR4JtkhwcpCsm3Xca05Vd0CrO7vQjU0_P4xH2tU0zlYeyM3JdHR-yc2Pq8_iHGryEwNgN8XCw9j8bmlqyiaj1HmATfDOV4C5j/s1600/ChatGPT%20Image%20Apr%2020,%202025,%2006_16_33%20PM-min.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h3 id=&quot;-what-is-android-studio-cloud-&quot;&gt;&lt;strong&gt;What is Android Studio Cloud?&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Android Studio Cloud is Google’s &lt;strong&gt;experimental browser-based IDE&lt;/strong&gt; that streams a full Linux VM running Android Studio to your web browser. Key features:  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbuKJrbNlfJDweYn5pZwfNT3Ch0Z_rA9XI2azI2U4sCyIoHhy9l55-NWQwfNeW2fbwKmX3XOVVh5VhQaWheveek__2hRunBLb5oU1IJWcD0Ree7kylOYWO8TduZAEzDkuJZ-KU7OJbXayQCjxcG9KNNludAgg6PPVV-Ft4kbSmz4oSUTt9AFGwfXyv-Uz0/s1920/try-asc-card.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;1224&quot; data-original-width=&quot;1920&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbuKJrbNlfJDweYn5pZwfNT3Ch0Z_rA9XI2azI2U4sCyIoHhy9l55-NWQwfNeW2fbwKmX3XOVVh5VhQaWheveek__2hRunBLb5oU1IJWcD0Ree7kylOYWO8TduZAEzDkuJZ-KU7OJbXayQCjxcG9KNNludAgg6PPVV-Ft4kbSmz4oSUTt9AFGwfXyv-Uz0/s600/try-asc-card.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/strong&gt;&lt;em&gt;Caption: The experimental Android Studio Cloud interface accessed via Firebase Studio&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🌐 &lt;strong&gt;Access Anywhere&lt;/strong&gt;: Develop Android apps without local installations  &lt;/li&gt;
&lt;li&gt;🛠️ &lt;strong&gt;Pre-Configured Workspaces&lt;/strong&gt;: Preloaded with Android SDK &amp;amp; IDE  &lt;/li&gt;
&lt;li&gt;🧪 &lt;strong&gt;Experimental Tech&lt;/strong&gt;: Tests streaming/cloud development workflows  &lt;/li&gt;
&lt;li&gt;🔄 &lt;strong&gt;Git Integration&lt;/strong&gt;: Import projects directly from GitHub/VCS  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCeyHMtN60Bp8F2JgpNrWcYKEgKKUvI8z43i8YKqMudFN7dq6DqbFSlNypZ-c8Mn8Km8-RDrjaxWoPn_On_9pxuBnQ8jGSOvwQsUeI9X2luUEokH25qUYJM52Z_bZNuwhSACc3sqUpgpJR-0_lJslmlTNVzk4iFqO5bMr6OdKzE9ZPn00pLgImaOF2qaR-/s1316/try-asc.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;1136&quot; data-original-width=&quot;1316&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCeyHMtN60Bp8F2JgpNrWcYKEgKKUvI8z43i8YKqMudFN7dq6DqbFSlNypZ-c8Mn8Km8-RDrjaxWoPn_On_9pxuBnQ8jGSOvwQsUeI9X2luUEokH25qUYJM52Z_bZNuwhSACc3sqUpgpJR-0_lJslmlTNVzk4iFqO5bMr6OdKzE9ZPn00pLgImaOF2qaR-/s600/try-asc.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/strong&gt;&lt;em&gt;Caption: Creating a new cloud workspace&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;-getting-started-&quot;&gt;&lt;strong&gt;Getting Started&lt;/strong&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Visit &lt;a href=&quot;https://developer.android.com/studio/preview/android-studio-cloud&quot;&gt;Android Studio Cloud&lt;/a&gt; via Firebase Studio  &lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;&amp;quot;Try Android Studio Cloud&amp;quot;&lt;/strong&gt;  &lt;/li&gt;
&lt;li&gt;Name your workspace and click &lt;strong&gt;Create&lt;/strong&gt;  &lt;/li&gt;
&lt;li&gt;Wait ~2-5 minutes for the Linux VM to initialize  &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyB5BMKfI8WDFlNYPtiiKpaCTBvQvtrhnGLr83NhT9hd80RI-QTo-AT3W_25tlk5jyL1vHEKK6wnaoc_J7rCDyLNL5g9lHoRHPoIF13KTAMMakCWsHNwJ4JjeSC0cE6Pio8kF_1HKKkO2aCO9iLHbYKPvMONZqEZnHX3WXLDJiCRNo1bWhbMVoNRWo5OPP/s879/gemini-image-attachment.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; height=&quot;600&quot; data-original-height=&quot;879&quot; data-original-width=&quot;503&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyB5BMKfI8WDFlNYPtiiKpaCTBvQvtrhnGLr83NhT9hd80RI-QTo-AT3W_25tlk5jyL1vHEKK6wnaoc_J7rCDyLNL5g9lHoRHPoIF13KTAMMakCWsHNwJ4JjeSC0cE6Pio8kF_1HKKkO2aCO9iLHbYKPvMONZqEZnHX3WXLDJiCRNo1bWhbMVoNRWo5OPP/s600/gemini-image-attachment.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/strong&gt;&lt;br&gt;&lt;em&gt;Caption: Web-based Android Studio with Gemini AI integration&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;-key-workflows-to-test-&quot;&gt;&lt;strong&gt;Key Workflows to Test&lt;/strong&gt;&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Emulator Deployment&lt;/strong&gt;:  &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use preconfigured Pixel 8a API 35 (slow first boot – wait 10+ mins)  &lt;/li&gt;
&lt;li&gt;&lt;em&gt;Alternative&lt;/em&gt;: Stream to physical devices via &lt;strong&gt;Firebase Device Streaming&lt;/strong&gt;  &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AI Development&lt;/strong&gt;:  &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Leverage Gemini for code completion/suggestions  &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Version Control&lt;/strong&gt;:  &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Import projects using &lt;strong&gt;Get from VCS&lt;/strong&gt;  &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sample Projects&lt;/strong&gt;:  &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Explore via &lt;em&gt;Import Android Code Sample&lt;/em&gt;  &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtuYGsQB6aFJAu063Hnl2IF4PWQsEUzWTf1CTYnljppuaSLAJ4JPQaD83KovkvQzgVgHz3x2xiKxIcXcrZEPU4NuJiVe2fwDoktLwl0cekbkS9R_uN4g3EcCOfdxgJ88ZWM-NNssPSHdAU2f98MGKqBSUHi2yjJM2tOjkvyW07-mheiIc3Eza_I-NN9wpL/s640/android-emulator-device-manager.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;220&quot; data-original-width=&quot;640&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtuYGsQB6aFJAu063Hnl2IF4PWQsEUzWTf1CTYnljppuaSLAJ4JPQaD83KovkvQzgVgHz3x2xiKxIcXcrZEPU4NuJiVe2fwDoktLwl0cekbkS9R_uN4g3EcCOfdxgJ88ZWM-NNssPSHdAU2f98MGKqBSUHi2yjJM2tOjkvyW07-mheiIc3Eza_I-NN9wpL/s600/android-emulator-device-manager.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/strong&gt;&lt;em&gt;Caption: Recommended emulator configurations for better performance&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;-current-limitations-july-2024-&quot;&gt;&lt;strong&gt;Current Limitations (July 2024)&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;🐢 &lt;strong&gt;Slow Emulators&lt;/strong&gt;: Nested virtualization causes lag  &lt;/li&gt;
&lt;li&gt;⌨️ &lt;strong&gt;Linux Key Mapping Required&lt;/strong&gt;&lt;br/&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgF4VYnzAaY5YUvwxbg0SSYXggs65uGNrCcWvuwyGHS1RLIs-zDiJyVopqa_VMK7aYPRZRiB8hsQ5kYPhyxJJ1o_aXmyEwcCUbVNQGgKMu8Qia_YXXi19yCRHHwQ-231mmeYIWWOqh9CXC6SzDggT7C8Aznn9KznzGA6aVpjAa4JloGYZU9I2vL7y0hMCEg/s641/choose-password-for-keyring.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;517&quot; data-original-width=&quot;641&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgF4VYnzAaY5YUvwxbg0SSYXggs65uGNrCcWvuwyGHS1RLIs-zDiJyVopqa_VMK7aYPRZRiB8hsQ5kYPhyxJJ1o_aXmyEwcCUbVNQGgKMu8Qia_YXXi19yCRHHwQ-231mmeYIWWOqh9CXC6SzDggT7C8Aznn9KznzGA6aVpjAa4JloGYZU9I2vL7y0hMCEg/s600/choose-password-for-keyring.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;🔒 &lt;strong&gt;2FA Restrictions&lt;/strong&gt;: Physical security keys unsupported  &lt;/li&gt;
&lt;li&gt;🚫 &lt;strong&gt;No Local Device Deployment&lt;/strong&gt;  &lt;/li&gt;
&lt;li&gt;⚠️ Frequent &amp;quot;Choose password for new keyring&amp;quot; popups – click &lt;em&gt;Cancel&lt;/em&gt;  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitZ3Omp4XgoHmMAtnTcPspDcFEdG7tfsGxxK9g8bEJwsqpmsA0Od2S5qGN4rO6dc4RxUE0fztoSmtXdhXivxWfh70jcKNe8V0I-2Lpc-gB3HBg1beB4zhd8l4chp6zn3o3xQCvIHcRbLVtCIGCSC4wqLK8qv9XIUJWou-0UvoIXILqg59LW87LDs0zpUOz/s641/linux-software-updater.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;134&quot; data-original-width=&quot;641&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitZ3Omp4XgoHmMAtnTcPspDcFEdG7tfsGxxK9g8bEJwsqpmsA0Od2S5qGN4rO6dc4RxUE0fztoSmtXdhXivxWfh70jcKNe8V0I-2Lpc-gB3HBg1beB4zhd8l4chp6zn3o3xQCvIHcRbLVtCIGCSC4wqLK8qv9XIUJWou-0UvoIXILqg59LW87LDs0zpUOz/s600/linux-software-updater.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/strong&gt;&lt;em&gt;Caption: Common popups to ignore during testing&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;-why-try-it-&quot;&gt;&lt;strong&gt;Why Try It?&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Test cutting-edge cloud development infrastructure  &lt;/li&gt;
&lt;li&gt;Evaluate browser-based IDE performance  &lt;/li&gt;
&lt;li&gt;Provide feedback to shape future Android tools  &lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-conclusion-&quot;&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;While not yet production-ready, Android Studio Cloud offers a fascinating glimpse into browser-first Android development. Developers interested in cloud IDEs or remote workflows should experiment with it – but keep expectations low for now.  &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Try it here&lt;/strong&gt;: &lt;a href=&quot;https://developer.android.com/studio/preview/android-studio-cloud&quot;&gt;Android Studio Cloud Preview&lt;/a&gt;  &lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.androidmads.info/feeds/6395634267720316752/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.androidmads.info/2025/04/hands-on-with-android-studio-cloud.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/6395634267720316752'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/6395634267720316752'/><link rel='alternate' type='text/html' href='http://www.androidmads.info/2025/04/hands-on-with-android-studio-cloud.html' title='Hands-On with Android Studio Cloud: Streamlined Development in Your Browser'/><author><name>Mushtaq</name><uri>http://www.blogger.com/profile/16822127241692763805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhA7ofJ_9U7tzLubZQnJCNlq3wfwVXyk6lkOHD33ncGZjLhJjMD9G3-4B38SnPir2XAKIhmhxN7fMydk3lDyckBbv8Ebp7AR4JtkhwcpCsm3Xca05Vd0CrO7vQjU0_P4xH2tU0zlYeyM3JdHR-yc2Pq8_iHGryEwNgN8XCw9j8bmlqyiaj1HmATfDOV4C5j/s72-c/ChatGPT%20Image%20Apr%2020,%202025,%2006_16_33%20PM-min.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952965959597039944.post-8058910320171520553</id><published>2025-03-02T22:14:00.002+05:30</published><updated>2025-03-27T12:06:16.825+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET MAUI Tutorial"/><category scheme="http://www.blogger.com/atom/ns#" term="API Usage in MAUI"/><category scheme="http://www.blogger.com/atom/ns#" term="Cross-Platform Dev"/><category scheme="http://www.blogger.com/atom/ns#" term="CRUD Ops in .NET MAUI"/><category scheme="http://www.blogger.com/atom/ns#" term="HttpClient Example"/><category scheme="http://www.blogger.com/atom/ns#" term="HttpClient in .NET MAUI"/><category scheme="http://www.blogger.com/atom/ns#" term="JSON in C#"/><category scheme="http://www.blogger.com/atom/ns#" term="Mobile App Dev"/><category scheme="http://www.blogger.com/atom/ns#" term="REST API Integration"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio 2022"/><title type='text'>Consuming HTTP Calls in .NET MAUI Using HttpClient</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7BlN6qsyKnOcjdWNq5szj8IGiNCiIKm5yPged3euOObeJsCsMkodULT7hAI80guGqUSAqnt7Ifl1ViCoe_2RG4kAA-IHBOrz9bjfFuICUm4i9_F7SB_2_sWXcpiJpZxlFXOVjFSOpumXNBUiLppvP24l0nz9CfjyCQH5uOzCLaRLAHa8fkgmzw0nyV_oK/s600/Untitled.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;353&quot; data-original-width=&quot;600&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7BlN6qsyKnOcjdWNq5szj8IGiNCiIKm5yPged3euOObeJsCsMkodULT7hAI80guGqUSAqnt7Ifl1ViCoe_2RG4kAA-IHBOrz9bjfFuICUm4i9_F7SB_2_sWXcpiJpZxlFXOVjFSOpumXNBUiLppvP24l0nz9CfjyCQH5uOzCLaRLAHa8fkgmzw0nyV_oK/s600/Untitled.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;.NET MAUI (Multi-platform App UI) is a modern framework that enables developers to create cross-platform applications for Android, iOS, macOS, and Windows using a single codebase. In most applications, consuming data from REST APIs is a fundamental requirement. .NET provides the &lt;code&gt;HttpClient&lt;/code&gt; class, a powerful and versatile way to handle HTTP requests and responses.&lt;/p&gt;
&lt;p&gt;In this article, we will demonstrate how to use &lt;code&gt;HttpClient&lt;/code&gt; in a .NET MAUI application to perform GET, POST, PUT, and DELETE operations. We will also display the results using a simple UI, showing responses in JSON format via alerts.&lt;/p&gt;
&lt;h2 id=&quot;prerequisites&quot;&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;Before you start, ensure you have the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Development Environment&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;.NET 7.0 SDK installed on your machine.&lt;/li&gt;
&lt;li&gt;Visual Studio 2022 with the .NET MAUI workload installed.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Basic Knowledge&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Familiarity with C# and .NET programming.&lt;/li&gt;
&lt;li&gt;Basic understanding of REST APIs.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sample API&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For this tutorial, we will use the placeholder API available at &lt;a href=&quot;https://jsonplaceholder.typicode.com/&quot;&gt;JSONPlaceholder&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;steps-to-implement-http-operations-in-net-maui&quot;&gt;Steps to Implement HTTP Operations in .NET MAUI&lt;/h2&gt;
&lt;h3 id=&quot;1-create-a-net-maui-project&quot;&gt;1. Create a .NET MAUI Project&lt;/h3&gt;
&lt;p&gt;Open Visual Studio and create a new .NET MAUI App project. Name it &lt;code&gt;HttpClientSample&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;2-define-a-model-class&quot;&gt;2. Define a Model Class&lt;/h3&gt;
&lt;p&gt;Create a &lt;code&gt;Post&lt;/code&gt; class to represent the data structure returned by the API.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-csharp&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;Post&lt;/span&gt;
{
    &lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;int&lt;/span&gt; Id { &lt;span class=&quot;hljs-keyword&quot;&gt;get&lt;/span&gt;; &lt;span class=&quot;hljs-keyword&quot;&gt;set&lt;/span&gt;; }
    &lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; Title { &lt;span class=&quot;hljs-keyword&quot;&gt;get&lt;/span&gt;; &lt;span class=&quot;hljs-keyword&quot;&gt;set&lt;/span&gt;; }
    &lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; Body { &lt;span class=&quot;hljs-keyword&quot;&gt;get&lt;/span&gt;; &lt;span class=&quot;hljs-keyword&quot;&gt;set&lt;/span&gt;; }
    &lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;int&lt;/span&gt; UserId { &lt;span class=&quot;hljs-keyword&quot;&gt;get&lt;/span&gt;; &lt;span class=&quot;hljs-keyword&quot;&gt;set&lt;/span&gt;; }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;3-create-an-api-service-class&quot;&gt;3. Create an API Service Class&lt;/h3&gt;
&lt;p&gt;Encapsulate the logic for making HTTP requests in a reusable service class.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;ApiService.cs&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-csharp&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;using&lt;/span&gt; System.Net.Http;
&lt;span class=&quot;hljs-keyword&quot;&gt;using&lt;/span&gt; System.Text;
&lt;span class=&quot;hljs-keyword&quot;&gt;using&lt;/span&gt; System.Text.Json;
&lt;span class=&quot;hljs-keyword&quot;&gt;using&lt;/span&gt; System.Text.Json.Serialization;

&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;ApiService&lt;/span&gt;
{
    &lt;span class=&quot;hljs-keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;readonly&lt;/span&gt; HttpClient _httpClient;
    &lt;span class=&quot;hljs-keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;readonly&lt;/span&gt; JsonSerializerOptions _jsonOptions;

    &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;ApiService&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;&lt;/span&gt;)
    &lt;/span&gt;{
        _httpClient = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; HttpClient
        {
            BaseAddress = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; Uri(&lt;span class=&quot;hljs-string&quot;&gt;&quot;https://jsonplaceholder.typicode.com/&quot;&lt;/span&gt;)
        };
        _jsonOptions = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; JsonSerializerOptions
        {
            PropertyNameCaseInsensitive = &lt;span class=&quot;hljs-literal&quot;&gt;true&lt;/span&gt;,
            DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
            WriteIndented = &lt;span class=&quot;hljs-literal&quot;&gt;true&lt;/span&gt;
        };
    }

    &lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;async&lt;/span&gt; Task&amp;lt;List&amp;lt;Post&amp;gt;&amp;gt; GetPostsAsync()
    {
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; response = &lt;span class=&quot;hljs-keyword&quot;&gt;await&lt;/span&gt; _httpClient.GetAsync(&lt;span class=&quot;hljs-string&quot;&gt;&quot;posts&quot;&lt;/span&gt;);
        response.EnsureSuccessStatusCode();
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; json = &lt;span class=&quot;hljs-keyword&quot;&gt;await&lt;/span&gt; response.Content.ReadAsStringAsync();
        &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;/span&gt; JsonSerializer.Deserialize&amp;lt;List&amp;lt;Post&amp;gt;&amp;gt;(json, _jsonOptions);
    }

    &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;async&lt;/span&gt; Task&amp;lt;Post&amp;gt; &lt;span class=&quot;hljs-title&quot;&gt;CreatePostAsync&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;Post newPost&lt;/span&gt;)
    &lt;/span&gt;{
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; jsonContent = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; StringContent(JsonSerializer.Serialize(newPost, _jsonOptions), Encoding.UTF8, &lt;span class=&quot;hljs-string&quot;&gt;&quot;application/json&quot;&lt;/span&gt;);
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; response = &lt;span class=&quot;hljs-keyword&quot;&gt;await&lt;/span&gt; _httpClient.PostAsync(&lt;span class=&quot;hljs-string&quot;&gt;&quot;posts&quot;&lt;/span&gt;, jsonContent);
        response.EnsureSuccessStatusCode();
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; json = &lt;span class=&quot;hljs-keyword&quot;&gt;await&lt;/span&gt; response.Content.ReadAsStringAsync();
        &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;/span&gt; JsonSerializer.Deserialize&amp;lt;Post&amp;gt;(json, _jsonOptions);
    }

    &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;async&lt;/span&gt; Task&amp;lt;Post&amp;gt; &lt;span class=&quot;hljs-title&quot;&gt;UpdatePostAsync&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;int&lt;/span&gt; id, Post updatedPost&lt;/span&gt;)
    &lt;/span&gt;{
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; jsonContent = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; StringContent(JsonSerializer.Serialize(updatedPost, _jsonOptions), Encoding.UTF8, &lt;span class=&quot;hljs-string&quot;&gt;&quot;application/json&quot;&lt;/span&gt;);
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; response = &lt;span class=&quot;hljs-keyword&quot;&gt;await&lt;/span&gt; _httpClient.PutAsync(&lt;span class=&quot;hljs-string&quot;&gt;$&quot;posts/&lt;span class=&quot;hljs-subst&quot;&gt;{id}&lt;/span&gt;&quot;&lt;/span&gt;, jsonContent);
        response.EnsureSuccessStatusCode();
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; json = &lt;span class=&quot;hljs-keyword&quot;&gt;await&lt;/span&gt; response.Content.ReadAsStringAsync();
        &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;/span&gt; JsonSerializer.Deserialize&amp;lt;Post&amp;gt;(json, _jsonOptions);
    }

    &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;async&lt;/span&gt; Task&amp;lt;&lt;span class=&quot;hljs-keyword&quot;&gt;bool&lt;/span&gt;&amp;gt; &lt;span class=&quot;hljs-title&quot;&gt;DeletePostAsync&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;int&lt;/span&gt; id&lt;/span&gt;)
    &lt;/span&gt;{
        &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; response = &lt;span class=&quot;hljs-keyword&quot;&gt;await&lt;/span&gt; _httpClient.DeleteAsync(&lt;span class=&quot;hljs-string&quot;&gt;$&quot;posts/&lt;span class=&quot;hljs-subst&quot;&gt;{id}&lt;/span&gt;&quot;&lt;/span&gt;);
        &lt;span class=&quot;hljs-keyword&quot;&gt;return&lt;/span&gt; response.IsSuccessStatusCode;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;4-build-the-user-interface&quot;&gt;4. Build the User Interface&lt;/h3&gt;
&lt;p&gt;Design the UI in &lt;code&gt;MainPage.xaml&lt;/code&gt; with buttons for each HTTP operation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;MainPage.xaml&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-xml&quot;&gt;&amp;lt;ContentPage xmlns=&lt;span class=&quot;hljs-string&quot;&gt;&quot;http://schemas.microsoft.com/dotnet/2021/maui&quot;&lt;/span&gt;
             xmlns:x=&lt;span class=&quot;hljs-string&quot;&gt;&quot;http://schemas.microsoft.com/winfx/2009/xaml&quot;&lt;/span&gt;
             x:Class=&lt;span class=&quot;hljs-string&quot;&gt;&quot;HttpClientSample.MainPage&quot;&lt;/span&gt;
             Title=&lt;span class=&quot;hljs-string&quot;&gt;&quot;HTTP Client Demo&quot;&lt;/span&gt;&amp;gt;

    &amp;lt;StackLayout Padding=&lt;span class=&quot;hljs-string&quot;&gt;&quot;20&quot;&lt;/span&gt; Spacing=&lt;span class=&quot;hljs-string&quot;&gt;&quot;15&quot;&lt;/span&gt;&amp;gt;
        &amp;lt;Label Text=&lt;span class=&quot;hljs-string&quot;&gt;&quot;HTTP Operations&quot;&lt;/span&gt;
               FontSize=&lt;span class=&quot;hljs-string&quot;&gt;&quot;24&quot;&lt;/span&gt;
               HorizontalOptions=&lt;span class=&quot;hljs-string&quot;&gt;&quot;Center&quot;&lt;/span&gt; /&amp;gt;

        &amp;lt;Button Text=&lt;span class=&quot;hljs-string&quot;&gt;&quot;&lt;span class=&quot;hljs-keyword&quot;&gt;GET&lt;/span&gt; Data&quot;&lt;/span&gt;
                Clicked=&lt;span class=&quot;hljs-string&quot;&gt;&quot;OnGetClicked&quot;&lt;/span&gt; /&amp;gt;

        &amp;lt;Button Text=&lt;span class=&quot;hljs-string&quot;&gt;&quot;&lt;span class=&quot;hljs-keyword&quot;&gt;POST&lt;/span&gt; Data&quot;&lt;/span&gt;
                Clicked=&lt;span class=&quot;hljs-string&quot;&gt;&quot;OnPostClicked&quot;&lt;/span&gt; /&amp;gt;

        &amp;lt;Button Text=&lt;span class=&quot;hljs-string&quot;&gt;&quot;&lt;span class=&quot;hljs-keyword&quot;&gt;PUT&lt;/span&gt; Data&quot;&lt;/span&gt;
                Clicked=&lt;span class=&quot;hljs-string&quot;&gt;&quot;OnPutClicked&quot;&lt;/span&gt; /&amp;gt;

        &amp;lt;Button Text=&lt;span class=&quot;hljs-string&quot;&gt;&quot;&lt;span class=&quot;hljs-keyword&quot;&gt;DELETE&lt;/span&gt; Data&quot;&lt;/span&gt;
                Clicked=&lt;span class=&quot;hljs-string&quot;&gt;&quot;OnDeleteClicked&quot;&lt;/span&gt; /&amp;gt;
    &amp;lt;/StackLayout&amp;gt;
&amp;lt;/ContentPage&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;5-implement-button-event-handlers&quot;&gt;5. Implement Button Event Handlers&lt;/h3&gt;
&lt;p&gt;Add event handlers in the &lt;code&gt;MainPage.xaml.cs&lt;/code&gt; to invoke the respective methods from the &lt;code&gt;ApiService&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;MainPage.xaml.cs&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-csharp&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;using&lt;/span&gt; System.Text.Json;

&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;partial&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;MainPage&lt;/span&gt; : &lt;span class=&quot;hljs-title&quot;&gt;ContentPage&lt;/span&gt;
{
    &lt;span class=&quot;hljs-keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;readonly&lt;/span&gt; ApiService _apiService;

    &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;MainPage&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;&lt;/span&gt;)
    &lt;/span&gt;{
        InitializeComponent();
        _apiService = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; ApiService();
    }

    &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;OnGetClicked&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;object&lt;/span&gt; sender, EventArgs e&lt;/span&gt;)
    &lt;/span&gt;{
        &lt;span class=&quot;hljs-keyword&quot;&gt;try&lt;/span&gt;
        {
            &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; posts = &lt;span class=&quot;hljs-keyword&quot;&gt;await&lt;/span&gt; _apiService.GetPostsAsync();
            &lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; json = JsonSerializer.Serialize(posts, &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; JsonSerializerOptions { WriteIndented = &lt;span class=&quot;hljs-literal&quot;&gt;true&lt;/span&gt; });
            &lt;span class=&quot;hljs-keyword&quot;&gt;await&lt;/span&gt; DisplayAlert(&lt;span class=&quot;hljs-string&quot;&gt;&quot;GET Response&quot;&lt;/span&gt;, json, &lt;span class=&quot;hljs-string&quot;&gt;&quot;OK&quot;&lt;/span&gt;);
        }
        &lt;span class=&quot;hljs-keyword&quot;&gt;catch&lt;/span&gt; (Exception ex)
        {
            &lt;span class=&quot;hljs-keyword&quot;&gt;await&lt;/span&gt; DisplayAlert(&lt;span class=&quot;hljs-string&quot;&gt;&quot;Error&quot;&lt;/span&gt;, ex.Message, &lt;span class=&quot;hljs-string&quot;&gt;&quot;OK&quot;&lt;/span&gt;);
        }
    }

    &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;OnPostClicked&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;object&lt;/span&gt; sender, EventArgs e&lt;/span&gt;)
    &lt;/span&gt;{
        &lt;span class=&quot;hljs-keyword&quot;&gt;try&lt;/span&gt;
        {
            &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; newPost = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; Post { Title = &lt;span class=&quot;hljs-string&quot;&gt;&quot;New Post&quot;&lt;/span&gt;, Body = &lt;span class=&quot;hljs-string&quot;&gt;&quot;This is a new post body&quot;&lt;/span&gt;, UserId = &lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt; };
            &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; createdPost = &lt;span class=&quot;hljs-keyword&quot;&gt;await&lt;/span&gt; _apiService.CreatePostAsync(newPost);
            &lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; json = JsonSerializer.Serialize(createdPost, &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; JsonSerializerOptions { WriteIndented = &lt;span class=&quot;hljs-literal&quot;&gt;true&lt;/span&gt; });
            &lt;span class=&quot;hljs-keyword&quot;&gt;await&lt;/span&gt; DisplayAlert(&lt;span class=&quot;hljs-string&quot;&gt;&quot;POST Response&quot;&lt;/span&gt;, json, &lt;span class=&quot;hljs-string&quot;&gt;&quot;OK&quot;&lt;/span&gt;);
        }
        &lt;span class=&quot;hljs-keyword&quot;&gt;catch&lt;/span&gt; (Exception ex)
        {
            &lt;span class=&quot;hljs-keyword&quot;&gt;await&lt;/span&gt; DisplayAlert(&lt;span class=&quot;hljs-string&quot;&gt;&quot;Error&quot;&lt;/span&gt;, ex.Message, &lt;span class=&quot;hljs-string&quot;&gt;&quot;OK&quot;&lt;/span&gt;);
        }
    }

    &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;OnPutClicked&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;object&lt;/span&gt; sender, EventArgs e&lt;/span&gt;)
    &lt;/span&gt;{
        &lt;span class=&quot;hljs-keyword&quot;&gt;try&lt;/span&gt;
        {
            &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; updatedPost = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; Post { Title = &lt;span class=&quot;hljs-string&quot;&gt;&quot;Updated Title&quot;&lt;/span&gt;, Body = &lt;span class=&quot;hljs-string&quot;&gt;&quot;Updated Body&quot;&lt;/span&gt;, UserId = &lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt; };
            &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; updatedData = &lt;span class=&quot;hljs-keyword&quot;&gt;await&lt;/span&gt; _apiService.UpdatePostAsync(&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;, updatedPost);
            &lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; json = JsonSerializer.Serialize(updatedData, &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; JsonSerializerOptions { WriteIndented = &lt;span class=&quot;hljs-literal&quot;&gt;true&lt;/span&gt; });
            &lt;span class=&quot;hljs-keyword&quot;&gt;await&lt;/span&gt; DisplayAlert(&lt;span class=&quot;hljs-string&quot;&gt;&quot;PUT Response&quot;&lt;/span&gt;, json, &lt;span class=&quot;hljs-string&quot;&gt;&quot;OK&quot;&lt;/span&gt;);
        }
        &lt;span class=&quot;hljs-keyword&quot;&gt;catch&lt;/span&gt; (Exception ex)
        {
            &lt;span class=&quot;hljs-keyword&quot;&gt;await&lt;/span&gt; DisplayAlert(&lt;span class=&quot;hljs-string&quot;&gt;&quot;Error&quot;&lt;/span&gt;, ex.Message, &lt;span class=&quot;hljs-string&quot;&gt;&quot;OK&quot;&lt;/span&gt;);
        }
    }

    &lt;span class=&quot;hljs-function&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;hljs-title&quot;&gt;OnDeleteClicked&lt;/span&gt;(&lt;span class=&quot;hljs-params&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;object&lt;/span&gt; sender, EventArgs e&lt;/span&gt;)
    &lt;/span&gt;{
        &lt;span class=&quot;hljs-keyword&quot;&gt;try&lt;/span&gt;
        {
            &lt;span class=&quot;hljs-keyword&quot;&gt;var&lt;/span&gt; isDeleted = &lt;span class=&quot;hljs-keyword&quot;&gt;await&lt;/span&gt; _apiService.DeletePostAsync(&lt;span class=&quot;hljs-number&quot;&gt;1&lt;/span&gt;);
            &lt;span class=&quot;hljs-keyword&quot;&gt;string&lt;/span&gt; message = isDeleted ? &lt;span class=&quot;hljs-string&quot;&gt;&quot;Post deleted successfully.&quot;&lt;/span&gt; : &lt;span class=&quot;hljs-string&quot;&gt;&quot;Failed to delete the post.&quot;&lt;/span&gt;;
            &lt;span class=&quot;hljs-keyword&quot;&gt;await&lt;/span&gt; DisplayAlert(&lt;span class=&quot;hljs-string&quot;&gt;&quot;DELETE Response&quot;&lt;/span&gt;, message, &lt;span class=&quot;hljs-string&quot;&gt;&quot;OK&quot;&lt;/span&gt;);
        }
        &lt;span class=&quot;hljs-keyword&quot;&gt;catch&lt;/span&gt; (Exception ex)
        {
            &lt;span class=&quot;hljs-keyword&quot;&gt;await&lt;/span&gt; DisplayAlert(&lt;span class=&quot;hljs-string&quot;&gt;&quot;Error&quot;&lt;/span&gt;, ex.Message, &lt;span class=&quot;hljs-string&quot;&gt;&quot;OK&quot;&lt;/span&gt;);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;In this article, we explored how to use &lt;code&gt;HttpClient&lt;/code&gt; in a .NET MAUI application to perform CRUD operations on a REST API. We created a reusable service class for HTTP requests, designed a simple UI, and displayed results in JSON format using alerts. This implementation is a starting point for integrating REST APIs into your .NET MAUI applications.&lt;/p&gt;
&lt;p&gt;Feel free to extend this example by adding features such as error handling, logging, and more advanced UI elements. Happy coding!&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.androidmads.info/feeds/8058910320171520553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.androidmads.info/2025/03/consuming-http-calls-in-net-maui-using.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/8058910320171520553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/8058910320171520553'/><link rel='alternate' type='text/html' href='http://www.androidmads.info/2025/03/consuming-http-calls-in-net-maui-using.html' title='Consuming HTTP Calls in .NET MAUI Using HttpClient'/><author><name>Mushtaq</name><uri>http://www.blogger.com/profile/16822127241692763805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7BlN6qsyKnOcjdWNq5szj8IGiNCiIKm5yPged3euOObeJsCsMkodULT7hAI80guGqUSAqnt7Ifl1ViCoe_2RG4kAA-IHBOrz9bjfFuICUm4i9_F7SB_2_sWXcpiJpZxlFXOVjFSOpumXNBUiLppvP24l0nz9CfjyCQH5uOzCLaRLAHa8fkgmzw0nyV_oK/s72-c/Untitled.png" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952965959597039944.post-2022250382843843668</id><published>2024-11-24T14:09:00.000+05:30</published><updated>2024-11-24T14:09:36.773+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="android 15"/><category scheme="http://www.blogger.com/atom/ns#" term="android 16"/><category scheme="http://www.blogger.com/atom/ns#" term="notes on android versions"/><title type='text'>Exploring Android 15 and the First Developer Preview of Android 16</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9N-6Hudum-MnoKZQYMI327KqLx8OyrCH7-E8BKmMP8qclgjO6oUGK5uXXmzef7kUOc8YbPoF_iw20nr2Wov9GXixhhWUq_mk2T0ZJsuqP8TI1ShqoNP-U5i6YFJ44kUC17_RWK9UHOI9fvB2U7Gg1c56KyqAXRq3ajbus6dQtXoVFfOzaQ-OhFLJiVAGn/s1024/DALL%C2%B7E%202024-11-24%2014.01.22%20-%20A%20modern%20and%20sleek%20digital%20banner%20for%20a%20blog%20titled%20&#39;Exploring%20Android%2015%20and%20the%20First%20Developer%20Preview%20of%20Android%2016&#39;.%20The%20design%20features%20vibrant%20.webp&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1024&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9N-6Hudum-MnoKZQYMI327KqLx8OyrCH7-E8BKmMP8qclgjO6oUGK5uXXmzef7kUOc8YbPoF_iw20nr2Wov9GXixhhWUq_mk2T0ZJsuqP8TI1ShqoNP-U5i6YFJ44kUC17_RWK9UHOI9fvB2U7Gg1c56KyqAXRq3ajbus6dQtXoVFfOzaQ-OhFLJiVAGn/s320/DALL%C2%B7E%202024-11-24%2014.01.22%20-%20A%20modern%20and%20sleek%20digital%20banner%20for%20a%20blog%20titled%20&#39;Exploring%20Android%2015%20and%20the%20First%20Developer%20Preview%20of%20Android%2016&#39;.%20The%20design%20features%20vibrant%20.webp&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;h2 id=&quot;-android-15-revolutionizing-mobile-experiences-&quot;&gt;&lt;strong&gt;Android 15: Revolutionizing Mobile Experiences&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Android 15, codenamed &lt;em&gt;Vanilla Ice Cream&lt;/em&gt;, was a significant leap forward in mobile OS innovation. Released earlier this year, it focused on delivering enhanced security, communication, and usability features for both everyday users and enterprise environments.  &lt;/p&gt;
&lt;h3 id=&quot;key-features-in-android-15-&quot;&gt;Key Features in Android 15:&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Private Space&lt;/strong&gt;:&lt;br /&gt;Android 15 introduced &lt;em&gt;Private Space&lt;/em&gt;, a virtual sandbox within the OS. This feature allows users to store sensitive files, apps, and data separately from the main environment, ensuring confidentiality. It&#39;s especially useful for professionals managing personal and work accounts on the same device.  &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Enhanced Satellite Messaging&lt;/strong&gt;:&lt;br /&gt;Taking connectivity to the next level, Android 15 supports satellite communication. While initially limited to premium devices, this feature ensures users remain connected even in remote or offline areas, marking a step forward in global communication capabilities.  &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Partial Screen Recording&lt;/strong&gt;:&lt;br /&gt;This innovative tool lets users record specific sections of their screen instead of the entire display. Ideal for sharing specific app workflows or sensitive content without revealing everything on-screen, it became a favorite among tech influencers and educators.  &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Advanced Security Measures&lt;/strong&gt;:&lt;br /&gt;Android 15 strengthened device security by including monthly security patches, encrypted backup improvements, and app activity transparency, ensuring user safety against modern digital threats.  &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Performance Optimizations&lt;/strong&gt;:&lt;br /&gt;With improved energy efficiency and reduced background process consumption, Android 15 extended battery life and boosted performance, especially on mid-range devices.  &lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;-android-16-developer-preview-a-glimpse-into-the-future-&quot;&gt;&lt;strong&gt;Android 16 Developer Preview: A Glimpse into the Future&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Android 16 aims to build on Android 15’s solid foundation with groundbreaking improvements and cutting-edge technology. The first developer preview teases several enhancements that cater to developers and end-users alike.  &lt;/p&gt;
&lt;h3 id=&quot;what-s-new-in-android-16-&quot;&gt;What’s New in Android 16?&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;AI-Enhanced Personalization&lt;/strong&gt;:&lt;br /&gt;Android 16 integrates artificial intelligence deeply into the OS to adapt to individual usage patterns. From predictive app suggestions to dynamic interface adjustments, AI creates a more intuitive user experience.  &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cross-Device Harmony&lt;/strong&gt;:&lt;br /&gt;Google is focusing on seamless cross-device operations, making it easier to transition between Android-powered smartphones, tablets, and wearable devices. Developers can leverage new APIs to build apps that offer consistent experiences across device ecosystems.  &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sustainability and Efficiency&lt;/strong&gt;:&lt;br /&gt;The latest version takes sustainability seriously by introducing features that optimize energy consumption. Enhanced battery management tools and smarter resource allocation extend device life and reduce carbon footprints.  &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Advanced Accessibility Features&lt;/strong&gt;:&lt;br /&gt;Accessibility tools are getting a major upgrade, ensuring inclusivity for all users. Enhanced voice control, real-time transcription, and assistive gesture navigation are some of the highlights aimed at supporting diverse user needs.  &lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Developer-Centric Updates&lt;/strong&gt;:&lt;br /&gt;Android 16 offers new tools to developers, including improvements to Jetpack Compose for creating responsive UI designs, updated debugging tools, and extended support for foldable and large-screen devices.  &lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;why-developers-should-explore-the-preview-&quot;&gt;Why Developers Should Explore the Preview:&lt;/h3&gt;
&lt;p&gt;The first developer preview is a goldmine for app creators, allowing them to adapt their apps early to leverage Android 16&#39;s new capabilities. From API testing to performance benchmarking, this is a pivotal moment for the developer community to innovate alongside the OS.  &lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;-conclusion-&quot;&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Android 15 and Android 16 demonstrate Google’s unwavering commitment to enhancing the mobile experience. While Android 15 brought essential upgrades in security, connectivity, and usability, Android 16 pushes boundaries with AI-driven innovation and sustainability. Developers and users can look forward to a transformative era in mobile technology as these advancements become mainstream.  &lt;/p&gt;
&lt;p&gt;For developers, now is the time to dive into the Android 16 Developer Preview and explore its offerings to craft the next generation of apps that define the Android experience.  &lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;-conclusion-&quot;&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://developer.android.com/about/versions/15/summary#:~:text=Android%2015%20introduces%20Low%20Light,the%20night%20mode%20camera%20extension.&amp;amp;text=Android%2015%20adds%20extensions%20for,its%20algorithms%20on%20supported%20devices.&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Android 15 Features&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://developer.android.com/about/versions/16&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Android 16 Features&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://chatgpt.com/&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Image Generated using Chat GPT &amp;amp; DALL-E&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.androidmads.info/feeds/2022250382843843668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.androidmads.info/2024/11/exploring-android-15-and-first.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/2022250382843843668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/2022250382843843668'/><link rel='alternate' type='text/html' href='http://www.androidmads.info/2024/11/exploring-android-15-and-first.html' title='Exploring Android 15 and the First Developer Preview of Android 16'/><author><name>Mushtaq</name><uri>http://www.blogger.com/profile/16822127241692763805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9N-6Hudum-MnoKZQYMI327KqLx8OyrCH7-E8BKmMP8qclgjO6oUGK5uXXmzef7kUOc8YbPoF_iw20nr2Wov9GXixhhWUq_mk2T0ZJsuqP8TI1ShqoNP-U5i6YFJ44kUC17_RWK9UHOI9fvB2U7Gg1c56KyqAXRq3ajbus6dQtXoVFfOzaQ-OhFLJiVAGn/s72-c/DALL%C2%B7E%202024-11-24%2014.01.22%20-%20A%20modern%20and%20sleek%20digital%20banner%20for%20a%20blog%20titled%20&#39;Exploring%20Android%2015%20and%20the%20First%20Developer%20Preview%20of%20Android%2016&#39;.%20The%20design%20features%20vibrant%20.webp" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952965959597039944.post-2085897129658574005</id><published>2024-11-10T16:56:00.002+05:30</published><updated>2024-11-10T16:57:43.781+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term=".net maui"/><category scheme="http://www.blogger.com/atom/ns#" term=".net maui community toolkit"/><category scheme="http://www.blogger.com/atom/ns#" term="syncfusion open source"/><title type='text'>.NET MAUI Welcomes Syncfusion Open-source Contributions</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhLLkCoPXAHSLG4sk2A_QGZFqOlzY_u1udmNhmhbVp579sPsBJHseaqfMr4hsgVCoB5zQ_dk1tj5Fy6Oat349dgDwCTetrOI5VpRzs1mRhXNP5Y1B7kzvft6yM7UEcHYKCiGn7Fx66K-AY-E3Rw-OW27JAaN9Ewmmvf4w691P09TogGdlMD-CrYq4i7LQW/s1131/Untitled.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;864&quot; data-original-width=&quot;1131&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhLLkCoPXAHSLG4sk2A_QGZFqOlzY_u1udmNhmhbVp579sPsBJHseaqfMr4hsgVCoB5zQ_dk1tj5Fy6Oat349dgDwCTetrOI5VpRzs1mRhXNP5Y1B7kzvft6yM7UEcHYKCiGn7Fx66K-AY-E3Rw-OW27JAaN9Ewmmvf4w691P09TogGdlMD-CrYq4i7LQW/s600/Untitled.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p style=&quot;text-align:justify&quot;&gt;In an exciting development for .NET MAUI, Syncfusion has made significant open-source contributions by releasing 14 essential UI components for free, empowering developers to enhance their applications. These components, found on GitHub and accessible via NuGet, include popular elements like Shimmer and offer capabilities for improved interactivity and visual appeal in .NET MAUI projects. This collaboration underscores Syncfusion&amp;rsquo;s commitment to the .NET ecosystem and signals a robust future for cross-platform development.&lt;/p&gt;
&lt;br /&gt;
&lt;p style=&quot;text-align:justify&quot;&gt;Syncfusion&amp;rsquo;s contributions align with Microsoft&amp;rsquo;s broader strategy to expand .NET MAUI&amp;rsquo;s open-source potential, paving the way for additional community involvement and accelerating the platform&amp;rsquo;s maturity. A noteworthy part of this collaboration is the ongoing support from Syncfusion for any potential issues and their active involvement in refining the developer experience.&lt;/p&gt;
&lt;br /&gt;
&lt;p style=&quot;text-align:justify&quot;&gt;In addition to these components, Microsoft and Syncfusion are working on introducing a new .NET MAUI project template with .NET 9. This template will come preconfigured with Syncfusion&amp;rsquo;s UI tools, alongside other third-party toolkits, to streamline project setup for developers. This streamlined experience will make it easier for developers to create well-structured, cross-platform applications that perform seamlessly on multiple devices.&lt;/p&gt;
&lt;br /&gt;
&lt;p style=&quot;text-align:justify&quot;&gt;Overall, this partnership demonstrates how .NET MAUI is evolving with rich community-driven contributions and shows promising advancements for developers aiming to build sophisticated, cross-platform mobile and desktop applications.&lt;/p&gt;
&lt;br /&gt;
&lt;p style=&quot;text-align:justify&quot;&gt;For more details, you can read the original blog post &lt;a href=&quot;https://devblogs.microsoft.com/dotnet/dotnet-maui-welcomes-syncfusion-open-source-contributions/&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.androidmads.info/feeds/2085897129658574005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.androidmads.info/2024/11/net-maui-welcomes-syncfusion-open.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/2085897129658574005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/2085897129658574005'/><link rel='alternate' type='text/html' href='http://www.androidmads.info/2024/11/net-maui-welcomes-syncfusion-open.html' title='.NET MAUI Welcomes Syncfusion Open-source Contributions'/><author><name>Mushtaq</name><uri>http://www.blogger.com/profile/16822127241692763805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhLLkCoPXAHSLG4sk2A_QGZFqOlzY_u1udmNhmhbVp579sPsBJHseaqfMr4hsgVCoB5zQ_dk1tj5Fy6Oat349dgDwCTetrOI5VpRzs1mRhXNP5Y1B7kzvft6yM7UEcHYKCiGn7Fx66K-AY-E3Rw-OW27JAaN9Ewmmvf4w691P09TogGdlMD-CrYq4i7LQW/s72-c/Untitled.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952965959597039944.post-2888248159762227386</id><published>2024-11-06T16:25:00.003+05:30</published><updated>2024-11-06T17:05:03.819+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term=".net maui"/><category scheme="http://www.blogger.com/atom/ns#" term=".NET MAUI Development"/><category scheme="http://www.blogger.com/atom/ns#" term="custom fonts"/><title type='text'>How to Apply Custom Fonts in .NET MAUI</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCBcUtVukOqS0G8uZTUasoVUrX_nuIGhqomeXv0Yh5Acnhc4eRc5fejxTKwEQPgwEJhdDGvnVzn2jqVAPR-flfy_A7sY7avhQvEvTB-0u88MNCwEZBvbCbFZrdMMUDJtCX5oDwFN68f68uOoOOTlSbxAauNbiTJIzXS2Voa6DaDC8xtrxnTnnecmgZTGiL/s800/5718455_2994714-ai.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;100%&quot; data-original-height=&quot;326&quot; data-original-width=&quot;800&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCBcUtVukOqS0G8uZTUasoVUrX_nuIGhqomeXv0Yh5Acnhc4eRc5fejxTKwEQPgwEJhdDGvnVzn2jqVAPR-flfy_A7sY7avhQvEvTB-0u88MNCwEZBvbCbFZrdMMUDJtCX5oDwFN68f68uOoOOTlSbxAauNbiTJIzXS2Voa6DaDC8xtrxnTnnecmgZTGiL/s600/5718455_2994714-ai.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p style=&quot;text-align:justify;&quot;&gt;
  Adding custom fonts in .NET MAUI (Multi-platform App UI) is a powerful way to
  improve your app’s design and branding, making it stand out to users across
  all platforms, including Android, iOS, Windows, and macOS. In this guide,
  we’ll go through each step required to integrate custom fonts into your .NET
  MAUI app effectively, helping you achieve a polished, professional look.
&lt;/p&gt;
&lt;br/&gt;
&lt;h2 id=&quot;why-use-custom-fonts-in-net-maui-&quot;&gt;Why Use Custom Fonts in .NET MAUI?&lt;/h2&gt;
&lt;p&gt;Custom fonts provide numerous benefits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Brand Consistency&lt;/strong&gt;: Reinforce your brand identity by using fonts that align with your style.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Improved Readability&lt;/strong&gt;: Choose fonts that enhance the readability and aesthetics of your app, improving the user experience.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unique Design&lt;/strong&gt;: Differentiate your app from others by using custom fonts that reflect the purpose and personality of your app.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align:justify;&quot;&gt;Adding custom fonts in .NET MAUI is simple and can significantly impact your app&amp;#39;s overall design.&lt;/p&gt;
&lt;br/&gt;
&lt;h2 id=&quot;steps-to-add-custom-fonts-in-net-maui&quot;&gt;Steps to Add Custom Fonts in .NET MAUI&lt;/h2&gt;
&lt;p style=&quot;text-align:justify;&quot;&gt;This tutorial breaks down the process into three essential steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;1. Add the Font File to Your .NET MAUI Project&lt;/li&gt;
&lt;li&gt;2. Register the Font in &lt;code&gt;MauiProgram.cs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;3. Use the Custom Font in Your XAML or C# Code&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;text-align:justify;&quot;&gt;Let’s go through each step in detail.&lt;/p&gt;
&lt;br/&gt;
&lt;h3 id=&quot;step-1-add-the-font-file-to-your-net-maui-project&quot;&gt;Step 1: Add the Font File to Your .NET MAUI Project&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Download the Font&lt;/strong&gt;: Find a &lt;code&gt;.ttf&lt;/code&gt; (TrueType Font) or &lt;code&gt;.otf&lt;/code&gt; (OpenType Font) file of your desired font.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Place the Font in the Correct Folder&lt;/strong&gt;: Drag and drop the font file into the &lt;code&gt;Resources/Fonts&lt;/code&gt; folder in your .NET MAUI project. This step is crucial because .NET MAUI loads custom fonts directly from this folder.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Example&lt;/strong&gt;: If your font file is named &lt;code&gt;MyCustomFont.ttf&lt;/code&gt;, place it in &lt;code&gt;Resources/Fonts&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;br/&gt;
&lt;h3 id=&quot;step-2-register-the-font-in-mauiprogram-cs-&quot;&gt;Step 2: Register the Font in &lt;code&gt;MauiProgram.cs&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;After adding the font file to your project, the next step is to register it in &lt;code&gt;MauiProgram.cs&lt;/code&gt; to ensure .NET MAUI recognizes it.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Open &lt;code&gt;MauiProgram.cs&lt;/code&gt;&lt;/strong&gt; in your project.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Locate the &lt;code&gt;ConfigureFonts&lt;/code&gt; Method&lt;/strong&gt;: Inside the &lt;code&gt;CreateMauiApp&lt;/code&gt; method, find &lt;code&gt;ConfigureFonts&lt;/code&gt; and add a new line to register your font file. Here’s how it should look:
&lt;pre&gt;&lt;code class=&quot;lang-csharp&quot;&gt;&lt;span class=&quot;hljs-keyword&quot;&gt;builder.ConfigureFonts(fonts &lt;/span&gt;=&amp;gt;
{
    fonts.&lt;span class=&quot;hljs-keyword&quot;&gt;AddFont(&quot;MyCustomFont.ttf&quot;, &lt;/span&gt;&lt;span class=&quot;hljs-string&quot;&gt;&quot;MyCustomFontAlias&quot;&lt;/span&gt;)&lt;span class=&quot;hljs-comment&quot;&gt;;&lt;/span&gt;
})&lt;span class=&quot;hljs-comment&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;MyCustomFont.ttf&amp;quot;&lt;/code&gt; is the font file name located in &lt;code&gt;Resources/Fonts&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;MyCustomFontAlias&amp;quot;&lt;/code&gt; is the alias name for the font, which you will use to apply the font in XAML or C#.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br/&gt;
&lt;h3 id=&quot;step-3-use-the-custom-font-in-xaml-or-c&quot;&gt;Step 3: Use the Custom Font in XAML or C#&lt;/h3&gt;
&lt;p&gt;With the font registered, it’s now ready to use in your UI.&lt;/p&gt;&lt;br/&gt;
&lt;h4 id=&quot;using-the-font-in-xaml&quot;&gt;Using the Font in XAML&lt;/h4&gt;
&lt;p&gt;To apply the custom font to a control in XAML, use the &lt;code&gt;FontFamily&lt;/code&gt; property with the alias you created.&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-xml&quot;&gt;&amp;lt;&lt;span class=&quot;hljs-keyword&quot;&gt;Label&lt;/span&gt; &lt;span class=&quot;hljs-keyword&quot;&gt;Text&lt;/span&gt;=&lt;span class=&quot;hljs-string&quot;&gt;&quot;Hello, .NET MAUI!&quot;&lt;/span&gt;
       &lt;span class=&quot;hljs-keyword&quot;&gt;FontFamily&lt;/span&gt;=&lt;span class=&quot;hljs-string&quot;&gt;&quot;MyCustomFontAlias&quot;&lt;/span&gt;
       &lt;span class=&quot;hljs-keyword&quot;&gt;FontSize&lt;/span&gt;=&lt;span class=&quot;hljs-string&quot;&gt;&quot;24&quot;&lt;/span&gt;
       TextColor=&lt;span class=&quot;hljs-string&quot;&gt;&quot;Black&quot;&lt;/span&gt;/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&quot;using-the-font-in-c&quot;&gt;Using the Font in C#&lt;/h4&gt;
&lt;p&gt;If you prefer to set the font programmatically in C#, you can apply it like this:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;lang-csharp&quot;&gt;Label &lt;span class=&quot;hljs-attr&quot;&gt;label&lt;/span&gt; = new Label
{
    &lt;span class=&quot;hljs-attr&quot;&gt;Text&lt;/span&gt; = &lt;span class=&quot;hljs-string&quot;&gt;&quot;Hello, .NET MAUI!&quot;&lt;/span&gt;,
    &lt;span class=&quot;hljs-attr&quot;&gt;FontFamily&lt;/span&gt; = &lt;span class=&quot;hljs-string&quot;&gt;&quot;MyCustomFontAlias&quot;&lt;/span&gt;,
    &lt;span class=&quot;hljs-attr&quot;&gt;FontSize&lt;/span&gt; = &lt;span class=&quot;hljs-number&quot;&gt;24&lt;/span&gt;,
    &lt;span class=&quot;hljs-attr&quot;&gt;TextColor&lt;/span&gt; = Colors.Black
};
&lt;/code&gt;&lt;/pre&gt;
&lt;br/&gt;
&lt;h3 id=&quot;tips-for-successful-font-integration&quot;&gt;Tips for Successful Font Integration&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Check File Names&lt;/strong&gt;: Ensure that the font file name in &lt;code&gt;MauiProgram.cs&lt;/code&gt; matches the actual file name, including case sensitivity.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Confirm Licensing&lt;/strong&gt;: Verify the font’s licensing if you’re using it commercially to avoid copyright issues.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compatibility&lt;/strong&gt;: Test the font across all supported platforms to make sure it appears correctly on Android, iOS, Windows, and macOS.&lt;/li&gt;
&lt;/ul&gt;
&lt;br/&gt;
&lt;h3 id=&quot;benefits-of-using-custom-fonts-in-net-maui&quot;&gt;Benefits of Using Custom Fonts in .NET MAUI&lt;/h3&gt;
&lt;p style=&quot;text-align:justify;&quot;&gt;Custom fonts bring a range of benefits:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Consistent Appearance&lt;/strong&gt;: Once set up, the font will appear consistently across all platforms.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Enhanced User Experience&lt;/strong&gt;: A well-chosen font can make your app more user-friendly and visually appealing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cross-Platform Design&lt;/strong&gt;: MAUI makes it easy to use custom fonts without additional platform-specific coding, simplifying cross-platform development.&lt;/li&gt;
&lt;/ul&gt;
&lt;br/&gt;
&lt;h3 id=&quot;wrapping-up&quot;&gt;Wrapping Up&lt;/h3&gt;
&lt;p style=&quot;text-align:justify;&quot;&gt;Custom fonts can transform the look and feel of your .NET MAUI app, making it more engaging and unique. By following these steps, you’ll be able to easily add and apply custom fonts across all pages in your app. This customization not only enhances user experience but also boosts your app&amp;#39;s professionalism and appeal. With .NET MAUI, you can bring your app&amp;#39;s design to life with fonts that make an impression! Start experimenting with different fonts and see how they can elevate your app&amp;#39;s style.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.androidmads.info/feeds/2888248159762227386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.androidmads.info/2024/11/how-to-apply-custom-fonts-in-net-maui.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/2888248159762227386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/2888248159762227386'/><link rel='alternate' type='text/html' href='http://www.androidmads.info/2024/11/how-to-apply-custom-fonts-in-net-maui.html' title='How to Apply Custom Fonts in .NET MAUI'/><author><name>Mushtaq</name><uri>http://www.blogger.com/profile/16822127241692763805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCBcUtVukOqS0G8uZTUasoVUrX_nuIGhqomeXv0Yh5Acnhc4eRc5fejxTKwEQPgwEJhdDGvnVzn2jqVAPR-flfy_A7sY7avhQvEvTB-0u88MNCwEZBvbCbFZrdMMUDJtCX5oDwFN68f68uOoOOTlSbxAauNbiTJIzXS2Voa6DaDC8xtrxnTnnecmgZTGiL/s72-c/5718455_2994714-ai.png" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952965959597039944.post-2163353802731525035</id><published>2024-09-09T00:44:00.001+05:30</published><updated>2024-09-09T00:48:40.619+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="AndroidDevelopment"/><category scheme="http://www.blogger.com/atom/ns#" term="OpenSource"/><category scheme="http://www.blogger.com/atom/ns#" term="QRCode"/><category scheme="http://www.blogger.com/atom/ns#" term="SoftwareUpdatec"/><category scheme="http://www.blogger.com/atom/ns#" term="TechCommunity"/><title type='text'>🚀 Exciting Update for the QR Generator Plugin! 🚀</title><content type='html'>&lt;p&gt;I&#39;m thrilled to announce that a new version of the QRGenerator plugin has just been released! 🎉&lt;/p&gt;&lt;br/&gt;
&lt;p&gt;This update brings several enhancements and new features to make your QR code generation even more efficient and user-friendly. &lt;/p&gt;&lt;br/&gt;&lt;p&gt;Whether you’re developing for Android or looking to integrate QR code functionality into your applications, this update is designed to streamline your workflow and improve performance.&lt;/p&gt;
&lt;br/&gt;
Key Features&lt;br/&gt;
🔹 QR code color can be changed dynamically&lt;br/&gt;
🔹 Android X support is included&lt;br/&gt;
🔹 Minimum support from version 14 is included&lt;br/&gt;
🔹 Margin of the QR code can be controlled&lt;br/&gt;&lt;br/&gt;

You can explore the full release notes and get the updated version at my &lt;a href=&quot;https://github.com/androidmads/QRGenerator&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;QRGenerator GitHub Repository&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;

A big thank you to the community for your ongoing support and feedback. Your contributions and suggestions help make QRGenerator better with each update.&lt;br/&gt;&lt;br/&gt;

Feel free to try out the new version and let me know your thoughts or any issues you encounter. Happy coding! 💻✨

</content><link rel='replies' type='application/atom+xml' href='http://www.androidmads.info/feeds/2163353802731525035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.androidmads.info/2024/09/exciting-update-for-qr-generator-plugin.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/2163353802731525035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/2163353802731525035'/><link rel='alternate' type='text/html' href='http://www.androidmads.info/2024/09/exciting-update-for-qr-generator-plugin.html' title='🚀 Exciting Update for the QR Generator Plugin! 🚀'/><author><name>Mushtaq</name><uri>http://www.blogger.com/profile/16822127241692763805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952965959597039944.post-2720441788269080562</id><published>2024-06-24T23:25:00.003+05:30</published><updated>2024-06-25T00:18:45.820+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term=".net maui"/><category scheme="http://www.blogger.com/atom/ns#" term=".net maui community toolkit"/><category scheme="http://www.blogger.com/atom/ns#" term=".NET MAUI Development"/><category scheme="http://www.blogger.com/atom/ns#" term="longpress"/><title type='text'>Detect Long Press in .NET MAUI App using TouchBehavior</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhErmga8tBvG7CPZ8L_Cp9kamFw2U-H3PVwV5DShyphenhyphen6zV8lIiGJRG5HxP_75Ywvoe0NCLzwdxj2DsDlR4GqwVw6qbNFNd0yOI_SUNLS8UhrqS7foENN0MQDrdstXGugq2qYtp3j9Jxul2OVWHXYBJ9WXj-13rVLHQh7v0bCHR10PnsteKkvF6GlWoLRHsFb5/s1920/Net%20MAUI%20-%20Long%20Click%20Event.jpg&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;1080&quot; data-original-width=&quot;1920&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhErmga8tBvG7CPZ8L_Cp9kamFw2U-H3PVwV5DShyphenhyphen6zV8lIiGJRG5HxP_75Ywvoe0NCLzwdxj2DsDlR4GqwVw6qbNFNd0yOI_SUNLS8UhrqS7foENN0MQDrdstXGugq2qYtp3j9Jxul2OVWHXYBJ9WXj-13rVLHQh7v0bCHR10PnsteKkvF6GlWoLRHsFb5/s600/Net%20MAUI%20-%20Long%20Click%20Event.jpg&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h2 style=&quot;text-align: start&quot;&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
   In this tutorial, we will show you how to implement a long press gesture in .NET MAUI using TouchBehavior from the MAUI Community Toolkit. Learn how to trigger long press events or commands with parameters and see a live example of updating a button image on a successful long press.
&lt;/p&gt;
&lt;br /&gt;
&lt;h2&gt;Quick Links:&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#project_setup&quot;&gt;Project Setup&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#install&quot;&gt;Install Plugin&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#implementation&quot;&gt;Implementation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#downloadcode&quot;&gt;Download Code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h2 id=&quot;project_setup&quot;&gt;Project Setup:&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;
    Launch Visual Studio 2022, and in the start window click Create a new
    project to create a new project.
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzOv8pOBUAlBsbGt1AkkUl-bM-vVE4bQ6pb7UGwnDzkayKqlCDB7tkOnX2lXoKa3JjWWm0Kx52jQq51BCH-VftKYDSUVnMlxpy4UTdfuPKAhq6gYu9Otfl8aN96LT_cWeSjpLhZQAuwP6mmZ2t5tSekobapcDCwn8ejil3NWndhUYn355tjZZFUPF1ug/s1200/new-solution.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzOv8pOBUAlBsbGt1AkkUl-bM-vVE4bQ6pb7UGwnDzkayKqlCDB7tkOnX2lXoKa3JjWWm0Kx52jQq51BCH-VftKYDSUVnMlxpy4UTdfuPKAhq6gYu9Otfl8aN96LT_cWeSjpLhZQAuwP6mmZ2t5tSekobapcDCwn8ejil3NWndhUYn355tjZZFUPF1ug/s600/new-solution.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    In the Create a new project window, select MAUI in the All project types
    drop-down, select the .NET MAUI App template, and click the Next button:
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvmHzDB9roM54eTITNn98vmLEd3_ZKeEV7UQS8NV-ZcXOn8cA5NgSXwkzplOCCnh7s3or8dnrrERvDFrS1cflCbjWYOEVSYQS1FtLNTm1czQ5HV_HQGaIG7HfVieP-QG3BS3h78SMiG22Tn2FN-P0k-XH_dRN-YkKZzen1ksjS6VTU0BXaaScdq9FKOw/s1200/new-project.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvmHzDB9roM54eTITNn98vmLEd3_ZKeEV7UQS8NV-ZcXOn8cA5NgSXwkzplOCCnh7s3or8dnrrERvDFrS1cflCbjWYOEVSYQS1FtLNTm1czQ5HV_HQGaIG7HfVieP-QG3BS3h78SMiG22Tn2FN-P0k-XH_dRN-YkKZzen1ksjS6VTU0BXaaScdq9FKOw/s600/new-project.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    In the configure your new project window, name your project, choose a
    suitable location for it, and click the Next button:
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj--GmLz3WxLN4qtknFhozRtTBwwkz_AxvI-hCelj855eeUb0_QVNVT3RuMUkY3EpWvNJYRCRsx_sH6T_JE7hG3HnqMXBd8sT4OQAhrk2q1MGNYZ7TOYlnYdR-gK3nHLklT1_P3bOboirDaQgMSzsoXYi6jyaUjMQPeA7CCm8dnkFv7fgjB8sS1lNoNjw/s1200/configure-project.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj--GmLz3WxLN4qtknFhozRtTBwwkz_AxvI-hCelj855eeUb0_QVNVT3RuMUkY3EpWvNJYRCRsx_sH6T_JE7hG3HnqMXBd8sT4OQAhrk2q1MGNYZ7TOYlnYdR-gK3nHLklT1_P3bOboirDaQgMSzsoXYi6jyaUjMQPeA7CCm8dnkFv7fgjB8sS1lNoNjw/s600/configure-project.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    In the Additional information window, click the Create button:
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPN3YEOazTEnIaGk2OVCpSPBkpESp9mkVtM-9HOHrYCl6eB6PS_dHrtO3W118Up_gYQM253gSg-vUY2bVK1vGgx5Pqy56T050OPIUlAUJmpUJD_fYYDK_nXAzkOZNmzSAvaQuKxNPQ7Yu9fNna4u8TqnWJ5l0vB3u9_HXdCwMkTwEN8EhYeEdIwTP6Kw/s1200/additional-information.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPN3YEOazTEnIaGk2OVCpSPBkpESp9mkVtM-9HOHrYCl6eB6PS_dHrtO3W118Up_gYQM253gSg-vUY2bVK1vGgx5Pqy56T050OPIUlAUJmpUJD_fYYDK_nXAzkOZNmzSAvaQuKxNPQ7Yu9fNna4u8TqnWJ5l0vB3u9_HXdCwMkTwEN8EhYeEdIwTP6Kw/s600/additional-information.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    Once the project is created, we can able to see the Android, iOS, Windows
    and other running options in the toolbar. Press the emulator or run button
    to build and run the app
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibxmNp8IWrlvt_8CrP026ph80zvYG_tAnoFqfRZNd-v0Yp35ROFtaRhh4WVAOJxkHwJZ-qfd1ehN7dH7ZwKX99mtk_T88R0QXyTN2XOmFhp8AYSd1duDs_VQMJcy7F5Mhi3gcrNAOyDqZOTHCctZTKaiBJJZXOVda8IfDr7OxpTGL1OYBKGY9tqF3QhQ/s1117/android-emulator-button.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;79&quot;
          data-original-width=&quot;1117&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibxmNp8IWrlvt_8CrP026ph80zvYG_tAnoFqfRZNd-v0Yp35ROFtaRhh4WVAOJxkHwJZ-qfd1ehN7dH7ZwKX99mtk_T88R0QXyTN2XOmFhp8AYSd1duDs_VQMJcy7F5Mhi3gcrNAOyDqZOTHCctZTKaiBJJZXOVda8IfDr7OxpTGL1OYBKGY9tqF3QhQ/s600/android-emulator-button.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;install&quot;&gt;Install Plugin&lt;/h2&gt;
&lt;p&gt;We need to install the &quot;CommunityToolkit.MAUI&quot; by searching in nuget manager and click &quot;Install&quot; to install the plugin&lt;/p&gt;

&lt;h2 id=&quot;implementation&quot;&gt;Implementation&lt;/h2&gt;
&lt;p&gt;Here, we will add the long press behaviour to the image control and you can use as per your need:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add the below code in the xaml file to have wire-up the event or command between the designer and view model. Add Namespace
&lt;pre&gt;&lt;code class=&quot;lang-csharp&quot;&gt;xmlns:toolkit=&quot;http://schemas.microsoft.com/dotnet/2022/maui/toolkit&quot;&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;Add the following code in your element. In this example, I used Image control &lt;pre&gt;&lt;code class=&quot;lang-csharp&quot;&gt;&amp;lt;Image.Behaviors&amp;gt;
      &amp;lt;toolkit:TouchBehavior LongPressCommand=&quot;LongPressCommand&quot; LongPressDuration=&quot;2000&quot; /&amp;gt;
&amp;lt;/Image.Behaviors&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;The event code will be look like the below&lt;pre&gt;&lt;code class=&quot;lang-csharp&quot;&gt;LongPressCommand = new Command(() =&gt;
{
	count++;

	if (count == 1)
		CounterBtn.Text = $&quot;Long pressed {count} time&quot;;
	else
		CounterBtn.Text = $&quot;Long pressed {count} times&quot;;

	SemanticScreenReader.Announce(CounterBtn.Text);
});&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br/&gt;
&lt;h2 id=&quot;downloadcode&quot;&gt;Download Code:&lt;/h2&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
  You can download the code from
  &lt;a href=&quot;https://github.com/androidmads/MauiLongPressSample&quot;&gt;GitHub&lt;/a&gt;. If you
  have any doubts, feel free to post a comment. If you liked this article, and
  it is useful to you, do like, share the article &amp;amp; star the repository on
  &lt;a href=&quot;https://github.com/androidmads/MauiLongPressSample&quot;&gt;GitHub&lt;/a&gt;.
&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
  &lt;a href=&quot;https://github.com/androidmads/MauiLongPressSample&quot; target=&quot;_blank&quot;&gt;
    &lt;button class=&quot;github&quot; style=&quot;padding-left: 10px; padding-right: 10px;&quot;&gt;
      &lt;i class=&quot;fa fa-github&quot;&gt;&lt;/i&gt; Download From GitHub
    &lt;/button&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;a
  href=&quot;https://twitter.com/share?ref_src=twsrc%5Etfw&quot;
  class=&quot;twitter-share-button&quot;
  data-show-count=&quot;false&quot;
  &gt;Tweet&lt;/a
&gt;
&lt;script
  async
  src=&quot;https://platform.twitter.com/widgets.js&quot;
  charset=&quot;utf-8&quot;
&gt;&lt;/script&gt;

&lt;h2 id=&quot;video&quot;&gt;Video Tutorial and Demo:&lt;/h2&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe class=&quot;BLOG_video_class&quot; allowfullscreen=&quot;&quot; youtube-src-id=&quot;2oZCreJ9r3Y&quot; width=&quot;600&quot; height=&quot;498&quot; src=&quot;https://www.youtube.com/embed/2oZCreJ9r3Y&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.androidmads.info/feeds/2720441788269080562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.androidmads.info/2024/06/detect-long-press-in-your-net-maui-app.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/2720441788269080562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/2720441788269080562'/><link rel='alternate' type='text/html' href='http://www.androidmads.info/2024/06/detect-long-press-in-your-net-maui-app.html' title='Detect Long Press in .NET MAUI App using TouchBehavior'/><author><name>Mushtaq</name><uri>http://www.blogger.com/profile/16822127241692763805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhErmga8tBvG7CPZ8L_Cp9kamFw2U-H3PVwV5DShyphenhyphen6zV8lIiGJRG5HxP_75Ywvoe0NCLzwdxj2DsDlR4GqwVw6qbNFNd0yOI_SUNLS8UhrqS7foENN0MQDrdstXGugq2qYtp3j9Jxul2OVWHXYBJ9WXj-13rVLHQh7v0bCHR10PnsteKkvF6GlWoLRHsFb5/s72-c/Net%20MAUI%20-%20Long%20Click%20Event.jpg" height="72" width="72"/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952965959597039944.post-816890405885836337</id><published>2024-04-29T01:09:00.002+05:30</published><updated>2024-04-29T01:09:48.692+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term=".net maui"/><category scheme="http://www.blogger.com/atom/ns#" term=".NET MAUI Development"/><category scheme="http://www.blogger.com/atom/ns#" term="handlers"/><title type='text'>.NET MAUI - Handlers</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoh25ngvWgJabioiX3ogexUPL1qaK_0AECkoLT_6qwMNqwT-uIoxwreV9LnDekECsqOy98hY_hPf1xluqlOHA_vgPNZKPze0XqPSUtLlV1TcNEhl3WjY1PxSDK_Nb5L-J-kMHsAVyHNb4Ljm54g2qYx3C6qLtcr7si8Grxfwpcf55fqPJOYkOkF7MeQQon/s680/post_banner_handlers.jpg&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;400&quot; data-original-width=&quot;680&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoh25ngvWgJabioiX3ogexUPL1qaK_0AECkoLT_6qwMNqwT-uIoxwreV9LnDekECsqOy98hY_hPf1xluqlOHA_vgPNZKPze0XqPSUtLlV1TcNEhl3WjY1PxSDK_Nb5L-J-kMHsAVyHNb4Ljm54g2qYx3C6qLtcr7si8Grxfwpcf55fqPJOYkOkF7MeQQon/s600/post_banner_handlers.jpg&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h2 style=&quot;text-align: start&quot;&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
  This article explores the concept of .NET MAUI handlers and how they are used in development. Handlers act as a bridge between virtual views and native views on each platform. In simpler terms, they are responsible for instantiating the underlying native view and mapping the cross-platform control API to the native view API. This essentially allows developers to use the same code across different platforms without worrying about the underlying implementation details.&lt;/p&gt;&lt;br/&gt;&lt;p&gt;
Key concepts of handlers include property mappers and command mappers. These mappers define what actions are taken when a property or command changes. Handlers also support lifecycle events that allow developers to perform actions when a handler is created or changed.
&lt;/p&gt;
&lt;br /&gt;
&lt;h2&gt;Quick Links:&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#project_setup&quot;&gt;Project Setup&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#implementation&quot;&gt;Implementation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#downloadcode&quot;&gt;Download Code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h2 id=&quot;project_setup&quot;&gt;Project Setup:&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;
    Launch Visual Studio 2022, and in the start window click Create a new
    project to create a new project.
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzOv8pOBUAlBsbGt1AkkUl-bM-vVE4bQ6pb7UGwnDzkayKqlCDB7tkOnX2lXoKa3JjWWm0Kx52jQq51BCH-VftKYDSUVnMlxpy4UTdfuPKAhq6gYu9Otfl8aN96LT_cWeSjpLhZQAuwP6mmZ2t5tSekobapcDCwn8ejil3NWndhUYn355tjZZFUPF1ug/s1200/new-solution.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzOv8pOBUAlBsbGt1AkkUl-bM-vVE4bQ6pb7UGwnDzkayKqlCDB7tkOnX2lXoKa3JjWWm0Kx52jQq51BCH-VftKYDSUVnMlxpy4UTdfuPKAhq6gYu9Otfl8aN96LT_cWeSjpLhZQAuwP6mmZ2t5tSekobapcDCwn8ejil3NWndhUYn355tjZZFUPF1ug/s600/new-solution.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    In the Create a new project window, select MAUI in the All project types
    drop-down, select the .NET MAUI App template, and click the Next button:
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvmHzDB9roM54eTITNn98vmLEd3_ZKeEV7UQS8NV-ZcXOn8cA5NgSXwkzplOCCnh7s3or8dnrrERvDFrS1cflCbjWYOEVSYQS1FtLNTm1czQ5HV_HQGaIG7HfVieP-QG3BS3h78SMiG22Tn2FN-P0k-XH_dRN-YkKZzen1ksjS6VTU0BXaaScdq9FKOw/s1200/new-project.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvmHzDB9roM54eTITNn98vmLEd3_ZKeEV7UQS8NV-ZcXOn8cA5NgSXwkzplOCCnh7s3or8dnrrERvDFrS1cflCbjWYOEVSYQS1FtLNTm1czQ5HV_HQGaIG7HfVieP-QG3BS3h78SMiG22Tn2FN-P0k-XH_dRN-YkKZzen1ksjS6VTU0BXaaScdq9FKOw/s600/new-project.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    In the configure your new project window, name your project, choose a
    suitable location for it, and click the Next button:
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj--GmLz3WxLN4qtknFhozRtTBwwkz_AxvI-hCelj855eeUb0_QVNVT3RuMUkY3EpWvNJYRCRsx_sH6T_JE7hG3HnqMXBd8sT4OQAhrk2q1MGNYZ7TOYlnYdR-gK3nHLklT1_P3bOboirDaQgMSzsoXYi6jyaUjMQPeA7CCm8dnkFv7fgjB8sS1lNoNjw/s1200/configure-project.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj--GmLz3WxLN4qtknFhozRtTBwwkz_AxvI-hCelj855eeUb0_QVNVT3RuMUkY3EpWvNJYRCRsx_sH6T_JE7hG3HnqMXBd8sT4OQAhrk2q1MGNYZ7TOYlnYdR-gK3nHLklT1_P3bOboirDaQgMSzsoXYi6jyaUjMQPeA7CCm8dnkFv7fgjB8sS1lNoNjw/s600/configure-project.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    In the Additional information window, click the Create button:
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPN3YEOazTEnIaGk2OVCpSPBkpESp9mkVtM-9HOHrYCl6eB6PS_dHrtO3W118Up_gYQM253gSg-vUY2bVK1vGgx5Pqy56T050OPIUlAUJmpUJD_fYYDK_nXAzkOZNmzSAvaQuKxNPQ7Yu9fNna4u8TqnWJ5l0vB3u9_HXdCwMkTwEN8EhYeEdIwTP6Kw/s1200/additional-information.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPN3YEOazTEnIaGk2OVCpSPBkpESp9mkVtM-9HOHrYCl6eB6PS_dHrtO3W118Up_gYQM253gSg-vUY2bVK1vGgx5Pqy56T050OPIUlAUJmpUJD_fYYDK_nXAzkOZNmzSAvaQuKxNPQ7Yu9fNna4u8TqnWJ5l0vB3u9_HXdCwMkTwEN8EhYeEdIwTP6Kw/s600/additional-information.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    Once the project is created, we can able to see the Android, iOS, Windows
    and other running options in the toolbar. Press the emulator or run button
    to build and run the app
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibxmNp8IWrlvt_8CrP026ph80zvYG_tAnoFqfRZNd-v0Yp35ROFtaRhh4WVAOJxkHwJZ-qfd1ehN7dH7ZwKX99mtk_T88R0QXyTN2XOmFhp8AYSd1duDs_VQMJcy7F5Mhi3gcrNAOyDqZOTHCctZTKaiBJJZXOVda8IfDr7OxpTGL1OYBKGY9tqF3QhQ/s1117/android-emulator-button.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;79&quot;
          data-original-width=&quot;1117&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibxmNp8IWrlvt_8CrP026ph80zvYG_tAnoFqfRZNd-v0Yp35ROFtaRhh4WVAOJxkHwJZ-qfd1ehN7dH7ZwKX99mtk_T88R0QXyTN2XOmFhp8AYSd1duDs_VQMJcy7F5Mhi3gcrNAOyDqZOTHCctZTKaiBJJZXOVda8IfDr7OxpTGL1OYBKGY9tqF3QhQ/s600/android-emulator-button.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;implementation&quot;&gt;Implementation&lt;/h2&gt;
&lt;p&gt;Here&amp;#39;s a simple example for a .NET MAUI Entry handler:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Conditional Compilation:&lt;/strong&gt;&amp;nbsp;&lt;code&gt;#if ANDROID&lt;/code&gt; and &lt;code&gt;#endif&lt;/code&gt; are conditional compilation directives. They ensure the code within them is only compiled for the Android platform and similar to other platforms as well.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Entry Handler Customization:&lt;/strong&gt; &amp;nbsp;This code customizes the appearance of &lt;code&gt;Entry&lt;/code&gt; controls with the name &amp;quot;BorderlessEntry&amp;quot;.
&lt;pre&gt;&lt;code class=&quot;lang-csharp&quot;&gt;Microsoft.Maui.Handlers.EntryHandler.Mapper.AppendToMapping(&lt;span class=&quot;hljs-string&quot;&gt;&quot;BorderlessEntry&quot;&lt;/span&gt;, (handler, view) =&amp;gt;
{
    &lt;span class=&quot;hljs-keyword&quot;&gt;if&lt;/span&gt; (view &lt;span class=&quot;hljs-keyword&quot;&gt;is&lt;/span&gt; Entry)
    {
        &lt;span class=&quot;hljs-meta&quot;&gt;#&lt;span class=&quot;hljs-meta-keyword&quot;&gt;if&lt;/span&gt; ANDROID&lt;/span&gt;
        handler.PlatformView.SetBackgroundColor(Microsoft.Maui.Graphics.Colors.Beige.ToAndroid());
        &lt;span class=&quot;hljs-meta&quot;&gt;#&lt;span class=&quot;hljs-meta-keyword&quot;&gt;elif&lt;/span&gt; IOS&lt;/span&gt;
        handler.PlatformView.BorderStyle = UIKit.UITextBorderStyle.None;
        &lt;span class=&quot;hljs-meta&quot;&gt;#&lt;span class=&quot;hljs-meta-keyword&quot;&gt;elif&lt;/span&gt; WINDOWS&lt;/span&gt;
        handler.PlatformView.BorderThickness = &lt;span class=&quot;hljs-keyword&quot;&gt;new&lt;/span&gt; Microsoft.UI.Xaml.Thickness(&lt;span class=&quot;hljs-number&quot;&gt;10&lt;/span&gt;);
        &lt;span class=&quot;hljs-meta&quot;&gt;#&lt;span class=&quot;hljs-meta-keyword&quot;&gt;endif&lt;/span&gt;&lt;/span&gt;
    }
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;It uses the &lt;code&gt;EntryHandler.Mapper.AppendToMapping&lt;/code&gt; method to register a custom mapping for this specific named control.&lt;/li&gt;
&lt;li&gt;The lambda expression defines what happens when an &lt;code&gt;Entry&lt;/code&gt; with the name &amp;quot;BorderlessEntry&amp;quot; is encountered.&lt;/li&gt;
&lt;li&gt;Inside the lambda, it checks if the &lt;code&gt;view&lt;/code&gt; is indeed an &lt;code&gt;Entry&lt;/code&gt; control.&lt;/li&gt;
&lt;li&gt;Then, depending on the platform (Android, iOS, or Windows), it applies platform-specific styling:&lt;ul&gt;
&lt;li&gt;On Android, the background color is set to beige.&lt;/li&gt;
&lt;li&gt;On iOS, the border style is removed to create a borderless look.&lt;/li&gt;
&lt;li&gt;On Windows, a border thickness of 10 is applied.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;

&lt;/ul&gt;
&lt;br/&gt;
  &lt;p&gt;This code demonstrates how to customize the appearance of an &lt;code&gt;Entry&lt;/code&gt; control in .NET MAUI using handlers. By registering a custom mapping for &amp;quot;BorderlessEntry&amp;quot;, you can achieve a platform-specific, borderless look for entries with that specific name. This allows for targeted styling without affecting all &lt;code&gt;Entry&lt;/code&gt; controls in your app.&lt;/p&gt;
&lt;br/&gt;
&lt;h2 id=&quot;downloadcode&quot;&gt;Download Code:&lt;/h2&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
  You can download the code from
  &lt;a href=&quot;https://github.com/androidmads/MauiHandlers&quot;&gt;GitHub&lt;/a&gt;. If you
  have any doubts, feel free to post a comment. If you liked this article, and
  it is useful to you, do like, share the article &amp;amp; star the repository on
  &lt;a href=&quot;https://github.com/androidmads/MauiHandlers&quot;&gt;GitHub&lt;/a&gt;.
&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
  &lt;a href=&quot;https://github.com/androidmads/MauiHandlers&quot; target=&quot;_blank&quot;&gt;
    &lt;button class=&quot;github&quot; style=&quot;padding-left: 10px; padding-right: 10px;&quot;&gt;
      &lt;i class=&quot;fa fa-github&quot;&gt;&lt;/i&gt; Download From GitHub
    &lt;/button&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;a
  href=&quot;https://twitter.com/share?ref_src=twsrc%5Etfw&quot;
  class=&quot;twitter-share-button&quot;
  data-show-count=&quot;false&quot;
  &gt;Tweet&lt;/a
&gt;
&lt;script
  async
  src=&quot;https://platform.twitter.com/widgets.js&quot;
  charset=&quot;utf-8&quot;
&gt;&lt;/script&gt;

&lt;h2 id=&quot;downloadcode&quot;&gt;Conclusion:&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;You can customize various other aspects of the &lt;code&gt;Entry&lt;/code&gt; control using platform-specific properties and methods within the handler. This approach allows for a more granular control over the appearance of your UI elements on different platforms while maintaining cross-platform compatibility.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.androidmads.info/feeds/816890405885836337/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.androidmads.info/2024/04/net-maui-handlers.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/816890405885836337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/816890405885836337'/><link rel='alternate' type='text/html' href='http://www.androidmads.info/2024/04/net-maui-handlers.html' title='.NET MAUI - Handlers'/><author><name>Mushtaq</name><uri>http://www.blogger.com/profile/16822127241692763805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoh25ngvWgJabioiX3ogexUPL1qaK_0AECkoLT_6qwMNqwT-uIoxwreV9LnDekECsqOy98hY_hPf1xluqlOHA_vgPNZKPze0XqPSUtLlV1TcNEhl3WjY1PxSDK_Nb5L-J-kMHsAVyHNb4Ljm54g2qYx3C6qLtcr7si8Grxfwpcf55fqPJOYkOkF7MeQQon/s72-c/post_banner_handlers.jpg" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952965959597039944.post-3190376840154772454</id><published>2024-03-24T21:27:00.001+05:30</published><updated>2024-03-24T21:27:25.033+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term=".net maui"/><category scheme="http://www.blogger.com/atom/ns#" term="jail broken detection"/><category scheme="http://www.blogger.com/atom/ns#" term="root detection"/><category scheme="http://www.blogger.com/atom/ns#" term="security"/><title type='text'>.NET MAUI - Root/Jail Broken Detection</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ9eVNXYIjthQRzRdV_phGkaQy0ZSaySMTUy2P21RB9vrY_ukv8ctROhlFriCcY4uFevvIefrC7y-7KAhYq-1DOkC04ZC1nk59tTFpM9O14lMZHqpYswVnjj6c-dCOcc028OAPRW7HNhi7rhEn5n42sSMvMBZXKu-LiUovxFMdChMuzGJP0krUj19C7mi8/s680/post_banner_flyoutpage.jpg&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;400&quot; data-original-width=&quot;680&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ9eVNXYIjthQRzRdV_phGkaQy0ZSaySMTUy2P21RB9vrY_ukv8ctROhlFriCcY4uFevvIefrC7y-7KAhYq-1DOkC04ZC1nk59tTFpM9O14lMZHqpYswVnjj6c-dCOcc028OAPRW7HNhi7rhEn5n42sSMvMBZXKu-LiUovxFMdChMuzGJP0krUj19C7mi8/s600/post_banner_flyoutpage.jpg&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h2 style=&quot;text-align: start&quot;&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
  Building a secure .NET MAUI app is essential. Rooted/jailbroken devices bypass security measures, leaving them vulnerable. This can impact your app&#39;s data and functionality. Let&#39;s explore the risks and how to implement root/jailbreak detection in your .NET MAUI app.
&lt;/p&gt;
&lt;br /&gt;
&lt;h2&gt;Quick Links:&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#project_setup&quot;&gt;Project Setup&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#install&quot;&gt;Install Plugin&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#implementation&quot;&gt;Implementation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#downloadcode&quot;&gt;Download Code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h2 id=&quot;project_setup&quot;&gt;Project Setup:&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;
    Launch Visual Studio 2022, and in the start window click Create a new
    project to create a new project.
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzOv8pOBUAlBsbGt1AkkUl-bM-vVE4bQ6pb7UGwnDzkayKqlCDB7tkOnX2lXoKa3JjWWm0Kx52jQq51BCH-VftKYDSUVnMlxpy4UTdfuPKAhq6gYu9Otfl8aN96LT_cWeSjpLhZQAuwP6mmZ2t5tSekobapcDCwn8ejil3NWndhUYn355tjZZFUPF1ug/s1200/new-solution.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzOv8pOBUAlBsbGt1AkkUl-bM-vVE4bQ6pb7UGwnDzkayKqlCDB7tkOnX2lXoKa3JjWWm0Kx52jQq51BCH-VftKYDSUVnMlxpy4UTdfuPKAhq6gYu9Otfl8aN96LT_cWeSjpLhZQAuwP6mmZ2t5tSekobapcDCwn8ejil3NWndhUYn355tjZZFUPF1ug/s600/new-solution.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    In the Create a new project window, select MAUI in the All project types
    drop-down, select the .NET MAUI App template, and click the Next button:
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvmHzDB9roM54eTITNn98vmLEd3_ZKeEV7UQS8NV-ZcXOn8cA5NgSXwkzplOCCnh7s3or8dnrrERvDFrS1cflCbjWYOEVSYQS1FtLNTm1czQ5HV_HQGaIG7HfVieP-QG3BS3h78SMiG22Tn2FN-P0k-XH_dRN-YkKZzen1ksjS6VTU0BXaaScdq9FKOw/s1200/new-project.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvmHzDB9roM54eTITNn98vmLEd3_ZKeEV7UQS8NV-ZcXOn8cA5NgSXwkzplOCCnh7s3or8dnrrERvDFrS1cflCbjWYOEVSYQS1FtLNTm1czQ5HV_HQGaIG7HfVieP-QG3BS3h78SMiG22Tn2FN-P0k-XH_dRN-YkKZzen1ksjS6VTU0BXaaScdq9FKOw/s600/new-project.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    In the configure your new project window, name your project, choose a
    suitable location for it, and click the Next button:
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj--GmLz3WxLN4qtknFhozRtTBwwkz_AxvI-hCelj855eeUb0_QVNVT3RuMUkY3EpWvNJYRCRsx_sH6T_JE7hG3HnqMXBd8sT4OQAhrk2q1MGNYZ7TOYlnYdR-gK3nHLklT1_P3bOboirDaQgMSzsoXYi6jyaUjMQPeA7CCm8dnkFv7fgjB8sS1lNoNjw/s1200/configure-project.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj--GmLz3WxLN4qtknFhozRtTBwwkz_AxvI-hCelj855eeUb0_QVNVT3RuMUkY3EpWvNJYRCRsx_sH6T_JE7hG3HnqMXBd8sT4OQAhrk2q1MGNYZ7TOYlnYdR-gK3nHLklT1_P3bOboirDaQgMSzsoXYi6jyaUjMQPeA7CCm8dnkFv7fgjB8sS1lNoNjw/s600/configure-project.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    In the Additional information window, click the Create button:
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPN3YEOazTEnIaGk2OVCpSPBkpESp9mkVtM-9HOHrYCl6eB6PS_dHrtO3W118Up_gYQM253gSg-vUY2bVK1vGgx5Pqy56T050OPIUlAUJmpUJD_fYYDK_nXAzkOZNmzSAvaQuKxNPQ7Yu9fNna4u8TqnWJ5l0vB3u9_HXdCwMkTwEN8EhYeEdIwTP6Kw/s1200/additional-information.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPN3YEOazTEnIaGk2OVCpSPBkpESp9mkVtM-9HOHrYCl6eB6PS_dHrtO3W118Up_gYQM253gSg-vUY2bVK1vGgx5Pqy56T050OPIUlAUJmpUJD_fYYDK_nXAzkOZNmzSAvaQuKxNPQ7Yu9fNna4u8TqnWJ5l0vB3u9_HXdCwMkTwEN8EhYeEdIwTP6Kw/s600/additional-information.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    Once the project is created, we can able to see the Android, iOS, Windows
    and other running options in the toolbar. Press the emulator or run button
    to build and run the app
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibxmNp8IWrlvt_8CrP026ph80zvYG_tAnoFqfRZNd-v0Yp35ROFtaRhh4WVAOJxkHwJZ-qfd1ehN7dH7ZwKX99mtk_T88R0QXyTN2XOmFhp8AYSd1duDs_VQMJcy7F5Mhi3gcrNAOyDqZOTHCctZTKaiBJJZXOVda8IfDr7OxpTGL1OYBKGY9tqF3QhQ/s1117/android-emulator-button.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;79&quot;
          data-original-width=&quot;1117&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibxmNp8IWrlvt_8CrP026ph80zvYG_tAnoFqfRZNd-v0Yp35ROFtaRhh4WVAOJxkHwJZ-qfd1ehN7dH7ZwKX99mtk_T88R0QXyTN2XOmFhp8AYSd1duDs_VQMJcy7F5Mhi3gcrNAOyDqZOTHCctZTKaiBJJZXOVda8IfDr7OxpTGL1OYBKGY9tqF3QhQ/s600/android-emulator-button.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;install&quot;&gt;Install Plugin:&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;
   Open your Nuget Package Manager and search &quot;banditoth.MAUI.JailbreakDetector&quot; and install the latest version in your project.
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIeKgwlB5wotpRSXc-WgxtDRm7qqPMN8-CoNVH3kQyPmJ_2uKLZmmXgg2bzN-6y4kOoheFh0WITk5bzAxAnmq0JZwdaI799xY6pFdRgXnrgLkHvOyXQCVCvL9eSRWvZMLF1ddLOFVks5EOi2lltU-X2OJQwRLjUaHnG0qBCe8K9I9fwvQTjsju7md5gGhY/s1825/install.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;346&quot; data-original-width=&quot;1825&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIeKgwlB5wotpRSXc-WgxtDRm7qqPMN8-CoNVH3kQyPmJ_2uKLZmmXgg2bzN-6y4kOoheFh0WITk5bzAxAnmq0JZwdaI799xY6pFdRgXnrgLkHvOyXQCVCvL9eSRWvZMLF1ddLOFVks5EOi2lltU-X2OJQwRLjUaHnG0qBCe8K9I9fwvQTjsju7md5gGhY/s600/install.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;implementation&quot;&gt;Implementation&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;
    Open MainPage.xaml file and update the UI as per your requirement. In this sample, I have added a button to check whether the device is rooted or not.
  &lt;/li&gt;
  &lt;li&gt;
    You can dependency inject the jailbreak detector instance, by resolving an instance of IJailbreakDetector. Store the instance in a private readonly field in your class, or use it directly.
    &lt;pre&gt;&lt;code&gt;IJailbreakDetectorConfiguration jailbreakDetectorConfiguration = new JailbreakSettings();
jailbreakDetectorConfiguration.MaximumPossibilityPercentage = 20;
jailbreakDetectorConfiguration.MaximumWarningCount = 1;
jailbreakDetectorConfiguration.CanThrowException = true;

IJailbreakDetector jailbreakDetector = new JailberakDetectorService(jailbreakDetectorConfiguration);&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
  &lt;li&gt;Use the following code to check the device is rooted or not.
    &lt;pre&gt;&lt;code&gt;if (jailbreakDetector.IsSupported())
{
	var isRooted = await jailbreakDetector.IsRootedOrJailbrokenAsync();
	if (isRooted)
	{
		await DisplayAlert(&quot;ANDROIDMADS - .NET MAUI&quot;, &quot;DEVICE IS ROOTED&quot;, &quot;OK&quot;);
	}
	else
	{
		await DisplayAlert(&quot;ANDROIDMADS - .NET MAUI&quot;, &quot;DEVICE IS NOT ROOTED&quot;, &quot;OK&quot;);
	}
}&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;br /&gt;
&lt;h2 id=&quot;downloadcode&quot;&gt;Download Code:&lt;/h2&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
  You can download the code from
  &lt;a href=&quot;https://github.com/androidmads/MauiRootDetection&quot;&gt;GitHub&lt;/a&gt;. If you
  have any doubts, feel free to post a comment. If you liked this article, and
  it is useful to you, do like, share the article &amp;amp; star the repository on
  &lt;a href=&quot;https://github.com/androidmads/MauiRootDetection&quot;&gt;GitHub&lt;/a&gt;.
&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
  &lt;a href=&quot;https://github.com/androidmads/MauiRootDetection&quot; target=&quot;_blank&quot;&gt;
    &lt;button class=&quot;github&quot; style=&quot;padding-left: 10px; padding-right: 10px;&quot;&gt;
      &lt;i class=&quot;fa fa-github&quot;&gt;&lt;/i&gt; Download From GitHub
    &lt;/button&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;a
  href=&quot;https://twitter.com/share?ref_src=twsrc%5Etfw&quot;
  class=&quot;twitter-share-button&quot;
  data-show-count=&quot;false&quot;
  &gt;Tweet&lt;/a
&gt;
&lt;script
  async
  src=&quot;https://platform.twitter.com/widgets.js&quot;
  charset=&quot;utf-8&quot;
&gt;&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.androidmads.info/feeds/3190376840154772454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.androidmads.info/2024/03/net-maui-rootjail-broken-detection.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/3190376840154772454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/3190376840154772454'/><link rel='alternate' type='text/html' href='http://www.androidmads.info/2024/03/net-maui-rootjail-broken-detection.html' title='.NET MAUI - Root/Jail Broken Detection'/><author><name>Mushtaq</name><uri>http://www.blogger.com/profile/16822127241692763805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQ9eVNXYIjthQRzRdV_phGkaQy0ZSaySMTUy2P21RB9vrY_ukv8ctROhlFriCcY4uFevvIefrC7y-7KAhYq-1DOkC04ZC1nk59tTFpM9O14lMZHqpYswVnjj6c-dCOcc028OAPRW7HNhi7rhEn5n42sSMvMBZXKu-LiUovxFMdChMuzGJP0krUj19C7mi8/s72-c/post_banner_flyoutpage.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952965959597039944.post-4966957026574892036</id><published>2024-03-13T05:28:00.002+05:30</published><updated>2024-03-13T05:29:55.889+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Php Api"/><category scheme="http://www.blogger.com/atom/ns#" term="Php Api Builder"/><title type='text'>Effortlessly Build a PHP API with PHP API Builder - CLI: Step-by-Step Guide</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAExr0ugtwMAB6X6O9q63r2p6Ddr0boIy_LZQf_8G30F7wr7vVdbjx3hYsb9YU0fkxLGDXl2zo85g6j6oUYXsQuCXJDmX68sN8oX6wQthhj1fyf93cxFXwlZrPEK4qmK0DbYHowwGCwFWCbAzeBUVOj5DCNYXL8kEeYyYSgJCaroQcoEHjhpkRj1-P7BLm/s680/post_banner_filepicker%20-%20Copy.jpg&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;399&quot; data-original-width=&quot;680&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAExr0ugtwMAB6X6O9q63r2p6Ddr0boIy_LZQf_8G30F7wr7vVdbjx3hYsb9YU0fkxLGDXl2zo85g6j6oUYXsQuCXJDmX68sN8oX6wQthhj1fyf93cxFXwlZrPEK4qmK0DbYHowwGCwFWCbAzeBUVOj5DCNYXL8kEeYyYSgJCaroQcoEHjhpkRj1-P7BLm/s600/post_banner_filepicker%20-%20Copy.jpg&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;h2&gt;Introduction:&lt;/h2&gt;

&lt;p style=&quot;text-align: justify;&quot;&gt;
  Building an API in PHP is a fundamental aspect of web development, enabling
  seamless communication between different software applications. With the PHP
  API Builder - CLI tool, creating robust APIs becomes a breeze. This
  command-line interface simplifies the process by generating PHP files tailored
  for handling Create, Read, Update, and Delete operations (CRUD) on your
  specified database tables.
&lt;/p&gt;
&lt;br /&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
  PHP API Builder - CLI streamlines API development by automating repetitive
  tasks, allowing developers to focus on crafting efficient solutions. Whether
  you&#39;re a seasoned developer or just starting with PHP, this tool offers a
  user-friendly approach to quickly generate API files with minimal effort.
&lt;/p&gt;
&lt;br /&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
  Now, let&#39;s dive into the details of using PHP API Builder - CLI to harness the
  power of PHP for building APIs.
&lt;/p&gt;

&lt;br /&gt;
&lt;h2&gt;Requirements:&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;PHP installed on your system.&lt;/li&gt;
  &lt;li&gt;Access to the database you want to generate API files for.&lt;/li&gt;
&lt;/ul&gt;

&lt;br /&gt;
&lt;h2&gt;Usage:&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;
   &lt;b&gt; Run the CLI Tool:&lt;/b&gt; Open PhpApiBuilder.exe CLI tool where it is located.
  &lt;/li&gt;

  &lt;li&gt;
    &lt;b&gt;Input Hostname:&lt;/b&gt; When prompted, enter the hostname of your database server.
    If it&#39;s &#39;localhost&#39;, you can press Enter to proceed with the default value.
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2ndbsPEgWeGeCQVoTibv12X6k9Hz2p3bQjkbQk393OSt6Hdk1ULJRs6ClGsKGKrMoX_toQYHhUv1fd4JoI-me6PWnk0mkGM3vygS3INoS_3-Zp8wr-R7TKJ6CYRcI-AZRDnYqV77STU7WsxuYfTgxuwq4z4bV8OeHEFRNeSy4n29MZka1rnXvengMKAK_/s1920/11.png&quot;
        style=&quot;display: block; padding: 1em 0; text-align: center; &quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          width=&quot;600&quot;
          data-original-height=&quot;1009&quot;
          data-original-width=&quot;1920&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2ndbsPEgWeGeCQVoTibv12X6k9Hz2p3bQjkbQk393OSt6Hdk1ULJRs6ClGsKGKrMoX_toQYHhUv1fd4JoI-me6PWnk0mkGM3vygS3INoS_3-Zp8wr-R7TKJ6CYRcI-AZRDnYqV77STU7WsxuYfTgxuwq4z4bV8OeHEFRNeSy4n29MZka1rnXvengMKAK_/s600/11.png&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;b&gt;Input Database Name:&lt;/b&gt; Enter the name of the database you want to generate API
    files for.
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrJQ_a13V4R9qlA2eHkE87DAKOMdHUwwvD-3VMkOsGQDze8hr42OZvMlYoOafaUkFnukTm9C1K9dmFvgizCxPdT713Ehff6uRh_4zdjYsgvkhuuL0ioNH7Ku8gCXYJRl8gUqDWXMcvudnvdCQT2h-kdMb6ME9Nh3hG6-AWj6EYuJrDEw5kRbkvCv8FouCk/s1920/22.png&quot;
        style=&quot;display: block; padding: 1em 0; text-align: center; &quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          width=&quot;600&quot;
          data-original-height=&quot;1009&quot;
          data-original-width=&quot;1920&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrJQ_a13V4R9qlA2eHkE87DAKOMdHUwwvD-3VMkOsGQDze8hr42OZvMlYoOafaUkFnukTm9C1K9dmFvgizCxPdT713Ehff6uRh_4zdjYsgvkhuuL0ioNH7Ku8gCXYJRl8gUqDWXMcvudnvdCQT2h-kdMb6ME9Nh3hG6-AWj6EYuJrDEw5kRbkvCv8FouCk/s600/22.png&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;b&gt;Input Username:&lt;/b&gt; Provide the username to access the specified database.
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUAR4NmbvmNFV8C0zLXerasnmALCwqFuj-a3TZ4CNUdSpRLA6RraAndf4aKLUd2qxOf1oOFW_t8Xs5is4u9-Z7AjZZI_x49tr5B8vQf6RXtc7rVC0MY_VHkB7lwH2ycvP9JCXZawg1GIZXYYyBFErabI3IJy08XjnGU_CC7YGD2WTJYx5nGdn5dzIQ2DAc/s1920/33.png&quot;
        style=&quot;display: block; padding: 1em 0; text-align: center; &quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          width=&quot;600&quot;
          data-original-height=&quot;1009&quot;
          data-original-width=&quot;1920&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUAR4NmbvmNFV8C0zLXerasnmALCwqFuj-a3TZ4CNUdSpRLA6RraAndf4aKLUd2qxOf1oOFW_t8Xs5is4u9-Z7AjZZI_x49tr5B8vQf6RXtc7rVC0MY_VHkB7lwH2ycvP9JCXZawg1GIZXYYyBFErabI3IJy08XjnGU_CC7YGD2WTJYx5nGdn5dzIQ2DAc/s600/33.png&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;b&gt;Input Password:&lt;/b&gt; If your database requires a password, enter it when
    prompted. If there&#39;s no password, you can press Enter to proceed with an
    empty password.
  &lt;/li&gt;

  &lt;li&gt;
    &lt;b&gt;Enter PHP File Name:&lt;/b&gt; Specify the desired name for the PHP file that will be
    generated. Do not include the &quot;.php&quot; extension.
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAwvLjW6-M6hgMlBFwkKJn1vtmL2O1UZCuiMejZR2nbHqzXiYN9l7o3M30uX6EHsNszX4DsZjjZHwVGp9yeTveyvDjxLmqn7kvrSC499O4Ir1-Ou58hzM1kusLI3LM3Eguz9QFuCEjKXnVv4gL-UeDLsH_pEbtV55cteK1dGyP7Min4swuLpbleYjXY0Nf/s1920/44.png&quot;
        style=&quot;display: block; padding: 1em 0; text-align: center; &quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          width=&quot;600&quot;
          data-original-height=&quot;1009&quot;
          data-original-width=&quot;1920&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAwvLjW6-M6hgMlBFwkKJn1vtmL2O1UZCuiMejZR2nbHqzXiYN9l7o3M30uX6EHsNszX4DsZjjZHwVGp9yeTveyvDjxLmqn7kvrSC499O4Ir1-Ou58hzM1kusLI3LM3Eguz9QFuCEjKXnVv4gL-UeDLsH_pEbtV55cteK1dGyP7Min4swuLpbleYjXY0Nf/s600/44.png&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;b&gt;Enter Table Name:&lt;/b&gt; Input the name of the table for which you want to
    generate CRUD operations API.
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhA4fzEYU5q5wmjvma-B-L20hiQosu2atQhtFdCDuFuJryRgf7YHX1HgBxuX3dJzkwY1PzQ1jVX8AbNuBDngb3pVmfvMFRApsyxKp7RHA3zu6edOR-EkHhYfx22pTUADlzTDmVsc9cJB1OXaoKZGwSW8CmMFAKhODhzOTtre-qEUM4GCa6fQDgD8uQ2i9ZB/s1920/55.png&quot;
        style=&quot;display: block; padding: 1em 0; text-align: center; &quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          width=&quot;600&quot;
          data-original-height=&quot;1009&quot;
          data-original-width=&quot;1920&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhA4fzEYU5q5wmjvma-B-L20hiQosu2atQhtFdCDuFuJryRgf7YHX1HgBxuX3dJzkwY1PzQ1jVX8AbNuBDngb3pVmfvMFRApsyxKp7RHA3zu6edOR-EkHhYfx22pTUADlzTDmVsc9cJB1OXaoKZGwSW8CmMFAKhODhzOTtre-qEUM4GCa6fQDgD8uQ2i9ZB/s600/55.png&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;b&gt;Review Output:&lt;/b&gt; Once all the necessary information is provided, the CLI tool
    will generate the PHP file containing CRUD operations for the specified
    table. If any errors occur during the process (e.g., invalid credentials,
    table not found), the CLI will display an error message and prompt you to
    restart the process from the beginning.
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz3iF5fNqeOkYv5N9JLfS8hZ5fYbkIhT3bVimByvMvk5gPEtCJJzH2aM900ClBe4nIxvQHUO4yq9UeDFa-ZzdXjvfgeyjp3jRRyfyNxtrq4YVmCJNl9wz9MPQwMiISdlkNAfgddTHSGT17BjooG2OzaD8MZO177B9G1kIhpfzrFSahz742PUK7rGcZ_hDN/s1920/66.png&quot;
        style=&quot;display: block; padding: 1em 0; text-align: center; &quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          width=&quot;600&quot;
          data-original-height=&quot;1009&quot;
          data-original-width=&quot;1920&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz3iF5fNqeOkYv5N9JLfS8hZ5fYbkIhT3bVimByvMvk5gPEtCJJzH2aM900ClBe4nIxvQHUO4yq9UeDFa-ZzdXjvfgeyjp3jRRyfyNxtrq4YVmCJNl9wz9MPQwMiISdlkNAfgddTHSGT17BjooG2OzaD8MZO177B9G1kIhpfzrFSahz742PUK7rGcZ_hDN/s600/66.png&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;

  &lt;li&gt;
    &lt;b&gt;Accessing Generated Files:&lt;/b&gt; The generated PHP file will be available in the
    same directory where the CLI tool is located.
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKV0_6fQHbOtkuNadpEMjsuqiJR7GSv67ZXzhnLJGojCtegoyxqECxXWym4DWQTMF3AgoG2g8ox9LuTaKt5djK-YlQa0hVMk0EKKHhL7YBcGslDefx57AsA9aGSs98QTCIPElU2ssJtCa_hQiUIwHJF_Mm39ZRLkhdWtDyVGnjdM61uz15XpvQoQj8SSlm/s1900/77.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;997&quot; data-original-width=&quot;1900&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKV0_6fQHbOtkuNadpEMjsuqiJR7GSv67ZXzhnLJGojCtegoyxqECxXWym4DWQTMF3AgoG2g8ox9LuTaKt5djK-YlQa0hVMk0EKKHhL7YBcGslDefx57AsA9aGSs98QTCIPElU2ssJtCa_hQiUIwHJF_Mm39ZRLkhdWtDyVGnjdM61uz15XpvQoQj8SSlm/s600/77.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;br /&gt;
&lt;h2&gt;Example:&lt;/h2&gt;

&lt;p&gt;
  Suppose you want to generate API files for a database named &quot;my_database&quot; with
  the table &quot;users&quot;. Here&#39;s how you would use the PHP API Builder - CLI tool:
&lt;/p&gt;

&lt;pre&gt;
Enter hostname (default: localhost): localhost
Enter database name: my_database
Enter username: my_username
Enter password (default: empty):
Enter PHP file name (without .php extension): users_api
Enter table name: users
&lt;/pre&gt;

&lt;p&gt;
  After providing the necessary information, the tool will generate the
  &quot;users_api.php&quot; file in the tool&#39;s directory.
&lt;/p&gt;

&lt;br /&gt;

&lt;h2&gt;Note:&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;
    Make sure to review the generated PHP file to ensure it meets your
    requirements and security standards before using it in your project.
  &lt;/li&gt;
  &lt;li&gt;
    It&#39;s recommended to back up your database before performing any CRUD
    operations using the generated API files.
  &lt;/li&gt;
  &lt;li&gt;
    For any assistance or issues with the PHP API Builder - CLI tool, refer to
    the documentation or contact support.
  &lt;/li&gt;
&lt;/ul&gt;

&lt;br /&gt;

&lt;h2&gt;Conclusion:&lt;/h2&gt;

&lt;p&gt;
  This manual provides a comprehensive guide for using the PHP API Builder - CLI
  tool to efficiently generate API files for CRUD operations on your database
  tables.
&lt;/p&gt;

&lt;br /&gt;
&lt;h2 id=&quot;downloadcode&quot;&gt;Download:&lt;/h2&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
  You can download this tool from
  &lt;a href=&quot;https://github.com/AJTechsoft/PhpApiBuilder/releases&quot;&gt;GitHub&lt;/a&gt;. If you
  have any doubts, feel free to post a comment. If you liked this article, and
  it is useful to you, do like, share the article &amp;amp; star the repository on
  &lt;a href=&quot;https://github.com/AJTechsoft/PhpApiBuilder/releases&quot;&gt;GitHub&lt;/a&gt;.
&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
  &lt;a href=&quot;https://github.com/AJTechsoft/PhpApiBuilder/releases&quot; target=&quot;_blank&quot;&gt;
    &lt;button class=&quot;github&quot; style=&quot;padding-left: 10px; padding-right: 10px;&quot;&gt;
      &lt;i class=&quot;fa fa-github&quot;&gt;&lt;/i&gt; Download From GitHub
    &lt;/button&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;a
  href=&quot;https://twitter.com/share?ref_src=twsrc%5Etfw&quot;
  class=&quot;twitter-share-button&quot;
  data-show-count=&quot;false&quot;
  &gt;Tweet&lt;/a
&gt;
&lt;script
  async
  src=&quot;https://platform.twitter.com/widgets.js&quot;
  charset=&quot;utf-8&quot;
&gt;&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.androidmads.info/feeds/4966957026574892036/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.androidmads.info/2024/03/effortlessly-build-php-api-with-php-api.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/4966957026574892036'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/4966957026574892036'/><link rel='alternate' type='text/html' href='http://www.androidmads.info/2024/03/effortlessly-build-php-api-with-php-api.html' title='Effortlessly Build a PHP API with PHP API Builder - CLI: Step-by-Step Guide'/><author><name>Mushtaq</name><uri>http://www.blogger.com/profile/16822127241692763805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAExr0ugtwMAB6X6O9q63r2p6Ddr0boIy_LZQf_8G30F7wr7vVdbjx3hYsb9YU0fkxLGDXl2zo85g6j6oUYXsQuCXJDmX68sN8oX6wQthhj1fyf93cxFXwlZrPEK4qmK0DbYHowwGCwFWCbAzeBUVOj5DCNYXL8kEeYyYSgJCaroQcoEHjhpkRj1-P7BLm/s72-c/post_banner_filepicker%20-%20Copy.jpg" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952965959597039944.post-7755146266706049074</id><published>2024-02-14T17:38:00.001+05:30</published><updated>2024-02-14T17:38:00.133+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term=".net maui"/><category scheme="http://www.blogger.com/atom/ns#" term="Xamarin Forms"/><title type='text'>Good Bye Xamarin</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXkdT6IAVOGRgRzNTdktwGEEHz22p3hBfj-1t7ZfAqu3D_dXBRfbcOz_4c12Y4762t6OL41PY848HJ-XOr0erevPvDvUA8ATV4flfbYRsF4LDcafrfGUwda582qvblA4WxBIfGPw3QF3xpnL1vQhevaaDv8wb2UOcTLggeNNUmDKbq5dKZjTafV-RugRJl/s680/post_banner_goodbye_xamarin.jpg&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;400&quot; data-original-width=&quot;680&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXkdT6IAVOGRgRzNTdktwGEEHz22p3hBfj-1t7ZfAqu3D_dXBRfbcOz_4c12Y4762t6OL41PY848HJ-XOr0erevPvDvUA8ATV4flfbYRsF4LDcafrfGUwda582qvblA4WxBIfGPw3QF3xpnL1vQhevaaDv8wb2UOcTLggeNNUmDKbq5dKZjTafV-RugRJl/s600/post_banner_goodbye_xamarin.jpg&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;In the ever-evolving landscape of technology, tools and frameworks continuously evolve, and developers must stay ahead of the curve. One significant evolution in recent times is the transition from Xamarin.Forms to .NET MAUI (Multi-platform App UI). This shift brings about a series of changes and deadlines that developers must navigate skillfully. In this article, we&amp;#39;ll simplify and explore the essential milestones and recommendations to smoothly transition from Xamarin to .NET MAUI.&lt;/p&gt;
&lt;h2&gt;Saying Farewell to Xamarin&lt;/h2&gt;
&lt;p&gt;Xamarin.Forms, the precursor to .NET MAUI, is reaching its twilight phase. Existing Xamarin.Forms projects now have the imperative of migrating to .NET MAUI, with Xamarin itself approaching its expiration date. It&amp;#39;s vital to note that support for all Xamarin SDKs, including Xamarin.Forms, will come to an end after May 1, 2024.&lt;/p&gt;
&lt;p&gt;For those seeking comprehensive insights into this transition, detailed information and guidelines are available in the official documentation.&lt;/p&gt;
&lt;h2&gt;Navigating the Transition to .NET 7&lt;/h2&gt;
&lt;p&gt;Complicating matters further is the impending end of support for .NET 7, scheduled for May 14, 2023. To mitigate potential challenges, it&amp;#39;s wise to initiate migrations well in advance, allowing ample time to address any arising issues during the process. For detailed information, delve into the resources provided.&lt;/p&gt;
&lt;h2&gt;Embracing Visual Studio Code&lt;/h2&gt;
&lt;p&gt;As Visual Studio for Mac faces retirement by August 31, 2024, developers may find themselves at a crossroads. However, there&amp;#39;s no cause for concern as the transition to .NET MAUI can seamlessly continue using Visual Studio Code. Learn how to implement the MAUI Extension for Visual Studio Code and access additional resources in the official documentation.&lt;/p&gt;
&lt;h2&gt;Understanding App Store Transition Deadlines&lt;/h2&gt;
&lt;p&gt;The transition timeline extends beyond development environments to app distribution platforms. It&amp;#39;s anticipated that by April 2025, the Apple App Store will likely stop accepting submissions of Xamarin applications built with Xcode 15. Similarly, the Google Play Store is expected to cease supporting Xamarin apps targeting API 34 by August 2025.&lt;/p&gt;
&lt;p&gt;For more information on these transitions, refer to the provided links.&lt;/p&gt;
&lt;h2&gt;Fostering Community Engagement&lt;/h2&gt;
&lt;p&gt;In the spirit of community collaboration, developers are encouraged to share their feedback with the Microsoft team through David Ortinau&amp;#39;s facilitated platform. Your experiences are invaluable in enriching the community and streamlining the migration process from Xamarin to .NET MAUI. Participate in the feedback survey to contribute to this collective effort.&lt;/p&gt;
&lt;h2&gt;Showcasing Your .NET MAUI Creations&lt;/h2&gt;
&lt;p&gt;As .NET MAUI gains momentum, Microsoft eagerly seeks to showcase applications developed using this framework. Your contributions and feedback play a pivotal role in shaping the future of .NET MAUI. Keep an eye out for Microsoft events where .NET MAUI applications are celebrated and showcased.&lt;/p&gt;&lt;br/&gt;
&lt;p&gt;In conclusion, transitioning from Xamarin to .NET MAUI signifies a significant milestone in the realm of cross-platform app development. By staying informed, proactive, and leveraging available resources, developers can navigate this transition with confidence and agility, propelling their projects into the future.&lt;/p&gt;&lt;br/&gt;
&lt;p&gt;Certainly! Here&amp;#39;s a tabulated overview of the key dates and their details:&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; border: 2px solid #000;&quot;&gt;
  &lt;thead&gt;
    &lt;tr style=&quot;background-color: #f2f2f2;&quot;&gt;
      &lt;th style=&quot;border: 2px solid #000; padding: 8px; text-align: left;&quot;&gt;Date&lt;/th&gt;
      &lt;th style=&quot;border: 2px solid #000; padding: 8px; text-align: left;&quot;&gt;Event&lt;/th&gt;
      &lt;th style=&quot;border: 2px solid #000; padding: 8px; text-align: left;&quot;&gt;Details&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 2px solid #000; padding: 8px;&quot;&gt;May 1, 2024&lt;/td&gt;
      &lt;td style=&quot;border: 2px solid #000; padding: 8px;&quot;&gt;End of Xamarin Official Support&lt;/td&gt;
      &lt;td style=&quot;border: 2px solid #000; padding: 8px;&quot;&gt;Support for all Xamarin SDKs, including Xamarin.Forms, will cease after this date.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 2px solid #000; padding: 8px;&quot;&gt;May 14, 2023&lt;/td&gt;
      &lt;td style=&quot;border: 2px solid #000; padding: 8px;&quot;&gt;End of .NET 7 Official Support&lt;/td&gt;
      &lt;td style=&quot;border: 2px solid #000; padding: 8px;&quot;&gt;Support for .NET 7 will be terminated, urging developers to plan migration strategies well in advance.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 2px solid #000; padding: 8px;&quot;&gt;August 31, 2024&lt;/td&gt;
      &lt;td style=&quot;border: 2px solid #000; padding: 8px;&quot;&gt;Retirement of Visual Studio for Mac&lt;/td&gt;
      &lt;td style=&quot;border: 2px solid #000; padding: 8px;&quot;&gt;Visual Studio for Mac will be retired, prompting developers to transition to alternative environments such as Visual Studio Code.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 2px solid #000; padding: 8px;&quot;&gt;April 2025&lt;/td&gt;
      &lt;td style=&quot;border: 2px solid #000; padding: 8px;&quot;&gt;Apple App Store Transition Deadline&lt;/td&gt;
      &lt;td style=&quot;border: 2px solid #000; padding: 8px;&quot;&gt;The anticipated final deadline for the Apple App Store to accept submissions of Xamarin applications built with Xcode 15.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 2px solid #000; padding: 8px;&quot;&gt;August 2025&lt;/td&gt;
      &lt;td style=&quot;border: 2px solid #000; padding: 8px;&quot;&gt;Google Play Store Transition Deadline&lt;/td&gt;
      &lt;td style=&quot;border: 2px solid #000; padding: 8px;&quot;&gt;The expected final deadline for the Google Play Store to accept Xamarin apps targeting API 34.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;These dates serve as crucial milestones for developers navigating the transition from Xamarin to .NET MAUI. It&amp;#39;s essential to stay informed and plan accordingly to ensure a smooth and seamless transition process.&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.androidmads.info/feeds/7755146266706049074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.androidmads.info/2024/02/good-bye-xamarin.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/7755146266706049074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/7755146266706049074'/><link rel='alternate' type='text/html' href='http://www.androidmads.info/2024/02/good-bye-xamarin.html' title='Good Bye Xamarin'/><author><name>Mushtaq</name><uri>http://www.blogger.com/profile/16822127241692763805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXkdT6IAVOGRgRzNTdktwGEEHz22p3hBfj-1t7ZfAqu3D_dXBRfbcOz_4c12Y4762t6OL41PY848HJ-XOr0erevPvDvUA8ATV4flfbYRsF4LDcafrfGUwda582qvblA4WxBIfGPw3QF3xpnL1vQhevaaDv8wb2UOcTLggeNNUmDKbq5dKZjTafV-RugRJl/s72-c/post_banner_goodbye_xamarin.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952965959597039944.post-726900413326134968</id><published>2024-02-04T17:00:00.001+05:30</published><updated>2024-02-04T17:01:00.017+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term=".net maui"/><category scheme="http://www.blogger.com/atom/ns#" term="Base64 Image Encode/Decode"/><title type='text'>.NET MAUI - Base64 Image Encode/Decode</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
  &lt;a
    href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJJ4aKi0LqCoc6rhNJ8aIkGkl_jPwSGlAhnZXm6I9fx5B1eaIVuhp1lD_-RSVdt1HlsJWmNPUPxTDfaePek2Eg445pSI3B7Pbky675FChjnxGKa2oabhyphenhyphenclwJ0hcqGr74ApAZ7dJY_iARS04cBkgBDNaLEtdkNjUWwjzDGisEqLGOrpbnGVemGLA-6wAE3/s680/post_banner_base64.jpg&quot;
    style=&quot;display: block; padding: 1em 0; text-align: center; &quot;
    &gt;&lt;img
      alt=&quot;&quot;
      border=&quot;0&quot;
      width=&quot;600&quot;
      data-original-height=&quot;400&quot;
      data-original-width=&quot;680&quot;
      src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJJ4aKi0LqCoc6rhNJ8aIkGkl_jPwSGlAhnZXm6I9fx5B1eaIVuhp1lD_-RSVdt1HlsJWmNPUPxTDfaePek2Eg445pSI3B7Pbky675FChjnxGKa2oabhyphenhyphenclwJ0hcqGr74ApAZ7dJY_iARS04cBkgBDNaLEtdkNjUWwjzDGisEqLGOrpbnGVemGLA-6wAE3/s600/post_banner_base64.jpg&quot;
  /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;h2 style=&quot;text-align: start&quot;&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
  Imagine building an app that works on different devices like phones and
  computers using .NET MAUI. Sometimes, it&#39;s tricky to show images in your app,
  especially when they&#39;re encoded in Base64. This blog helps you figure out how
  to do that easily. We&#39;ll break down the steps, making it simple for 10th-grade
  students to follow along. By the end, you&#39;ll know how to make your app look
  cool with Base64 images in .NET MAUI!
&lt;/p&gt;
&lt;br /&gt;
&lt;h2&gt;Quick Links:&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#project_setup&quot;&gt;Project Setup&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#implementation&quot;&gt;Implementation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#demo&quot;&gt;Demo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#downloadcode&quot;&gt;Download Code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h2 id=&quot;project_setup&quot;&gt;Project Setup:&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;
    Launch Visual Studio 2022, and in the start window click Create a new
    project to create a new project.
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzOv8pOBUAlBsbGt1AkkUl-bM-vVE4bQ6pb7UGwnDzkayKqlCDB7tkOnX2lXoKa3JjWWm0Kx52jQq51BCH-VftKYDSUVnMlxpy4UTdfuPKAhq6gYu9Otfl8aN96LT_cWeSjpLhZQAuwP6mmZ2t5tSekobapcDCwn8ejil3NWndhUYn355tjZZFUPF1ug/s1200/new-solution.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzOv8pOBUAlBsbGt1AkkUl-bM-vVE4bQ6pb7UGwnDzkayKqlCDB7tkOnX2lXoKa3JjWWm0Kx52jQq51BCH-VftKYDSUVnMlxpy4UTdfuPKAhq6gYu9Otfl8aN96LT_cWeSjpLhZQAuwP6mmZ2t5tSekobapcDCwn8ejil3NWndhUYn355tjZZFUPF1ug/s600/new-solution.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    In the Create a new project window, select MAUI in the All project types
    drop-down, select the .NET MAUI App template, and click the Next button:
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvmHzDB9roM54eTITNn98vmLEd3_ZKeEV7UQS8NV-ZcXOn8cA5NgSXwkzplOCCnh7s3or8dnrrERvDFrS1cflCbjWYOEVSYQS1FtLNTm1czQ5HV_HQGaIG7HfVieP-QG3BS3h78SMiG22Tn2FN-P0k-XH_dRN-YkKZzen1ksjS6VTU0BXaaScdq9FKOw/s1200/new-project.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvmHzDB9roM54eTITNn98vmLEd3_ZKeEV7UQS8NV-ZcXOn8cA5NgSXwkzplOCCnh7s3or8dnrrERvDFrS1cflCbjWYOEVSYQS1FtLNTm1czQ5HV_HQGaIG7HfVieP-QG3BS3h78SMiG22Tn2FN-P0k-XH_dRN-YkKZzen1ksjS6VTU0BXaaScdq9FKOw/s600/new-project.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    In the configure your new project window, name your project, choose a
    suitable location for it, and click the Next button:
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj--GmLz3WxLN4qtknFhozRtTBwwkz_AxvI-hCelj855eeUb0_QVNVT3RuMUkY3EpWvNJYRCRsx_sH6T_JE7hG3HnqMXBd8sT4OQAhrk2q1MGNYZ7TOYlnYdR-gK3nHLklT1_P3bOboirDaQgMSzsoXYi6jyaUjMQPeA7CCm8dnkFv7fgjB8sS1lNoNjw/s1200/configure-project.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj--GmLz3WxLN4qtknFhozRtTBwwkz_AxvI-hCelj855eeUb0_QVNVT3RuMUkY3EpWvNJYRCRsx_sH6T_JE7hG3HnqMXBd8sT4OQAhrk2q1MGNYZ7TOYlnYdR-gK3nHLklT1_P3bOboirDaQgMSzsoXYi6jyaUjMQPeA7CCm8dnkFv7fgjB8sS1lNoNjw/s600/configure-project.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    In the Additional information window, click the Create button:
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPN3YEOazTEnIaGk2OVCpSPBkpESp9mkVtM-9HOHrYCl6eB6PS_dHrtO3W118Up_gYQM253gSg-vUY2bVK1vGgx5Pqy56T050OPIUlAUJmpUJD_fYYDK_nXAzkOZNmzSAvaQuKxNPQ7Yu9fNna4u8TqnWJ5l0vB3u9_HXdCwMkTwEN8EhYeEdIwTP6Kw/s1200/additional-information.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPN3YEOazTEnIaGk2OVCpSPBkpESp9mkVtM-9HOHrYCl6eB6PS_dHrtO3W118Up_gYQM253gSg-vUY2bVK1vGgx5Pqy56T050OPIUlAUJmpUJD_fYYDK_nXAzkOZNmzSAvaQuKxNPQ7Yu9fNna4u8TqnWJ5l0vB3u9_HXdCwMkTwEN8EhYeEdIwTP6Kw/s600/additional-information.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    Once the project is created, we can able to see the Android, iOS, Windows
    and other running options in the toolbar. Press the emulator or run button
    to build and run the app
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibxmNp8IWrlvt_8CrP026ph80zvYG_tAnoFqfRZNd-v0Yp35ROFtaRhh4WVAOJxkHwJZ-qfd1ehN7dH7ZwKX99mtk_T88R0QXyTN2XOmFhp8AYSd1duDs_VQMJcy7F5Mhi3gcrNAOyDqZOTHCctZTKaiBJJZXOVda8IfDr7OxpTGL1OYBKGY9tqF3QhQ/s1117/android-emulator-button.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;79&quot;
          data-original-width=&quot;1117&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibxmNp8IWrlvt_8CrP026ph80zvYG_tAnoFqfRZNd-v0Yp35ROFtaRhh4WVAOJxkHwJZ-qfd1ehN7dH7ZwKX99mtk_T88R0QXyTN2XOmFhp8AYSd1duDs_VQMJcy7F5Mhi3gcrNAOyDqZOTHCctZTKaiBJJZXOVda8IfDr7OxpTGL1OYBKGY9tqF3QhQ/s600/android-emulator-button.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;implementation&quot;&gt;Implementation&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;
    Open MainPage.xaml file and update the UI as per requirement. And below my screen design.
    &lt;pre&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&amp;gt;
&amp;lt;ContentPage xmlns=&quot;http://schemas.microsoft.com/dotnet/2021/maui&quot;
             xmlns:x=&quot;http://schemas.microsoft.com/winfx/2009/xaml&quot;
             x:Class=&quot;MauiBase64Image.MainPage&quot;&amp;gt;

    &amp;lt;ScrollView&amp;gt;
        &amp;lt;VerticalStackLayout
            Spacing=&quot;25&quot;
            Padding=&quot;30,0&quot;
            VerticalOptions=&quot;Center&quot;&amp;gt;

            &amp;lt;Label
                x:Name=&quot;base64Result&quot;
                Text=&quot;&quot;
                MaxLines=&quot;5&quot;
                SemanticProperties.HeadingLevel=&quot;Level1&quot;
                FontSize=&quot;12&quot;
                HorizontalOptions=&quot;Center&quot; /&amp;gt;

            &amp;lt;Button
                x:Name=&quot;EncodeBtn&quot;
                Text=&quot;Base64 Encode&quot;
                Clicked=&quot;OnEncodeClicked&quot;
                HorizontalOptions=&quot;Center&quot; /&amp;gt;

            &amp;lt;Image
                x:Name=&quot;imagePreview&quot;
                HeightRequest=&quot;200&quot;
                HorizontalOptions=&quot;Center&quot; /&amp;gt;

            &amp;lt;Button
                x:Name=&quot;DecodeBtn&quot;
                Text=&quot;Base64 Decode&quot;
                Clicked=&quot;OnDecodeClicked&quot;
                HorizontalOptions=&quot;Center&quot; /&amp;gt;

        &amp;lt;/VerticalStackLayout&amp;gt;
    &amp;lt;/ScrollView&amp;gt;

&amp;lt;/ContentPage&amp;gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
&lt;/ul&gt;
    &lt;h3&gt;Base64 String to Image:&lt;/h3&gt;
    &lt;p&gt;If you&#39;re into turning one thing into another, the Convert class in .NET is like a superhero! It helps change stuff, even binary files, into this special code called Base64.&lt;/p&gt;&lt;br/&gt;

&lt;p&gt;Here&#39;s a little example code that shows how to use this superhero class to make a special picture show up in a .NET MAUI app. But here&#39;s the trick: don&#39;t use the word &#39;using&#39; like we usually do when talking to the computer. If we do that, it might close the door too early before the picture is ready to show.&lt;/p&gt;&lt;br/&gt;
    
    &lt;pre&gt;&lt;code&gt;var imageBytes = Convert.FromBase64String(base64Result.Text);
MemoryStream imageDecodeStream = new(imageBytes);
imagePreview.Source = ImageSource.FromStream(() =&gt; imageDecodeStream);&lt;/code&gt;&lt;/pre&gt;

    &lt;h3&gt;Image to Base64 String:&lt;/h3&gt;
&lt;p&gt;Now, let&#39;s learn how to do the opposite – turning a picture into a base64 string! We use something called Convert.ToBase64String() in .NET MAUI, which is like a tool for this job.&lt;/p&gt;&lt;br/&gt;

&lt;p&gt;As you might have guessed, the first step is changing our picture into something called a byte array, which is like breaking it into small pieces. In .NET MAUI, you can grab a file from your app (maybe in the Resources\Raw folder) using the FileSystem tools.&lt;/p&gt;&lt;br/&gt;

    &lt;pre&gt;&lt;code&gt;using var imageEncodeStream = await FileSystem.OpenAppPackageFileAsync(&quot;icon.png&quot;);
using var memoryStream = new MemoryStream();

imageEncodeStream.CopyTo(memoryStream);
base64Result.Text = Convert.ToBase64String(memoryStream.ToArray());&lt;/code&gt;&lt;/pre&gt;
    
&lt;p&gt;Here&#39;s how it works: we turn the picture into a Stream, put it in a special memory place called MemoryStream, and then change it into those small pieces, the byte array. Take a look at this code example to see how it&#39;s done.&lt;/p&gt;&lt;br/&gt;

&lt;p&gt;See those &#39;using&#39; words? They make sure everything is cleaned up nicely when we finish. Remember, there could be different ways to get files, but as long as you can turn your picture into a byte array, you&#39;re good to go in your .NET MAUI journey!&lt;/p&gt;
    
&lt;br /&gt;
&lt;h2 id=&quot;downloadcode&quot;&gt;Download Code:&lt;/h2&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
  You can download the code from
  &lt;a href=&quot;https://github.com/androidmads/MauiBase64Image&quot;&gt;GitHub&lt;/a&gt;. If you
  have any doubts, feel free to post a comment. If you liked this article, and
  it is useful to you, do like, share the article &amp;amp; star the repository on
  &lt;a href=&quot;https://github.com/androidmads/MauiBase64Image&quot;&gt;GitHub&lt;/a&gt;.
&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
  &lt;a href=&quot;https://github.com/androidmads/MauiBase64Image&quot; target=&quot;_blank&quot;&gt;
    &lt;button class=&quot;github&quot; style=&quot;padding-left: 10px; padding-right: 10px;&quot;&gt;
      &lt;i class=&quot;fa fa-github&quot;&gt;&lt;/i&gt; Download From GitHub
    &lt;/button&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;a
  href=&quot;https://twitter.com/share?ref_src=twsrc%5Etfw&quot;
  class=&quot;twitter-share-button&quot;
  data-show-count=&quot;false&quot;
  &gt;Tweet&lt;/a
&gt;
&lt;script
  async
  src=&quot;https://platform.twitter.com/widgets.js&quot;
  charset=&quot;utf-8&quot;
&gt;&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.androidmads.info/feeds/726900413326134968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.androidmads.info/2024/02/net-maui-base64-image-encodedecode.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/726900413326134968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/726900413326134968'/><link rel='alternate' type='text/html' href='http://www.androidmads.info/2024/02/net-maui-base64-image-encodedecode.html' title='.NET MAUI - Base64 Image Encode/Decode'/><author><name>Mushtaq</name><uri>http://www.blogger.com/profile/16822127241692763805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJJ4aKi0LqCoc6rhNJ8aIkGkl_jPwSGlAhnZXm6I9fx5B1eaIVuhp1lD_-RSVdt1HlsJWmNPUPxTDfaePek2Eg445pSI3B7Pbky675FChjnxGKa2oabhyphenhyphenclwJ0hcqGr74ApAZ7dJY_iARS04cBkgBDNaLEtdkNjUWwjzDGisEqLGOrpbnGVemGLA-6wAE3/s72-c/post_banner_base64.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952965959597039944.post-1272423841509345803</id><published>2024-01-08T00:00:00.001+05:30</published><updated>2024-01-08T00:00:00.128+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term=".net maui"/><category scheme="http://www.blogger.com/atom/ns#" term=".net maui community toolkit"/><category scheme="http://www.blogger.com/atom/ns#" term="Video Player App"/><title type='text'>.NET MAUI - Video Player using Community Toolkit</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
  &lt;a
    href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4PlAKm-QdLYwWtq328bRdVP6yVnMQgxbuoXSnV9Ydm8qpZZCK0KWcAX-S9lJEsslVGi8X2TjZCpZouWW0RzsE1ztgHMAhE-7c4k820O6lmVng5vryIpIFBTR84sMh1zQ9Mwyfl9vglv-UxfN3MOVNZ1e93dqa_nwXOPFmfaadbHEX7JcZgpCaVijFfm2w/s680/post_banner_video_player.jpg&quot;
    style=&quot;display: block; padding: 1em 0; text-align: center; &quot;
    &gt;&lt;img
      alt=&quot;&quot;
      border=&quot;0&quot;
      width=&quot;600&quot;
      data-original-height=&quot;400&quot;
      data-original-width=&quot;680&quot;
      src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4PlAKm-QdLYwWtq328bRdVP6yVnMQgxbuoXSnV9Ydm8qpZZCK0KWcAX-S9lJEsslVGi8X2TjZCpZouWW0RzsE1ztgHMAhE-7c4k820O6lmVng5vryIpIFBTR84sMh1zQ9Mwyfl9vglv-UxfN3MOVNZ1e93dqa_nwXOPFmfaadbHEX7JcZgpCaVijFfm2w/s600/post_banner_video_player.jpg&quot;
  /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;h2 style=&quot;text-align: start&quot;&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
  Hey! Ever wanted to create cool apps for different devices like phones and
  computers? Well, .NET MAUI makes it super easy. It&#39;s like a superhero for app
  creators! Now, imagine adding fun things like videos to your apps. That&#39;s
  where the Community Toolkit comes in – a toolbox that lots of developers work
  on together. Today, we&#39;re exploring the Video Player control, a cool feature
  powered by .NET MAUI and its friendly Community Toolkit. Get ready for an
  adventure in making your apps more exciting with videos!
&lt;/p&gt;
&lt;br /&gt;
&lt;h2&gt;Quick Links:&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#project_setup&quot;&gt;Project Setup&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#install&quot;&gt;Install Plugin&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#implementation&quot;&gt;Implementation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#demo&quot;&gt;Demo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#downloadcode&quot;&gt;Download Code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h2 id=&quot;project_setup&quot;&gt;Project Setup:&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;
    Launch Visual Studio 2022, and in the start window click Create a new
    project to create a new project.
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzOv8pOBUAlBsbGt1AkkUl-bM-vVE4bQ6pb7UGwnDzkayKqlCDB7tkOnX2lXoKa3JjWWm0Kx52jQq51BCH-VftKYDSUVnMlxpy4UTdfuPKAhq6gYu9Otfl8aN96LT_cWeSjpLhZQAuwP6mmZ2t5tSekobapcDCwn8ejil3NWndhUYn355tjZZFUPF1ug/s1200/new-solution.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzOv8pOBUAlBsbGt1AkkUl-bM-vVE4bQ6pb7UGwnDzkayKqlCDB7tkOnX2lXoKa3JjWWm0Kx52jQq51BCH-VftKYDSUVnMlxpy4UTdfuPKAhq6gYu9Otfl8aN96LT_cWeSjpLhZQAuwP6mmZ2t5tSekobapcDCwn8ejil3NWndhUYn355tjZZFUPF1ug/s600/new-solution.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    In the Create a new project window, select MAUI in the All project types
    drop-down, select the .NET MAUI App template, and click the Next button:
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvmHzDB9roM54eTITNn98vmLEd3_ZKeEV7UQS8NV-ZcXOn8cA5NgSXwkzplOCCnh7s3or8dnrrERvDFrS1cflCbjWYOEVSYQS1FtLNTm1czQ5HV_HQGaIG7HfVieP-QG3BS3h78SMiG22Tn2FN-P0k-XH_dRN-YkKZzen1ksjS6VTU0BXaaScdq9FKOw/s1200/new-project.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvmHzDB9roM54eTITNn98vmLEd3_ZKeEV7UQS8NV-ZcXOn8cA5NgSXwkzplOCCnh7s3or8dnrrERvDFrS1cflCbjWYOEVSYQS1FtLNTm1czQ5HV_HQGaIG7HfVieP-QG3BS3h78SMiG22Tn2FN-P0k-XH_dRN-YkKZzen1ksjS6VTU0BXaaScdq9FKOw/s600/new-project.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    In the configure your new project window, name your project, choose a
    suitable location for it, and click the Next button:
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj--GmLz3WxLN4qtknFhozRtTBwwkz_AxvI-hCelj855eeUb0_QVNVT3RuMUkY3EpWvNJYRCRsx_sH6T_JE7hG3HnqMXBd8sT4OQAhrk2q1MGNYZ7TOYlnYdR-gK3nHLklT1_P3bOboirDaQgMSzsoXYi6jyaUjMQPeA7CCm8dnkFv7fgjB8sS1lNoNjw/s1200/configure-project.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj--GmLz3WxLN4qtknFhozRtTBwwkz_AxvI-hCelj855eeUb0_QVNVT3RuMUkY3EpWvNJYRCRsx_sH6T_JE7hG3HnqMXBd8sT4OQAhrk2q1MGNYZ7TOYlnYdR-gK3nHLklT1_P3bOboirDaQgMSzsoXYi6jyaUjMQPeA7CCm8dnkFv7fgjB8sS1lNoNjw/s600/configure-project.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    In the Additional information window, click the Create button:
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPN3YEOazTEnIaGk2OVCpSPBkpESp9mkVtM-9HOHrYCl6eB6PS_dHrtO3W118Up_gYQM253gSg-vUY2bVK1vGgx5Pqy56T050OPIUlAUJmpUJD_fYYDK_nXAzkOZNmzSAvaQuKxNPQ7Yu9fNna4u8TqnWJ5l0vB3u9_HXdCwMkTwEN8EhYeEdIwTP6Kw/s1200/additional-information.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPN3YEOazTEnIaGk2OVCpSPBkpESp9mkVtM-9HOHrYCl6eB6PS_dHrtO3W118Up_gYQM253gSg-vUY2bVK1vGgx5Pqy56T050OPIUlAUJmpUJD_fYYDK_nXAzkOZNmzSAvaQuKxNPQ7Yu9fNna4u8TqnWJ5l0vB3u9_HXdCwMkTwEN8EhYeEdIwTP6Kw/s600/additional-information.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    Once the project is created, we can able to see the Android, iOS, Windows
    and other running options in the toolbar. Press the emulator or run button
    to build and run the app
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibxmNp8IWrlvt_8CrP026ph80zvYG_tAnoFqfRZNd-v0Yp35ROFtaRhh4WVAOJxkHwJZ-qfd1ehN7dH7ZwKX99mtk_T88R0QXyTN2XOmFhp8AYSd1duDs_VQMJcy7F5Mhi3gcrNAOyDqZOTHCctZTKaiBJJZXOVda8IfDr7OxpTGL1OYBKGY9tqF3QhQ/s1117/android-emulator-button.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;79&quot;
          data-original-width=&quot;1117&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibxmNp8IWrlvt_8CrP026ph80zvYG_tAnoFqfRZNd-v0Yp35ROFtaRhh4WVAOJxkHwJZ-qfd1ehN7dH7ZwKX99mtk_T88R0QXyTN2XOmFhp8AYSd1duDs_VQMJcy7F5Mhi3gcrNAOyDqZOTHCctZTKaiBJJZXOVda8IfDr7OxpTGL1OYBKGY9tqF3QhQ/s600/android-emulator-button.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;install&quot;&gt;Install Plugin:&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;
    &lt;b&gt;Open Terminal or Command Prompt:&lt;/b&gt; Open a terminal or command prompt
    window. You can usually find this on your computer by searching for &quot;Command
    Prompt&quot; (Windows) or &quot;Terminal&quot; (macOS/Linux).
  &lt;/li&gt;
  &lt;li&gt;
    &lt;b&gt;Navigate to Your Project Folder:&lt;/b&gt;
    Use the cd command to navigate to your .NET MAUI project folder. For
    example:
  &lt;/li&gt;
  &lt;li&gt;
    &lt;b&gt;Install Community Toolkit:&lt;/b&gt;
    Run the following command to install the CommunityToolkit.Maui package:

    &lt;pre&gt;&lt;code&gt;dotnet add package Microsoft.Maui.CommunityToolkit&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;b&gt;Restore Packages:&lt;/b&gt;
    After the installation, run the following command to restore the packages:
    &lt;pre&gt;&lt;code&gt;dotnet restore&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;implementation&quot;&gt;Implementation&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;
    First, we need to open &quot;MauiProgram.cs&quot; and include the following namespace
    and line to allow the app to use the Chart Library.
    &lt;pre&gt;&lt;code&gt;using CommunityToolkit.Maui;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;&lt;code&gt;.UseMauiCommunityToolkit()
.UseMauiCommunityToolkitMediaElement()&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    Open MainPage.xaml file and add the following namespace. (the page will be
    replaced according to you).
    &lt;pre&gt;&lt;code&gt;xmlns:toolkit=&quot;http://schemas.microsoft.com/dotnet/2022/maui/toolkit&quot;&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    Then, remove the default content and add an instance of the Media Element class
    to the page.
    &lt;pre&gt;&lt;code&gt;&amp;lt;toolkit:MediaElement Source=&quot;https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4&quot;
ShouldShowPlaybackControls=&quot;True&quot;
BackgroundColor=&quot;AliceBlue&quot;
x:Name=&quot;mediaElement&quot;/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    We can add other controls for custom video controls like play/pause and volume controls like below.
    &lt;pre&gt;&lt;code&gt;&amp;lt;HorizontalStackLayout BindingContext=&quot;{x:Reference mediaElement}&quot;
					      HorizontalOptions=&quot;Center&quot;
					      Spacing=&quot;10&quot;&amp;gt;
	
	&amp;lt;Button Text=&quot;Play&quot;
		HorizontalOptions=&quot;CenterAndExpand&quot;
		Clicked=&quot;OnPlayPauseButtonClicked&quot;&amp;gt;
	&amp;lt;/Button&amp;gt;
	&amp;lt;Button Text=&quot;Stop&quot;
		HorizontalOptions=&quot;CenterAndExpand&quot;
		Clicked=&quot;OnStopButtonClicked&quot;&amp;gt;
	&amp;lt;/Button&amp;gt;
&amp;lt;/HorizontalStackLayout&amp;gt;
&amp;lt;Slider Maximum=&quot;1.0&quot;
		   Minimum=&quot;0.0&quot;
		   Value=&quot;{Binding Volume}&quot;
		   ValueChanged=&quot;Slider_ValueChanged&quot;  
		   Rotation=&quot;270&quot;
		   WidthRequest=&quot;100&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    Open Code behind and add the following which will be useful to controls media elements using custom controls.
    &lt;pre&gt;&lt;code&gt;void OnPlayPauseButtonClicked(object sender, EventArgs args)
{
	if (mediaElement.CurrentState == MediaElementState.Stopped ||
		mediaElement.CurrentState == MediaElementState.Paused)
	{
		mediaElement.Play();
	}
	else if (mediaElement.CurrentState == MediaElementState.Playing)
	{
		mediaElement.Pause();
	}
}

void OnStopButtonClicked(object sender, EventArgs args)
{
	mediaElement.Stop();
}

private void Slider_ValueChanged(object sender, ValueChangedEventArgs e)
{
	mediaElement.Volume = e.NewValue;
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h2 id=&quot;downloadcode&quot;&gt;Download Code:&lt;/h2&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
  You can download the code from
  &lt;a href=&quot;https://github.com/androidmads/MauiMediaElement&quot;&gt;GitHub&lt;/a&gt;. If
  you have any doubts, feel free to post a comment. If you liked this article,
  and it is useful to you, do like, share the article &amp;amp; star the repository
  on &lt;a href=&quot;https://github.com/androidmads/MauiMediaElement&quot;&gt;GitHub&lt;/a&gt;.
&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
  &lt;a href=&quot;https://github.com/androidmads/MauiMediaElement&quot; target=&quot;_blank&quot;&gt;
    &lt;button class=&quot;github&quot; style=&quot;padding-left: 10px; padding-right: 10px;&quot;&gt;
      &lt;i class=&quot;fa fa-github&quot;&gt;&lt;/i&gt; Download From GitHub
    &lt;/button&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;a
  href=&quot;https://twitter.com/share?ref_src=twsrc%5Etfw&quot;
  class=&quot;twitter-share-button&quot;
  data-show-count=&quot;false&quot;
  &gt;Tweet&lt;/a
&gt;
&lt;script
  async
  src=&quot;https://platform.twitter.com/widgets.js&quot;
  charset=&quot;utf-8&quot;
&gt;&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.androidmads.info/feeds/1272423841509345803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.androidmads.info/2024/01/net-maui-video-player-using-community.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/1272423841509345803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/1272423841509345803'/><link rel='alternate' type='text/html' href='http://www.androidmads.info/2024/01/net-maui-video-player-using-community.html' title='.NET MAUI - Video Player using Community Toolkit'/><author><name>Mushtaq</name><uri>http://www.blogger.com/profile/16822127241692763805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4PlAKm-QdLYwWtq328bRdVP6yVnMQgxbuoXSnV9Ydm8qpZZCK0KWcAX-S9lJEsslVGi8X2TjZCpZouWW0RzsE1ztgHMAhE-7c4k820O6lmVng5vryIpIFBTR84sMh1zQ9Mwyfl9vglv-UxfN3MOVNZ1e93dqa_nwXOPFmfaadbHEX7JcZgpCaVijFfm2w/s72-c/post_banner_video_player.jpg" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952965959597039944.post-6235028005442717867</id><published>2024-01-04T18:23:00.006+05:30</published><updated>2024-01-04T18:41:21.329+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term=".net maui"/><category scheme="http://www.blogger.com/atom/ns#" term=".net maui community toolkit"/><category scheme="http://www.blogger.com/atom/ns#" term=".net multi-platform app ui"/><title type='text'>.NET MAUI - 2023 Recap</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEykjKBoz0AvS1v0uNoL9G8Nv9OLdj1EJfbufMmixP-I8ceL4PMBUvP2SntxdHf5KO0iEX5PcXqcjAk_bRVrMQBnv1ENh7Zv8R5rvmFPBLGkJzJx3E-xNWxzqeIVZtHctHyz5KKZTVir8-GWyY84vmg4MwysQyghXxFUY1jHH3_o3I07aPR9Qaq4UMjTl1/s680/post_banner_2023recap.jpg&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;400&quot; data-original-width=&quot;680&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEykjKBoz0AvS1v0uNoL9G8Nv9OLdj1EJfbufMmixP-I8ceL4PMBUvP2SntxdHf5KO0iEX5PcXqcjAk_bRVrMQBnv1ENh7Zv8R5rvmFPBLGkJzJx3E-xNWxzqeIVZtHctHyz5KKZTVir8-GWyY84vmg4MwysQyghXxFUY1jHH3_o3I07aPR9Qaq4UMjTl1/s600/post_banner_2023recap.jpg&quot;/&gt;&lt;/a&gt;&lt;/div&gt;

In this video, we will see the recap of .NET MAUI articles post on 2023. Supercharge your .NET MAUI projects by referring this articles.

&lt;style&gt;
        body {
            font-family: Arial, sans-serif;
            margin: 0;
            padding: 0;
            background-color: #f4f4f4;
        }

        .grid-container {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
            gap: 20px;
            padding: 20px;
        }

        .grid-item {
            background-color: #fff;
            border: 1px solid #ddd;
            padding: 20px;
            text-align: center;
        }

        .grid-item a {
            color: #007BFF;
            text-decoration: none;
            margin-top: 10px;
        }

        .grid-item a:hover {
            text-decoration: underline;
        }
    &lt;/style&gt;
&lt;body&gt;

&lt;div class=&quot;grid-container&quot;&gt;
    &lt;div class=&quot;grid-item&quot;&gt;
        &lt;h3&gt;DEV EXPRESS CHARTS IN .NET MAUI&lt;/h3&gt;
        &lt;p&gt;December 04, 2023&lt;/p&gt;
        &lt;a href=&quot;https://www.androidmads.info/2023/12/dev-express-charts-in-net-maui.html&quot;&gt;Read More&lt;/a&gt;
    &lt;/div&gt;

    &lt;div class=&quot;grid-item&quot;&gt;
        &lt;h3&gt;Lottie animations in .NET MAUI&lt;/h3&gt;
        &lt;p&gt;November 19, 2023&lt;/p&gt;
        &lt;a href=&quot;https://www.androidmads.info/2023/11/lottie-animations-in-net-maui.html&quot;&gt;Read More&lt;/a&gt;
    &lt;/div&gt;

    &lt;div class=&quot;grid-item&quot;&gt;
        &lt;h3&gt;Transforming Labels into Hyperlinks with .NET MAUI&lt;/h3&gt;
        &lt;p&gt;November 12, 2023&lt;/p&gt;
        &lt;a href=&quot;https://www.androidmads.info/2023/11/transforming-labels-into-hyperlinks.html&quot;&gt;Read More&lt;/a&gt;
    &lt;/div&gt;

    &lt;div class=&quot;grid-item&quot;&gt;
        &lt;h3&gt;Mastering MVVM: A Deep Dive into .NET MAUI with MVVM Toolkit&lt;/h3&gt;
        &lt;p&gt;October 28, 2023&lt;/p&gt;
        &lt;a href=&quot;https://www.androidmads.info/2023/10/mastering-mvvm-deep-dive-into-net-maui.html&quot;&gt;Read More&lt;/a&gt;
    &lt;/div&gt;

    &lt;div class=&quot;grid-item&quot;&gt;
        &lt;h3&gt;Dev Express - Data Grid Control for .NET MAUI (Lifetime - Free plugin)&lt;/h3&gt;
        &lt;p&gt;October 15, 2023&lt;/p&gt;
        &lt;a href=&quot;https://www.androidmads.info/2023/10/dev-express-data-grid-control-for-net.html&quot;&gt;Read More&lt;/a&gt;
    &lt;/div&gt;

    &lt;div class=&quot;grid-item&quot;&gt;
        &lt;h3&gt;Data Grid Control for .NET MAUI (Free plugin to Sort, Filter &amp; Show Data)&lt;/h3&gt;
        &lt;p&gt;October 04, 2023&lt;/p&gt;
        &lt;a href=&quot;https://www.androidmads.info/2023/10/data-grid-control-for-net-maui-free.html&quot;&gt;Read More&lt;/a&gt;
    &lt;/div&gt;

    &lt;div class=&quot;grid-item&quot;&gt;
        &lt;h3&gt;.NET MAUI - Swipe View&lt;/h3&gt;
        &lt;p&gt;September 17, 2023&lt;/p&gt;
        &lt;a href=&quot;https://www.androidmads.info/2023/09/net-maui-swipe-view.html&quot;&gt;Read More&lt;/a&gt;
    &lt;/div&gt;

    &lt;div class=&quot;grid-item&quot;&gt;
        &lt;h3&gt;Flyout Page in .NET MAUI&lt;/h3&gt;
        &lt;p&gt;July 21, 2023&lt;/p&gt;
        &lt;a href=&quot;https://www.androidmads.info/2023/07/flyout-page-in-net-maui.html&quot;&gt;Read More&lt;/a&gt;
    &lt;/div&gt;

    &lt;div class=&quot;grid-item&quot;&gt;
        &lt;h3&gt;.NET MAUI Barcode Scanner using IRONBARCODE&lt;/h3&gt;
        &lt;p&gt;July 02, 2023&lt;/p&gt;
        &lt;a href=&quot;https://www.androidmads.info/2023/07/net-maui-barcode-scanner-using.html&quot;&gt;Read More&lt;/a&gt;
    &lt;/div&gt;

    &lt;div class=&quot;grid-item&quot;&gt;
        &lt;h3&gt;Dynamic Status Bar in .NET MAUI&lt;/h3&gt;
        &lt;p&gt;June 18, 2023&lt;/p&gt;
        &lt;a href=&quot;https://www.androidmads.info/2023/06/dynamic-status-bar-in-net-maui.html&quot;&gt;Read More&lt;/a&gt;
    &lt;/div&gt;

    &lt;div class=&quot;grid-item&quot;&gt;
        &lt;h3&gt;Localisation in .NET MAUI&lt;/h3&gt;
        &lt;p&gt;June 12, 2023&lt;/p&gt;
        &lt;a href=&quot;https://www.androidmads.info/2023/06/localisation-in-net-maui.html&quot;&gt;Read More&lt;/a&gt;
    &lt;/div&gt;

    &lt;div class=&quot;grid-item&quot;&gt;
        &lt;h3&gt;File Picker in .NET MAUI&lt;/h3&gt;
        &lt;p&gt;May 29, 2023&lt;/p&gt;
        &lt;a href=&quot;https://www.androidmads.info/2023/05/file-picker-in-net-maui.html&quot;&gt;Read More&lt;/a&gt;
    &lt;/div&gt;

    &lt;div class=&quot;grid-item&quot;&gt;
        &lt;h3&gt;Toast in .NET MAUI&lt;/h3&gt;
        &lt;p&gt;May 21, 2023&lt;/p&gt;
        &lt;a href=&quot;https://www.androidmads.info/2023/05/toast-in-net-maui.html&quot;&gt;Read More&lt;/a&gt;
    &lt;/div&gt;

    &lt;div class=&quot;grid-item&quot;&gt;
        &lt;h3&gt;Avatar View in .NET MAUI Community Toolkit&lt;/h3&gt;
        &lt;p&gt;May 07, 2023&lt;/p&gt;
        &lt;a href=&quot;https://www.androidmads.info/2023/05/avatar-view-in-net-maui-community.html&quot;&gt;Read More&lt;/a&gt;
    &lt;/div&gt;

    &lt;div class=&quot;grid-item&quot;&gt;
        &lt;h3&gt;Signature Pad using .NET MAUI Community Toolkit&lt;/h3&gt;
        &lt;p&gt;April 16, 2023&lt;/p&gt;
        &lt;a href=&quot;https://www.androidmads.info/2023/04/signature-pad-using-net-maui-community.html&quot;&gt;Read More&lt;/a&gt;
    &lt;/div&gt;

    &lt;div class=&quot;grid-item&quot;&gt;
        &lt;h3&gt;.Net MAUI - QR Code Generator&lt;/h3&gt;
        &lt;p&gt;January 05, 2023&lt;/p&gt;
        &lt;a href=&quot;https://www.androidmads.info/2023/03/net-maui-qr-code-generator.html&quot;&gt;Read More&lt;/a&gt;
    &lt;/div&gt;

    &lt;div class=&quot;grid-item&quot;&gt;
        &lt;h3&gt;.Net MAUI - Zxing Barcode Scanner&lt;/h3&gt;
        &lt;p&gt;January 10, 2023&lt;/p&gt;
        &lt;a href=&quot;https://www.androidmads.info/2023/01/net-maui-zxing-barcode-scanner.html&quot;&gt;Read More&lt;/a&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;/body&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.androidmads.info/feeds/6235028005442717867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.androidmads.info/2024/01/net-maui-2023-recap.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/6235028005442717867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/6235028005442717867'/><link rel='alternate' type='text/html' href='http://www.androidmads.info/2024/01/net-maui-2023-recap.html' title='.NET MAUI - 2023 Recap'/><author><name>Mushtaq</name><uri>http://www.blogger.com/profile/16822127241692763805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEykjKBoz0AvS1v0uNoL9G8Nv9OLdj1EJfbufMmixP-I8ceL4PMBUvP2SntxdHf5KO0iEX5PcXqcjAk_bRVrMQBnv1ENh7Zv8R5rvmFPBLGkJzJx3E-xNWxzqeIVZtHctHyz5KKZTVir8-GWyY84vmg4MwysQyghXxFUY1jHH3_o3I07aPR9Qaq4UMjTl1/s72-c/post_banner_2023recap.jpg" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952965959597039944.post-7317782403363445812</id><published>2023-12-04T14:00:00.001+05:30</published><updated>2023-12-04T14:00:00.144+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term=".net maui"/><category scheme="http://www.blogger.com/atom/ns#" term="chart"/><category scheme="http://www.blogger.com/atom/ns#" term="devexpress"/><title type='text'>DEV EXPRESS CHARTS IN .NET MAUI</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
  &lt;a
    href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6L2xxuMWrlHdah-iAxMZxVVqNGbEM8lQ6ewcz20I_ulhAIpn6vY30Obqmuia1qPjp-4GU9hE8VeqjG9X5m3H7GVcPIRPNokCDYGGNJ9_-7zOhyaSVixAhIxJScOX-ZW5o6hCNLFiCibXY9mmFcwNV55W95hTq9r5wrgWixYNRuBiB2xB6wG7fIy7rE8t6/s1152/NET%20MAUI%20POSTERS.gif&quot;
    style=&quot;display: block; padding: 1em 0; text-align: center; &quot;
    &gt;&lt;img
      alt=&quot;&quot;
      border=&quot;0&quot;
      width=&quot;600&quot;
      data-original-height=&quot;648&quot;
      data-original-width=&quot;1152&quot;
      src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6L2xxuMWrlHdah-iAxMZxVVqNGbEM8lQ6ewcz20I_ulhAIpn6vY30Obqmuia1qPjp-4GU9hE8VeqjG9X5m3H7GVcPIRPNokCDYGGNJ9_-7zOhyaSVixAhIxJScOX-ZW5o6hCNLFiCibXY9mmFcwNV55W95hTq9r5wrgWixYNRuBiB2xB6wG7fIy7rE8t6/s600/NET%20MAUI%20POSTERS.gif&quot;
  /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;h2 style=&quot;text-align: start&quot;&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
  Supercharge your .NET MAUI projects with Devexpress Charts! This blog will
  explain you how to implement the chart in .NET MAUI projects using Dev
  express, a life time free plugin. This plugin has many customisations and will
  directly skip into the implementation part.
&lt;/p&gt;
&lt;br /&gt;
&lt;h2&gt;Quick Links:&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#project_setup&quot;&gt;Project Setup&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#install&quot;&gt;Install Plugin&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#implementation&quot;&gt;Implementation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#demo&quot;&gt;Demo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#downloadcode&quot;&gt;Download Code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h2 id=&quot;project_setup&quot;&gt;Project Setup:&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;
    Launch Visual Studio 2022, and in the start window click Create a new
    project to create a new project.
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzOv8pOBUAlBsbGt1AkkUl-bM-vVE4bQ6pb7UGwnDzkayKqlCDB7tkOnX2lXoKa3JjWWm0Kx52jQq51BCH-VftKYDSUVnMlxpy4UTdfuPKAhq6gYu9Otfl8aN96LT_cWeSjpLhZQAuwP6mmZ2t5tSekobapcDCwn8ejil3NWndhUYn355tjZZFUPF1ug/s1200/new-solution.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzOv8pOBUAlBsbGt1AkkUl-bM-vVE4bQ6pb7UGwnDzkayKqlCDB7tkOnX2lXoKa3JjWWm0Kx52jQq51BCH-VftKYDSUVnMlxpy4UTdfuPKAhq6gYu9Otfl8aN96LT_cWeSjpLhZQAuwP6mmZ2t5tSekobapcDCwn8ejil3NWndhUYn355tjZZFUPF1ug/s600/new-solution.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    In the Create a new project window, select MAUI in the All project types
    drop-down, select the .NET MAUI App template, and click the Next button:
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvmHzDB9roM54eTITNn98vmLEd3_ZKeEV7UQS8NV-ZcXOn8cA5NgSXwkzplOCCnh7s3or8dnrrERvDFrS1cflCbjWYOEVSYQS1FtLNTm1czQ5HV_HQGaIG7HfVieP-QG3BS3h78SMiG22Tn2FN-P0k-XH_dRN-YkKZzen1ksjS6VTU0BXaaScdq9FKOw/s1200/new-project.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvmHzDB9roM54eTITNn98vmLEd3_ZKeEV7UQS8NV-ZcXOn8cA5NgSXwkzplOCCnh7s3or8dnrrERvDFrS1cflCbjWYOEVSYQS1FtLNTm1czQ5HV_HQGaIG7HfVieP-QG3BS3h78SMiG22Tn2FN-P0k-XH_dRN-YkKZzen1ksjS6VTU0BXaaScdq9FKOw/s600/new-project.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    In the configure your new project window, name your project, choose a
    suitable location for it, and click the Next button:
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj--GmLz3WxLN4qtknFhozRtTBwwkz_AxvI-hCelj855eeUb0_QVNVT3RuMUkY3EpWvNJYRCRsx_sH6T_JE7hG3HnqMXBd8sT4OQAhrk2q1MGNYZ7TOYlnYdR-gK3nHLklT1_P3bOboirDaQgMSzsoXYi6jyaUjMQPeA7CCm8dnkFv7fgjB8sS1lNoNjw/s1200/configure-project.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj--GmLz3WxLN4qtknFhozRtTBwwkz_AxvI-hCelj855eeUb0_QVNVT3RuMUkY3EpWvNJYRCRsx_sH6T_JE7hG3HnqMXBd8sT4OQAhrk2q1MGNYZ7TOYlnYdR-gK3nHLklT1_P3bOboirDaQgMSzsoXYi6jyaUjMQPeA7CCm8dnkFv7fgjB8sS1lNoNjw/s600/configure-project.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    In the Additional information window, click the Create button:
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPN3YEOazTEnIaGk2OVCpSPBkpESp9mkVtM-9HOHrYCl6eB6PS_dHrtO3W118Up_gYQM253gSg-vUY2bVK1vGgx5Pqy56T050OPIUlAUJmpUJD_fYYDK_nXAzkOZNmzSAvaQuKxNPQ7Yu9fNna4u8TqnWJ5l0vB3u9_HXdCwMkTwEN8EhYeEdIwTP6Kw/s1200/additional-information.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPN3YEOazTEnIaGk2OVCpSPBkpESp9mkVtM-9HOHrYCl6eB6PS_dHrtO3W118Up_gYQM253gSg-vUY2bVK1vGgx5Pqy56T050OPIUlAUJmpUJD_fYYDK_nXAzkOZNmzSAvaQuKxNPQ7Yu9fNna4u8TqnWJ5l0vB3u9_HXdCwMkTwEN8EhYeEdIwTP6Kw/s600/additional-information.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    Once the project is created, we can able to see the Android, iOS, Windows
    and other running options in the toolbar. Press the emulator or run button
    to build and run the app
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibxmNp8IWrlvt_8CrP026ph80zvYG_tAnoFqfRZNd-v0Yp35ROFtaRhh4WVAOJxkHwJZ-qfd1ehN7dH7ZwKX99mtk_T88R0QXyTN2XOmFhp8AYSd1duDs_VQMJcy7F5Mhi3gcrNAOyDqZOTHCctZTKaiBJJZXOVda8IfDr7OxpTGL1OYBKGY9tqF3QhQ/s1117/android-emulator-button.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;79&quot;
          data-original-width=&quot;1117&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibxmNp8IWrlvt_8CrP026ph80zvYG_tAnoFqfRZNd-v0Yp35ROFtaRhh4WVAOJxkHwJZ-qfd1ehN7dH7ZwKX99mtk_T88R0QXyTN2XOmFhp8AYSd1duDs_VQMJcy7F5Mhi3gcrNAOyDqZOTHCctZTKaiBJJZXOVda8IfDr7OxpTGL1OYBKGY9tqF3QhQ/s600/android-emulator-button.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;install&quot;&gt;Install Plugin:&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;
    &lt;strong&gt;Library Requirement:&lt;/strong&gt; The Dev express&#39;s nuget link should be
    mapped as a package source and we need to install &quot;DevExpress.Maui.Charts&quot;
    into our project.
  &lt;/li&gt;
  &lt;li&gt;
    &lt;strong&gt;Installation via NuGet:&lt;/strong&gt; Obtain the Charts library by
    searching for &quot;DevExpress.Maui.Charts&quot; in the NuGet Package Manager.
  &lt;/li&gt;
  &lt;li&gt;
    &lt;strong&gt;User Interface Guidance:&lt;/strong&gt; Open the NuGet Package Manager
    interface to facilitate the installation process.
  &lt;/li&gt;
  &lt;li&gt;
    &lt;strong&gt;Visual Confirmation:&lt;/strong&gt; The library, once searched, should
    appear as &quot;DevExpress.Maui.Charts&quot; in the NuGet interface.
  &lt;/li&gt;
  &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
    &lt;a
      href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6-_pCr94QJJqo8Dtoo2-HMpl9NUoqMrMDffyC-aCfPsSSasdm6JOF6Bih7NewuhvmbGnS71qFHX77ootRHmnug2UbknhAxq-7JzXi7LHUEzuV4zrdam7-JERYWTVdVJzIh1Ke0HCZL5CHmE77MFyz6LaeiI_T53Xp8O9EYLYF_ODnSwqzi_qzhdwriMhz/s1336/Screenshot%202023-12-04%20000606.png&quot;
      style=&quot;display: block; padding: 1em 0; text-align: center; &quot;
      &gt;&lt;img
        alt=&quot;&quot;
        border=&quot;0&quot;
        width=&quot;600&quot;
        data-original-height=&quot;293&quot;
        data-original-width=&quot;1336&quot;
        src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6-_pCr94QJJqo8Dtoo2-HMpl9NUoqMrMDffyC-aCfPsSSasdm6JOF6Bih7NewuhvmbGnS71qFHX77ootRHmnug2UbknhAxq-7JzXi7LHUEzuV4zrdam7-JERYWTVdVJzIh1Ke0HCZL5CHmE77MFyz6LaeiI_T53Xp8O9EYLYF_ODnSwqzi_qzhdwriMhz/s600/Screenshot%202023-12-04%20000606.png&quot;
    /&gt;&lt;/a&gt;
  &lt;/div&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;implementation&quot;&gt;Implementation&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;
    First, we need to open &quot;MauiProgram.cs&quot; and include the following namespace
    and line to allow the app to use the Chart Library.
    &lt;pre&gt;&lt;code&gt;using DevExpress.Maui;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;&lt;code&gt;.UseDevExpress()&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    Open MainPage.xaml file and add the following namespace. (the page will be
    replaced according to you).
    &lt;pre&gt;&lt;code&gt;xmlns:dxc=&quot;clr-namespace:DevExpress.Maui.Charts;assembly=DevExpress.Maui.Charts&quot;&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    Then, remove the default content and add an instance of the ChartView class
    to the page.
    &lt;pre&gt;&lt;code&gt;&amp;lt;ContentPage xmlns=&quot;http://schemas.microsoft.com/dotnet/2021/maui&quot;
             xmlns:x=&quot;http://schemas.microsoft.com/winfx/2009/xaml&quot;
             xmlns:dxc=&quot;clr-namespace:DevExpress.Maui.Charts;assembly=DevExpress.Maui.Charts&quot;
             x:Class=&quot;ScatterChartGetStarted.MainPage&quot;&amp;gt;
    &amp;lt;dxc:ChartView/&amp;gt;
&amp;lt;/ContentPage&amp;gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    Consider removing the event handlers from the code-behind for the default
    content. It is advisable to eliminate default styles (such as fonts, colors,
    and other settings) in the App.xaml file as well.
  &lt;/li&gt;
  &lt;li&gt;
    In this instance, the chart features line series displaying the annual GDP
    for three countries. Generate a ViewModel.cs file that includes the
    following classes:
    &lt;pre&gt;&lt;code&gt;public class ViewModel {
    public CountryGdp GdpValueForUSA { get; }
    public CountryGdp GdpValueForChina { get; }
    public CountryGdp GdpValueForJapan { get; }

    public ViewModel() {
        GdpValueForUSA = new CountryGdp(
            &quot;USA&quot;,
            new GdpValue(new DateTime(2020, 1, 1), 20.93),
            new GdpValue(new DateTime(2019, 1, 1), 21.43),
            new GdpValue(new DateTime(2018, 1, 1), 20.58),
            new GdpValue(new DateTime(2017, 1, 1), 19.391),
            new GdpValue(new DateTime(2016, 1, 1), 18.624),
            new GdpValue(new DateTime(2015, 1, 1), 18.121),
            new GdpValue(new DateTime(2014, 1, 1), 17.428),
            new GdpValue(new DateTime(2013, 1, 1), 16.692),
            new GdpValue(new DateTime(2012, 1, 1), 16.155),
            new GdpValue(new DateTime(2011, 1, 1), 15.518),
            new GdpValue(new DateTime(2010, 1, 1), 14.964)
        );
        GdpValueForChina = new CountryGdp(
            &quot;China&quot;,
            new GdpValue(new DateTime(2020, 1, 1), 14.72),
            new GdpValue(new DateTime(2019, 1, 1), 14.34),
            new GdpValue(new DateTime(2018, 1, 1), 13.89),
            new GdpValue(new DateTime(2017, 1, 1), 12.238),
            new GdpValue(new DateTime(2016, 1, 1), 11.191),
            new GdpValue(new DateTime(2015, 1, 1), 11.065),
            new GdpValue(new DateTime(2014, 1, 1), 10.482),
            new GdpValue(new DateTime(2013, 1, 1), 9.607),
            new GdpValue(new DateTime(2012, 1, 1), 8.561),
            new GdpValue(new DateTime(2011, 1, 1), 7.573),
            new GdpValue(new DateTime(2010, 1, 1), 6.101)
        );
        GdpValueForJapan = new CountryGdp(
            &quot;Japan&quot;,
            new GdpValue(new DateTime(2020, 1, 1), 4.888),
            new GdpValue(new DateTime(2019, 1, 1), 5.082),
            new GdpValue(new DateTime(2018, 1, 1), 4.955),
            new GdpValue(new DateTime(2017, 1, 1), 4.872),
            new GdpValue(new DateTime(2016, 1, 1), 4.949),
            new GdpValue(new DateTime(2015, 1, 1), 4.395),
            new GdpValue(new DateTime(2014, 1, 1), 4.850),
            new GdpValue(new DateTime(2013, 1, 1), 5.156),
            new GdpValue(new DateTime(2012, 1, 1), 6.203),
            new GdpValue(new DateTime(2011, 1, 1), 6.156),
            new GdpValue(new DateTime(2010, 1, 1), 5.700)
        );
    }
}

public class CountryGdp {
    public string CountryName { get; }
    public IList&amp;lt;GdpValue&amp;gt; Values { get; }

    public CountryGdp(string country, params GdpValue[] values) {
        this.CountryName = country;
        this.Values = new List&amp;lt;GdpValue&amp;gt;(values);
    }
}

public class GdpValue {
    public DateTime Year { get; }
    public double Value { get; }

    public GdpValue(DateTime year, double value) {
        this.Year = year;
        this.Value = value;
    }
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    In the MainPage.xaml file, incorporate three LineSeries objects into the
    ChartView.Series collection. To establish a connection between the series
    and data, assign each LineSeries object&#39;s Data property to a
    SeriesDataAdapter object. Utilize the adapter&#39;s properties to indicate the
    data source and fields containing arguments and values for each series.
  &lt;/li&gt;
  &lt;li&gt;
    Additionally, define a local XAML namespace referring to a CLR namespace
    encompassing the view model. Subsequently, employ the page&#39;s BindingContext
    property to link the view model with the view.
    &lt;pre&gt;&lt;code&gt;&amp;lt;ContentPage xmlns=&quot;http://schemas.microsoft.com/dotnet/2021/maui&quot;
             xmlns:x=&quot;http://schemas.microsoft.com/winfx/2009/xaml&quot;  
             xmlns:dxc=&quot;clr-namespace:DevExpress.Maui.Charts;assembly=DevExpress.Maui.Charts&quot;
             xmlns:ios=&quot;clr-namespace:Microsoft.Maui.Controls.PlatformConfiguration.iOSSpecific;assembly=Microsoft.Maui.Controls&quot;
             ios:Page.UseSafeArea=&quot;True&quot;
             xmlns:local=&quot;clr-namespace:MauiDevExpress&quot;
             x:Class=&quot;MauiDevExpress.MainPage&quot;&amp;gt;
    &amp;lt;ContentPage.BindingContext&amp;gt;
        &amp;lt;local:ViewModel/&amp;gt;
    &amp;lt;/ContentPage.BindingContext&amp;gt;
    &amp;lt;dxc:ChartView&amp;gt;
        &amp;lt;dxc:ChartView.Series&amp;gt;
            &amp;lt;dxc:LineSeries DisplayName=&quot;{Binding GdpValueForUSA.CountryName}&quot;&amp;gt;
                &amp;lt;dxc:LineSeries.Data&amp;gt;
                    &amp;lt;dxc:SeriesDataAdapter DataSource=&quot;{Binding GdpValueForUSA.Values}&quot;
                                           ArgumentDataMember=&quot;Year&quot;&amp;gt;
                        &amp;lt;dxc:ValueDataMember Type=&quot;Value&quot; Member=&quot;Value&quot;/&amp;gt;
                    &amp;lt;/dxc:SeriesDataAdapter&amp;gt;
                &amp;lt;/dxc:LineSeries.Data&amp;gt;
            &amp;lt;/dxc:LineSeries&amp;gt;

            &amp;lt;dxc:LineSeries DisplayName=&quot;{Binding GdpValueForChina.CountryName}&quot;&amp;gt;
                &amp;lt;dxc:LineSeries.Data&amp;gt;
                    &amp;lt;dxc:SeriesDataAdapter DataSource=&quot;{Binding GdpValueForChina.Values}&quot;
                                           ArgumentDataMember=&quot;Year&quot;&amp;gt;
                        &amp;lt;dxc:ValueDataMember Type=&quot;Value&quot; Member=&quot;Value&quot;/&amp;gt;
                    &amp;lt;/dxc:SeriesDataAdapter&amp;gt;
                &amp;lt;/dxc:LineSeries.Data&amp;gt;
            &amp;lt;/dxc:LineSeries&amp;gt;

            &amp;lt;dxc:LineSeries DisplayName=&quot;{Binding GdpValueForJapan.CountryName}&quot;&amp;gt;
                &amp;lt;dxc:LineSeries.Data&amp;gt;
                    &amp;lt;dxc:SeriesDataAdapter DataSource=&quot;{Binding GdpValueForJapan.Values}&quot;
                                           ArgumentDataMember=&quot;Year&quot;&amp;gt;
                        &amp;lt;dxc:ValueDataMember Type=&quot;Value&quot; Member=&quot;Value&quot;/&amp;gt;
                    &amp;lt;/dxc:SeriesDataAdapter&amp;gt;
                &amp;lt;/dxc:LineSeries.Data&amp;gt;
            &amp;lt;/dxc:LineSeries&amp;gt;
        &amp;lt;/dxc:ChartView.Series&amp;gt;
    &amp;lt;/dxc:ChartView&amp;gt;
&amp;lt;/ContentPage&amp;gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    Configure the X-axis to display labels for years by assigning a
    DateTimeAxisX object with the specified settings to the ChartView.AxisX
    property.
    &lt;pre&gt;&lt;code&gt;&amp;lt;dxc:ChartView&amp;gt; &amp;lt;dxc:ChartView.AxisX&amp;gt;
    &amp;lt;dxc:DateTimeAxisX MeasureUnit=&quot;Year&quot; GridAlignment=&quot;Year&quot;
    GridSpacing=&quot;2&quot;/&amp;gt; &amp;lt;/dxc:ChartView.AxisX&amp;gt; &amp;lt;/dxc:ChartView&amp;gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    Configure the title and labels on the Y-axis. Set the ChartView.AxisY
    property to a NumericAxisY object and specify this object’s Title and Label
    properties.
    &lt;pre&gt;&lt;code&gt;&amp;lt;dxc:ChartView&amp;gt; 
&amp;lt;!-- The X-axis config is here. --&amp;gt;
    &amp;lt;dxc:ChartView.AxisY&amp;gt;
        &amp;lt;dxc:NumericAxisY&amp;gt;
            &amp;lt;dxc:NumericAxisY.Title&amp;gt;
                &amp;lt;dxc:AxisTitle Text=&quot;Trillions of US$&quot;&amp;gt;
                    &amp;lt;dxc:AxisTitle.Style&amp;gt;
                        &amp;lt;dxc:TitleStyle&amp;gt;
                            &amp;lt;dxc:TitleStyle.TextStyle&amp;gt;
                                &amp;lt;dxc:TextStyle Size=&quot;16&quot;/&amp;gt;
                            &amp;lt;/dxc:TitleStyle.TextStyle&amp;gt;
                        &amp;lt;/dxc:TitleStyle&amp;gt;
                    &amp;lt;/dxc:AxisTitle.Style&amp;gt;
                &amp;lt;/dxc:AxisTitle&amp;gt;
            &amp;lt;/dxc:NumericAxisY.Title&amp;gt;
            &amp;lt;dxc:NumericAxisY.Label&amp;gt;
                &amp;lt;dxc:AxisLabel TextFormat=&quot;#.#&quot; Position=&quot;Inside&quot;/&amp;gt;
            &amp;lt;/dxc:NumericAxisY.Label&amp;gt;
        &amp;lt;/dxc:NumericAxisY&amp;gt;
    &amp;lt;/dxc:ChartView.AxisY&amp;gt;
&amp;lt;/dxc:ChartView&amp;gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    Configure the legend position and orientation. Set the ChartView.Legend
    property to a Legend object, and specify this object’s properties as
    follows:
    &lt;pre&gt;&lt;code&gt;&amp;lt;dxc:ChartView&amp;gt;
    &amp;lt;dxc:ChartView.Legend&amp;gt;
        &amp;lt;dxc:Legend VerticalPosition=&quot;TopOutside&quot; 
                    HorizontalPosition=&quot;Center&quot; 
                    Orientation=&quot;LeftToRight&quot;/&amp;gt;
    &amp;lt;/dxc:ChartView.Legend&amp;gt;
&amp;lt;/dxc:ChartView&amp;gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    Establish the chart to showcase a series point hint as a crosshair cursor by
    setting the ChartView.Hint property to a Hint object and assigning a
    CrosshairHintBehavior object to Hint.Behavior. Subsequently, define the
    hint&#39;s content, data format, and visibility options. Set the
    LineSeries.HintOptions property to a SeriesCrosshairOptions object with the
    specified settings.
    &lt;pre&gt;&lt;code&gt;&amp;lt;ContentPage.Resources&amp;gt;
    &amp;lt;dxc:SeriesCrosshairOptions x:Key=&quot;lineSeriesHintOptions&quot;
                                PointTextPattern=&quot;{}{S}: {V}M&quot;
                                ShowInLabel=&quot;True&quot;
                                AxisLabelVisible=&quot;True&quot;
                                AxisLineVisible=&quot;True&quot;/&amp;gt;
&amp;lt;/ContentPage.Resources&amp;gt;
&amp;lt;dxc:ChartView&amp;gt;
    &amp;lt;dxc:ChartView.Hint&amp;gt;
        &amp;lt;dxc:Hint&amp;gt;
            &amp;lt;dxc:Hint.Behavior&amp;gt;
                &amp;lt;dxc:CrosshairHintBehavior GroupHeaderTextPattern=&quot;{}{A$YYYY}&quot; 
                                           MaxSeriesCount=&quot;3&quot;/&amp;gt;
            &amp;lt;/dxc:Hint.Behavior&amp;gt;
        &amp;lt;/dxc:Hint&amp;gt;
    &amp;lt;/dxc:ChartView.Hint&amp;gt;

    &amp;lt;dxc:ChartView.Series&amp;gt;
        &amp;lt;dxc:LineSeries HintOptions=&quot;{StaticResource lineSeriesHintOptions}&quot;&amp;gt;
            &amp;lt;!--Series Data--&amp;gt;
        &amp;lt;/dxc:LineSeries&amp;gt;
        &amp;lt;dxc:LineSeries HintOptions=&quot;{StaticResource lineSeriesHintOptions}&quot;&amp;gt;
            &amp;lt;!--Series Data--&amp;gt;
        &amp;lt;/dxc:LineSeries&amp;gt;
        &amp;lt;dxc:LineSeries HintOptions=&quot;{StaticResource lineSeriesHintOptions}&quot;&amp;gt;
            &amp;lt;!--Series Data--&amp;gt;
        &amp;lt;/dxc:LineSeries&amp;gt;
    &amp;lt;/dxc:ChartView.Series&amp;gt;    
&amp;lt;/dxc:ChartView&amp;gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li&gt;
    Set the LineSeries.MarkersVisible property to True to display point markers.
    To change the line series appearance, set the LineSeries.Style property to a
    LineSeriesStyle object. This object’s Stroke, StrokeThickness, MarkerSize,
    and MarkerStyle properties allow you to configure the appearance of the
    series line and point markers.
    &lt;pre&gt;&lt;code&gt;&amp;lt;dxc:LineSeries MarkersVisible=&quot;True&quot;&amp;gt;
    &amp;lt;!--Series Data--&amp;gt;
    &amp;lt;dxc:LineSeries.Style&amp;gt;
        &amp;lt;dxc:LineSeriesStyle Stroke=&quot;#7145a7&quot; StrokeThickness=&quot;2&quot; MarkerSize=&quot;8&quot;&amp;gt;
            &amp;lt;dxc:LineSeriesStyle.MarkerStyle&amp;gt;
                &amp;lt;dxc:MarkerStyle Fill=&quot;#7145a7&quot;/&amp;gt;
            &amp;lt;/dxc:LineSeriesStyle.MarkerStyle&amp;gt;
        &amp;lt;/dxc:LineSeriesStyle&amp;gt;
    &amp;lt;/dxc:LineSeries.Style&amp;gt;
&amp;lt;/dxc:LineSeries&amp;gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h2 id=&quot;demo&quot;&gt;Demo&lt;/h2&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;iframe
    class=&quot;BLOG_video_class&quot;
    allowfullscreen=&quot;&quot;
    youtube-src-id=&quot;tpd9dzqXIcs&quot;
    width=&quot;400&quot;
    height=&quot;322&quot;
    src=&quot;https://www.youtube.com/embed/tpd9dzqXIcs&quot;
  &gt;&lt;/iframe&gt;
&lt;/div&gt;

&lt;h2 id=&quot;downloadcode&quot;&gt;Download Code:&lt;/h2&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
  You can download the code from
  &lt;a href=&quot;https://github.com/androidmads/MauiDevExpressCharts&quot;&gt;GitHub&lt;/a&gt;. If
  you have any doubts, feel free to post a comment. If you liked this article,
  and it is useful to you, do like, share the article &amp;amp; star the repository
  on &lt;a href=&quot;https://github.com/androidmads/MauiDevExpressCharts&quot;&gt;GitHub&lt;/a&gt;.
&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
  &lt;a href=&quot;https://github.com/androidmads/MauiDevExpressCharts&quot; target=&quot;_blank&quot;&gt;
    &lt;button class=&quot;github&quot; style=&quot;padding-left: 10px; padding-right: 10px;&quot;&gt;
      &lt;i class=&quot;fa fa-github&quot;&gt;&lt;/i&gt; Download From GitHub
    &lt;/button&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;a
  href=&quot;https://twitter.com/share?ref_src=twsrc%5Etfw&quot;
  class=&quot;twitter-share-button&quot;
  data-show-count=&quot;false&quot;
  &gt;Tweet&lt;/a
&gt;
&lt;script
  async
  src=&quot;https://platform.twitter.com/widgets.js&quot;
  charset=&quot;utf-8&quot;
&gt;&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.androidmads.info/feeds/7317782403363445812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.androidmads.info/2023/12/dev-express-charts-in-net-maui.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/7317782403363445812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/7317782403363445812'/><link rel='alternate' type='text/html' href='http://www.androidmads.info/2023/12/dev-express-charts-in-net-maui.html' title='DEV EXPRESS CHARTS IN .NET MAUI'/><author><name>Mushtaq</name><uri>http://www.blogger.com/profile/16822127241692763805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6L2xxuMWrlHdah-iAxMZxVVqNGbEM8lQ6ewcz20I_ulhAIpn6vY30Obqmuia1qPjp-4GU9hE8VeqjG9X5m3H7GVcPIRPNokCDYGGNJ9_-7zOhyaSVixAhIxJScOX-ZW5o6hCNLFiCibXY9mmFcwNV55W95hTq9r5wrgWixYNRuBiB2xB6wG7fIy7rE8t6/s72-c/NET%20MAUI%20POSTERS.gif" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952965959597039944.post-603187596064577834</id><published>2023-11-19T20:14:00.002+05:30</published><updated>2023-11-19T20:14:12.213+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term=".net maui"/><category scheme="http://www.blogger.com/atom/ns#" term="lottie animation"/><category scheme="http://www.blogger.com/atom/ns#" term="UI"/><title type='text'>Lottie animations in .NET MAUI</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
  &lt;a
    href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidn8eEM_M8FGG594q5uugeqiGyLoGl_rlVG3J2Ga7_lhkd0o2jy4LCvIBS1bjNu8PUz2kalCp0txhWA8rMRvm2KGdi5qsFPdVy5c3-mikBEfpljJcqrg89KwXMPsDvMGxDpz47gfj7_EXM00TFlCFDQY77lRJ3SIz4MlUyrfTTyC5gGvJgxeJsoxV6zyH4/s1152/NET%20MAUI%20Lottie%20Animations.gif&quot;
    style=&quot;display: block; padding: 1em 0; text-align: center; &quot;
    &gt;&lt;img
      alt=&quot;&quot;
      border=&quot;0&quot;
      width=&quot;600&quot;
      data-original-height=&quot;648&quot;
      data-original-width=&quot;1152&quot;
      src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidn8eEM_M8FGG594q5uugeqiGyLoGl_rlVG3J2Ga7_lhkd0o2jy4LCvIBS1bjNu8PUz2kalCp0txhWA8rMRvm2KGdi5qsFPdVy5c3-mikBEfpljJcqrg89KwXMPsDvMGxDpz47gfj7_EXM00TFlCFDQY77lRJ3SIz4MlUyrfTTyC5gGvJgxeJsoxV6zyH4/s600/NET%20MAUI%20Lottie%20Animations.gif&quot;
  /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;h2 style=&quot;text-align: start&quot;&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
  Supercharge your .NET MAUI projects with Lottie animations! Imagine it as the
  magic wand for your app&#39;s visuals. Thanks to Adobe After Effects, Lottie
  speaks a special language called JSON, making animations a breeze. Meet
  SkiaSharp, a Microsoft buddy that helps Lottie shine in .NET MAUI, making your
  app look cool without the complexity. Learn the ropes in our beginner-friendly
  guide! Add a dash of Lottie, sprinkle in some JSON magic, and watch your app
  come to life!
&lt;/p&gt;
&lt;br /&gt;
&lt;h2&gt;Top advantages of Lottie Animations:&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Vector-based Adaptability:&lt;/strong&gt; Lottie animations, being
      vector-based, ensure seamless scalability without compromising resolution.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Reduced File Size:&lt;/strong&gt; Compared to formats like GIF or MP4,
      Lottie files boast significantly smaller sizes while maintaining top-notch
      quality.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Quick Links:&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#project_setup&quot;&gt;Project Setup&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#install&quot;&gt;Install Plugin&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#implementation&quot;&gt;Implementation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#demo&quot;&gt;Demo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#downloadcode&quot;&gt;Download Code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h2 id=&quot;project_setup&quot;&gt;Project Setup:&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;
    Launch Visual Studio 2022, and in the start window click Create a new
    project to create a new project.
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzOv8pOBUAlBsbGt1AkkUl-bM-vVE4bQ6pb7UGwnDzkayKqlCDB7tkOnX2lXoKa3JjWWm0Kx52jQq51BCH-VftKYDSUVnMlxpy4UTdfuPKAhq6gYu9Otfl8aN96LT_cWeSjpLhZQAuwP6mmZ2t5tSekobapcDCwn8ejil3NWndhUYn355tjZZFUPF1ug/s1200/new-solution.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzOv8pOBUAlBsbGt1AkkUl-bM-vVE4bQ6pb7UGwnDzkayKqlCDB7tkOnX2lXoKa3JjWWm0Kx52jQq51BCH-VftKYDSUVnMlxpy4UTdfuPKAhq6gYu9Otfl8aN96LT_cWeSjpLhZQAuwP6mmZ2t5tSekobapcDCwn8ejil3NWndhUYn355tjZZFUPF1ug/s600/new-solution.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    In the Create a new project window, select MAUI in the All project types
    drop-down, select the .NET MAUI App template, and click the Next button:
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvmHzDB9roM54eTITNn98vmLEd3_ZKeEV7UQS8NV-ZcXOn8cA5NgSXwkzplOCCnh7s3or8dnrrERvDFrS1cflCbjWYOEVSYQS1FtLNTm1czQ5HV_HQGaIG7HfVieP-QG3BS3h78SMiG22Tn2FN-P0k-XH_dRN-YkKZzen1ksjS6VTU0BXaaScdq9FKOw/s1200/new-project.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvmHzDB9roM54eTITNn98vmLEd3_ZKeEV7UQS8NV-ZcXOn8cA5NgSXwkzplOCCnh7s3or8dnrrERvDFrS1cflCbjWYOEVSYQS1FtLNTm1czQ5HV_HQGaIG7HfVieP-QG3BS3h78SMiG22Tn2FN-P0k-XH_dRN-YkKZzen1ksjS6VTU0BXaaScdq9FKOw/s600/new-project.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    In the configure your new project window, name your project, choose a
    suitable location for it, and click the Next button:
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj--GmLz3WxLN4qtknFhozRtTBwwkz_AxvI-hCelj855eeUb0_QVNVT3RuMUkY3EpWvNJYRCRsx_sH6T_JE7hG3HnqMXBd8sT4OQAhrk2q1MGNYZ7TOYlnYdR-gK3nHLklT1_P3bOboirDaQgMSzsoXYi6jyaUjMQPeA7CCm8dnkFv7fgjB8sS1lNoNjw/s1200/configure-project.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj--GmLz3WxLN4qtknFhozRtTBwwkz_AxvI-hCelj855eeUb0_QVNVT3RuMUkY3EpWvNJYRCRsx_sH6T_JE7hG3HnqMXBd8sT4OQAhrk2q1MGNYZ7TOYlnYdR-gK3nHLklT1_P3bOboirDaQgMSzsoXYi6jyaUjMQPeA7CCm8dnkFv7fgjB8sS1lNoNjw/s600/configure-project.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    In the Additional information window, click the Create button:
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPN3YEOazTEnIaGk2OVCpSPBkpESp9mkVtM-9HOHrYCl6eB6PS_dHrtO3W118Up_gYQM253gSg-vUY2bVK1vGgx5Pqy56T050OPIUlAUJmpUJD_fYYDK_nXAzkOZNmzSAvaQuKxNPQ7Yu9fNna4u8TqnWJ5l0vB3u9_HXdCwMkTwEN8EhYeEdIwTP6Kw/s1200/additional-information.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPN3YEOazTEnIaGk2OVCpSPBkpESp9mkVtM-9HOHrYCl6eB6PS_dHrtO3W118Up_gYQM253gSg-vUY2bVK1vGgx5Pqy56T050OPIUlAUJmpUJD_fYYDK_nXAzkOZNmzSAvaQuKxNPQ7Yu9fNna4u8TqnWJ5l0vB3u9_HXdCwMkTwEN8EhYeEdIwTP6Kw/s600/additional-information.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    Once the project is created, we can able to see the Android, iOS, Windows
    and other running options in the toolbar. Press the emulator or run button
    to build and run the app
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibxmNp8IWrlvt_8CrP026ph80zvYG_tAnoFqfRZNd-v0Yp35ROFtaRhh4WVAOJxkHwJZ-qfd1ehN7dH7ZwKX99mtk_T88R0QXyTN2XOmFhp8AYSd1duDs_VQMJcy7F5Mhi3gcrNAOyDqZOTHCctZTKaiBJJZXOVda8IfDr7OxpTGL1OYBKGY9tqF3QhQ/s1117/android-emulator-button.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;79&quot;
          data-original-width=&quot;1117&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibxmNp8IWrlvt_8CrP026ph80zvYG_tAnoFqfRZNd-v0Yp35ROFtaRhh4WVAOJxkHwJZ-qfd1ehN7dH7ZwKX99mtk_T88R0QXyTN2XOmFhp8AYSd1duDs_VQMJcy7F5Mhi3gcrNAOyDqZOTHCctZTKaiBJJZXOVda8IfDr7OxpTGL1OYBKGY9tqF3QhQ/s600/android-emulator-button.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;install&quot;&gt;Install Plugin:&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;
    &lt;strong&gt;Library Requirement:&lt;/strong&gt; SkiaSharp library is essential for
    displaying Lottie animations.
  &lt;/li&gt;
  &lt;li&gt;
    &lt;strong&gt;Installation via NuGet:&lt;/strong&gt; Obtain the SkiaSharp library by
    searching for &amp;quot;SkiaSharp.Extended.UI.Maui&amp;quot; in the NuGet Package
    Manager.
  &lt;/li&gt;
  &lt;li&gt;
    &lt;strong&gt;Enable Prerelease:&lt;/strong&gt; Ensure the &amp;quot;Include
    prerelease&amp;quot; flag is enabled during installation, as MAUI support is
    currently in prerelease.
  &lt;/li&gt;
  &lt;li&gt;
    &lt;strong&gt;User Interface Guidance:&lt;/strong&gt; Open the NuGet Package Manager
    interface to facilitate the installation process.
  &lt;/li&gt;
  &lt;li&gt;
    &lt;strong&gt;Visual Confirmation:&lt;/strong&gt; The library, once searched, should
    appear as &amp;quot;SkiaSharp.Extended.UI.Maui&amp;quot; in the NuGet interface.
  &lt;/li&gt;
  &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyxs64nUS_q0Oz8y5lWlya0Hfoe1MtCk76uayrgyXvOo8wRY7alsyjQloV_IU2dMU5w9zYDQy4VlDUPlABuum_69e-aoKn84H_aIz0iT02ji8pzJhi9W14yQazIbXTXZPLVCqIOhO0230_8COo3Lt2fMXuNj8ieUce7JvoAwloeZQcB91i0c_FMz2KkRRX/s1804/Screenshot%202023-11-19%20194507.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center; &quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; width=&quot;600&quot; data-original-height=&quot;532&quot; data-original-width=&quot;1804&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyxs64nUS_q0Oz8y5lWlya0Hfoe1MtCk76uayrgyXvOo8wRY7alsyjQloV_IU2dMU5w9zYDQy4VlDUPlABuum_69e-aoKn84H_aIz0iT02ji8pzJhi9W14yQazIbXTXZPLVCqIOhO0230_8COo3Lt2fMXuNj8ieUce7JvoAwloeZQcB91i0c_FMz2KkRRX/s600/Screenshot%202023-11-19%20194507.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;implementation&quot;&gt;Implementation&lt;/h2&gt;
&lt;ul&gt;
  &lt;li style=&quot;text-align: justify;&quot;&gt;
   First, we need to open &quot;MauiProgram.cs&quot; and include the following namespace and line to allow the app to use the Lottie Animations.
    &lt;pre&gt;&lt;code&gt;using SkiaSharp.Views.Maui.Controls.Hosting;&lt;/code&gt;&lt;/pre&gt;
    &lt;pre&gt;&lt;code&gt;.UseSkiaSharp()&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li style=&quot;text-align: justify;&quot;&gt;
    Open MainPage.xaml file and add the following namespace. (the page will be replaced according to you)
&lt;pre&gt;&lt;code&gt;xmlns:skia=&quot;clr-namespace:SkiaSharp.Extended.UI.Controls;assembly=SkiaSharp.Extended.UI&quot;&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
  &lt;li style=&quot;text-align: justify;&quot;&gt;
    Unlocking the magic of Lottie animations in your .NET MAUI app is a breeze! If you have JSON files, just add them to the Resources\Raw subfolder. For web-hosted animations, effortlessly consume them by passing the URI to the Lottie view. Explore the treasure trove of free and paid animations on Lottiefiles.com, a popular source for dynamic visuals. In our example, we&#39;ll use a JSON animation from the Lottie library repository, already included in the code for your convenience. Feel free to switch it up with your preferred animation!
  &lt;/li&gt;
  &lt;li&gt;
    We need to add the animation to the Raw folder: Go to Resources ➡ Raw ➡ Right click add ➡ Existing files ➡  animation.json (walking_batman.json in my sample).
  &lt;/li&gt;
  &lt;pre&gt;&lt;code&gt;&amp;lt;skia:SKLottieView RepeatCount=&quot;-1&quot;
                           RepeatMode=&quot;Reverse&quot;
                           Source=&quot;walking_batman.json&quot; 
                           HeightRequest=&quot;400&quot;
                           WidthRequest=&quot;400&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;li&gt;&lt;code&gt;&amp;lt;skia:SKLottieView&amp;gt;&lt;/code&gt;: This is the declaration of the SKLottieView, a specialized view for rendering Lottie animations using the SkiaSharp library.
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RepeatCount=&amp;quot;-1&amp;quot;&lt;/code&gt;: The RepeatCount attribute determines how many times the animation should repeat. A value of -1 means it will repeat indefinitely.
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RepeatMode=&amp;quot;Reverse&amp;quot;&lt;/code&gt;: The RepeatMode attribute sets the behavior of the animation when it repeats. In this case, &amp;quot;Reverse&amp;quot; means the animation will play in reverse each time it repeats.
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Source=&amp;quot;walking_batman.json&amp;quot;&lt;/code&gt;: Specifies the source of the Lottie animation. In this example, the animation is loaded from a file named &amp;quot;Girl.json&amp;quot; located in the project.
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;HeightRequest=&amp;quot;400&amp;quot;&lt;/code&gt; and &lt;code&gt;WidthRequest=&amp;quot;400&amp;quot;&lt;/code&gt;: These attributes set the desired height and width of the SKLottieView, in this case, both set to 400. This property is very important to visualize Lottie animation.
&lt;/li&gt;
&lt;p&gt;This code essentially integrates a Lottie animation (from the &amp;quot;walking_batman.json&amp;quot; file) into your Xamarin.Forms application, configuring its repeat behavior and dimensions. Adjust these attributes based on your specific animation and layout requirements.&lt;/p&gt;
&lt;/ul&gt;
&lt;br/&gt;
&lt;h2 id=&quot;demo&quot;&gt;Demo&lt;/h2&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe class=&quot;BLOG_video_class&quot; allowfullscreen=&quot;&quot; youtube-src-id=&quot;MG_45nAPGYY&quot; width=&quot;600&quot; height=&quot;498&quot; src=&quot;https://www.youtube.com/embed/MG_45nAPGYY&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;

&lt;h2 id=&quot;downloadcode&quot;&gt;Download Code:&lt;/h2&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
  You can download the code from
  &lt;a href=&quot;https://github.com/androidmads/MauiLottieAnimations&quot;&gt;GitHub&lt;/a&gt;. If you
  have any doubts, feel free to post a comment. If you liked this article, and
  it is useful to you, do like, share the article &amp;amp; star the repository on
  &lt;a href=&quot;https://github.com/androidmads/MauiLottieAnimations&quot;&gt;GitHub&lt;/a&gt;.
&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
  &lt;a href=&quot;https://github.com/androidmads/MauiLottieAnimations&quot; target=&quot;_blank&quot;&gt;
    &lt;button class=&quot;github&quot; style=&quot;padding-left: 10px; padding-right: 10px;&quot;&gt;
      &lt;i class=&quot;fa fa-github&quot;&gt;&lt;/i&gt; Download From GitHub
    &lt;/button&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;a
  href=&quot;https://twitter.com/share?ref_src=twsrc%5Etfw&quot;
  class=&quot;twitter-share-button&quot;
  data-show-count=&quot;false&quot;
  &gt;Tweet&lt;/a
&gt;
&lt;script
  async
  src=&quot;https://platform.twitter.com/widgets.js&quot;
  charset=&quot;utf-8&quot;
&gt;&lt;/script&gt;
</content><link rel='replies' type='application/atom+xml' href='http://www.androidmads.info/feeds/603187596064577834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.androidmads.info/2023/11/lottie-animations-in-net-maui.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/603187596064577834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/603187596064577834'/><link rel='alternate' type='text/html' href='http://www.androidmads.info/2023/11/lottie-animations-in-net-maui.html' title='Lottie animations in .NET MAUI'/><author><name>Mushtaq</name><uri>http://www.blogger.com/profile/16822127241692763805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEidn8eEM_M8FGG594q5uugeqiGyLoGl_rlVG3J2Ga7_lhkd0o2jy4LCvIBS1bjNu8PUz2kalCp0txhWA8rMRvm2KGdi5qsFPdVy5c3-mikBEfpljJcqrg89KwXMPsDvMGxDpz47gfj7_EXM00TFlCFDQY77lRJ3SIz4MlUyrfTTyC5gGvJgxeJsoxV6zyH4/s72-c/NET%20MAUI%20Lottie%20Animations.gif" height="72" width="72"/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8952965959597039944.post-7849495940094625076</id><published>2023-11-12T22:07:00.000+05:30</published><updated>2023-11-12T22:07:34.919+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term=".net maui"/><category scheme="http://www.blogger.com/atom/ns#" term="hyper link label"/><category scheme="http://www.blogger.com/atom/ns#" term="UI"/><title type='text'>Transforming Labels into Hyperlinks with .NET MAUI</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
  &lt;a
    href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNLW2csDUSg3jf_t2FV1ql8MFuWRLKz50H3qreb1VGawO0HejltB2wy1lqxE9iPpWBNkWPIrT0qCjNU75fRyuyiSB2_x3YHXBmN4_QEdAO6_Zfq1DyJLDgpIayC4r_0u0EpYctMJnwrdCmF_q9azjEHRUX54OJYtuxG-sQICna01mdEr-Tiwx8x9kFiQN1/s680/post_banner_hyperlinks.jpg&quot;
    style=&quot;display: block; padding: 1em 0; text-align: center; &quot;
    &gt;&lt;img
      alt=&quot;&quot;
      border=&quot;0&quot;
      width=&quot;600&quot;
      data-original-height=&quot;400&quot;
      data-original-width=&quot;680&quot;
      src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNLW2csDUSg3jf_t2FV1ql8MFuWRLKz50H3qreb1VGawO0HejltB2wy1lqxE9iPpWBNkWPIrT0qCjNU75fRyuyiSB2_x3YHXBmN4_QEdAO6_Zfq1DyJLDgpIayC4r_0u0EpYctMJnwrdCmF_q9azjEHRUX54OJYtuxG-sQICna01mdEr-Tiwx8x9kFiQN1/s600/post_banner_hyperlinks.jpg&quot;
  /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;h2 style=&quot;text-align: start&quot;&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: justify;&quot;&gt;
  Our phones and computers are like magic doors to the world, thanks to the apps
  we use every day. These apps show us stuff using a mix of words, pictures, and
  special links that let us explore more. 🌐 Links, especially, make it easy for
  us to dive deep into things. In this guide, we&#39;ll learn how to add these
  special links to your .NET MAUI apps, making it more fun for people to check
  out what you have to share. Join us on this enlightening journey as we unravel
  the secrets of Transforming Labels into Hyperlinks with .NET MAUI.
&lt;/p&gt;
&lt;br /&gt;
&lt;h2&gt;Quick Links:&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#project_setup&quot;&gt;Project Setup&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#implementation&quot;&gt;Implementation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#demo&quot;&gt;Demo&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#fullcode&quot;&gt;Full Code&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#downloadcode&quot;&gt;Download Code&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h2 id=&quot;project_setup&quot;&gt;Project Setup:&lt;/h2&gt;
&lt;ul&gt;
  &lt;li&gt;
    Launch Visual Studio 2022, and in the start window click Create a new
    project to create a new project.
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzOv8pOBUAlBsbGt1AkkUl-bM-vVE4bQ6pb7UGwnDzkayKqlCDB7tkOnX2lXoKa3JjWWm0Kx52jQq51BCH-VftKYDSUVnMlxpy4UTdfuPKAhq6gYu9Otfl8aN96LT_cWeSjpLhZQAuwP6mmZ2t5tSekobapcDCwn8ejil3NWndhUYn355tjZZFUPF1ug/s1200/new-solution.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzOv8pOBUAlBsbGt1AkkUl-bM-vVE4bQ6pb7UGwnDzkayKqlCDB7tkOnX2lXoKa3JjWWm0Kx52jQq51BCH-VftKYDSUVnMlxpy4UTdfuPKAhq6gYu9Otfl8aN96LT_cWeSjpLhZQAuwP6mmZ2t5tSekobapcDCwn8ejil3NWndhUYn355tjZZFUPF1ug/s600/new-solution.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    In the Create a new project window, select MAUI in the All project types
    drop-down, select the .NET MAUI App template, and click the Next button:
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvmHzDB9roM54eTITNn98vmLEd3_ZKeEV7UQS8NV-ZcXOn8cA5NgSXwkzplOCCnh7s3or8dnrrERvDFrS1cflCbjWYOEVSYQS1FtLNTm1czQ5HV_HQGaIG7HfVieP-QG3BS3h78SMiG22Tn2FN-P0k-XH_dRN-YkKZzen1ksjS6VTU0BXaaScdq9FKOw/s1200/new-project.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvmHzDB9roM54eTITNn98vmLEd3_ZKeEV7UQS8NV-ZcXOn8cA5NgSXwkzplOCCnh7s3or8dnrrERvDFrS1cflCbjWYOEVSYQS1FtLNTm1czQ5HV_HQGaIG7HfVieP-QG3BS3h78SMiG22Tn2FN-P0k-XH_dRN-YkKZzen1ksjS6VTU0BXaaScdq9FKOw/s600/new-project.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    In the configure your new project window, name your project, choose a
    suitable location for it, and click the Next button:
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj--GmLz3WxLN4qtknFhozRtTBwwkz_AxvI-hCelj855eeUb0_QVNVT3RuMUkY3EpWvNJYRCRsx_sH6T_JE7hG3HnqMXBd8sT4OQAhrk2q1MGNYZ7TOYlnYdR-gK3nHLklT1_P3bOboirDaQgMSzsoXYi6jyaUjMQPeA7CCm8dnkFv7fgjB8sS1lNoNjw/s1200/configure-project.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj--GmLz3WxLN4qtknFhozRtTBwwkz_AxvI-hCelj855eeUb0_QVNVT3RuMUkY3EpWvNJYRCRsx_sH6T_JE7hG3HnqMXBd8sT4OQAhrk2q1MGNYZ7TOYlnYdR-gK3nHLklT1_P3bOboirDaQgMSzsoXYi6jyaUjMQPeA7CCm8dnkFv7fgjB8sS1lNoNjw/s600/configure-project.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    In the Additional information window, click the Create button:
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPN3YEOazTEnIaGk2OVCpSPBkpESp9mkVtM-9HOHrYCl6eB6PS_dHrtO3W118Up_gYQM253gSg-vUY2bVK1vGgx5Pqy56T050OPIUlAUJmpUJD_fYYDK_nXAzkOZNmzSAvaQuKxNPQ7Yu9fNna4u8TqnWJ5l0vB3u9_HXdCwMkTwEN8EhYeEdIwTP6Kw/s1200/additional-information.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;799&quot;
          data-original-width=&quot;1200&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPN3YEOazTEnIaGk2OVCpSPBkpESp9mkVtM-9HOHrYCl6eB6PS_dHrtO3W118Up_gYQM253gSg-vUY2bVK1vGgx5Pqy56T050OPIUlAUJmpUJD_fYYDK_nXAzkOZNmzSAvaQuKxNPQ7Yu9fNna4u8TqnWJ5l0vB3u9_HXdCwMkTwEN8EhYeEdIwTP6Kw/s600/additional-information.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
  &lt;li&gt;
    Once the project is created, we can able to see the Android, iOS, Windows
    and other running options in the toolbar. Press the emulator or run button
    to build and run the app
    &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;
      &lt;a
        href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibxmNp8IWrlvt_8CrP026ph80zvYG_tAnoFqfRZNd-v0Yp35ROFtaRhh4WVAOJxkHwJZ-qfd1ehN7dH7ZwKX99mtk_T88R0QXyTN2XOmFhp8AYSd1duDs_VQMJcy7F5Mhi3gcrNAOyDqZOTHCctZTKaiBJJZXOVda8IfDr7OxpTGL1OYBKGY9tqF3QhQ/s1117/android-emulator-button.png&quot;
        style=&quot;display: block; padding: 1em 0px; text-align: center;&quot;
        &gt;&lt;img
          alt=&quot;&quot;
          border=&quot;0&quot;
          data-original-height=&quot;79&quot;
          data-original-width=&quot;1117&quot;
          src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibxmNp8IWrlvt_8CrP026ph80zvYG_tAnoFqfRZNd-v0Yp35ROFtaRhh4WVAOJxkHwJZ-qfd1ehN7dH7ZwKX99mtk_T88R0QXyTN2XOmFhp8AYSd1duDs_VQMJcy7F5Mhi3gcrNAOyDqZOTHCctZTKaiBJJZXOVda8IfDr7OxpTGL1OYBKGY9tqF3QhQ/s600/android-emulator-button.png&quot;
          width=&quot;600&quot;
      /&gt;&lt;/a&gt;
    &lt;/div&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;implementation&quot;&gt;Implementation&lt;/h2&gt;
&lt;ul&gt;
  &lt;li style=&quot;text-align: justify;&quot;&gt;
    In this step, we&#39;ll include two labels within the horizontal layout to position them closely to each other.
  &lt;/li&gt;
  &lt;li style=&quot;text-align: justify;&quot;&gt;
    The first text will serve as regular text, representing the standard label.
  &lt;/li&gt;
  &lt;li style=&quot;text-align: justify;&quot;&gt;
    The second text will function as a hyperlink, characterized by blue text color and underlined as text decoration.
  &lt;/li&gt;
  &lt;li&gt;The following code snippet will help in grasping the concept more clearly.&lt;/li&gt;
  &lt;pre&gt;&lt;code&gt;&amp;lt;HorizontalStackLayout&amp;gt;
	&amp;lt;Label
		Text=&quot;To know more about .NET MAUI &quot;
		SemanticProperties.HeadingLevel=&quot;Level1&quot;
		FontSize=&quot;Default&quot;
		HorizontalOptions=&quot;Center&quot; /&amp;gt;

	&amp;lt;Label
		Text=&quot;Visit Here&quot;
		TextDecorations=&quot;Underline&quot;
		TextColor=&quot;Blue&quot;
		SemanticProperties.HeadingLevel=&quot;Level1&quot;
		FontSize=&quot;Default&quot;
		HorizontalOptions=&quot;Center&quot; &amp;gt;
		&amp;lt;Label.GestureRecognizers&amp;gt;
			&amp;lt;TapGestureRecognizer Tapped=&quot;OnUrlClicked&quot;/&amp;gt;
		&amp;lt;/Label.GestureRecognizers&amp;gt;
	&amp;lt;/Label&amp;gt;
&amp;lt;/HorizontalStackLayout&amp;gt;&lt;/code&gt;&lt;/pre&gt;
  &lt;li&gt;
    Incorporate the tap gesture event &quot;OnUrlClicked&quot; to open the specified URL link, as demonstrated below.
    &lt;pre&gt;&lt;code&gt;private async void OnUrlClicked(object sender, TappedEventArgs e)
{
	await Launcher.OpenAsync(&quot;https://www.androidmads.info/search/label/.net%20maui&quot;);
}&lt;/code&gt;&lt;/pre&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;fullcode&quot;&gt;Full Code:&lt;/h2&gt;
&lt;script src=&quot;https://gist.github.com/androidmads/86ef33f977fd823830238f61cc1f0f69.js&quot;&gt;&lt;/script&gt;

&lt;h2 id=&quot;demo&quot;&gt;Demo&lt;/h2&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;iframe class=&quot;BLOG_video_class&quot; allowfullscreen=&quot;&quot; youtube-src-id=&quot;m7LBtthTRZM&quot; width=&quot;600&quot; height=&quot;498&quot; src=&quot;https://www.youtube.com/embed/m7LBtthTRZM&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;

&lt;h2 id=&quot;downloadcode&quot;&gt;Download Code:&lt;/h2&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
  You can download the code from
  &lt;a href=&quot;https://github.com/androidmads/MauiActionLabel&quot;&gt;GitHub&lt;/a&gt;. If you have any
  doubts, feel free to post a comment. If you liked this article, and it is
  useful to you, do like, share the article &amp;amp; star the repository on
  &lt;a href=&quot;https://github.com/androidmads/MauiActionLabel&quot;&gt;GitHub&lt;/a&gt;.
&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
  &lt;a href=&quot;https://github.com/androidmads/MauiActionLabel&quot; target=&quot;_blank&quot;&gt;
    &lt;button class=&quot;github&quot; style=&quot;padding-left: 10px; padding-right: 10px;&quot;&gt;
      &lt;i class=&quot;fa fa-github&quot;&gt;&lt;/i&gt; Download From GitHub
    &lt;/button&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;a
  href=&quot;https://twitter.com/share?ref_src=twsrc%5Etfw&quot;
  class=&quot;twitter-share-button&quot;
  data-show-count=&quot;false&quot;
  &gt;Tweet&lt;/a
&gt;
&lt;script
  async
  src=&quot;https://platform.twitter.com/widgets.js&quot;
  charset=&quot;utf-8&quot;
&gt;&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.androidmads.info/feeds/7849495940094625076/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.androidmads.info/2023/11/transforming-labels-into-hyperlinks.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/7849495940094625076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8952965959597039944/posts/default/7849495940094625076'/><link rel='alternate' type='text/html' href='http://www.androidmads.info/2023/11/transforming-labels-into-hyperlinks.html' title='Transforming Labels into Hyperlinks with .NET MAUI'/><author><name>Mushtaq</name><uri>http://www.blogger.com/profile/16822127241692763805</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNLW2csDUSg3jf_t2FV1ql8MFuWRLKz50H3qreb1VGawO0HejltB2wy1lqxE9iPpWBNkWPIrT0qCjNU75fRyuyiSB2_x3YHXBmN4_QEdAO6_Zfq1DyJLDgpIayC4r_0u0EpYctMJnwrdCmF_q9azjEHRUX54OJYtuxG-sQICna01mdEr-Tiwx8x9kFiQN1/s72-c/post_banner_hyperlinks.jpg" height="72" width="72"/><thr:total>2</thr:total></entry></feed>