<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Om Chauhan - Blog]]></title><description><![CDATA[Flutter tips, blogs, snippets, tools &amp; community to level up your dev skills.]]></description><link>https://blog.om-chauhan.dev</link><generator>RSS for Node</generator><lastBuildDate>Wed, 08 Apr 2026 13:27:59 GMT</lastBuildDate><atom:link href="https://blog.om-chauhan.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[📌 Flutter Asset Viewer Pro – Ultimate Asset Manager for VS Code]]></title><description><![CDATA[If you're building Flutter apps and spending too much time searching for image files, copying asset paths, or switching between folder views — there's a cleaner way to handle all this. Flutter Asset V]]></description><link>https://blog.om-chauhan.dev/flutter-asset-viewer-pro-ultimate-asset-manager-for-vs-code</link><guid isPermaLink="true">https://blog.om-chauhan.dev/flutter-asset-viewer-pro-ultimate-asset-manager-for-vs-code</guid><category><![CDATA[Flutter]]></category><category><![CDATA[Flutter Examples]]></category><category><![CDATA[Flutter App Development]]></category><category><![CDATA[images]]></category><dc:creator><![CDATA[Omprakash Chauhan]]></dc:creator><pubDate>Thu, 26 Feb 2026 18:43:12 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/62a610a5165482d2b3eee87f/518840d0-2033-40cc-afd0-c13444a40921.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you're building <strong>Flutter apps</strong> and spending too much time searching for image files, copying asset paths, or switching between folder views — there's a cleaner way to handle all this. <strong>Flutter Asset Viewer Pro</strong> is a powerful VS Code extension that transforms how you <strong>browse, preview, and use image assets</strong> in your projects.</p>
<h2>🚀 What Is Flutter Asset Viewer Pro?</h2>
<p><strong>Flutter Asset Viewer Pro</strong> is a <strong>free VS Code extension</strong> that helps Flutter (and even web or React) developers manage their assets quickly without leaving the editor. It lets you effortlessly view all image files in a project, preview them visually, and insert the correct paths into your code with a single click.</p>
<h2>👉 Download Now: <a href="https://marketplace.visualstudio.com/items?itemName=om-chauhan.flutter-asset-viewer-pro">Link</a></h2>
<h2>🚀 Demo Video (YouTube):</h2>
<iframe width="560" height="315" src="https://www.youtube.com/embed/DgGE8OWrzHM?si=YHwtRUnNP57Pw6KK" frameborder="0" allowfullscreen></iframe>

<p>In any Flutter app, managing assets like icons, images, and media files can become messy as the project grows — and missing or incorrect paths are a common source of bugs. Flutter requires developers to manually list asset paths in the <code>pubspec.yaml</code> file and reference them in code, which often means toggling between folders and editors.</p>
<p><strong>Flutter Asset Viewer Pro solves these pain points by:</strong></p>
<ul>
<li><p>giving you a <strong>visual gallery</strong> of project assets</p>
</li>
<li><p>letting you <strong>search and filter</strong> by file name, type, or folder</p>
</li>
<li><p>enabling <strong>one-click insertion</strong> of asset paths into your Flutter code</p>
</li>
<li><p>providing <strong>autocomplete</strong> with live previews as you type</p>
</li>
</ul>
<hr />
<h2>💡 Key Features at a Glance</h2>
<p>Here are the standout features that make this extension a must-have for asset handling:</p>
<h3>🎨 Multiple View Modes</h3>
<p>You can switch between several gallery layouts like <strong>grid</strong>, <strong>list</strong>, <strong>compact</strong>, <strong>masonry</strong>, and <strong>detailed views</strong> — making browsing assets fast and intuitive.</p>
<h3>🔎 Instant Search &amp; Filters</h3>
<p>Search for assets by name or extension and filter results (e.g., only <code>.png</code> or <code>.svg</code> files), so you <em>never lose track</em> of your image files.</p>
<h3>📎 One-Click Asset Paths</h3>
<p>Instead of manually copying file paths, you can insert them directly into code as:</p>
<ul>
<li><p>Flutter widgets (<code>Image.asset(...)</code>)</p>
</li>
<li><p>HTML tags</p>
</li>
<li><p>React imports</p>
</li>
</ul>
<p>…with just one click.</p>
<h3>✨ IntelliSense &amp; Autocomplete</h3>
<p>When writing Dart code, the plugin suggests asset paths automatically — complete with live thumbnails. This saves time and reduces errors.</p>
<h3>📊 Asset Usage Finder</h3>
<p>See everywhere an asset is referenced in your project — super useful for cleanup or refactoring.</p>
<hr />
<h2>🛠 How It Works in VS Code</h2>
<p>Once installed:</p>
<ol>
<li><p>Open the <strong>Asset Panel</strong> in VS Code.</p>
</li>
<li><p>Browse all supported formats like PNG, SVG, JPG, WebP, GIF, and ICO.</p>
</li>
<li><p>Click any asset for a full preview and detailed info.</p>
</li>
<li><p>Use the built-in buttons to insert relative or absolute paths into your code seamlessly.</p>
</li>
</ol>
<p>This workflow eliminates tedious file browsing and reduces context-switching — allowing developers to focus on building features.</p>
<hr />
<h2>📈 Benefits for Productivity</h2>
<p>Adding <strong>Flutter Asset Viewer Pro</strong> to your dev toolkit helps you:</p>
<ul>
<li><p>🎯 Stay focused — no need to leave VS Code for asset tasks</p>
</li>
<li><p>⚡ Speed up coding — autocomplete and previews reduce mistakes</p>
</li>
<li><p>🧹 Clean up unused images easily</p>
</li>
<li><p>🧠 Keep track of assets even in large projects</p>
</li>
</ul>
<hr />
<h2>🧩 Final Thoughts</h2>
<p>Assets are a core part of any visually rich Flutter app, and managing them well can save developers serious time. <strong>Flutter Asset Viewer Pro</strong> turns a previously manual process into a smooth, visual workflow — helping you write cleaner, more efficient code.</p>
<p>Whether you're a seasoned Flutter pro or just starting out, this extension is a practical addition to your development environment.</p>
]]></content:encoded></item><item><title><![CDATA[Flutter Dart Code Generation: From Visual Design to Production Code]]></title><description><![CDATA[The core promise of Flutter Shape Builder is simple: design shapes visually, get production-ready Dart code. No more guessing coordinates. No more trial-and-error hot-reload cycles. Draw it, style it, export it.
In this article, we dive deep into the...]]></description><link>https://blog.om-chauhan.dev/flutter-dart-code-generation-from-visual-design-to-production-code</link><guid isPermaLink="true">https://blog.om-chauhan.dev/flutter-dart-code-generation-from-visual-design-to-production-code</guid><category><![CDATA[Flutter]]></category><category><![CDATA[Flutter Examples]]></category><category><![CDATA[Flutter Widgets]]></category><category><![CDATA[flutter]]></category><dc:creator><![CDATA[Omprakash Chauhan]]></dc:creator><pubDate>Mon, 16 Feb 2026 19:39:20 GMT</pubDate><content:encoded><![CDATA[<p>The core promise of Flutter Shape Builder is simple: <strong>design shapes visually, get production-ready Dart code</strong>. No more guessing coordinates. No more trial-and-error hot-reload cycles. Draw it, style it, export it.</p>
<p>In this article, we dive deep into the code generation engine — the three export modes, how colors are converted, what the generated code looks like, and how validation keeps your output clean.</p>
<hr />
<h2 id="heading-three-export-modes"><strong>Three export modes</strong></h2>
<p>Flutter Shape Builder offers three levels of Dart code export, depending on how you want to use the generated code:</p>
<h3 id="heading-1-full-runnable-app"><strong>1. Full Runnable App</strong></h3>
<p>Generates a complete <code>main.dart</code> file with a <code>MaterialApp</code>, a <code>StatelessWidget</code>, and the <code>CustomPainter</code> class. You can paste this directly into a new Flutter project and run it immediately.</p>
<pre><code class="lang-dart"><span class="hljs-keyword">import</span> <span class="hljs-string">'package:flutter/material.dart'</span>;

<span class="hljs-keyword">void</span> main() =&gt; runApp(<span class="hljs-keyword">const</span> MyApp());

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyApp</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">StatelessWidget</span> </span>{
  <span class="hljs-keyword">const</span> MyApp({<span class="hljs-keyword">super</span>.key});

  <span class="hljs-meta">@override</span>
  Widget build(BuildContext context) {
    <span class="hljs-keyword">return</span> MaterialApp(
      home: Scaffold(
        body: Center(
          child: CustomPaint(
            size: Size(<span class="hljs-number">400</span>, <span class="hljs-number">300</span>),
            painter: MyShapePainter(),
          ),
        ),
      ),
    );
  }
}

<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyShapePainter</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">CustomPainter</span> </span>{
  <span class="hljs-meta">@override</span>
  <span class="hljs-keyword">void</span> paint(Canvas canvas, Size size) {
    <span class="hljs-keyword">final</span> paint = Paint()
      ..color = Color(<span class="hljs-number">0xFF6366F1</span>)
      ..style = PaintingStyle.fill;

    <span class="hljs-keyword">final</span> path = Path();
    path.moveTo(<span class="hljs-number">50.0</span>, <span class="hljs-number">100.0</span>);
    path.lineTo(<span class="hljs-number">200.0</span>, <span class="hljs-number">50.0</span>);
    path.lineTo(<span class="hljs-number">350.0</span>, <span class="hljs-number">100.0</span>);
    path.lineTo(<span class="hljs-number">200.0</span>, <span class="hljs-number">250.0</span>);
    path.close();

    canvas.drawPath(path, paint);
  }

  <span class="hljs-meta">@override</span>
  <span class="hljs-built_in">bool</span> shouldRepaint(<span class="hljs-keyword">covariant</span> CustomPainter oldDelegate) =&gt; <span class="hljs-keyword">false</span>;
}
</code></pre>
<h3 id="heading-2-statelesswidget"><strong>2. StatelessWidget</strong></h3>
<p>Generates a reusable widget class that wraps the <code>CustomPaint</code> widget and painter. Drop this into any existing widget tree.</p>
<h3 id="heading-3-custompainter-only"><strong>3. CustomPainter Only</strong></h3>
<p>Generates just the <code>CustomPainter</code> class with its <code>paint()</code> method. This is ideal when you already have a widget structure and just need the painting logic.</p>
<hr />
<h2 id="heading-automatic-color-conversion"><strong>Automatic color conversion</strong></h2>
<p>Flutter Shape Builder handles the color format conversion automatically. When you pick a color using the built-in HEX color picker (with alpha channel support), the exporter converts it to Flutter's <code>Color(0xAARRGGBB)</code> format:</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>HEX Input</td><td>Opacity</td><td>Flutter Output</td></tr>
</thead>
<tbody>
<tr>
<td><code>#6366f1</code></td><td>100%</td><td><code>Color(0xFF6366F1)</code></td></tr>
<tr>
<td><code>#10b981</code></td><td>50%</td><td><code>Color(0x8010B981)</code></td></tr>
<tr>
<td><code>#ef4444</code></td><td>75%</td><td><code>Color(0xBFEF4444)</code></td></tr>
</tbody>
</table>
</div><p>Fill colors, stroke colors, stroke widths, and opacity values are all encoded correctly in the generated <code>Paint</code> objects.</p>
<hr />
<h2 id="heading-multi-shape-compositions"><strong>Multi-shape compositions</strong></h2>
<p>When your canvas contains multiple shapes, the code generator produces painting commands for each shape in the correct z-order (layer order). Each shape gets its own <code>Paint</code> configuration and path definition, ensuring the final rendering matches your visual design exactly.</p>
<hr />
<h2 id="heading-pre-export-validation"><strong>Pre-export validation</strong></h2>
<p>Before generating code, Flutter Shape Builder runs a validation pass to catch potential issues:</p>
<ul>
<li><p><strong>Unsupported SVG features</strong> — warnings for features like SVG Arcs that don't have a direct <code>Path</code> equivalent in Flutter</p>
</li>
<li><p><strong>Empty shapes</strong> — alerts if a shape has no path data</p>
</li>
<li><p><strong>Linting feedback</strong> — shown directly in the sidebar so you can fix issues before copying the code</p>
</li>
</ul>
<p>This validation ensures the code you export compiles and renders correctly on the first try.</p>
<hr />
<h2 id="heading-additional-export-formats"><strong>Additional export formats</strong></h2>
<p>Beyond Dart code, Flutter Shape Builder supports:</p>
<ul>
<li><p><strong>SVG export</strong> — standard-compliant SVG files for web use, design tools, and documentation</p>
</li>
<li><p><strong>JSON export</strong> — raw shape configuration data for custom processing pipelines</p>
</li>
</ul>
<hr />
<h2 id="heading-why-generated-code-beats-hand-written-paths"><strong>Why generated code beats hand-written paths</strong></h2>
<ul>
<li><p><strong>Speed</strong> — design complex shapes in minutes instead of hours</p>
</li>
<li><p><strong>Accuracy</strong> — every coordinate is exactly where you placed it visually</p>
</li>
<li><p><strong>Consistency</strong> — colors, strokes, and transforms are always correctly formatted</p>
</li>
<li><p><strong>Iteration</strong> — change your design and the code updates instantly</p>
</li>
<li><p><strong>Clean output</strong> — generated code uses standard Flutter APIs with no external dependencies</p>
</li>
</ul>
<hr />
<h2 id="heading-generate-your-first-flutter-shape"><strong>Generate your first Flutter shape</strong></h2>
<p>Draw a shape, pick your export mode, and copy production-ready Dart code in seconds.</p>
<p><a target="_blank" href="https://fluttershaper.com/editor"><strong>Open the Editor →</strong></a></p>
<hr />
]]></content:encoded></item><item><title><![CDATA[Boolean Operations: Unite, Subtract, Intersect & Exclude Shapes in Flutter]]></title><description><![CDATA[Creating complex shapes in Flutter often means combining simpler shapes together. A speech bubble is a rectangle merged with a triangle. A donut is a circle with another circle subtracted from its center. A badge is the intersection of two overlappin...]]></description><link>https://blog.om-chauhan.dev/boolean-operations-unite-subtract-intersect-and-exclude-shapes-in-flutter</link><guid isPermaLink="true">https://blog.om-chauhan.dev/boolean-operations-unite-subtract-intersect-and-exclude-shapes-in-flutter</guid><category><![CDATA[Flutter]]></category><category><![CDATA[Flutter Examples]]></category><category><![CDATA[Flutter Widgets]]></category><category><![CDATA[flutter]]></category><dc:creator><![CDATA[Omprakash Chauhan]]></dc:creator><pubDate>Mon, 16 Feb 2026 19:37:57 GMT</pubDate><content:encoded><![CDATA[<p>Creating complex shapes in Flutter often means combining simpler shapes together. A speech bubble is a rectangle merged with a triangle. A donut is a circle with another circle subtracted from its center. A badge is the intersection of two overlapping forms.</p>
<p><strong>Flutter Shape Builder</strong> provides four boolean operations that let you combine shapes visually and export the result as a single, clean Flutter <code>Path</code>. These operations are powered by the <strong>Paper.js</strong> computational geometry engine for pixel-perfect accuracy.</p>
<hr />
<h2 id="heading-the-four-boolean-operations"><strong>The four boolean operations</strong></h2>
<h3 id="heading-unite-merge"><strong>Unite (Merge)</strong></h3>
<p>The <strong>Unite</strong> operation merges two or more overlapping shapes into a single combined shape. The result is the outer boundary of all selected shapes combined.</p>
<p><strong>Use cases:</strong> speech bubbles, complex silhouettes, merged UI elements, logos with connected parts.</p>
<pre><code class="lang-dart"><span class="hljs-comment">// Before: two separate shapes</span>
<span class="hljs-comment">// After unite: one merged path</span>
<span class="hljs-keyword">final</span> mergedPath = Path();
mergedPath.moveTo(<span class="hljs-number">50.0</span>, <span class="hljs-number">50.0</span>);
<span class="hljs-comment">// ... combined outline coordinates</span>
mergedPath.close();
canvas.drawPath(mergedPath, paint);
</code></pre>
<h3 id="heading-subtract-cut"><strong>Subtract (Cut)</strong></h3>
<p>The <strong>Subtract</strong> operation cuts one shape out of another, like a cookie cutter. Select two shapes — the first shape is the base, and the second shape is removed from it.</p>
<p><strong>Use cases:</strong> donut shapes, cutout effects, keyhole shapes, notched containers, ring indicators.</p>
<h3 id="heading-intersect-overlap"><strong>Intersect (Overlap)</strong></h3>
<p>The <strong>Intersect</strong> operation keeps only the area where all selected shapes overlap. Everything outside the intersection is removed.</p>
<p><strong>Use cases:</strong> Venn diagram overlaps, clipped shapes, masked regions, cropped elements.</p>
<h3 id="heading-exclude-xor"><strong>Exclude (XOR)</strong></h3>
<p>The <strong>Exclude</strong> operation keeps everything <em>except</em> the overlapping region. It is the inverse of Intersect.</p>
<p><strong>Use cases:</strong> frame effects, inverted masks, decorative patterns, hollow logo shapes.</p>
<hr />
<h2 id="heading-how-to-use-boolean-operations"><strong>How to use boolean operations</strong></h2>
<ol>
<li><p><strong>Draw two or more shapes</strong> using the Rectangle, Circle, Polygon, or Pen tools</p>
</li>
<li><p><strong>Select multiple shapes</strong> by holding Shift and clicking each shape</p>
</li>
<li><p><strong>Choose an operation</strong> from the toolbar — Unite, Subtract, Intersect, or Exclude</p>
</li>
<li><p>The shapes are combined into a <strong>single new path</strong> with the result of the operation</p>
</li>
</ol>
<p>The resulting shape is a standard path that you can further edit, style, combine with other shapes, or export as Flutter code.</p>
<hr />
<h2 id="heading-under-the-hood-paperjs-geometry-engine"><strong>Under the hood: Paper.js geometry engine</strong></h2>
<p>Boolean operations on vector paths are computationally complex. Flutter Shape Builder uses <strong>Paper.js</strong>, a battle-tested open-source vector graphics library, to perform these calculations with precision. Paper.js handles edge cases like tangent intersections, self-intersecting paths, and floating-point rounding that would be extremely difficult to implement from scratch.</p>
<p>The workflow internally:</p>
<ol>
<li><p>Your canvas shapes are converted to Paper.js path representations</p>
</li>
<li><p>Paper.js computes the boolean operation (unite, subtract, intersect, or exclude)</p>
</li>
<li><p>The resulting path is converted back to SVG commands</p>
</li>
<li><p>Those commands are displayed on the canvas and translated to Flutter Dart code</p>
</li>
</ol>
<hr />
<h2 id="heading-practical-examples"><strong>Practical examples</strong></h2>
<h3 id="heading-creating-a-speech-bubble"><strong>Creating a speech bubble</strong></h3>
<ol>
<li><p>Draw a rounded rectangle for the bubble body</p>
</li>
<li><p>Draw a small triangle for the tail pointer</p>
</li>
<li><p>Select both shapes and click <strong>Unite</strong></p>
</li>
<li><p>Result: a single path representing a complete speech bubble</p>
</li>
</ol>
<h3 id="heading-creating-a-ring-donut"><strong>Creating a ring / donut</strong></h3>
<ol>
<li><p>Draw a large circle (outer ring)</p>
</li>
<li><p>Draw a smaller circle centered inside (inner cutout)</p>
</li>
<li><p>Select both and click <strong>Subtract</strong></p>
</li>
<li><p>Result: a ring shape with a hollow center</p>
</li>
</ol>
<h3 id="heading-creating-a-badge-with-cutout"><strong>Creating a badge with cutout</strong></h3>
<ol>
<li><p>Draw a hexagon for the badge shape</p>
</li>
<li><p>Draw a star or icon shape on top</p>
</li>
<li><p>Select both and click <strong>Exclude</strong></p>
</li>
<li><p>Result: a hexagonal badge with the icon shape cut through it</p>
</li>
</ol>
<hr />
<h2 id="heading-flutter-pathcombine-comparison"><strong>Flutter Path.combine comparison</strong></h2>
<p>Flutter's built-in <code>Path.combine()</code> method supports <code>PathOperation.union</code>, <code>PathOperation.difference</code>, <code>PathOperation.intersect</code>, and <code>PathOperation.xor</code>. Flutter Shape Builder pre-computes these operations at design time, so your exported code contains just the final path coordinates — no runtime computation needed. This results in faster rendering and simpler code.</p>
<hr />
<h2 id="heading-combine-shapes-visually"><strong>Combine shapes visually</strong></h2>
<p>Draw overlapping shapes, select them, and apply boolean operations. Export the result as clean Flutter code.</p>
<p><a target="_blank" href="https://fluttershaper.com/editor"><strong>Open the Editor →</strong></a></p>
<hr />
]]></content:encoded></item><item><title><![CDATA[Layer Management: Organize Complex Flutter Shape Compositions]]></title><description><![CDATA[As your Flutter shape designs grow more complex — multiple overlapping paths, layered elements, intricate compositions — keeping everything organized becomes critical. Flutter Shape Builder includes a full layer management system that gives you preci...]]></description><link>https://blog.om-chauhan.dev/layer-management-organize-complex-flutter-shape-compositions</link><guid isPermaLink="true">https://blog.om-chauhan.dev/layer-management-organize-complex-flutter-shape-compositions</guid><category><![CDATA[Flutter]]></category><category><![CDATA[Flutter Examples]]></category><category><![CDATA[Flutter Widgets]]></category><category><![CDATA[flutter]]></category><dc:creator><![CDATA[Omprakash Chauhan]]></dc:creator><pubDate>Mon, 16 Feb 2026 19:36:29 GMT</pubDate><content:encoded><![CDATA[<p>As your Flutter shape designs grow more complex — multiple overlapping paths, layered elements, intricate compositions — keeping everything organized becomes critical. Flutter Shape Builder includes a full <strong>layer management system</strong> that gives you precise control over shape ordering, selection, and editing workflow.</p>
<hr />
<h2 id="heading-understanding-layers-in-flutter-shape-builder"><strong>Understanding layers in Flutter Shape Builder</strong></h2>
<p>Every shape you create is added as a layer in the layer panel (visible in the sidebar). Layers determine the <strong>z-order</strong> — which shapes appear in front of or behind other shapes. The layer at the top of the list is drawn last (appears on top), just like in Figma, Sketch, or Photoshop.</p>
<p>This z-order directly maps to the order of <code>canvas.drawPath()</code> calls in your generated Flutter code. Shapes drawn later appear on top of shapes drawn earlier.</p>
<hr />
<h2 id="heading-z-order-management"><strong>Z-order management</strong></h2>
<p>Reorder your shapes to control which elements overlap which:</p>
<ul>
<li><p><strong>Bring to Front</strong> — move the selected shape to the top of the stack (drawn last, appears on top)</p>
</li>
<li><p><strong>Send to Back</strong> — move the selected shape to the bottom of the stack (drawn first, appears behind everything)</p>
</li>
<li><p><strong>Move Up / Move Down</strong> — nudge a shape one position in the layer order</p>
</li>
</ul>
<p>These operations are accessible via the <strong>context menu</strong> (right-click on a shape) or through the layer panel controls.</p>
<hr />
<h2 id="heading-multi-selection"><strong>Multi-selection</strong></h2>
<p>Select multiple shapes at once to apply bulk operations:</p>
<ul>
<li><p><strong>Shift+Click</strong> — add or remove shapes from the current selection</p>
</li>
<li><p><strong>Bulk property editing</strong> — change fill color, stroke, or opacity for all selected shapes simultaneously</p>
</li>
<li><p><strong>Boolean operations</strong> — select two or more shapes and apply Unite, Subtract, Intersect, or Exclude</p>
</li>
<li><p><strong>Group delete</strong> — remove all selected shapes at once</p>
</li>
</ul>
<p>Multi-selection is essential for efficient editing of complex designs with many elements.</p>
<hr />
<h2 id="heading-shape-locking"><strong>Shape locking</strong></h2>
<p><strong>Lock a shape</strong> to prevent accidental edits. When a shape is locked:</p>
<ul>
<li><p>It cannot be moved, resized, or rotated</p>
</li>
<li><p>It cannot be deleted accidentally</p>
</li>
<li><p>It remains visible on the canvas but is non-interactive</p>
</li>
<li><p>It can still be selected in the layer panel for unlocking</p>
</li>
</ul>
<p>Shape locking is invaluable when you have background elements or reference shapes that should stay fixed while you work on foreground details.</p>
<hr />
<h2 id="heading-layer-renaming"><strong>Layer renaming</strong></h2>
<p>Give your layers meaningful names to keep track of what each shape represents:</p>
<ul>
<li><p>Double-click a layer name in the sidebar to rename it</p>
</li>
<li><p>Use descriptive names like "Header Background", "Icon Outline", or "Button Shape"</p>
</li>
<li><p>Named layers make it easier to find and select specific shapes in complex compositions</p>
</li>
</ul>
<hr />
<h2 id="heading-context-menu"><strong>Context menu</strong></h2>
<p>Right-click on any shape on the canvas to access the context menu with quick actions:</p>
<ul>
<li><p><strong>Bring to Front / Send to Back</strong> — z-order controls</p>
</li>
<li><p><strong>Lock / Unlock</strong> — toggle shape locking</p>
</li>
<li><p><strong>Delete</strong> — remove the shape</p>
</li>
<li><p><strong>Duplicate</strong> — create a copy of the shape</p>
</li>
</ul>
<p>The context menu provides fast access to the most common layer operations without needing to navigate the sidebar.</p>
<hr />
<h2 id="heading-how-layers-affect-generated-code"><strong>How layers affect generated code</strong></h2>
<p>The layer order directly determines the order of paint operations in your exported Flutter code. Shapes at the bottom of the layer stack are painted first:</p>
<pre><code class="lang-dart"><span class="hljs-meta">@override</span>
<span class="hljs-keyword">void</span> paint(Canvas canvas, Size size) {
  <span class="hljs-comment">// Bottom layer - painted first (behind)</span>
  <span class="hljs-keyword">final</span> backgroundPaint = Paint()..color = Color(<span class="hljs-number">0xFF1A1A24</span>);
  canvas.drawRect(Rect.fromLTWH(<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">400</span>, <span class="hljs-number">300</span>), backgroundPaint);

  <span class="hljs-comment">// Middle layer</span>
  <span class="hljs-keyword">final</span> shapePaint = Paint()..color = Color(<span class="hljs-number">0xFF6366F1</span>);
  canvas.drawPath(shapePath, shapePaint);

  <span class="hljs-comment">// Top layer - painted last (in front)</span>
  <span class="hljs-keyword">final</span> overlayPaint = Paint()..color = Color(<span class="hljs-number">0x8010B981</span>);
  canvas.drawPath(overlayPath, overlayPaint);
}
</code></pre>
<p>This means you get <strong>pixel-perfect control</strong> over which shapes appear in front — the visual order on your canvas matches the code output exactly.</p>
<hr />
<h2 id="heading-tips-for-organizing-complex-designs"><strong>Tips for organizing complex designs</strong></h2>
<ol>
<li><p><strong>Name your layers</strong> as you create them — it saves time later when your design has 10+ shapes</p>
</li>
<li><p><strong>Lock background shapes</strong> early so you don't accidentally move them while editing foreground elements</p>
</li>
<li><p><strong>Use z-ordering strategically</strong> — place decorative elements behind functional shapes</p>
</li>
<li><p><strong>Select multiple shapes</strong> with Shift+Click before applying boolean operations or bulk style changes</p>
</li>
<li><p><strong>Use the context menu</strong> for quick access to common operations instead of searching the sidebar</p>
</li>
</ol>
<hr />
<h2 id="heading-organize-your-flutter-shapes"><strong>Organize your Flutter shapes</strong></h2>
<p>Use the layer system to keep complex compositions clean and manageable.</p>
<p><a target="_blank" href="https://fluttershaper.com/editor"><strong>Open the Editor →</strong></a></p>
<hr />
]]></content:encoded></item><item><title><![CDATA[Real-Time Code Preview: See Your Flutter CustomPainter Code Instantly]]></title><description><![CDATA[One of the most powerful features of Flutter Shape Builder is the real-time code preview. As you draw, move, resize, or style shapes on the canvas, the corresponding Flutter Dart code updates instantly in the sidebar panel. There is no "generate" but...]]></description><link>https://blog.om-chauhan.dev/real-time-code-preview-see-your-flutter-custompainter-code-instantly</link><guid isPermaLink="true">https://blog.om-chauhan.dev/real-time-code-preview-see-your-flutter-custompainter-code-instantly</guid><category><![CDATA[Flutter]]></category><category><![CDATA[Flutter Examples]]></category><category><![CDATA[Flutter Widgets]]></category><category><![CDATA[flutter]]></category><dc:creator><![CDATA[Omprakash Chauhan]]></dc:creator><pubDate>Mon, 16 Feb 2026 19:31:10 GMT</pubDate><content:encoded><![CDATA[<p>One of the most powerful features of Flutter Shape Builder is the <strong>real-time code preview</strong>. As you draw, move, resize, or style shapes on the canvas, the corresponding Flutter Dart code updates instantly in the sidebar panel. There is no "generate" button to click — the code is always live and always in sync.</p>
<hr />
<h2 id="heading-how-it-works"><strong>How it works</strong></h2>
<p>The code preview panel is located in the <strong>sidebar</strong> on the right side of the editor. It shows the generated Dart code for all shapes currently on the canvas. Every action you take is immediately reflected:</p>
<ul>
<li><p><strong>Draw a new shape</strong> → new path and paint code appears</p>
</li>
<li><p><strong>Move a shape</strong> → coordinate values update</p>
</li>
<li><p><strong>Change fill color</strong> → <code>Color()</code> value updates</p>
</li>
<li><p><strong>Resize or rotate</strong> → dimensions and transform values update</p>
</li>
<li><p><strong>Delete a shape</strong> → its code block is removed</p>
</li>
<li><p><strong>Reorder layers</strong> → paint call order changes</p>
</li>
</ul>
<p>This tight feedback loop means you always know exactly what your Flutter code looks like — no surprises when you paste it into your project.</p>
<hr />
<h2 id="heading-syntax-highlighting"><strong>Syntax highlighting</strong></h2>
<p>The code preview uses <strong>syntax highlighting</strong> powered by React Syntax Highlighter with a dark theme optimized for the editor's color scheme. The highlighting covers:</p>
<ul>
<li><p>Dart keywords (<code>final</code>, <code>class</code>, <code>void</code>, <code>override</code>)</p>
</li>
<li><p>Type names (<code>Path</code>, <code>Paint</code>, <code>Canvas</code>, <code>Color</code>)</p>
</li>
<li><p>String and number literals</p>
</li>
<li><p>Method calls and property access</p>
</li>
<li><p>Comments</p>
</li>
</ul>
<p>Code is displayed in <strong>Fira Code</strong> monospace font for readability, matching what you would see in VS Code or Android Studio.</p>
<hr />
<h2 id="heading-copy-to-clipboard"><strong>Copy to clipboard</strong></h2>
<p>Click the <strong>copy button</strong> to copy the entire generated code to your clipboard in one click. Paste it directly into your Flutter project's <code>.dart</code> file and it compiles immediately. No formatting fixes or manual edits required.</p>
<hr />
<h2 id="heading-pre-export-validation"><strong>Pre-export validation</strong></h2>
<p>Before you copy, Flutter Shape Builder runs an automatic <strong>validation pass</strong> and displays any warnings directly in the sidebar:</p>
<ul>
<li><p><strong>Unsupported features</strong> — alerts you if your design uses features like SVG Arcs that don't have a direct Flutter equivalent</p>
</li>
<li><p><strong>Empty shapes</strong> — warns if a shape has no path data</p>
</li>
<li><p><strong>Rendering issues</strong> — flags potential problems that could cause unexpected behavior at runtime</p>
</li>
</ul>
<p>Validation warnings appear as non-blocking notices — you can still export the code, but the warnings help you make an informed decision about whether to adjust your design first.</p>
<hr />
<h2 id="heading-export-format-options"><strong>Export format options</strong></h2>
<p>The code preview panel lets you switch between three export formats:</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Format</td><td>What you get</td><td>Best for</td></tr>
</thead>
<tbody>
<tr>
<td><strong>Full Runnable App</strong></td><td>Complete <code>main.dart</code> with MaterialApp</td><td>Quick testing and demos</td></tr>
<tr>
<td><strong>StatelessWidget</strong></td><td>Reusable widget with CustomPaint</td><td>Dropping into existing widget trees</td></tr>
<tr>
<td><strong>CustomPainter Only</strong></td><td>Just the painter class</td><td>When you have your own widget setup</td></tr>
</tbody>
</table>
</div><p>Switching between formats updates the preview instantly — you can quickly compare what each option looks like.</p>
<hr />
<h2 id="heading-what-the-live-preview-looks-like"><strong>What the live preview looks like</strong></h2>
<p>Here is a simplified example of what you see in the code preview panel as you draw a filled diamond shape:</p>
<pre><code class="lang-dart"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyShapePainter</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">CustomPainter</span> </span>{
  <span class="hljs-meta">@override</span>
  <span class="hljs-keyword">void</span> paint(Canvas canvas, Size size) {
    <span class="hljs-keyword">final</span> paint_0 = Paint()
      ..color = Color(<span class="hljs-number">0xFF6366F1</span>)
      ..style = PaintingStyle.fill;

    <span class="hljs-keyword">final</span> path_0 = Path();
    path_0.moveTo(<span class="hljs-number">200.0</span>, <span class="hljs-number">50.0</span>);
    path_0.lineTo(<span class="hljs-number">350.0</span>, <span class="hljs-number">175.0</span>);
    path_0.lineTo(<span class="hljs-number">200.0</span>, <span class="hljs-number">300.0</span>);
    path_0.lineTo(<span class="hljs-number">50.0</span>, <span class="hljs-number">175.0</span>);
    path_0.close();

    canvas.drawPath(path_0, paint_0);
  }

  <span class="hljs-meta">@override</span>
  <span class="hljs-built_in">bool</span> shouldRepaint(<span class="hljs-keyword">covariant</span> CustomPainter oldDelegate) =&gt; <span class="hljs-keyword">false</span>;
}
</code></pre>
<p>Every pixel you drag, every color you change — this code updates in real time.</p>
<hr />
<h2 id="heading-why-real-time-preview-matters"><strong>Why real-time preview matters</strong></h2>
<h3 id="heading-eliminates-the-guessing-game"><strong>Eliminates the guessing game</strong></h3>
<p>Traditional <code>CustomPainter</code> development is a cycle of: write code → hot reload → check result → adjust → repeat. With real-time preview, you see the code and the visual result simultaneously.</p>
<h3 id="heading-builds-intuition-for-flutter-paths"><strong>Builds intuition for Flutter paths</strong></h3>
<p>Watching how your visual edits translate to <code>moveTo</code>, <code>lineTo</code>, <code>cubicTo</code>, and <code>close</code> calls is one of the fastest ways to learn the Flutter <code>Path</code> API.</p>
<h3 id="heading-catches-problems-early"><strong>Catches problems early</strong></h3>
<p>Validation warnings appear as you work, not after you have already pasted the code into your project. Fix issues while you are still in the design phase.</p>
<h3 id="heading-speeds-up-iteration"><strong>Speeds up iteration</strong></h3>
<p>Change a shape, see the code update, copy it. The entire design-to-code cycle takes seconds instead of minutes.</p>
<hr />
<h2 id="heading-see-your-code-update-in-real-time"><strong>See your code update in real time</strong></h2>
<p>Open the editor and start drawing. Your Flutter code appears instantly in the sidebar.</p>
<p><a target="_blank" href="https://fluttershaper.com/editor"><strong>Open the Editor →</strong></a></p>
<hr />
]]></content:encoded></item><item><title><![CDATA[Keyboard Shortcuts & Canvas Controls for Faster Flutter Shape Design]]></title><description><![CDATA[Speed matters when you are iterating on visual designs. Flutter Shape Builder includes a comprehensive set of keyboard shortcuts and canvas controls that let you work faster without reaching for the mouse. If you have used Figma, Sketch, or any profe...]]></description><link>https://blog.om-chauhan.dev/keyboard-shortcuts-and-canvas-controls-for-faster-flutter-shape-design</link><guid isPermaLink="true">https://blog.om-chauhan.dev/keyboard-shortcuts-and-canvas-controls-for-faster-flutter-shape-design</guid><category><![CDATA[Flutter]]></category><category><![CDATA[Flutter Examples]]></category><category><![CDATA[Flutter Widgets]]></category><category><![CDATA[flutter]]></category><dc:creator><![CDATA[Omprakash Chauhan]]></dc:creator><pubDate>Mon, 16 Feb 2026 19:29:53 GMT</pubDate><content:encoded><![CDATA[<p>Speed matters when you are iterating on visual designs. Flutter Shape Builder includes a comprehensive set of <strong>keyboard shortcuts</strong> and <strong>canvas controls</strong> that let you work faster without reaching for the mouse. If you have used Figma, Sketch, or any professional design tool, these controls will feel natural.</p>
<hr />
<h2 id="heading-tool-shortcuts"><strong>Tool shortcuts</strong></h2>
<p>Switch between drawing tools instantly with single-key shortcuts:</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Shortcut</td><td>Tool</td><td>Description</td></tr>
</thead>
<tbody>
<tr>
<td><code>V</code></td><td>Select</td><td>Select, move, and edit shapes</td></tr>
<tr>
<td><code>R</code></td><td>Rectangle</td><td>Draw rectangles and rounded rectangles</td></tr>
<tr>
<td><code>C</code></td><td>Circle</td><td>Draw perfect circles</td></tr>
<tr>
<td><code>P</code></td><td>Polygon</td><td>Draw regular polygons (3-20 sides)</td></tr>
<tr>
<td><code>Ctrl+P</code></td><td>Pen</td><td>Draw freeform paths with bezier curves</td></tr>
</tbody>
</table>
</div><p>These shortcuts work globally in the editor — no need to click the toolbar first.</p>
<hr />
<h2 id="heading-editing-shortcuts"><strong>Editing shortcuts</strong></h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Shortcut</td><td>Action</td><td>Description</td></tr>
</thead>
<tbody>
<tr>
<td><code>Delete</code> / <code>Backspace</code></td><td>Delete</td><td>Remove selected shape(s)</td></tr>
<tr>
<td><code>Ctrl+Z</code></td><td>Undo</td><td>Revert the last action (up to 50 steps)</td></tr>
<tr>
<td><code>Ctrl+Y</code></td><td>Redo</td><td>Re-apply an undone action</td></tr>
<tr>
<td><code>Shift+Click</code></td><td>Multi-select</td><td>Add/remove shapes from selection</td></tr>
<tr>
<td><code>Enter</code></td><td>Close path</td><td>Finalize and close polygon or pen path</td></tr>
</tbody>
</table>
</div><hr />
<h2 id="heading-canvas-navigation"><strong>Canvas navigation</strong></h2>
<p>Flutter Shape Builder uses <strong>Figma-style canvas navigation</strong> for a familiar, intuitive experience:</p>
<h3 id="heading-zoom"><strong>Zoom</strong></h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Shortcut</td><td>Action</td></tr>
</thead>
<tbody>
<tr>
<td><code>Ctrl+Scroll Up</code></td><td>Zoom in</td></tr>
<tr>
<td><code>Ctrl+Scroll Down</code></td><td>Zoom out</td></tr>
</tbody>
</table>
</div><p>The zoom level is displayed as a percentage in the toolbar. Zooming is centered on the canvas viewport, so you can zoom into specific areas of your design.</p>
<h3 id="heading-pan"><strong>Pan</strong></h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Shortcut</td><td>Action</td></tr>
</thead>
<tbody>
<tr>
<td><code>Space+Drag</code></td><td>Pan the canvas</td></tr>
</tbody>
</table>
</div><p>Hold the spacebar and drag to move around the canvas freely. This works regardless of which tool is active — you do not need to switch to a hand tool.</p>
<hr />
<h2 id="heading-grid-alignment"><strong>Grid alignment</strong></h2>
<p>Toggle the <strong>alignment grid</strong> to help position shapes precisely:</p>
<ul>
<li><p>The grid provides visual reference lines across the canvas</p>
</li>
<li><p>Shapes snap to grid lines for consistent spacing</p>
</li>
<li><p>Toggle the grid on/off from the toolbar</p>
</li>
</ul>
<p>The grid is purely a visual aid — it does not affect the generated code or export output.</p>
<hr />
<h2 id="heading-undoredo-history"><strong>Undo/Redo history</strong></h2>
<p>Flutter Shape Builder maintains a <strong>50-step undo/redo history</strong> using a snapshot-based system:</p>
<ul>
<li><p>Every significant action (draw, move, resize, delete, color change) creates a history snapshot</p>
</li>
<li><p><code>Ctrl+Z</code> steps backward through history</p>
</li>
<li><p><code>Ctrl+Y</code> steps forward through history</p>
</li>
<li><p>History is cleared when you perform a new action after undoing (standard behavior)</p>
</li>
</ul>
<p>This gives you the freedom to experiment — try different layouts, colors, and shapes knowing you can always go back.</p>
<hr />
<h2 id="heading-right-click-context-menu"><strong>Right-click context menu</strong></h2>
<p>Right-click on any shape to access quick actions without leaving the canvas:</p>
<ul>
<li><p><strong>Bring to Front</strong> — move shape to top layer</p>
</li>
<li><p><strong>Send to Back</strong> — move shape to bottom layer</p>
</li>
<li><p><strong>Lock / Unlock</strong> — prevent accidental edits</p>
</li>
<li><p><strong>Delete</strong> — remove the shape</p>
</li>
<li><p><strong>Duplicate</strong> — create a copy</p>
</li>
</ul>
<hr />
<h2 id="heading-canvas-viewport-controls"><strong>Canvas viewport controls</strong></h2>
<p>The toolbar displays the current <strong>zoom percentage</strong> and provides controls for resetting the view:</p>
<ul>
<li><p><strong>Zoom to fit</strong> — automatically zoom to show all shapes</p>
</li>
<li><p><strong>Reset zoom</strong> — return to 100% zoom level</p>
</li>
<li><p><strong>Center canvas</strong> — reset pan position to the center</p>
</li>
</ul>
<hr />
<h2 id="heading-keyboard-shortcut-quick-reference"><strong>Keyboard shortcut quick reference</strong></h2>
<p>Here is the complete shortcut reference in one place:</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Category</td><td>Shortcut</td><td>Action</td></tr>
</thead>
<tbody>
<tr>
<td><strong>Tools</strong></td><td><code>V</code></td><td>Select tool</td></tr>
<tr>
<td></td><td><code>R</code></td><td>Rectangle tool</td></tr>
<tr>
<td></td><td><code>C</code></td><td>Circle tool</td></tr>
<tr>
<td></td><td><code>P</code></td><td>Polygon tool</td></tr>
<tr>
<td></td><td><code>Ctrl+P</code></td><td>Pen tool</td></tr>
<tr>
<td><strong>Editing</strong></td><td><code>Delete</code></td><td>Delete selected</td></tr>
<tr>
<td></td><td><code>Ctrl+Z</code></td><td>Undo</td></tr>
<tr>
<td></td><td><code>Ctrl+Y</code></td><td>Redo</td></tr>
<tr>
<td></td><td><code>Shift+Click</code></td><td>Multi-select</td></tr>
<tr>
<td></td><td><code>Enter</code></td><td>Close path</td></tr>
<tr>
<td><strong>Navigation</strong></td><td><code>Ctrl+Scroll</code></td><td>Zoom in/out</td></tr>
<tr>
<td></td><td><code>Space+Drag</code></td><td>Pan canvas</td></tr>
</tbody>
</table>
</div><hr />
<h2 id="heading-tips-for-maximum-productivity"><strong>Tips for maximum productivity</strong></h2>
<ol>
<li><p><strong>Learn the tool shortcuts first</strong> — switching between <code>V</code>, <code>R</code>, <code>C</code>, <code>P</code> without the mouse saves significant time</p>
</li>
<li><p><strong>Use Space+Drag constantly</strong> — panning while drawing keeps you focused on the area you are editing</p>
</li>
<li><p><strong>Ctrl+Z is your friend</strong> — experiment freely knowing undo is always one shortcut away</p>
</li>
<li><p><strong>Toggle the grid</strong> when you need precise alignment, disable it when you want creative freedom</p>
</li>
<li><p><strong>Right-click for context</strong> — the context menu is often faster than navigating the sidebar for common operations</p>
</li>
</ol>
<hr />
<h2 id="heading-design-faster-with-keyboard-shortcuts"><strong>Design faster with keyboard shortcuts</strong></h2>
<p>Master these shortcuts and your Flutter shape design workflow becomes significantly faster.</p>
<p><a target="_blank" href="https://fluttershaper.com/editor"><strong>Open the Editor →</strong></a></p>
<hr />
]]></content:encoded></item><item><title><![CDATA[Mastering the Pen Tool: Bezier Curves for Flutter CustomPainter]]></title><description><![CDATA[The Pen Tool is the most powerful drawing instrument in Flutter Shape Builder. It lets you create any shape imaginable — from simple straight-line paths to fluid organic curves — all while generating clean, production-ready Path commands for Flutter'...]]></description><link>https://blog.om-chauhan.dev/mastering-the-pen-tool-bezier-curves-for-flutter-custompainter</link><guid isPermaLink="true">https://blog.om-chauhan.dev/mastering-the-pen-tool-bezier-curves-for-flutter-custompainter</guid><category><![CDATA[Flutter]]></category><category><![CDATA[Flutter Examples]]></category><category><![CDATA[Flutter Widgets]]></category><category><![CDATA[Flutter App Development]]></category><category><![CDATA[Shape]]></category><dc:creator><![CDATA[Omprakash Chauhan]]></dc:creator><pubDate>Mon, 16 Feb 2026 19:25:08 GMT</pubDate><content:encoded><![CDATA[<p>The <strong>Pen Tool</strong> is the most powerful drawing instrument in Flutter Shape Builder. It lets you create <em>any</em> shape imaginable — from simple straight-line paths to fluid organic curves — all while generating clean, production-ready <code>Path</code> commands for Flutter's <code>CustomPainter</code>.</p>
<p>If you have ever used the Pen Tool in Figma, Adobe Illustrator, or Inkscape, you will feel right at home. If not, this guide covers everything you need to know.</p>
<hr />
<h2 id="heading-how-the-pen-tool-works"><strong>How the Pen Tool works</strong></h2>
<p>Activate the Pen Tool with the keyboard shortcut <code>Ctrl+P</code> or by selecting it from the toolbar. Then click on the canvas to place anchor points. Each click adds a new vertex to your path:</p>
<ol>
<li><p><strong>Click</strong> to place a sharp corner point (linear segment)</p>
</li>
<li><p><strong>Click and drag</strong> to create a smooth curve with control handles</p>
</li>
<li><p>Press <strong>Enter</strong> or click the first point to close the path</p>
</li>
</ol>
<hr />
<h2 id="heading-understanding-bezier-curves"><strong>Understanding bezier curves</strong></h2>
<p>Flutter Shape Builder supports two types of bezier curves, matching the SVG and Flutter Path APIs:</p>
<h3 id="heading-cubic-bezier-curves"><strong>Cubic bezier curves</strong></h3>
<p>Cubic bezier curves use <strong>two control points</strong> to define the shape of the curve between two anchor points. In Flutter, this maps to the <code>path.cubicTo()</code> method. Cubic curves offer the most control and can create S-curves, complex organic shapes, and smooth transitions.</p>
<pre><code class="lang-dart"><span class="hljs-comment">// Generated Flutter code for a cubic bezier</span>
path.cubicTo(
  <span class="hljs-number">100</span>, <span class="hljs-number">50</span>,   <span class="hljs-comment">// first control point</span>
  <span class="hljs-number">200</span>, <span class="hljs-number">150</span>,  <span class="hljs-comment">// second control point</span>
  <span class="hljs-number">300</span>, <span class="hljs-number">100</span>,  <span class="hljs-comment">// end point</span>
);
</code></pre>
<h3 id="heading-quadratic-bezier-curves"><strong>Quadratic bezier curves</strong></h3>
<p>Quadratic bezier curves use <strong>one control point</strong> and are simpler than cubic curves. They map to <code>path.quadraticBezierTo()</code> in Flutter. They are ideal for gentle arcs, parabolic shapes, and simpler curved segments.</p>
<pre><code class="lang-dart"><span class="hljs-comment">// Generated Flutter code for a quadratic bezier</span>
path.quadraticBezierTo(
  <span class="hljs-number">150</span>, <span class="hljs-number">50</span>,   <span class="hljs-comment">// control point</span>
  <span class="hljs-number">300</span>, <span class="hljs-number">100</span>,  <span class="hljs-comment">// end point</span>
);
</code></pre>
<hr />
<h2 id="heading-anchor-point-editing"><strong>Anchor point editing</strong></h2>
<p>Once your path is drawn, switch to the Select tool (<code>V</code>) to enter editing mode. Flutter Shape Builder provides a comprehensive set of anchor point manipulation features:</p>
<ul>
<li><p><strong>Drag anchor points</strong> — move any vertex to a new position</p>
</li>
<li><p><strong>Drag control handles</strong> — the green control points let you sculpt the curve shape in real time</p>
</li>
<li><p><strong>Double-click an anchor</strong> — toggle between sharp corner and smooth curve modes</p>
</li>
<li><p><strong>Click on a segment</strong> — insert a new anchor point at that location using De Casteljau's algorithm</p>
</li>
<li><p><strong>Delete key on a selected anchor</strong> — remove the point from the path</p>
</li>
</ul>
<hr />
<h2 id="heading-svg-path-commands-under-the-hood"><strong>SVG path commands under the hood</strong></h2>
<p>Flutter Shape Builder uses standard SVG path notation internally, which it then converts to Flutter Dart code. The supported commands are:</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Command</td><td>Description</td><td>Flutter equivalent</td></tr>
</thead>
<tbody>
<tr>
<td><code>M x y</code></td><td>Move to (starting point)</td><td><code>path.moveTo(x, y)</code></td></tr>
<tr>
<td><code>L x y</code></td><td>Line to (straight segment)</td><td><code>path.lineTo(x, y)</code></td></tr>
<tr>
<td><code>C x1 y1 x2 y2 x y</code></td><td>Cubic bezier curve</td><td><code>path.cubicTo(x1, y1, x2, y2, x, y)</code></td></tr>
<tr>
<td><code>Q x1 y1 x y</code></td><td>Quadratic bezier curve</td><td><code>path.quadraticBezierTo(x1, y1, x, y)</code></td></tr>
<tr>
<td><code>Z</code></td><td>Close path</td><td><code>path.close()</code></td></tr>
</tbody>
</table>
</div><p>All coordinates are absolute, which ensures the generated Flutter code is predictable and easy to modify manually.</p>
<hr />
<h2 id="heading-tips-for-creating-smooth-curves"><strong>Tips for creating smooth curves</strong></h2>
<ol>
<li><p><strong>Use fewer points</strong> — fewer anchor points with well-placed control handles produce smoother results than many points with short segments</p>
</li>
<li><p><strong>Keep handles symmetric</strong> — when both control handles are roughly equal length and opposite angle, the curve flows smoothly through the anchor</p>
</li>
<li><p><strong>Subdivide when needed</strong> — click on an existing segment to split it with a new point, giving you more local control without disrupting the rest of the curve</p>
</li>
<li><p><strong>Toggle curve mode</strong> — double-click any sharp corner to convert it to a smooth curve, or vice versa</p>
</li>
</ol>
<hr />
<h2 id="heading-from-pen-strokes-to-production-flutter-code"><strong>From pen strokes to production Flutter code</strong></h2>
<p>Every path you create with the Pen Tool is instantly reflected in the code preview panel. The generated Dart code uses Flutter's standard <code>Path</code> class with <code>moveTo</code>, <code>lineTo</code>, <code>cubicTo</code>, and <code>quadraticBezierTo</code> methods — no external packages required.</p>
<pre><code class="lang-dart"><span class="hljs-keyword">final</span> path = Path();
path.moveTo(<span class="hljs-number">50.0</span>, <span class="hljs-number">100.0</span>);
path.cubicTo(<span class="hljs-number">80.0</span>, <span class="hljs-number">30.0</span>, <span class="hljs-number">180.0</span>, <span class="hljs-number">30.0</span>, <span class="hljs-number">210.0</span>, <span class="hljs-number">100.0</span>);
path.cubicTo(<span class="hljs-number">240.0</span>, <span class="hljs-number">170.0</span>, <span class="hljs-number">140.0</span>, <span class="hljs-number">200.0</span>, <span class="hljs-number">50.0</span>, <span class="hljs-number">100.0</span>);
path.close();

canvas.drawPath(path, paint);
</code></pre>
<hr />
<h2 id="heading-try-the-pen-tool-now"><strong>Try the Pen Tool now</strong></h2>
<p>Open the editor, press <code>Ctrl+P</code>, and start drawing bezier curves. Your Flutter code updates in real time.</p>
<p><a target="_blank" href="https://fluttershaper.com/editor"><strong>Open the Editor →</strong></a></p>
<hr />
]]></content:encoded></item><item><title><![CDATA[Visual Shape Drawing Tools: Rectangles, Circles & Polygons in Flutter]]></title><description><![CDATA[Building custom UI shapes in Flutter traditionally means writing CustomPainter code by hand — calculating coordinates, tweaking corner radii, and iterating through trial-and-error paint cycles. Flutter Shape Builder eliminates this friction by provid...]]></description><link>https://blog.om-chauhan.dev/visual-shape-drawing-tools-rectangles-circles-and-polygons-in-flutter</link><guid isPermaLink="true">https://blog.om-chauhan.dev/visual-shape-drawing-tools-rectangles-circles-and-polygons-in-flutter</guid><category><![CDATA[flutter shape builder]]></category><category><![CDATA[Flutter]]></category><category><![CDATA[Flutter Examples]]></category><category><![CDATA[custom painter]]></category><category><![CDATA[Shape]]></category><dc:creator><![CDATA[Omprakash Chauhan]]></dc:creator><pubDate>Mon, 16 Feb 2026 19:14:31 GMT</pubDate><content:encoded><![CDATA[<p>Building custom UI shapes in Flutter traditionally means writing <strong>CustomPainter</strong> code by hand — calculating coordinates, tweaking corner radii, and iterating through trial-and-error paint cycles. <strong>Flutter Shape Builder</strong> eliminates this friction by providing visual, drag-to-draw shape creation tools that generate production-ready Dart code in real time.</p>
<p>In this guide, we explore the three core drawing tools available in Flutter Shape Builder: the <strong>Rectangle Tool</strong>, the <strong>Circle Tool</strong>, and the <strong>Polygon Tool</strong>.</p>
<hr />
<h2 id="heading-rectangle-tool"><strong>Rectangle Tool</strong></h2>
<p>The Rectangle Tool lets you create rectangles and rounded rectangles by simply clicking and dragging on the canvas. It is ideal for building cards, containers, buttons, and any box-based UI element.</p>
<h3 id="heading-key-capabilities"><strong>Key capabilities</strong></h3>
<ul>
<li><p><strong>Parametric width and height</strong> — adjust dimensions precisely in the property inspector</p>
</li>
<li><p><strong>Uniform corner radius</strong> — set a single border radius value that applies to all four corners</p>
</li>
<li><p><strong>Individual corner radii</strong> — customize each corner independently for asymmetric rounded shapes</p>
</li>
<li><p><strong>Drag-to-create interaction</strong> — click on the canvas and drag to define the rectangle dimensions visually</p>
</li>
</ul>
<p>After drawing a rectangle, the property panel gives you full control over position (<code>x</code>, <code>y</code>), size (<code>width</code>, <code>height</code>), rotation, fill color, stroke color, stroke width, and opacity. The generated Dart code uses <code>canvas.drawRRect</code> for rounded rectangles and <code>canvas.drawRect</code> for sharp corners.</p>
<h3 id="heading-example-rounded-rectangle-in-flutter"><strong>Example: Rounded rectangle in Flutter</strong></h3>
<pre><code class="lang-dart"><span class="hljs-keyword">final</span> rrect = RRect.fromRectAndRadius(
  Rect.fromLTWH(<span class="hljs-number">50</span>, <span class="hljs-number">50</span>, <span class="hljs-number">200</span>, <span class="hljs-number">120</span>),
  Radius.circular(<span class="hljs-number">16</span>),
);
canvas.drawRRect(rrect, paint);
</code></pre>
<hr />
<h2 id="heading-circle-tool"><strong>Circle Tool</strong></h2>
<p>The Circle Tool creates perfect circles with a single click-and-drag gesture. It is the fastest way to add circular elements like avatars, icons, status indicators, or decorative shapes to your Flutter layout.</p>
<h3 id="heading-key-capabilities-1"><strong>Key capabilities</strong></h3>
<ul>
<li><p><strong>Parametric radius</strong> — set the circle radius exactly in the properties panel</p>
</li>
<li><p><strong>Fill and stroke styling</strong> — apply solid fill colors with HEX + alpha, configure stroke width and color</p>
</li>
<li><p><strong>Position control</strong> — adjust the center point coordinates for pixel-perfect placement</p>
</li>
</ul>
<p>Circles are rendered internally as SVG arc paths. The generated Flutter code uses <code>canvas.drawOval</code> or arc path commands depending on the export format you choose.</p>
<hr />
<h2 id="heading-polygon-tool"><strong>Polygon Tool</strong></h2>
<p>The Polygon Tool creates regular polygons with a configurable number of sides — from triangles (3 sides) to icosagons (20 sides). This is perfect for badges, star shapes, hexagonal grids, and decorative geometric patterns.</p>
<h3 id="heading-key-capabilities-2"><strong>Key capabilities</strong></h3>
<ul>
<li><p><strong>Dynamic side count</strong> — choose anywhere from 3 to 20 sides</p>
</li>
<li><p><strong>Click-to-add vertices</strong> — alternatively, click individual points to place vertices manually</p>
</li>
<li><p><strong>Regular polygon generation</strong> — automatically generates evenly-spaced vertices</p>
</li>
<li><p><strong>Close path with Enter</strong> — press Enter to finalize and close the polygon shape</p>
</li>
</ul>
<h3 id="heading-example-triangle-in-flutter"><strong>Example: Triangle in Flutter</strong></h3>
<pre><code class="lang-dart"><span class="hljs-keyword">final</span> path = Path();
path.moveTo(<span class="hljs-number">150</span>, <span class="hljs-number">50</span>);
path.lineTo(<span class="hljs-number">250</span>, <span class="hljs-number">200</span>);
path.lineTo(<span class="hljs-number">50</span>, <span class="hljs-number">200</span>);
path.close();
canvas.drawPath(path, paint);
</code></pre>
<hr />
<h2 id="heading-shared-features-across-all-tools"><strong>Shared features across all tools</strong></h2>
<p>No matter which drawing tool you use, Flutter Shape Builder provides a consistent set of features:</p>
<ul>
<li><p><strong>Transform controls</strong> — adjust X, Y position, width, height, rotation, and scale</p>
</li>
<li><p><strong>Fill and stroke styling</strong> — HEX color picker with alpha channel support</p>
</li>
<li><p><strong>Opacity control</strong> — fine-tune the transparency of any shape</p>
</li>
<li><p><strong>Real-time code preview</strong> — see the generated Dart code update instantly as you draw and edit</p>
</li>
<li><p><strong>Multiple export formats</strong> — export as a full runnable Flutter app, StatelessWidget, CustomPainter class, SVG, or JSON</p>
</li>
<li><p><strong>Undo/Redo history</strong> — 50-step snapshot-based history for safe experimentation</p>
</li>
</ul>
<hr />
<h2 id="heading-why-use-visual-tools-instead-of-writing-custompainter-by-hand"><strong>Why use visual tools instead of writing CustomPainter by hand?</strong></h2>
<p>Writing <code>CustomPainter</code> code manually is powerful but slow. Every coordinate change requires a hot-reload cycle. Flutter Shape Builder gives you <strong>instant visual feedback</strong> — you see exactly what your shape looks like as you build it, and the generated code is always in sync.</p>
<p>This workflow is especially valuable for:</p>
<ul>
<li><p><strong>Rapid prototyping</strong> — try different shape variations in seconds</p>
</li>
<li><p><strong>Complex compositions</strong> — combine multiple shapes with boolean operations</p>
</li>
<li><p><strong>Accurate positioning</strong> — use the grid and property inspector for pixel-perfect placement</p>
</li>
<li><p><strong>Learning Flutter paths</strong> — see how visual shapes translate to Dart code</p>
</li>
</ul>
<hr />
<h2 id="heading-start-drawing-flutter-shapes-visually"><strong>Start drawing Flutter shapes visually</strong></h2>
<p>Open the editor, pick a tool, and start creating. Your Dart code is generated in real time.</p>
<p><a target="_blank" href="https://fluttershaper.com/editor"><strong>Open the Editor →</strong></a></p>
<hr />
]]></content:encoded></item><item><title><![CDATA[Boost Your Website's Visibility: A Comprehensive Guide to OG Meta Generator by YTools]]></title><description><![CDATA[What is OG Meta Generator?
OG Meta Generator is a web-based tool designed to help web developers, marketers, and content creators generate essential meta tags for their websites. By providing a simple interface, it allows users to create meta tags th...]]></description><link>https://blog.om-chauhan.dev/boost-your-websites-visibility-a-comprehensive-guide-to-og-meta-generator-by-ytools</link><guid isPermaLink="true">https://blog.om-chauhan.dev/boost-your-websites-visibility-a-comprehensive-guide-to-og-meta-generator-by-ytools</guid><category><![CDATA[openGraph]]></category><category><![CDATA[open graph meta tags]]></category><category><![CDATA[website]]></category><category><![CDATA[social media]]></category><dc:creator><![CDATA[Omprakash Chauhan]]></dc:creator><pubDate>Sat, 12 Apr 2025 13:11:51 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1744463346859/6c30a787-7c23-4a74-95a8-a657d32429d0.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-what-is-og-meta-generator">What is OG Meta Generator?</h2>
<p>OG Meta Generator is a web-based tool designed to help web developers, marketers, and content creators generate essential meta tags for their websites. By providing a simple interface, it allows users to create meta tags that enhance how their content is displayed on social media platforms like Facebook and Twitter, as well as improve search engine optimisation (SEO).</p>
<h2 id="heading-key-features">Key Features</h2>
<h3 id="heading-1-basic-open-graph-metadata-creation">1. <strong>Basic Open Graph Metadata Creation</strong></h3>
<ul>
<li><p><strong>Title</strong>: Set the title that appears when your page is shared.​</p>
</li>
<li><p><strong>Description</strong>: Provide a brief description of your page content.​</p>
</li>
<li><p><strong>URL</strong>: Specify the canonical URL of your page.​</p>
</li>
<li><p><strong>Image URL</strong>: Upload an image that represents your content when shared. Recommended size: 1200×630 pixels.​</p>
</li>
</ul>
<h3 id="heading-2-social-media-preview">2. <strong>Social Media Preview</strong></h3>
<p>Visualize how your content will appear on platforms like Twitter and Facebook, ensuring that your meta tags produce the desired appearance.​3. <strong>Multiple Output Formats</strong></p>
<p>Generate meta tags in various formats to suit your development needs:​</p>
<ul>
<li><p><strong>HTML Tags</strong></p>
</li>
<li><p><strong>Next.js API</strong></p>
</li>
<li><p><strong>JSON-LD</strong></p>
</li>
<li><p><strong>React Helmet</strong></p>
</li>
</ul>
<h3 id="heading-4-validation-checks">4. <strong>Validation Checks</strong></h3>
<p>The tool provides real-time validation to ensure:​</p>
<ul>
<li><p>Title length is appropriate.​</p>
</li>
<li><p>Description length is optimal.​</p>
</li>
<li><p>Image URL is provided and valid.​</p>
</li>
<li><p>URL format is correct.​</p>
</li>
</ul>
<h2 id="heading-benefits-of-using-og-meta-generator">Benefits of Using OG Meta Generator</h2>
<ul>
<li><p><strong>Enhanced Social Sharing</strong>: Ensure your content looks appealing when shared, increasing click-through rates.​</p>
</li>
<li><p><strong>Improved SEO</strong>: Proper meta tags can contribute to better search engine rankings.​</p>
</li>
<li><p><strong>Time-Saving</strong>: Quickly generate accurate meta tags without manual coding.​</p>
</li>
<li><p><strong>Versatility</strong>: Supports various output formats to integrate seamlessly with different web development frameworks.​</p>
</li>
</ul>
<h2 id="heading-how-to-use-og-meta-generator">How to Use OG Meta Generator</h2>
<ol>
<li><p><strong>Access the Tool</strong>: Navigate to <a target="_blank" href="https://og-meta.ytools.in/">OG Meta Generator</a>.​</p>
</li>
<li><p><strong>Input Your Data</strong>: Fill in the required fields such as Title, Description, URL, and upload an Image.​</p>
</li>
<li><p><strong>Preview</strong>: Use the social media preview to see how your content will appear when shared.​</p>
</li>
<li><p><strong>Select Output Format</strong>: Choose the format that suits your development needs.​</p>
</li>
<li><p><strong>Copy and Implement</strong>: Copy the generated meta tags and paste them into your website's HTML or relevant files.​</p>
</li>
</ol>
<h2 id="heading-seo-best-practices-for-meta-tags">SEO Best Practices for Meta Tags</h2>
<ul>
<li><p><strong>Title Tag</strong>: Keep it under 60 characters and include relevant keywords.</p>
</li>
<li><p><strong>Meta Description</strong>: Aim for 150-160 characters, providing a clear summary of the page content.​</p>
</li>
<li><p><strong>Image Optimization</strong>: Use high-quality images with appropriate dimensions to enhance visual appeal.​</p>
</li>
<li><p><strong>Unique Tags</strong>: Ensure each page has unique meta tags to avoid duplication issues.​</p>
</li>
</ul>
<p>Visit home page: <a target="_blank" href="https://og-meta.ytools.in/">https://og-meta.ytools.in/</a></p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>OG Meta Generator by YTools is a powerful, free tool that simplifies the creation of Open Graph meta tags, enhancing your website's appearance on social media and improving SEO. Its user-friendly interface, real-time validation, and support for multiple output formats make it an essential resource for anyone looking to optimize their web content.​</p>
]]></content:encoded></item><item><title><![CDATA[Best Practices for Date and Time Formatting in Flutter using intl Package]]></title><description><![CDATA[Introduction📣
DateTime manipulation and formatting are essential skills for any mobile app developer, especially when working with date and time-related data. Flutter, a popular cross-platform framework, provides powerful tools for handling DateTime...]]></description><link>https://blog.om-chauhan.dev/best-practices-for-date-and-time-formatting-in-flutter-using-intl-package</link><guid isPermaLink="true">https://blog.om-chauhan.dev/best-practices-for-date-and-time-formatting-in-flutter-using-intl-package</guid><category><![CDATA[Flutter]]></category><category><![CDATA[Dart]]></category><category><![CDATA[Flutter Examples]]></category><category><![CDATA[datetime]]></category><category><![CDATA[flutter]]></category><category><![CDATA[intl]]></category><category><![CDATA[multilingual]]></category><category><![CDATA[internationalization]]></category><dc:creator><![CDATA[Omprakash Chauhan]]></dc:creator><pubDate>Wed, 18 Oct 2023 18:08:35 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1717438605868/21d40359-8bb3-48c0-9167-799cd3523acd.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-introduction">Introduction📣</h1>
<p>DateTime manipulation and formatting are essential skills for any mobile app developer, especially when working with date and time-related data. Flutter, a popular cross-platform framework, provides powerful tools for handling DateTime objects and formatting them to meet your app's needs. In this blog post, we will explore the various aspects of DateTime formatting in Flutter and learn how to display dates and times in a user-friendly manner.</p>
<h1 id="heading-installation">Installation ⚙️</h1>
<pre><code class="lang-yaml"><span class="hljs-attr">dependencies:</span>
  <span class="hljs-attr">intl:</span> <span class="hljs-string">&lt;latest_version&gt;</span>
</code></pre>
<h1 id="heading-notation">Notation 🪧</h1>
<ul>
<li><p><code>y</code>: The year, as a 4-digit integer.</p>
</li>
<li><p><code>M</code>: The month, as a 2-digit integer.</p>
</li>
<li><p><code>d</code>: The day of the month, as a 2-digit integer.</p>
</li>
<li><p><code>H</code>: The hour of the day, in 24-hour format.</p>
</li>
<li><p><code>m</code>: The minute of the hour, as a 2-digit integer.</p>
</li>
<li><p><code>s</code>: The second of the minute, as a 2-digit integer.</p>
</li>
<li><p><code>a</code>: The AM/PM indicator, is a 2-digit integer.</p>
</li>
</ul>
<h1 id="heading-example">Example 💡</h1>
<h3 id="heading-date-amp-time">Date &amp; Time📆⏰</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Pattern</strong></td><td><strong>Result</strong></td></tr>
</thead>
<tbody>
<tr>
<td><code>DateFormat('EEEE, MMM d, yyyy').format(DateTime.now())</code></td><td>Wednesday, Oct 18, 2023</td></tr>
<tr>
<td><code>DateFormat('EE, MMM d, yyyy').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>Wed, Oct 18, 2023</td></tr>
<tr>
<td><code>DateFormat('EE, MMMM d, yyyy').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>Wed, October 18, 2023</td></tr>
<tr>
<td><code>DateFormat('EE, MMMM d, yy').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>Wed, October 18, 23</td></tr>
<tr>
<td><code>DateFormat('MM/dd/yyyy').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>10/18/2023</td></tr>
<tr>
<td><code>DateFormat('MM-dd-yyyy HH:mm').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>10-18-2023 19:48</td></tr>
<tr>
<td><code>DateFormat('MMM d, h:mm a').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>Oct 18, 7:48 PM</td></tr>
<tr>
<td><code>DateFormat('MMMM yyyy').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>October 2023</td></tr>
<tr>
<td><code>DateFormat('MMM d, yyyy').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>Oct 18, 2023</td></tr>
<tr>
<td><code>DateFormat('E, d MMM yyyy HH:mm:ss').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>Wed, 18 Oct 2023 19:48:45</td></tr>
<tr>
<td><code>DateFormat('yyyy-MM-ddTHH:mm:ss').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>2023-10-18T19:48:47</td></tr>
<tr>
<td><code>DateFormat('</code><a target="_blank" href="http://dd.MM"><code>dd.MM</code></a><code>.yy').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>18.10.23</td></tr>
<tr>
<td><code>DateFormat('HH:mm:ss.SSS').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>19:48:54.318</td></tr>
</tbody>
</table>
</div><h3 id="heading-date">Date 📆</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Pattern</strong></td><td><strong>Result</strong></td></tr>
</thead>
<tbody>
<tr>
<td><code>DateFormat('EE').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>Wed</td></tr>
<tr>
<td><code>DateFormat('EEEE').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>Wednesday</td></tr>
<tr>
<td><code>DateFormat('d').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>18</td></tr>
<tr>
<td><code>DateFormat('M').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>10</td></tr>
<tr>
<td><code>DateFormat('MM').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>10</td></tr>
<tr>
<td><code>DateFormat('MMM').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>Oct</td></tr>
<tr>
<td><code>DateFormat('MMMM').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>October</td></tr>
<tr>
<td><code>DateFormat('yy').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>23</td></tr>
<tr>
<td><code>DateFormat('yyyy').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>2023</td></tr>
<tr>
<td><code>DateFormat('EE, d/MM').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>Wed, 18/10</td></tr>
<tr>
<td><code>DateFormat('EE, MMM yy').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>Wed, Oct 23</td></tr>
<tr>
<td><code>DateFormat('Q').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>4</td></tr>
<tr>
<td><code>DateFormat('QQ').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>04</td></tr>
<tr>
<td><code>DateFormat('QQQ').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>Q4</td></tr>
<tr>
<td><code>DateFormat('QQQQ').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>4th quarter</td></tr>
<tr>
<td><code>DateFormat('EE, d/MM/yyyy').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>Wed, 18/10/2023</td></tr>
<tr>
<td><code>DateFormat('EEEE, d/MM/yyyy').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>Wednesday, 18/10/2023</td></tr>
<tr>
<td><code>DateFormat('yQQQ').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>Q4 2023</td></tr>
<tr>
<td><code>DateFormat('yQQQQ').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>4th quarter 2023</td></tr>
<tr>
<td><code>DateFormat('MM/dd/yyyy').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>10/18/2023</td></tr>
<tr>
<td><code>DateFormat('MM:dd:yyyy').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>10:18:2023</td></tr>
<tr>
<td><code>DateFormat('EE MM yyyy').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>Wed 10 2023</td></tr>
<tr>
<td><code>DateFormat('EEEE MM yyyy').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>Wednesday 10 2023</td></tr>
<tr>
<td><code>DateFormat('EEEE MMMM yyyy').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>Wednesday October 2023</td></tr>
<tr>
<td><code>DateFormat('EEEE d MMMM yyyy').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>Wednesday 18, October 2023</td></tr>
<tr>
<td><code>DateFormat('d MMMM EEEE yyyy').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>18 October Wednesday 2023</td></tr>
<tr>
<td><code>DateFormat('MMM E d').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>Oct Wed 18</td></tr>
</tbody>
</table>
</div><h3 id="heading-time">Time ⏰</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Pattern</strong></td><td><strong>Result</strong></td></tr>
</thead>
<tbody>
<tr>
<td><code>DateFormat('h:mm a').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>10:28 PM</td></tr>
<tr>
<td><code>DateFormat('HH:mm:ss').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>22:28:56</td></tr>
<tr>
<td><code>DateFormat('HH:mm:ss.SSS').format(</code><a target="_blank" href="http://DateTime.now"><code>DateTime.now</code></a><code>())</code></td><td>22:29:00.057</td></tr>
</tbody>
</table>
</div><h1 id="heading-demo">Demo <strong>🚀</strong></h1>
<p><a target="_blank" href="https://www.youtube.com/watch?v=uiHevgcaNUQ">YouTube</a></p>
<p><a target="_blank" href="https://date-time-demo.netlify.app/">Website</a></p>
<h1 id="heading-conclusion">Conclusion🎯</h1>
<p><code>Intl</code> package is very helpful for formatting Date and Time or any type of pattern.</p>
<p>The above blog and example will help the developer to expand their capabilities with different date and time formatting.</p>
<p>The source code of the full project is given below</p>
<p>GitHub repo with full code <a target="_blank" href="https://github.com/om-chauhan/datetime_format"><strong>here</strong></a></p>
<p><a target="_blank" href="https://om-chauhan.co.in/">Personal Portfolio</a></p>
]]></content:encoded></item><item><title><![CDATA[Maximize Full Screen for Flutter Desktop Software in Flutter 3.13.3 without any Package or Plugin]]></title><description><![CDATA[Flutter is a popular open-source UI toolkit developed by Google that allows developers to create visually appealing and high-performance applications for multiple platforms, including desktops. One of the most common requirements for desktop applicat...]]></description><link>https://blog.om-chauhan.dev/maximize-full-screen-for-flutter-desktop-software-in-flutter-3133-without-any-package-or-plugin</link><guid isPermaLink="true">https://blog.om-chauhan.dev/maximize-full-screen-for-flutter-desktop-software-in-flutter-3133-without-any-package-or-plugin</guid><category><![CDATA[flutter desktop]]></category><category><![CDATA[Flutter Examples]]></category><category><![CDATA[Flutter]]></category><category><![CDATA[Windows]]></category><category><![CDATA[FlutterDesktop]]></category><category><![CDATA[flutter]]></category><category><![CDATA[desktop]]></category><category><![CDATA[desktop apps]]></category><category><![CDATA[Flutter Widgets]]></category><dc:creator><![CDATA[Omprakash Chauhan]]></dc:creator><pubDate>Mon, 18 Sep 2023 12:48:37 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1717438538360/74763899-d030-46e5-b78e-e600d40b0d10.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Flutter is a popular open-source UI toolkit developed by Google that allows developers to create visually appealing and high-performance applications for multiple platforms, including desktops. One of the most common requirements for desktop applications is the ability to maximize the application window to a full screen. In this article, we will explore how you can achieve this functionality in your Flutter desktop software.</p>
<p>In the Flutter Desktop sometimes users need a full screen to enhance the user experience for big projects like Dashboard View.</p>
<p>so here we set Maximize Full Screen for Flutter Desktop Software in Flutter 3.13.3 without any Package or Plugin.</p>
<p>To maximize the full screen in a Flutter desktop application, you need to use the custom code. This custom code controls the size of the screen when Desktop Software launches initially. Let's dive into the steps to implement this feature:</p>
<h1 id="heading-project-setup">Project Setup ⚙️</h1>
<ol>
<li>set Flutter 3 OR Flutter <code>sdk: "&gt;=3.1.1 &lt;4.0.0"</code> version in the <code>pubspec.yml</code> file:</li>
</ol>
<pre><code class="lang-yaml"><span class="hljs-attr">name:</span> <span class="hljs-string">fullscreen_windows</span>
<span class="hljs-attr">description:</span> <span class="hljs-string">A</span> <span class="hljs-string">new</span> <span class="hljs-string">Flutter</span> <span class="hljs-string">project.</span>
<span class="hljs-attr">publish_to:</span> <span class="hljs-string">"none"</span> <span class="hljs-comment"># Remove this line if you wish to publish to pub.dev</span>

<span class="hljs-attr">version:</span> <span class="hljs-number">1.0</span><span class="hljs-number">.0</span><span class="hljs-string">+1</span>

<span class="hljs-attr">environment:</span>
  <span class="hljs-attr">sdk:</span> <span class="hljs-string">"&gt;=3.1.1 &lt;4.0.0"</span>

<span class="hljs-attr">dependencies:</span>
  <span class="hljs-attr">flutter:</span>
    <span class="hljs-attr">sdk:</span> <span class="hljs-string">flutter</span>
  <span class="hljs-attr">cupertino_icons:</span> <span class="hljs-string">^1.0.2</span>

<span class="hljs-attr">dev_dependencies:</span>
  <span class="hljs-attr">flutter_test:</span>
    <span class="hljs-attr">sdk:</span> <span class="hljs-string">flutter</span>

  <span class="hljs-attr">flutter_lints:</span> <span class="hljs-string">^2.0.0</span>

<span class="hljs-attr">flutter:</span>
  <span class="hljs-attr">uses-material-design:</span> <span class="hljs-literal">true</span>
</code></pre>
<p>Then, run <code>flutter pub get</code> to download the package.</p>
<ol>
<li><p>Then add a custom snippet code in the <code>main.cpp</code> file.</p>
<p> <code>main.cpp</code> file located in the given path <code>windows\runner\main.cpp</code> in your project directory.</p>
<p> this image shows where code changes happen and which directory path.</p>
<p> <img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1695034362563/d2d85b5c-6eb6-4ce2-b2e0-92d74c7b86db.png" alt="FIle Path" class="image--center mx-auto" /></p>
</li>
</ol>
<p>copy the below code in <code>main.cpp</code>👇</p>
<h1 id="heading-snippet-code">Snippet Code 💻</h1>
<p>Code to Maximize the windows in terms of maximized top-level windows on the primary display monitor. 👇</p>
<pre><code class="lang-cpp">  <span class="hljs-comment">// Set the window origin to (0, 0)</span>
  <span class="hljs-function">Win32Window::Point <span class="hljs-title">origin</span><span class="hljs-params">(<span class="hljs-number">0</span>, <span class="hljs-number">0</span>)</span></span>;  

  <span class="hljs-comment">// Use the screen size for full Screen</span>
  <span class="hljs-function">Win32Window::Size <span class="hljs-title">size</span><span class="hljs-params">(::GetSystemMetrics(SM_CXMAXIMIZED), ::GetSystemMetrics(SM_CYMAXIMIZED))</span></span>;
</code></pre>
<p>Gets the screen size in terms of width and height using the <code>::GetSystemMetrics()</code> function.</p>
<h1 id="heading-full-code">Full Code 🧑‍💻</h1>
<pre><code class="lang-cpp"><span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;flutter/dart_project.h&gt;</span></span>
<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;flutter/flutter_view_controller.h&gt;</span></span>
<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">&lt;windows.h&gt;</span></span>

<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">"flutter_window.h"</span></span>
<span class="hljs-meta">#<span class="hljs-meta-keyword">include</span> <span class="hljs-meta-string">"utils.h"</span></span>

<span class="hljs-function"><span class="hljs-keyword">int</span> APIENTRY <span class="hljs-title">wWinMain</span><span class="hljs-params">(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
                      _In_ <span class="hljs-keyword">wchar_t</span> *command_line, _In_ <span class="hljs-keyword">int</span> show_command)</span> </span>{
  <span class="hljs-comment">// Attach to console when present (e.g., 'flutter run') or create a</span>
  <span class="hljs-comment">// new console when running with a debugger.</span>
  <span class="hljs-keyword">if</span> (!::AttachConsole(ATTACH_PARENT_PROCESS) &amp;&amp; ::IsDebuggerPresent()) {
    CreateAndAttachConsole();
  }

  <span class="hljs-comment">// Initialize COM, so that it is available for use in the library and/or</span>
  <span class="hljs-comment">// plugins.</span>
  ::CoInitializeEx(<span class="hljs-literal">nullptr</span>, COINIT_APARTMENTTHREADED);

  <span class="hljs-function">flutter::DartProject <span class="hljs-title">project</span><span class="hljs-params">(<span class="hljs-string">L"data"</span>)</span></span>;

  <span class="hljs-built_in">std</span>::<span class="hljs-built_in">vector</span>&lt;<span class="hljs-built_in">std</span>::<span class="hljs-built_in">string</span>&gt; command_line_arguments =
      GetCommandLineArguments();

  project.set_dart_entrypoint_arguments(<span class="hljs-built_in">std</span>::move(command_line_arguments));

  <span class="hljs-function">FlutterWindow <span class="hljs-title">window</span><span class="hljs-params">(project)</span></span>;

  <span class="hljs-comment">// Set the window origin to (0, 0)</span>
  <span class="hljs-function">Win32Window::Point <span class="hljs-title">origin</span><span class="hljs-params">(<span class="hljs-number">0</span>, <span class="hljs-number">0</span>)</span></span>;  

  <span class="hljs-comment">// Use the screen size for full Screen</span>
  <span class="hljs-function">Win32Window::Size <span class="hljs-title">size</span><span class="hljs-params">(::GetSystemMetrics(SM_CXMAXIMIZED), ::GetSystemMetrics(SM_CYMAXIMIZED))</span></span>; 

  <span class="hljs-keyword">if</span> (!window.Create(<span class="hljs-string">L"fullscreen_windows"</span>, origin, size)) {
    <span class="hljs-keyword">return</span> EXIT_FAILURE;
  }

  window.SetQuitOnClose(<span class="hljs-literal">true</span>);

  ::MSG msg;
  <span class="hljs-keyword">while</span> (::GetMessage(&amp;msg, <span class="hljs-literal">nullptr</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>)) {
    ::TranslateMessage(&amp;msg);
    ::DispatchMessage(&amp;msg);
  }

  ::CoUninitialize();
  <span class="hljs-keyword">return</span> EXIT_SUCCESS;
}
</code></pre>
<h1 id="heading-demo-gif">Demo GIF 🚀</h1>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1695038886818/99b51909-f8f4-49e0-990e-e023ffe78622.gif" alt class="image--center mx-auto" /></p>
<p>⚠️ <mark>Note </mark> that all <code>SM_CX*</code> values are widths and all <code>SM_CY*</code></p>
<p>here is the list of parameters hosted on the <code>learn.microsoft.com</code></p>
<p>you can play with it with other dimensions.</p>
<p><a target="_blank" href="https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getsystemmetrics">https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getsystemmetrics</a> 🌐</p>
<p>GitHub repo with full code <a target="_blank" href="https://github.com/om-chauhan/fullscreen_windows">here</a></p>
]]></content:encoded></item><item><title><![CDATA[Top 10+ Free Websites for Hosting for Beginners Developers]]></title><description><![CDATA[GitHub Pages

A static site hosting service called GitHub Pages reads HTML, CSS, and JavaScript files directly from a repository on GitHub and publishes a website after optionally running the files through a build process. The GitHub Pages examples c...]]></description><link>https://blog.om-chauhan.dev/top-10plus-free-websites-for-hosting-for-beginners-developers-in-2024</link><guid isPermaLink="true">https://blog.om-chauhan.dev/top-10plus-free-websites-for-hosting-for-beginners-developers-in-2024</guid><category><![CDATA[webhosting]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[Developer]]></category><category><![CDATA[Cloud]]></category><category><![CDATA[developers]]></category><category><![CDATA[GitHub]]></category><category><![CDATA[Netlify]]></category><category><![CDATA[Firebase]]></category><category><![CDATA[Firebase hosting]]></category><category><![CDATA[Bitbucket]]></category><category><![CDATA[Vercel]]></category><category><![CDATA[render.com]]></category><category><![CDATA[AWS]]></category><category><![CDATA[AWS Amplify]]></category><category><![CDATA[aws-amplify]]></category><dc:creator><![CDATA[Omprakash Chauhan]]></dc:creator><pubDate>Sun, 05 Mar 2023 17:01:34 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1717438367095/824c859d-7f9d-4355-9d35-df94101c6532.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-github-pages"><strong>GitHub Pages</strong></h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1678019672733/ba0c936f-3638-41b2-ba6f-888e44382b4e.jpeg" alt class="image--center mx-auto" /></p>
<p>A static site hosting service called GitHub Pages reads HTML, CSS, and JavaScript files directly from a repository on GitHub and publishes a website after optionally running the files through a build process. The GitHub Pages examples collection contains examples of GitHub Pages websites.</p>
<p>Your website can be hosted on GitHub's <a target="_blank" href="http://github.io">github.io</a> domain or on a custom domain of your own. See "Configuring a custom domain for your GitHub Pages site" for additional details.</p>
<p>Websites that are created with GitHub Pages can be made accessible to everyone online. By controlling access control for the site, companies using GitHub Enterprise Cloud can publish sites privately as well. The GitHub Enterprise Cloud documentation's section on "Changing the visibility of your GitHub Pages site" has more details.</p>
<p>See "Building a GitHub Pages site" to get started.</p>
<p>Owners of organizations have access to the organization's repositories to disable the publication of GitHub Pages sites. See "Managing the publication of GitHub Pages sites for your organization" for additional details.</p>
<p><a target="_blank" href="https://pages.github.com/">Visit</a></p>
<h3 id="heading-netlify"><strong>Netlify</strong></h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1678019685139/8f1c08eb-1123-4dd1-96c7-20717a61e519.jpeg" alt class="image--center mx-auto" /></p>
<p>One of the most incredible web development platforms available is called Netlify, and it is designed to maximize your productivity. The platform aids website creation, testing, and deployment for developers. Netlify is providing an impressively faster solution to provide much more performant, scalable, and secure websites and apps by uniting the latest decoupled web parts from local development processes to advanced logic.</p>
<p>The web industry is quickly and consistently moving away from monolithic towards decoupled approaches. Coders, meantime, are making more progress than ever. But, Netlify was developed to fill this gap. It offers both top-notch web automation technology and web hosting infrastructure. Netlify offers cutting-edge solutions in various fields.</p>
<p>The website industry is transitioning from monolithic to decoupled techniques on a continual and quick basis. Developers, however, are advancing with greater force than ever. However, Netlify was created to meet the needs of this time. Both web hosting infrastructure and amazing web automation technology are available. In these areas, Netlify is providing cutting-edge technologies, and most astounding of all, extremely reasonable prices.</p>
<p>It will function by connecting to your GitHub repository and pulling the source code for your website. Then it will launch a build process to pre-render the pages of your website into static HTML. After that, the finished pages will be distributed and put into use over a larger selection of content delivery networks. To efficiently serve users, however, your website will automatically select the closest data center whenever a user requests access.</p>
<p><a target="_blank" href="https://www.netlify.com/">Visit</a></p>
<h3 id="heading-surge"><strong>Surge</strong></h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1678019703867/c264eccb-aedb-4978-962e-1aa80c3b93c4.jpeg" alt class="image--center mx-auto" /></p>
<p>Surge Simply put, <a target="_blank" href="http://Surge.sh">Surge.sh</a> is a platform for front-end developers to publish static HTML, CSS, and JavaScript web pages for free (most of the time) from the CLI. It facilitates project construction using well-liked build technologies like Browserify, Gulp, and Grunt.</p>
<p>Moreover, Git Hooks are supported, enabling branch juggling-free project deployment anytime you push to GitHub. Also, you may collaborate on your project directly from the command line and publish Jekyll sites, use npm run scripts, and more.</p>
<p><a target="_blank" href="https://surge.sh/">Visit</a></p>
<h3 id="heading-firebase-hosting"><strong>Firebase Hosting</strong></h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1678019847230/1effa31b-7195-4e2b-9183-bd1495f7a9c4.jpeg" alt class="image--center mx-auto" /></p>
<p>For your web application, static and dynamic content, and microservices, Firebase Hosting offers quick and secure hosting.</p>
<p>For developers, Firebase Hosting offers production-quality online content hosting. You may easily launch web applications and send both static and dynamic content to a global CDN with a single command (content delivery network). To create and host microservices on Firebase, you may also use Cloud Run or Cloud Functions in conjunction with Firebase Hosting.</p>
<p><a target="_blank" href="https://firebase.google.com/docs/hosting/">Visit</a></p>
<h3 id="heading-bitbucket"><strong>Bitbucket</strong></h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1678019872785/b6be7354-d32e-446c-9c7f-f619d18e7189.jpeg" alt class="image--center mx-auto" /></p>
<p>BitBucket is a cloud-based service that aids programmers in managing, storing, and keeping track of changes to their code. A cloud-based Git repository hosting service is offered by BitBucket. Git's user-friendly interface allows even newbie programmers to use it. To utilize Git by itself, we often need a little more technical expertise and command-line experience. Moreover, BitBuckets offers a wide range of services, including the ability for teams to collaborate on projects and develop, test, and distribute code. In order to learn BitBucket, we must have firsthand experience with:</p>
<p><a target="_blank" href="https://bitbucket.org/">Visit</a></p>
<h3 id="heading-vercel"><strong>Vercel</strong></h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1678019882074/fc84c359-2872-4d28-9c19-e02f03c221f8.jpeg" alt class="image--center mx-auto" /></p>
<p>Vercel is a cloud platform for serverless and static frontends. It makes it possible for programmers to host websites and web applications that scale automatically, deploy rapidly, and don't need any manual intervention.</p>
<p><a target="_blank" href="https://vercel.com/">Visit</a></p>
<h3 id="heading-render"><strong>Render</strong></h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1678019887301/5955f946-9285-4b20-872e-9c60ec67b797.jpeg" alt class="image--center mx-auto" /></p>
<p>With free SSL, a worldwide CDN, private networks, and auto deploys from Git, Render offers a unified platform for building and running all of your apps and websites. Platform as a Service is a subcategory of a tech stack that includes the tool Render.</p>
<p><a target="_blank" href="https://render.com/">Visit</a></p>
<h3 id="heading-aws-amplify"><strong>AWS Amplify</strong></h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1678019901256/a5484d1c-e2d5-4b9b-a580-963b77575c30.jpeg" alt class="image--center mx-auto" /></p>
<p>These days, the majority of firms are making the switch to cloud computing and are prepared to cut the cord. The leader among the different cloud adoption services is Amazon Web Services (AWS), the company that invented the cloud.</p>
<p>A total of over 90 services and solutions are available in Amazon's constantly expanding portfolio to meet the needs of developers and help them create quick, effective, serverless, and secure web and mobile applications.</p>
<p>Amazon Amplify is one such tool that is popular and has significantly sped up and simplified processes for developers. This post will go in-depth on every aspect of AWS Amplify, including how it functions and all of its features, integrations, pricing options, advantages, and disadvantages.</p>
<p><a target="_blank" href="https://aws.amazon.com/amplify/">Visit</a></p>
<h3 id="heading-neocities"><strong>Neocities</strong></h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1678019908566/1edbf12f-91db-4cd4-b5ec-19d5d8e44959.jpeg" alt class="image--center mx-auto" /></p>
<p>A for-profit web hosting service for static websites is called Neocities. It provides 1 GB of storage capacity for both paid and free memberships and does not allow server-side scripting. The service's stated objective is to continue to maintain the no-cost web hosting offered by the long-since-gone GeoCities. the launch of Neocities in 2013.</p>
<p><a target="_blank" href="https://neocities.org/">Visit</a></p>
<h3 id="heading-cloudflare-pages"><strong>Cloudflare Pages</strong></h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1678019917928/db88151a-d683-4786-a60c-afa2ac3fd8f6.jpeg" alt class="image--center mx-auto" /></p>
<p>By handling all the time-consuming aspects of web development, Cloudflare Pages drastically streamlines creating and delivering websites. Today, developers can concentrate on the enjoyable and imaginative aspects.</p>
<p><a target="_blank" href="https://pages.cloudflare.com/">Visit</a></p>
<h3 id="heading-gatsby-cloud"><strong>Gatsby Cloud</strong></h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1678019924973/d8138d16-512e-4a9e-8fd1-186a3e6f9e99.jpeg" alt class="image--center mx-auto" /></p>
<p>With the use of a straightforward Github account, Gatsby Cloud is a platform that enables users to develop and maintain Gatsby websites. For web designers, developers, and all other content producers around the world, it provides a real-time preview option that serves as a private playground.</p>
<p><a target="_blank" href="https://www.gatsbyjs.com/products/cloud/">Visit</a></p>
<h3 id="heading-carrd"><strong>Carrd</strong></h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1678019934194/bb197233-7e38-4ec4-955b-1b16a7eebaa0.jpeg" alt class="image--center mx-auto" /></p>
<p>Users may quickly create straightforward, responsive websites with Carrd, a one-page website builder. For small enterprises, portfolio resumes, and other purposes, Carrd is ideal.</p>
<p>It's simple and doesn't take any programming or design knowledge to create a Carrd website. Choose a template, enter your content, and publish your website online.</p>
<p><a target="_blank" href="https://carrd.co/">Visit</a></p>
<h3 id="heading-infinityfree"><strong>InfinityFree</strong></h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1678019941257/83569d22-10cb-4385-8507-7dab28b4ae5f.jpeg" alt class="image--center mx-auto" /></p>
<p>A web hosting company called InfinityFree hosting offers unrestricted bandwidth and disc space for free for as long as you need. For folks who are just establishing a business, it is the perfect solution! Despite offering iFastNet services, this hosting provider stands out for being environmentally friendly.</p>
<p><a target="_blank" href="https://www.infinityfree.net/">Visit</a></p>
<h3 id="heading-000webhost"><strong>000webhost</strong></h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1678019945161/5437b9e4-163f-4458-8a38-032afc7f62e1.jpeg" alt class="image--center mx-auto" /></p>
<p>The most well-known Hostinger subsidiary 000webhost offers a web hosting service. It provides free domain registration as well as hosting for that name on a server. On the other side, 000webhost can be used in conjunction with the CMS WordPress.</p>
<p><a target="_blank" href="https://www.000webhost.com/">Visit</a></p>
<h3 id="heading-awardspace"><strong>Awardspace</strong></h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1678019954006/6834d444-9510-4a0a-b159-1b9fd38e1543.jpeg" alt class="image--center mx-auto" /></p>
<p>AwardSpace is credited with founding the free web hosting sector. Yet, for us, being the first to do something is never sufficient. We work hard to make it simpler for you, our clients, to not only receive a free hosting service but also make the most of it. As a result, we are constantly enhancing our service.</p>
<p><a target="_blank" href="https://www.awardspace.com/">Visit</a></p>
<h3 id="heading-byet-host"><strong>Byet Host</strong></h3>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1678019959740/c83571d4-5582-45da-9a96-f61c4db9a968.jpeg" alt class="image--center mx-auto" /></p>
<p>A subsidiary of the British web hosting company iFastNet is ByetHost. It provides both free and paid shared hosting services, including domain registration, shared hosting, VPS, email hosting, and dedicated servers.</p>
<p>The ByetHost servers are now housed in a data center in Newcastle, UK, despite having previously been based in the United States.</p>
<p>The ByetHost website is really simple to navigate even though it appears to be a little dated and has a lot of out-of-date information. It is available for viewing in English, and all prices are displayed in USD.</p>
<p><a target="_blank" href="https://byet.host/free-hosting">Visit</a></p>
<p><strong>Note</strong>: all the original images, icons, and materials represent their respective author.</p>
<p><strong>Source</strong>:</p>
<div class="embed-wrapper"><div class="embed-loading"><div class="loadingRow"></div><div class="loadingRow"></div></div><a class="embed-card" href="https://twitter.com/csaba_kissi/status/1631663856685576193">https://twitter.com/csaba_kissi/status/1631663856685576193</a></div>
]]></content:encoded></item></channel></rss>