<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Mehedi Hasan</title>
    <description>The latest articles on Forem by Mehedi Hasan (@programmerhasan).</description>
    <link>https://forem.com/programmerhasan</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2899353%2F84aa7859-8b2a-4489-9c99-e14a8328964b.jpg</url>
      <title>Forem: Mehedi Hasan</title>
      <link>https://forem.com/programmerhasan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/programmerhasan"/>
    <language>en</language>
    <item>
      <title>WakaTime: কোডিং ট্র্যাকিং টুল – প্রতিদিনের কোডিং সময় কিভাবে হিসাব করবেন? শিখুন WakaTime দিয়ে</title>
      <dc:creator>Mehedi Hasan</dc:creator>
      <pubDate>Sun, 27 Apr 2025 00:50:58 +0000</pubDate>
      <link>https://forem.com/programmerhasan/wakatime-koddin-ttryaakin-ttul-prtidiner-koddin-smyy-kibhaabe-hisaab-krben-shikhun-wakatime-diyye-4lb</link>
      <guid>https://forem.com/programmerhasan/wakatime-koddin-ttryaakin-ttul-prtidiner-koddin-smyy-kibhaabe-hisaab-krben-shikhun-wakatime-diyye-4lb</guid>
      <description>&lt;p&gt;WakaTime কী?&lt;br&gt;
WakaTime একটি অটোমেটেড টাইম ট্র্যাকিং টুল, যেটি আপনার কোডিং করার সময় ও কোন প্রজেক্টে কত সময় ব্যয় করেছেন – সেই ডেটা বিশ্লেষণ করে। এটি ডেভেলপারদের জন্য দারুণ একটি Productivity টুল। বিশেষ করে যারা প্রতিদিন অনেকগুলো প্রজেক্ট নিয়ে কাজ করেন, তাদের জন্য এটি খুবই সহায়ক।&lt;/p&gt;

&lt;p&gt;WakaTime কেন ব্যবহার করবেন?&lt;br&gt;
✅ কোন প্রজেক্টে আপনি কত সময় দিচ্ছেন – সেই রিপোর্ট পাওয়া যায়। &lt;/p&gt;

&lt;p&gt;কোন ফাইল বা কোন প্রজেক্টে কাজ করেছেন, কত ঘন্টা লেগেছে – সব অটোমেটিক রিপোর্ট করে।&lt;/p&gt;

&lt;p&gt;✅ প্রতিদিন, সপ্তাহে বা মাসে কোডিং হ্যাবিট দেখা যায়। &lt;/p&gt;

&lt;p&gt;দিনের বেলা বেশি কোড করেন নাকি রাতে? সপ্তাহের কোন দিনে বেশি Active থাকেন? WakaTime তা স্পষ্ট করে দেয়।&lt;/p&gt;

&lt;p&gt;✅ নিজের Productivity বাড়ানোর জন্য দারুণ সহায়ক। &lt;/p&gt;

&lt;p&gt;আপনি কোন কাজে বেশি সময় দিচ্ছেন আর কোন কাজে কম – এটা দেখে নিজের কাজের গতি ম্যানেজ করতে পারবেন।&lt;/p&gt;

&lt;p&gt;✅ Freelancer বা অফিসিয়াল রিপোর্টিংয়ে সময় ট্র্যাকিং হিসেবেও ব্যবহার করা যায়। &lt;/p&gt;

&lt;p&gt;আপনি চাইলে ক্লায়েন্টকে প্রমাণ হিসেবে দেখাতে পারেন আপনি ঠিক কত সময় কাজ করেছেন, কোন কোন ফাইলে পরিবর্তন করেছেন।&lt;/p&gt;

&lt;p&gt;✅ Leaderboard ফিচার দিয়ে অন্য ডেভেলপারদের সাথে তুলনা করতে পারবেন। &lt;/p&gt;

&lt;p&gt;WakaTime এর Global বা Private Leaderboard-এ দেখে নিতে পারবেন আপনি কত সময় কোড করেছেন অন্যদের তুলনায়। এটা একধরনের Friendly Competition তৈরি করে।&lt;/p&gt;

&lt;p&gt;✅ Project Insights দিয়ে আলাদা করে প্রতিটি প্রজেক্টের জন্য বিশ্লেষণ দেখতে পারবেন। &lt;/p&gt;

&lt;p&gt;কোন প্রজেক্টে সময় বেশি লাগছে, কোন প্রজেক্টে কম – তা দেখার জন্য আলাদা ড্যাশবোর্ড থাকে।&lt;/p&gt;

&lt;p&gt;✅ Goals সেট করতে পারবেন। &lt;/p&gt;

&lt;p&gt;যেমন আপনি টার্গেট করতে পারেন, "প্রতিদিন অন্তত ৩ ঘণ্টা কোড করবো" – WakaTime আপনাকে ট্র্যাক করে দেখাবে আপনি টার্গেট পূরণ করছেন কিনা।&lt;/p&gt;

&lt;p&gt;✅ ডিফারেন্ট কোডিং ভাষার রিপোর্ট পাওয়া যায়। &lt;/p&gt;

&lt;p&gt;কত সময় Python এ, কত সময় JavaScript এ, কত সময় Dart বা PHP-তে কোড করছেন – সব সুন্দরভাবে আলাদা আলাদা দেখায়।&lt;/p&gt;

&lt;p&gt;✅ IDE বা Editor স্যুইচ করলেও সমস্যা নেই। &lt;/p&gt;

&lt;p&gt;একবার WakaTime প্লাগইন ইনস্টল করলেই, আপনি যে কোন IDE বা Code Editor (VSCode, JetBrains, Sublime Text, ইত্যাদি) থেকে একসাথে ট্র্যাকিং চালাতে পারবেন।&lt;/p&gt;

&lt;p&gt;✅ Privacy কন্ট্রোল আপনার হাতে। &lt;/p&gt;

&lt;p&gt;WakaTime-এ চাইলে আপনি কিছু ফাইল বা প্রজেক্টের ট্র্যাকিং বন্ধ করতে পারেন, যেন প্রাইভেট কাজ গোপন থাকে।&lt;/p&gt;

&lt;p&gt;📌 সংক্ষেপে বললে, WakaTime আপনাকে—&lt;br&gt;
কোথায় সময় দিচ্ছেন তা জানায়।&lt;/p&gt;

&lt;p&gt;Productive হতে সাহায্য করে।&lt;/p&gt;

&lt;p&gt;রিপোর্টিং আর টার্গেট সেটিংয়ে দারুণ সুবিধা দেয়।&lt;/p&gt;

&lt;p&gt;সবার সাথে Friendly Leaderboard এ যুক্ত হতে দেয়।&lt;/p&gt;

&lt;p&gt;কিভাবে শুরু করবেন?&lt;br&gt;
ধাপ ১: সাইন আপ করুন&lt;br&gt;
প্রথমে &lt;a href="https://wakatime.com/" rel="noopener noreferrer"&gt;https://wakatime.com/&lt;/a&gt; ওয়েবসাইটে যান।&lt;/p&gt;

&lt;p&gt;GitHub দিয়ে সাইন ইন করা যায়&lt;/p&gt;

&lt;p&gt;ইমেইল দিয়েও একাউন্ট খোলা যায়&lt;/p&gt;

&lt;p&gt;ধাপ ২: আপনার Code Editor এ WakaTime প্লাগইন ইনস্টল করুন&lt;br&gt;
WakaTime প্রায় সব জনপ্রিয় কোড এডিটর সাপোর্ট করে:&lt;/p&gt;

&lt;p&gt;VS Code&lt;/p&gt;

&lt;p&gt;Sublime Text&lt;/p&gt;

&lt;p&gt;IntelliJ IDEA&lt;/p&gt;

&lt;p&gt;Atom&lt;/p&gt;

&lt;p&gt;PyCharm&lt;/p&gt;

&lt;p&gt;এবং আরও অনেক&lt;/p&gt;

&lt;p&gt;যেমন VS Code এর ক্ষেত্রে:&lt;/p&gt;

&lt;p&gt;VS Code ওপেন করুন&lt;/p&gt;

&lt;p&gt;Extensions-এ গিয়ে “WakaTime” লিখে সার্চ করুন&lt;/p&gt;

&lt;p&gt;“WakaTime” এক্সটেনশনটি ইনস্টল করুন&lt;/p&gt;

&lt;p&gt;ধাপ ৩: API Key সেটআপ করুন&lt;br&gt;
ইনস্টল করার পর WakaTime আপনাকে একটি API Key চাইবে।&lt;/p&gt;

&lt;p&gt;আপনার WakaTime Dashboard থেকে API Key কপি করুন&lt;/p&gt;

&lt;p&gt;Editor ইনস্টলেশন উইজার্ডে সেটা পেস্ট করুন&lt;/p&gt;

&lt;p&gt;ধাপ ৪: এখন কোড করলেই টাইম ট্র্যাক হবে!&lt;br&gt;
আপনি যখনই কোড করবেন, WakaTime আপনার কাজের সময়, কোন ফাইল বা প্রজেক্টে সময় ব্যয় করছেন – সব ট্র্যাক করবে।&lt;/p&gt;

&lt;p&gt;ড্যাশবোর্ড দেখা ও বিশ্লেষণ করা&lt;br&gt;
&lt;a href="https://wakatime.com/dashboard" rel="noopener noreferrer"&gt;https://wakatime.com/dashboard&lt;/a&gt; এই লিংকে গিয়ে আপনি দেখতে পারবেন:&lt;/p&gt;

&lt;p&gt;কোন ভাষায় কত সময় কোড করেছেন&lt;/p&gt;

&lt;p&gt;কোন প্রজেক্টে কত সময় লেগেছে&lt;/p&gt;

&lt;p&gt;আপনার প্রতিদিনের কোডিং গ্রাফ&lt;/p&gt;

&lt;p&gt;Productive টাইম বনাম Idle টাইম&lt;/p&gt;

&lt;p&gt;ফ্রিল্যান্সারদের জন্য আলাদা সুবিধা&lt;br&gt;
যারা Fiverr, Upwork বা অন্য মার্কেটপ্লেসে কাজ করেন, তাদের জন্য এটা প্রমাণ দেখানোর মতো কাজ করে। আপনি রিপোর্ট হিসেবে ক্লায়েন্টকে দেখাতে পারেন আপনি কত সময় কাজ করেছেন।&lt;/p&gt;

&lt;p&gt;WakaTime আপনার কোডিং লাইফকে আরও গুছিয়ে নিতে সাহায্য করে। আপনি যদি প্রতিদিন কোড করেন, তাহলে এটা আপনার নিত্যদিনের সঙ্গী হতে পারে। নিজে Try করে দেখুন, এক সপ্তাহ পর নিজেই বুঝতে পারবেন কতটা উপকারে আসছে।&lt;/p&gt;

&lt;h1&gt;
  
  
  ProgrammerHasan
&lt;/h1&gt;

</description>
    </item>
    <item>
      <title>💥 Sentry.io: আপনার অ্যাপ্লিকেশনের ত্রুটি খুঁজে বের করার এক বিশ্বস্ত সমাধান</title>
      <dc:creator>Mehedi Hasan</dc:creator>
      <pubDate>Sun, 27 Apr 2025 00:19:11 +0000</pubDate>
      <link>https://forem.com/programmerhasan/sentryio-aapnaar-ayaaplikeshner-trutti-khunje-ber-kraar-ek-bishbst-smaadhaan-2ah4</link>
      <guid>https://forem.com/programmerhasan/sentryio-aapnaar-ayaaplikeshner-trutti-khunje-ber-kraar-ek-bishbst-smaadhaan-2ah4</guid>
      <description>&lt;p&gt;🔍 Sentry.io কী?&lt;br&gt;
Sentry.io একটি ওপেন-সোর্স বাগ ট্র্যাকিং টুল যা রিয়েল-টাইমে অ্যাপ্লিকেশনের ত্রুটি (error), ক্র্যাশ, এবং পারফরম্যান্স সমস্যা শনাক্ত ও রিপোর্ট করে। এটি ডেভেলপারদেরকে দ্রুত সমস্যার উৎস খুঁজে বের করতে সাহায্য করে, যাতে করে তারা দ্রুত সমাধান করতে পারে।&lt;/p&gt;

&lt;p&gt;মূল বৈশিষ্ট্যগুলো হলো:&lt;/p&gt;

&lt;p&gt;রিয়েল-টাইম Error মনিটরিং&lt;/p&gt;

&lt;p&gt;Stack trace সহ error details&lt;/p&gt;

&lt;p&gt;Issue grouping ও tagging&lt;/p&gt;

&lt;p&gt;GitHub, Slack সহ নানা প্ল্যাটফর্মের সাথে integration&lt;/p&gt;

&lt;p&gt;Performance monitoring (APM)&lt;/p&gt;

&lt;p&gt;🛠 Laravel-এ Sentry সেটআপ করার ধাপসমূহ&lt;br&gt;
Laravel-এ Sentry ইনস্টল করতে আপনাকে নিচের ধাপগুলো অনুসরণ করতে হবে:&lt;/p&gt;

&lt;p&gt;১. Composer দিয়ে প্যাকেজ ইনস্টল করুন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;composer require sentry/sentry-laravel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;২. .env ফাইলে DSN কনফিগার করুন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SENTRY_LARAVEL_DSN=https://&amp;lt;your_public_key&amp;gt;@o&amp;lt;org_id&amp;gt;.ingest.sentry.io/&amp;lt;project_id&amp;gt;
SENTRY_TRACES_SAMPLE_RATE=1.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⚠️ DSN পাওয়া যাবে Sentry.io তে প্রজেক্ট তৈরির পর।&lt;/p&gt;

&lt;p&gt;৩. config/app.php বা config/sentry.php (auto-published হলে) কনফিগার চেক করুন&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;php artisan vendor:publish --tag=sentry-config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;৪. Laravel exception বা লগ ক্যাপচার করতে:&lt;br&gt;
Laravel এর Handler.php ফাইল খুলে report() মেথডে যুক্ত করুন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;use Sentry\Laravel\Facade as Sentry;

public function report(Throwable $exception)
{
    if (app()-&amp;gt;bound('sentry') &amp;amp;&amp;amp; $this-&amp;gt;shouldReport($exception)) {
        Sentry::captureException($exception);
    }

    parent::report($exception);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;নিচে একটি Real Laravel কোড উদাহরণ দেওয়া হলো যেখানে Sentry দিয়ে একটি exception ধরা হচ্ছে এবং তা Sentry dashboard-এ রিপোর্ট করা হচ্ছে:&lt;/p&gt;

&lt;p&gt;✅ Laravel কোড (Sentry integration)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Exception;
use function Sentry\captureException;

class TestController extends Controller
{
    public function index()
    {
        try {
            // ধরুন এখানে একটি সমস্যা তৈরি হচ্ছে
            $result = 10 / 0; // Division by zero exception
        } catch (Exception $e) {
            // Sentry তে exception পাঠানো হচ্ছে
            captureException($e);

            // কাস্টম রেসপন্স
            return response()-&amp;gt;json([
                'message' =&amp;gt; 'Something went wrong!',
                'error' =&amp;gt; $e-&amp;gt;getMessage(),
            ], 500);
        }

        return response()-&amp;gt;json([
            'result' =&amp;gt; $result,
        ]);
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🛠 কাজটি কীভাবে করে?&lt;br&gt;
10 / 0 একটি DivisionByZeroError তৈরি করবে।&lt;/p&gt;

&lt;p&gt;captureException($e) এই লাইনে Sentry API-র মাধ্যমে ত্রুটি রিপোর্ট করা হবে।&lt;/p&gt;

&lt;p&gt;আপনি আপনার Sentry Dashboard-এ সাথে সাথে এই error লগ দেখতে পাবেন, Stack Trace সহ।&lt;/p&gt;

&lt;p&gt;Laravel-এর যেকোনো সার্ভিস, কাস্টম লজিক, অথবা ব্যাকগ্রাউন্ড জবের মধ্যে এই প্যাটার্ন ব্যবহার করা যায়।&lt;/p&gt;

&lt;p&gt;এখন Laravel অ্যাপ্লিকেশনে কোনো ত্রুটি হলে তা Sentry dashboard-এ দেখা যাবে।&lt;/p&gt;

&lt;p&gt;📱 Flutter-এ Sentry সেটআপ করার ধাপসমূহ&lt;br&gt;
১. pubspec.yaml এ dependency যোগ করুন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dependencies:
  sentry_flutter: ^7.10.1 # সর্বশেষ ভার্সন চেক করুন
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;২. main.dart ফাইলে ইনিশিয়ালাইজ করুন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import 'package:flutter/material.dart';
import 'package:sentry_flutter/sentry_flutter.dart';

Future&amp;lt;void&amp;gt; main() async {
  await SentryFlutter.init(
    (options) {
      options.dsn = 'https://&amp;lt;your_public_key&amp;gt;@o&amp;lt;org_id&amp;gt;.ingest.sentry.io/&amp;lt;project_id&amp;gt;';
      options.tracesSampleRate = 1.0; // পারফরম্যান্স মনিটরিংয়ের জন্য
    },
    appRunner: () =&amp;gt; runApp(MyApp()),
  );
}
৩. ত্রুটি রিপোর্ট করার উদাহরণ:
try {
  throw Exception('এইটা একটা টেস্ট এক্সসেপশন');
} catch (exception, stackTrace) {
  await Sentry.captureException(
    exception,
    stackTrace: stackTrace,
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;নিচে আমি Laravel ও Flutter – উভয়ের জন্য একটি করে ডেমো কোড এবং Sentry.io Dashboard-এ কেমন করে error দেখা যায় তার স্ক্রিনশট লুক কেমন হয়, তাও উল্লেখ করলাম।&lt;/p&gt;

&lt;p&gt;📌 Laravel ডেমো কোড (Sentry সহ)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Exception;
use function Sentry\captureException;

class PaymentController extends Controller
{
    public function processPayment(Request $request)
    {
        try {
            // কল্পনা করুন এখানে পেমেন্ট গেটওয়ের মাধ্যমে ট্রানজেকশন হচ্ছে
            if (!$request-&amp;gt;has('amount')) {
                throw new Exception("Amount parameter is missing");
            }

            // এখানে আরও পেমেন্ট প্রসেসিং কোড থাকতে পারে...

            return response()-&amp;gt;json(['message' =&amp;gt; 'Payment processed']);
        } catch (Exception $e) {
            captureException($e); // Sentry তে exception পাঠানো হচ্ছে

            return response()-&amp;gt;json([
                'error' =&amp;gt; 'Payment failed',
                'message' =&amp;gt; $e-&amp;gt;getMessage()
            ], 500);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই রকম একটা exception আপনি যখন হিট করবেন /api/payment (amount ছাড়া), তখন Sentry ড্যাশবোর্ডে সেটি এমনভাবে দেখা যাবে:&lt;/p&gt;

&lt;p&gt;🖼️ Sentry.io Dashboard-এ কেমন দেখা যায় (Laravel)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Exception: Amount parameter is missing
File: PaymentController.php
Line: 15
User: ID 34 (authenticated)
Tags: environment=production
Sentry Stacktrace এ পূর্ণ কোডের লাইনের breakdown, context ও variable values থাকে।
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;📱 Flutter ডেমো কোড (Sentry সহ)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import 'package:flutter/material.dart';
import 'package:sentry_flutter/sentry_flutter.dart';

void main() async {
  await SentryFlutter.init(
    (options) {
      options.dsn = 'https://&amp;lt;your_public_key&amp;gt;@o&amp;lt;org&amp;gt;.ingest.sentry.io/&amp;lt;project_id&amp;gt;';
    },
    appRunner: () =&amp;gt; runApp(MyApp()),
  );
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Sentry Demo',
      home: Scaffold(
        appBar: AppBar(title: Text('Flutter Sentry Example')),
        body: Center(
          child: ElevatedButton(
            child: Text('Generate Error'),
            onPressed: () async {
              try {
                throw Exception("Manual Flutter Exception");
              } catch (error, stackTrace) {
                await Sentry.captureException(error, stackTrace: stackTrace);
              }
            },
          ),
        ),
      ),
    );
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🖼️ Sentry.io Dashboard-এ কেমন দেখা যায় (Flutter)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Exception: Manual Flutter Exception
Platform: android
User: anonymous
Stack Trace:
MyApp.build.&amp;lt;anonymous closure&amp;gt;
MainActivity.kt -&amp;gt; FlutterMainActivity
এছাড়া Geo, OS version, device info ইত্যাদিও পাওয়া যাবে।
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;🧪 কেন Sentry ব্যবহার করবেন?&lt;br&gt;
✅ ডেভেলপার হিসেবে আপনি রিয়েল টাইমে সমস্যা জানবেন&lt;/p&gt;

&lt;p&gt;✅ ইউজার এক্সপেরিয়েন্স ভালো রাখতে পারবেন&lt;/p&gt;

&lt;p&gt;✅ ক্র্যাশ রিপোর্ট বিশ্লেষণ সহজ হবে&lt;/p&gt;

&lt;p&gt;✅ টিমে কাজের ফ্লো আরও মসৃণ হবে&lt;/p&gt;

&lt;p&gt;✨ উপসংহার&lt;br&gt;
Laravel বা Flutter — আপনি যেটিই ব্যবহার করেন না কেন, Sentry আপনাকে ডেভেলপমেন্ট লাইফ সাইকেল আরও প্রোফেশনাল ও প্রোঅ্যাকটিভ করতে সাহায্য করবে। এতে আপনি শুধু বাগ ফিক্স করতেই পারবেন না, বরং সময়মতো অ্যাকশান নিয়ে ইউজারের ট্রাস্টও অর্জন করতে পারবেন।&lt;/p&gt;

&lt;h1&gt;
  
  
  ProgrammerHasan
&lt;/h1&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>laravel</category>
    </item>
    <item>
      <title>নতুন Flutter ডেভেলপারদের জন্য সেরা স্টেট ম্যানেজমেন্ট: একটি প্রারম্ভিক গাইড উদাহরণসহ</title>
      <dc:creator>Mehedi Hasan</dc:creator>
      <pubDate>Mon, 24 Mar 2025 07:30:47 +0000</pubDate>
      <link>https://forem.com/programmerhasan/ntun-flutter-ddebhelpaarder-jny-seraa-sttett-myaanejmentt-ektti-praarmbhik-gaaidd-udaahrnnsh-30lc</link>
      <guid>https://forem.com/programmerhasan/ntun-flutter-ddebhelpaarder-jny-seraa-sttett-myaanejmentt-ektti-praarmbhik-gaaidd-udaahrnnsh-30lc</guid>
      <description>&lt;p&gt;যখন আপনি প্রথম Flutter-এ অ্যাপ তৈরি করতে শুরু করেন, তখন আপনার অ্যাপের স্টেট কীভাবে ম্যানেজ করবেন, তা বুঝতে কিছুটা বিভ্রান্তিকর হতে পারে। স্টেট ম্যানেজমেন্ট গুরুত্বপূর্ণ কারণ এটি নিশ্চিত করে যে আপনার অ্যাপের UI ডেটাতে পরিবর্তন হওয়ার সাথে সাথে সঠিকভাবে প্রতিক্রিয়া জানায়। কিন্তু একটি নতুন ডেভেলপার হিসেবে, আপনি কোন পদ্ধতি ব্যবহার করবেন তা ঠিক করা কঠিন হতে পারে। আপনি কি Provider ব্যবহার করবেন? Riverpod, GetX বা Bloc সম্পর্কে কী? &lt;/p&gt;

&lt;p&gt;এই আর্টিকেলে, আমি আপনাকে বিভিন্ন স্টেট ম্যানেজমেন্ট পদ্ধতি নিয়ে পরিচিত করাবো, সবচেয়ে সহজ পদ্ধতি (যেমন setState) থেকে শুরু করে আরও উন্নত পদ্ধতিগুলি পর্যন্ত। আমি বাস্তব উদাহরণও দেব, যাতে আপনি দেখতে পারেন প্রতিটি পদ্ধতি কীভাবে কাজ করে।&lt;/p&gt;

&lt;h3&gt;
  
  
  স্টেট ম্যানেজমেন্ট কেন গুরুত্বপূর্ণ?
&lt;/h3&gt;

&lt;p&gt;একটি সাধারণ Flutter অ্যাপে, স্টেট পরিবর্তন প্রতিটি স্থানে ঘটে। একটি শপিং অ্যাপ কল্পনা করুন: যখন আপনি কার্টে আইটেম যোগ করেন, তখন মোট মূল্য আপডেট হওয়া উচিত। যদি আপনি একটি সোশ্যাল মিডিয়া অ্যাপ তৈরি করেন, তাহলে যখন কেউ একটি পোস্টে মন্তব্য করে, তখন মন্তব্যটি অবিলম্বে অ্যাপ রিফ্রেশ না করেই দেখা উচিত।&lt;/p&gt;

&lt;p&gt;যদি সঠিকভাবে স্টেট ম্যানেজমেন্ট না করা হয়, তবে আপনার অ্যাপ পরিবর্তনগুলির প্রতি সঠিকভাবে প্রতিক্রিয়া জানাবে না এবং ব্যবহারকারীর অভিজ্ঞতা হতাশাজনক হতে পারে।&lt;/p&gt;

&lt;h3&gt;
  
  
  নতুনদের জন্য স্টেট ম্যানেজমেন্ট অপশনগুলির পর্যালোচনা
&lt;/h3&gt;

&lt;p&gt;Flutter অনেকগুলি উপায়ে স্টেট ম্যানেজ করতে দেয়, তবে এখানে কিছু জনপ্রিয় পদ্ধতির তালিকা দেওয়া হলো:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;setState (বিল্ট-ইন, ছোট অ্যাপের জন্য)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Provider (নতুন ডেভেলপারদের জন্য আদর্শ, স্কেলযোগ্য)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Riverpod (Provider এর একটি উন্নত সংস্করণ)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GetX (সরল, ন্যূনতম বয়লারপ্লেট)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bloc (বড় এবং জটিল অ্যাপের জন্য)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  1. setState – Flutter এর বিল্ট-ইন স্টেট ম্যানেজমেন্ট
&lt;/h3&gt;

&lt;p&gt;setState হল Flutter-এ স্টেট ম্যানেজ করার সবচেয়ে মৌলিক এবং সহজ পদ্ধতি। এটি ছোট অ্যাপস বা উইজেটগুলির জন্য উপযুক্ত, যেখানে স্টেট অনেক অংশে ভাগ করা হয় না।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;উদাহরণ: Counter অ্যাপ setState এর মাধ্যমে&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="s"&gt;'package:flutter/material.dart'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;runApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MyApp&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyApp&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;StatelessWidget&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="n"&gt;Widget&lt;/span&gt; &lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BuildContext&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;MaterialApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nl"&gt;home:&lt;/span&gt; &lt;span class="n"&gt;CounterScreen&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CounterScreen&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;StatefulWidget&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="n"&gt;_CounterScreenState&lt;/span&gt; &lt;span class="n"&gt;createState&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;_CounterScreenState&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;_CounterScreenState&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;State&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;CounterScreen&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;_count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;_increment&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;_count&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;_decrement&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;_count&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="n"&gt;Widget&lt;/span&gt; &lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BuildContext&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Scaffold&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nl"&gt;appBar:&lt;/span&gt; &lt;span class="n"&gt;AppBar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;title:&lt;/span&gt; &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Counter App'&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
      &lt;span class="nl"&gt;body:&lt;/span&gt; &lt;span class="n"&gt;Center&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Column&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="nl"&gt;mainAxisAlignment:&lt;/span&gt; &lt;span class="n"&gt;MainAxisAlignment&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;center&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="nl"&gt;children:&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Widget&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;[&lt;/span&gt;
            &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Count: &lt;/span&gt;&lt;span class="si"&gt;$_count&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;Row&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
              &lt;span class="nl"&gt;mainAxisAlignment:&lt;/span&gt; &lt;span class="n"&gt;MainAxisAlignment&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;center&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="nl"&gt;children:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
                &lt;span class="n"&gt;IconButton&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;icon:&lt;/span&gt; &lt;span class="n"&gt;Icon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Icons&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nl"&gt;onPressed:&lt;/span&gt; &lt;span class="n"&gt;_decrement&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                &lt;span class="n"&gt;IconButton&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;icon:&lt;/span&gt; &lt;span class="n"&gt;Icon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Icons&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nl"&gt;onPressed:&lt;/span&gt; &lt;span class="n"&gt;_increment&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
              &lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="p"&gt;),&lt;/span&gt;
          &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;setState এর সুবিধা:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;সহজে বুঝতে এবং ব্যবহার করতে পারেন।&lt;/li&gt;
&lt;li&gt;ছোট, লোকালাইজড স্টেট পরিবর্তনের জন্য সেরা।&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;সামান্য অসুবিধা:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;বড় অ্যাপের জন্য স্কেলযোগ্য নয়।&lt;/li&gt;
&lt;li&gt;যদি স্টেট অনেক উইজেটে ভাগ করতে হয়, তবে এটি অপ্রত্যাশিতভাবে জটিল হতে পারে।&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Provider – নতুনদের জন্য আদর্শ
&lt;/h3&gt;

&lt;p&gt;Provider নতুন ডেভেলপারদের জন্য একটি সহজ এবং জনপ্রিয় পদ্ধতি। এটি Flutter টিমের দ্বারা অফিসিয়ালি সুপারিশ করা হয়েছে এবং অ্যাপের বিভিন্ন অংশে স্টেট শেয়ার করার জন্য কার্যকরী।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;উদাহরণ: Counter অ্যাপ Provider দিয়ে&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="s"&gt;'package:flutter/material.dart'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="s"&gt;'package:provider/provider.dart'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Counter&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;ChangeNotifier&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;_count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;_count&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;increment&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;_count&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;notifyListeners&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;decrement&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;_count&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;notifyListeners&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;runApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;ChangeNotifierProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nl"&gt;create:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
      &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;MyApp&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyApp&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;StatelessWidget&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="n"&gt;Widget&lt;/span&gt; &lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BuildContext&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;MaterialApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nl"&gt;home:&lt;/span&gt; &lt;span class="n"&gt;CounterScreen&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CounterScreen&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;StatelessWidget&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="n"&gt;Widget&lt;/span&gt; &lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BuildContext&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Scaffold&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nl"&gt;appBar:&lt;/span&gt; &lt;span class="n"&gt;AppBar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;title:&lt;/span&gt; &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Provider Example: Counter'&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
      &lt;span class="nl"&gt;body:&lt;/span&gt; &lt;span class="n"&gt;Center&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Column&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="nl"&gt;mainAxisAlignment:&lt;/span&gt; &lt;span class="n"&gt;MainAxisAlignment&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;center&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="nl"&gt;children:&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Widget&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;[&lt;/span&gt;
            &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Count:'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;Consumer&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;
              &lt;span class="nl"&gt;builder:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;counter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;child&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="si"&gt;${counter.count}&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
              &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;Row&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
              &lt;span class="nl"&gt;mainAxisAlignment:&lt;/span&gt; &lt;span class="n"&gt;MainAxisAlignment&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;center&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="nl"&gt;children:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
                &lt;span class="n"&gt;IconButton&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                  &lt;span class="nl"&gt;icon:&lt;/span&gt; &lt;span class="n"&gt;Icon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Icons&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                  &lt;span class="nl"&gt;onPressed:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;read&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;decrement&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
                &lt;span class="p"&gt;),&lt;/span&gt;
                &lt;span class="n"&gt;IconButton&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                  &lt;span class="nl"&gt;icon:&lt;/span&gt; &lt;span class="n"&gt;Icon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Icons&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                  &lt;span class="nl"&gt;onPressed:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;read&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;()&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;increment&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
                &lt;span class="p"&gt;),&lt;/span&gt;
              &lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="p"&gt;),&lt;/span&gt;
          &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Provider এর সুবিধা:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;শেখা এবং ব্যবহার করা সহজ।&lt;/li&gt;
&lt;li&gt;Flutter দ্বারা সুপারিশিত।&lt;/li&gt;
&lt;li&gt;অ্যাপ বৃদ্ধি পেলে স্কেলযোগ্য।&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;সামান্য অসুবিধা:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;setState এর তুলনায় কিছুটা বেশি সেটআপ প্রয়োজন।&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Riverpod – Provider এর পরবর্তী স্তর
&lt;/h3&gt;

&lt;p&gt;যদি আপনি Provider এ অভ্যস্ত হয়ে থাকেন, তবে Riverpod পরবর্তী পদক্ষেপ। এটি Provider এর কিছু সীমাবদ্ধতা ঠিক করে এবং আরও বেশি নমনীয় করে তোলে। Riverpod টেস্টিং সহজ করে এবং কিছু সাধারণ ভুল, যেমন উইজেট ট্রি পুনরায় বিল্ড হওয়ার সময় স্টেট হারানোর সমস্যা প্রতিরোধ করে।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;উদাহরণ: Riverpod দিয়ে স্টেট ম্যানেজমেন্ট&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="s"&gt;'package:flutter/material.dart'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="s"&gt;'package:flutter_riverpod/flutter_riverpod.dart'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;counterProvider&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;StateNotifierProvider&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;((&lt;/span&gt;&lt;span class="n"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Counter&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;StateNotifier&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;Counter&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;increment&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;decrement&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;runApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ProviderScope&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;MyApp&lt;/span&gt;&lt;span class="p"&gt;()));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyApp&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;StatelessWidget&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="n"&gt;Widget&lt;/span&gt; &lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BuildContext&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;MaterialApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nl"&gt;home:&lt;/span&gt; &lt;span class="n"&gt;CounterScreen&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CounterScreen&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;ConsumerWidget&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="n"&gt;Widget&lt;/span&gt; &lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BuildContext&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;WidgetRef&lt;/span&gt; &lt;span class="n"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ref&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;watch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;counterProvider&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Scaffold&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nl"&gt;appBar:&lt;/span&gt; &lt;span class="n"&gt;AppBar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;title:&lt;/span&gt; &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Riverpod Example: Counter'&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
      &lt;span class="nl"&gt;body:&lt;/span&gt; &lt;span class="n"&gt;Center&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Column&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="nl"&gt;mainAxisAlignment:&lt;/span&gt; &lt;span class="n"&gt;MainAxisAlignment&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;center&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="nl"&gt;children:&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Widget&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;[&lt;/span&gt;
            &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Count: &lt;/span&gt;&lt;span class="si"&gt;$count&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;Row&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
              &lt;span class="nl"&gt;mainAxisAlignment:&lt;/span&gt; &lt;span class="n"&gt;MainAxisAlignment&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;center&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="nl"&gt;children:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
                &lt;span class="n"&gt;IconButton&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                  &lt;span class="nl"&gt;icon:&lt;/span&gt; &lt;span class="n"&gt;Icon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Icons&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                  &lt;span class="nl"&gt;onPressed:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;ref&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;counterProvider&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;notifier&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;decrement&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
                &lt;span class="p"&gt;),&lt;/span&gt;
                &lt;span class="n"&gt;IconButton&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                  &lt;span class="nl"&gt;icon:&lt;/span&gt; &lt;span class="n"&gt;Icon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Icons&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                  &lt;span class="nl"&gt;onPressed:&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;ref&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;counterProvider&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;notifier&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;increment&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
                &lt;span class="p"&gt;),&lt;/span&gt;
              &lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="p"&gt;),&lt;/span&gt;
          &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Riverpod এর সুবিধা:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provider এর চেয়ে শক্তিশালী।&lt;/li&gt;
&lt;li&gt;বড় অ্যাপের জন্য উপযুক্ত।&lt;/li&gt;
&lt;li&gt;Provider এর সাধারণ ভুলগুলো দূর করে।&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;সামান্য অসুবিধা:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provider এর চেয়ে কিছুটা জটিল।&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. GetX – ন্যূনতম বয়লারপ্লেট
&lt;/h3&gt;

&lt;p&gt;GetX একটি জনপ্রিয় স্টেট ম্যানেজমেন্ট সলিউশন, যা সহজ এবং ন্যূনতম বয়লারপ্লেট প্রয়োজন। এটি স্টেট ম্যানেজমেন্ট, ডিপেন্ডেন্সি ইনজেকশন, এবং রাউটিংকে এক প্যাকেজে একত্রিত করে, যা ছোট থেকে মাঝারি অ্যাপগুলি দ্রুত তৈরি করার জন্য উপযুক্ত।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;উদাহরণ: GetX দিয়ে Counter অ্যাপ&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="s"&gt;'package:flutter/material.dart'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="s"&gt;'package:get/get.dart'&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CounterController&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;GetxController&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;obs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;increment&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="n"&gt;decrement&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;runApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MyApp&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyApp&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;StatelessWidget&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="n"&gt;Widget&lt;/span&gt; &lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BuildContext&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;MaterialApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nl"&gt;home:&lt;/span&gt; &lt;span class="n"&gt;CounterScreen&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CounterScreen&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="n"&gt;StatelessWidget&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="n"&gt;CounterController&lt;/span&gt; &lt;span class="n"&gt;controller&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Get&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;CounterController&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;

  &lt;span class="nd"&gt;@override&lt;/span&gt;
  &lt;span class="n"&gt;Widget&lt;/span&gt; &lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BuildContext&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Scaffold&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="nl"&gt;appBar:&lt;/span&gt; &lt;span class="n"&gt;AppBar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;title:&lt;/span&gt; &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'GetX Example: Counter'&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
      &lt;span class="nl"&gt;body:&lt;/span&gt; &lt;span class="n"&gt;Center&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nl"&gt;child:&lt;/span&gt; &lt;span class="n"&gt;Column&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="nl"&gt;mainAxisAlignment:&lt;/span&gt; &lt;span class="n"&gt;MainAxisAlignment&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;center&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="nl"&gt;children:&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Widget&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;[&lt;/span&gt;
            &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Count:'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
            &lt;span class="n"&gt;Obx&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="si"&gt;${controller.count}&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
            &lt;span class="n"&gt;Row&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
              &lt;span class="nl"&gt;mainAxisAlignment:&lt;/span&gt; &lt;span class="n"&gt;MainAxisAlignment&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;center&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
              &lt;span class="nl"&gt;children:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
                &lt;span class="n"&gt;IconButton&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                  &lt;span class="nl"&gt;icon:&lt;/span&gt; &lt;span class="n"&gt;Icon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Icons&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;remove&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                  &lt;span class="nl"&gt;onPressed:&lt;/span&gt; &lt;span class="n"&gt;controller&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;decrement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="p"&gt;),&lt;/span&gt;
                &lt;span class="n"&gt;IconButton&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                  &lt;span class="nl"&gt;icon:&lt;/span&gt; &lt;span class="n"&gt;Icon&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Icons&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;add&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
                  &lt;span class="nl"&gt;onPressed:&lt;/span&gt; &lt;span class="n"&gt;controller&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;increment&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="p"&gt;),&lt;/span&gt;
              &lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="p"&gt;),&lt;/span&gt;
          &lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;GetX এর সুবিধা:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ন্যূনতম সেটআপ এবং বয়লারপ্লেট।&lt;/li&gt;
&lt;li&gt;এক প্যাকেজে একাধিক কার্যকারিতা একত্রিত করে।&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;সামান্য অসুবিধা:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;বড় অ্যাপগুলিতে জটিল হয়ে উঠতে পারে।&lt;/li&gt;
&lt;li&gt;কিছু ডেভেলপার "অল-ইন-ওয়ান" পদ্ধতিটি সীমাবদ্ধ মনে করেন।&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Bloc – বড়, জটিল অ্যাপসের জন্য
&lt;/h3&gt;

&lt;p&gt;Bloc একটি শক্তিশালী স্টেট ম্যানেজমেন্ট সলিউশন, যা Business Logic Component (BLoC) প্যাটার্ন অনুসরণ করে এবং সেই অ্যাপগুলির জন্য উপযুক্ত যেখানে UI এবং বিজনেস লজিকের মধ্যে স্পষ্ট পৃথকীকরণ প্রয়োজন। এটি শেখা কঠিন হতে পারে, কিন্তু বড় অ্যাপগুলির জন্য খুব শক্তিশালী।&lt;/p&gt;

&lt;h3&gt;
  
  
  উপসংহার
&lt;/h3&gt;

&lt;p&gt;আপনার অ্যাপের জটিলতা এবং Flutter নিয়ে আপনার অভিজ্ঞতার উপর নির্ভর করে সঠিক স্টেট ম্যানেজমেন্ট পদ্ধতি চয়ন করা গুরুত্বপূর্ণ।&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ছোট অ্যাপ বা নতুন ডেভেলপারদের জন্য: &lt;strong&gt;setState&lt;/strong&gt; এবং &lt;strong&gt;Provider&lt;/strong&gt; সেরা প্রারম্ভিক পদ্ধতি।&lt;/li&gt;
&lt;li&gt;আরও জটিল অ্যাপসের জন্য: &lt;strong&gt;Riverpod&lt;/strong&gt;, &lt;strong&gt;GetX&lt;/strong&gt; অথবা &lt;strong&gt;Bloc&lt;/strong&gt; যথাযথ পদ্ধতি। &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;আপনি যত বেশি প্রকল্প তৈরি করবেন, ততই বিভিন্ন সলিউশন পরীক্ষা করে দেখুন, যাতে আপনি বুঝতে পারেন কোনটি আপনার জন্য সবচেয়ে ভালো!&lt;/p&gt;

</description>
      <category>flutter</category>
    </item>
    <item>
      <title>AI দিয়ে কোডিং: সুবিধা নাকি বিপদ?</title>
      <dc:creator>Mehedi Hasan</dc:creator>
      <pubDate>Mon, 24 Mar 2025 06:41:52 +0000</pubDate>
      <link>https://forem.com/programmerhasan/ai-diye-koddin-subidhaa-naaki-bipd-1pf9</link>
      <guid>https://forem.com/programmerhasan/ai-diye-koddin-subidhaa-naaki-bipd-1pf9</guid>
      <description>&lt;p&gt;প্রযুক্তির অগ্রগতির সাথে সাথে কৃত্রিম বুদ্ধিমত্তা (AI) আমাদের জীবনের নানা ক্ষেত্রে প্রভাব বিস্তার করছে। প্রোগ্রামিং ও সফটওয়্যার ডেভেলপমেন্টেও AI-এর ব্যবহার দিন দিন বাড়ছে। অনেক ডেভেলপার এখন ChatGPT, Copilot, বা অন্যান্য AI টুল ব্যবহার করে দ্রুত কোড লিখতে বা সমস্যার সমাধান করতে চাইছেন। কিন্তু প্রশ্ন হচ্ছে, AI দিয়ে কোডিং কি সত্যিই সুবিধাজনক, নাকি দীর্ঘমেয়াদে এটি আমাদের দক্ষতা কমিয়ে দিচ্ছে?&lt;br&gt;
AI কি সত্যিই সফটওয়্যার ডেভেলপমেন্টের জন্য যথেষ্ট?&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://www.linkedin.com/pulse/ai-%E0%A6%A6%E0%A6%AF-%E0%A6%95%E0%A6%A1-%E0%A6%B8%E0%A6%AC%E0%A6%A7-%E0%A6%A8%E0%A6%95-%E0%A6%AC%E0%A6%AA%E0%A6%A6-mehedi-hasan-kh3qc" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.licdn.com%2Fscds%2Fcommon%2Fu%2Fimages%2Femail%2Fartdeco%2Flogos%2F96%2Flinkedin-bug-color.png" height="96" class="m-0" width="96"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://www.linkedin.com/pulse/ai-%E0%A6%A6%E0%A6%AF-%E0%A6%95%E0%A6%A1-%E0%A6%B8%E0%A6%AC%E0%A6%A7-%E0%A6%A8%E0%A6%95-%E0%A6%AC%E0%A6%AA%E0%A6%A6-mehedi-hasan-kh3qc" rel="noopener noreferrer" class="c-link"&gt;
          AI দিয়ে কোডিং: সুবিধা নাকি বিপদ?
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          প্রযুক্তির অগ্রগতির সাথে সাথে কৃত্রিম বুদ্ধিমত্তা (AI) আমাদের জীবনের নানা ক্ষেত্রে প্রভাব বিস্তার করছে। প্রোগ্রামিং ও সফটওয়্যার ডেভেলপমেন্টেও AI-এর ব্যবহার দিন দিন বাড়ছে। অনেক ডেভেলপার এখন ChatGPT, Copilot, বা অন্যান্য AI টুল ব্যবহার করে দ্রুত কোড লিখতে বা সমস্যার সমাধান করতে চাইছেন। কিন্তু প্রশ্ন
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstatic.licdn.com%2Faero-v1%2Fsc%2Fh%2Fal2o9zrvru7aqj8e1x2rzsrca" width="800" height="400"&gt;
        linkedin.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>ai</category>
    </item>
    <item>
      <title>Vite এবং React অ্যাপ প্রোডাকশনে ডিপ্লয় করা</title>
      <dc:creator>Mehedi Hasan</dc:creator>
      <pubDate>Sun, 23 Mar 2025 18:00:00 +0000</pubDate>
      <link>https://forem.com/programmerhasan/vite-ebn-react-ayaap-proddaakshne-ddiply-kraa-1ao6</link>
      <guid>https://forem.com/programmerhasan/vite-ebn-react-ayaap-proddaakshne-ddiply-kraa-1ao6</guid>
      <description>&lt;p&gt;&lt;strong&gt;React&lt;/strong&gt; হল একটি জনপ্রিয় জাভাস্ক্রিপ্ট লাইব্রেরি যা ইন্টার‌্যাকটিভ ইউজার ইন্টারফেস তৈরি করতে ব্যবহৃত হয়। অন্যদিকে, &lt;strong&gt;Vite&lt;/strong&gt; হল একটি আধুনিক বিল্ড টুল যা অত্যন্ত দ্রুত এবং কার্যকর অ্যাপ তৈরি করতে সহায়তা করে। Vite এর সাহায্যে React অ্যাপ্লিকেশন ডেভেলপ করা সহজ এবং হালকা। এই নিবন্ধে, আমরা কিভাবে একটি Vite-ভিত্তিক React অ্যাপ প্রোডাকশনে ডিপ্লয় করা যায় তা শিখব। আমরা বিশেষভাবে Netlify, Vercel, এবং DigitalOcean প্ল্যাটফর্মগুলোতে ডিপ্লয় করা নিয়ে আলোচনা করব।&lt;/p&gt;




&lt;h3&gt;
  
  
  ১. React + Vite প্রজেক্ট সেটআপ
&lt;/h3&gt;

&lt;p&gt;আপনার প্রথম পদক্ষেপ হলো একটি React + Vite প্রজেক্ট তৈরি করা। নিচের ধাপগুলো অনুসরণ করুন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm create vite@latest my-react-app &lt;span class="nt"&gt;--template&lt;/span&gt; react
&lt;span class="nb"&gt;cd &lt;/span&gt;my-react-app
npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এখানে Vite একটি দ্রুত ডেভেলপমেন্ট সার্ভার সরবরাহ করে। এখন, প্রজেক্ট তৈরি হয়ে গেলে, আমরা এটিকে প্রোডাকশনে নিয়ে যাব।&lt;/p&gt;

&lt;h3&gt;
  
  
  ২. Vite প্রোডাকশন বিল্ড
&lt;/h3&gt;

&lt;p&gt;প্রোডাকশনে React অ্যাপ ডিপ্লয় করার জন্য প্রথমে আমাদের অ্যাপের &lt;strong&gt;প্রোডাকশন বিল্ড&lt;/strong&gt; তৈরি করতে হবে। এই প্রক্রিয়া Vite ব্যবহার করে খুবই দ্রুত এবং সহজ।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এটি &lt;code&gt;dist/&lt;/code&gt; ফোল্ডারে একটি প্রোডাকশন রেডি বিল্ড তৈরি করবে। এরপর আমরা আমাদের পছন্দের হোস্টিং প্ল্যাটফর্মে এটি ডিপ্লয় করবো।&lt;/p&gt;




&lt;h3&gt;
  
  
  ৩. Netlify তে ডিপ্লয় করা
&lt;/h3&gt;

&lt;p&gt;Netlify একটি জনপ্রিয় হোস্টিং প্ল্যাটফর্ম যা স্ট্যাটিক সাইট ওয়েবসাইট হোস্ট করতে ব্যবহৃত হয়।&lt;/p&gt;

&lt;h4&gt;
  
  
  ধাপ ১: Netlify অ্যাকাউন্ট তৈরি বা লগইন
&lt;/h4&gt;

&lt;p&gt;Netlify তে একটি অ্যাকাউন্ট তৈরি করুন অথবা আপনার GitHub অ্যাকাউন্ট দিয়ে লগইন করুন।&lt;/p&gt;

&lt;h4&gt;
  
  
  ধাপ ২: প্রজেক্ট ডিপ্লয়
&lt;/h4&gt;

&lt;p&gt;Netlify ড্যাশবোর্ডে গিয়ে "New site from Git" নির্বাচন করুন। এরপর GitHub থেকে আপনার রেপোজিটরি সিলেক্ট করুন।&lt;/p&gt;

&lt;h4&gt;
  
  
  ধাপ ৩: বিল্ড সেটিংস
&lt;/h4&gt;

&lt;p&gt;Netlify আপনার Vite প্রজেক্ট বিল্ড করতে &lt;code&gt;npm run build&lt;/code&gt; কমান্ড ব্যবহার করবে এবং আউটপুট ডিরেক্টরি হিসেবে &lt;code&gt;dist/&lt;/code&gt; নির্ধারণ করুন।&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build Command: &lt;code&gt;npm run build&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Publish directory: &lt;code&gt;dist/&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  ধাপ ৪: ডিপ্লয়
&lt;/h4&gt;

&lt;p&gt;ডিপ্লয় বোতাম চাপুন, এবং কিছুক্ষণের মধ্যেই আপনার সাইট লাইভ হয়ে যাবে।&lt;/p&gt;




&lt;h3&gt;
  
  
  ৪. Vercel তে ডিপ্লয় করা
&lt;/h3&gt;

&lt;p&gt;Vercel React অ্যাপ্লিকেশন হোস্ট করার জন্য একটি দ্রুত ও কার্যকরী প্ল্যাটফর্ম।&lt;/p&gt;

&lt;h4&gt;
  
  
  ধাপ ১: Vercel অ্যাকাউন্ট তৈরি বা লগইন
&lt;/h4&gt;

&lt;p&gt;Vercel তে একটি অ্যাকাউন্ট তৈরি করুন অথবা GitHub এর মাধ্যমে লগইন করুন।&lt;/p&gt;

&lt;h4&gt;
  
  
  ধাপ ২: প্রজেক্ট আমদানি
&lt;/h4&gt;

&lt;p&gt;ড্যাশবোর্ড থেকে "New Project" এ ক্লিক করুন এবং আপনার GitHub রেপোজিটরি লিঙ্ক করুন।&lt;/p&gt;

&lt;h4&gt;
  
  
  ধাপ ৩: বিল্ড সেটিংস কাস্টমাইজ
&lt;/h4&gt;

&lt;p&gt;Vercel স্বয়ংক্রিয়ভাবে বিল্ড এবং ডিপ্লয় করে, তবে আপনি চাইলে বিল্ড সেটিংস চেক করতে পারেন। বিল্ড কমান্ড হিসেবে &lt;code&gt;npm run build&lt;/code&gt; এবং আউটপুট ডিরেক্টরি &lt;code&gt;dist/&lt;/code&gt; দিন।&lt;/p&gt;

&lt;h4&gt;
  
  
  ধাপ ৪: ডিপ্লয়
&lt;/h4&gt;

&lt;p&gt;ডিপ্লয় প্রক্রিয়া সম্পন্ন হলে, আপনার সাইট লাইভ হয়ে যাবে এবং একটি URL এর মাধ্যমে অ্যাক্সেসযোগ্য হবে।&lt;/p&gt;




&lt;h3&gt;
  
  
  ৫. DigitalOcean এ ডিপ্লয় করা
&lt;/h3&gt;

&lt;p&gt;DigitalOcean একটি ক্লাউড ইনফ্রাস্ট্রাকচার প্ল্যাটফর্ম যা ডাইন্যামিক ও স্ট্যাটিক সাইট হোস্টিংয়ের জন্য চমৎকার।&lt;/p&gt;

&lt;h4&gt;
  
  
  ধাপ ১: DigitalOcean Droplet তৈরি
&lt;/h4&gt;

&lt;p&gt;DigitalOcean এ একটি Droplet তৈরি করুন এবং Node.js পরিবেশ সেটআপ করুন।&lt;/p&gt;

&lt;h4&gt;
  
  
  ধাপ ২: অ্যাপ বিল্ড
&lt;/h4&gt;

&lt;p&gt;Droplet এ SSH এর মাধ্যমে লগইন করুন এবং আপনার React অ্যাপ রিপোজিটরি ক্লোন করুন। এরপর প্রোডাকশন বিল্ড তৈরি করুন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  ধাপ ৩: Nginx কনফিগার করা
&lt;/h4&gt;

&lt;p&gt;Droplet এ Nginx ইনস্টল করুন এবং এটি কনফিগার করুন যাতে &lt;code&gt;dist/&lt;/code&gt; ফোল্ডার থেকে ফাইলগুলো পরিবেশন করতে পারে।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;তারপর Nginx কনফিগারেশন ফাইলে &lt;code&gt;dist/&lt;/code&gt; ফোল্ডারটি যুক্ত করুন এবং সার্ভার পুনরায় চালু করুন।&lt;/p&gt;




&lt;h3&gt;
  
  
  ৬. CI/CD পাইপলাইন সেটআপ
&lt;/h3&gt;

&lt;p&gt;Netlify এবং Vercel উভয় প্ল্যাটফর্মেই স্বয়ংক্রিয় &lt;strong&gt;Continuous Integration / Continuous Deployment (CI/CD)&lt;/strong&gt; ব্যবস্থাপনা রয়েছে। এর মাধ্যমে আপনি যখনই আপনার কোড GitHub-এ পুশ করবেন, স্বয়ংক্রিয়ভাবে একটি নতুন বিল্ড তৈরি এবং ডিপ্লয় হবে। আপনি চাইলে নিজস্ব GitHub Actions বা DigitalOcean-এর App Platform ব্যবহার করে নিজস্ব CI/CD পাইপলাইন কনফিগার করতে পারেন।&lt;/p&gt;




&lt;h3&gt;
  
  
  উপসংহার
&lt;/h3&gt;

&lt;p&gt;React এবং Vite ব্যবহার করে অ্যাপ ডিপ্লয় করা একটি সহজ এবং দ্রুত প্রক্রিয়া। Netlify এবং Vercel এর মত প্ল্যাটফর্মগুলো স্ট্যাটিক সাইট হোস্টিংকে খুব সহজ করে দিয়েছে। অন্যদিকে, DigitalOcean একটি উচ্চ কাস্টমাইজড সলিউশন অফার করে। উপযুক্ত প্ল্যাটফর্ম বেছে নিয়ে আপনি সহজেই আপনার অ্যাপ প্রোডাকশনে ডিপ্লয় করতে পারেন এবং আপনার ইউজারদের কাছে পৌঁছে দিতে পারেন।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;শুভ ডিপ্লয়মেন্ট!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>vite</category>
      <category>react</category>
    </item>
    <item>
      <title>Vite Plugins to Supercharge Your React Development</title>
      <dc:creator>Mehedi Hasan</dc:creator>
      <pubDate>Sat, 22 Mar 2025 09:46:00 +0000</pubDate>
      <link>https://forem.com/programmerhasan/vite-plugins-to-supercharge-your-react-development-425p</link>
      <guid>https://forem.com/programmerhasan/vite-plugins-to-supercharge-your-react-development-425p</guid>
      <description>&lt;p&gt;Vite React অ্যাপ ডেভেলপমেন্টকে সহজতর ও দ্রুততর করে তোলে। তবে এর ক্ষমতা বাড়াতে বিভিন্ন প্লাগইন ব্যবহার করা যেতে পারে। এই আর্টিকেলে আমরা কিছু গুরুত্বপূর্ণ Vite প্লাগইন নিয়ে আলোচনা করব, যা আপনার React ডেভেলপমেন্ট অভিজ্ঞতাকে আরও উন্নত করতে সাহায্য করবে।&lt;/p&gt;




&lt;h2&gt;
  
  
  গুরুত্বপূর্ণ Vite প্লাগইনসমূহ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ১. Vite PWA (Progressive Web App)
&lt;/h3&gt;

&lt;p&gt;এই প্লাগইনটি আপনার React অ্যাপকে PWA (Progressive Web App) এ রূপান্তর করতে সাহায্য করে। এটি ক্যাশিং, অফলাইন মোড, এবং ব্যাকগ্রাউন্ড সিঙ্কের মতো ফিচার সরবরাহ করে।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ইনস্টলেশন:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;vite-plugin-pwa &lt;span class="nt"&gt;--save-dev&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;ব্যবহার:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;defineConfig&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vite&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;VitePWA&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vite-plugin-pwa&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nc"&gt;VitePWA&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;registerType&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;autoUpdate&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;manifest&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;My React PWA&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;short_name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ReactPWA&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;start_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;standalone&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  ২. Vite SSR (Server-Side Rendering)
&lt;/h3&gt;

&lt;p&gt;SSR React অ্যাপগুলোর জন্য গুরুত্বপূর্ণ, কারণ এটি প্রাথমিক লোডিং সময় কমায় এবং SEO উন্নত করে। Vite SSR প্লাগইন এটি সহজে পরিচালনা করতে সাহায্য করে।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ইনস্টলেশন:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;vite-plugin-ssr &lt;span class="nt"&gt;--save-dev&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;ব্যবহার:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;defineConfig&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vite&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ssr&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vite-plugin-ssr/plugin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;ssr&lt;/span&gt;&lt;span class="p"&gt;()],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  ৩. Vite Tailwind CSS
&lt;/h3&gt;

&lt;p&gt;Tailwind CSS React অ্যাপে সহজেই ইন্টিগ্রেট করতে এই প্লাগইনটি সাহায্য করে। এটি CSS অপ্টিমাইজেশন ও দ্রুত কম্পাইলিং সক্ষম করে।&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ইনস্টলেশন:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; tailwindcss postcss autoprefixer
npx tailwindcss init &lt;span class="nt"&gt;-p&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Tailwind CSS কনফিগারেশন (tailwind.config.js):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exports&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./index.html&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./src/**/*.{js,ts,jsx,tsx}&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;extend&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;main.jsx এ Tailwind ইমপোর্ট করুন:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./index.css&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  উপসংহার
&lt;/h2&gt;

&lt;p&gt;Vite প্লাগইনগুলো React অ্যাপের ডেভেলপমেন্ট অভিজ্ঞতাকে উন্নত করতে সাহায্য করে। PWA, SSR, এবং Tailwind CSS এর মতো প্লাগইন ব্যবহার করে আপনি সহজেই পারফরম্যান্স, SEO, এবং ডিজাইন অপ্টিমাইজ করতে পারেন। আপনি কোন প্লাগইন সবচেয়ে বেশি ব্যবহার করেন? কমেন্টে জানাতে ভুলবেন না! 🚀&lt;/p&gt;

</description>
      <category>react</category>
      <category>vite</category>
    </item>
    <item>
      <title>Optimizing React Apps for Production with Vite</title>
      <dc:creator>Mehedi Hasan</dc:creator>
      <pubDate>Thu, 20 Mar 2025 18:00:00 +0000</pubDate>
      <link>https://forem.com/programmerhasan/optimizing-react-apps-for-production-with-vite-15gi</link>
      <guid>https://forem.com/programmerhasan/optimizing-react-apps-for-production-with-vite-15gi</guid>
      <description>&lt;p&gt;React অ্যাপ্লিকেশন ডেভেলপমেন্টের সময় Vite চমৎকার পারফরম্যান্স দেয়, তবে প্রোডাকশনে একটি অ্যাপ অপ্টিমাইজ করা আরও গুরুত্বপূর্ণ। Vite-এর প্রোডাকশন বিল্ড প্রসেস এবং বিভিন্ন অপ্টিমাইজেশন টেকনিক ব্যবহার করে আমরা আমাদের React অ্যাপকে দ্রুততর ও কার্যকর করতে পারি। এই আর্টিকেলে আমরা আলোচনা করব কিভাবে Vite-এর প্রোডাকশন বিল্ড প্রসেস কাজ করে এবং কীভাবে React অ্যাপের জন্য অপ্টিমাইজ করা যায়।&lt;/p&gt;

&lt;h2&gt;
  
  
  Vite-এর প্রোডাকশন বিল্ড প্রসেস
&lt;/h2&gt;

&lt;p&gt;Vite উন্নত প্রযুক্তি ব্যবহার করে দ্রুত প্রোডাকশন বিল্ড তৈরি করে। এটি ESBuild এবং Rollup-এর শক্তিশালী ফিচারগুলো ব্যবহার করে কোড মিনিফিকেশন, ট্রি শেকিং এবং কোড স্প্লিটিং করে।&lt;/p&gt;

&lt;h3&gt;
  
  
  প্রোডাকশন বিল্ড চালানোর কমান্ড
&lt;/h3&gt;

&lt;p&gt;Vite ব্যবহার করে প্রোডাকশন বিল্ড তৈরি করতে নিম্নলিখিত কমান্ড চালাতে হবে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অথবা,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এই কমান্ড চালানোর পর &lt;code&gt;dist/&lt;/code&gt; ডিরেক্টরির মধ্যে অপ্টিমাইজড ফাইল তৈরি হবে, যা সরাসরি সার্ভারে ডিপ্লয় করা যায়।&lt;/p&gt;

&lt;h2&gt;
  
  
  React অ্যাপের জন্য বিল্ড অপ্টিমাইজেশন
&lt;/h2&gt;

&lt;p&gt;Vite স্বয়ংক্রিয়ভাবে বেশ কিছু অপ্টিমাইজেশন করে, তবে অতিরিক্ত কিছু কনফিগারেশন ব্যবহার করে আমরা আরও ভালো পারফরম্যান্স পেতে পারি।&lt;/p&gt;

&lt;h3&gt;
  
  
  ১. মিনিফিকেশন সক্ষম করা
&lt;/h3&gt;

&lt;p&gt;Vite স্বয়ংক্রিয়ভাবে Terser ব্যবহার করে কোড মিনিফাই করে, যা ফাইলের সাইজ কমিয়ে লোড টাইম কমায়।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;minify&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;terser&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ২. কোড স্প্লিটিং
&lt;/h3&gt;

&lt;p&gt;Vite স্বয়ংক্রিয়ভাবে ডায়নামিক ইমপোর্ট এবং কোড স্প্লিটিং করে, যা অ্যাপের লোড টাইম দ্রুত করে।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;rollupOptions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;output&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nf"&gt;manualChunks&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;node_modules&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vendor&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ৩. Brotli এবং Gzip কমপ্রেশন ব্যবহার করা
&lt;/h3&gt;

&lt;p&gt;Brotli এবং Gzip কমপ্রেশন ব্যবহার করে আমরা স্ট্যাটিক ফাইলের সাইজ আরও কমাতে পারি। এটি করতে &lt;code&gt;vite-plugin-compression&lt;/code&gt; ব্যবহার করা যেতে পারে।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;vite-plugin-compression
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;এরপর &lt;code&gt;vite.config.js&lt;/code&gt; ফাইলে এটি কনফিগার করুন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;compression&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vite-plugin-compression&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;compression&lt;/span&gt;&lt;span class="p"&gt;()],&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ৪. ইমেজ এবং অ্যাসেট অপ্টিমাইজেশন
&lt;/h3&gt;

&lt;p&gt;Vite অটোমেটিক্যালি অ্যাসেট হ্যান্ডলিং করে, তবে আমরা আরও উন্নত অপ্টিমাইজেশনের জন্য &lt;code&gt;vite-imagemin&lt;/code&gt; প্লাগইন ব্যবহার করতে পারি।&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;vite-plugin-imagemin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;viteImagemin&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;vite-plugin-imagemin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nf"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;plugins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nf"&gt;viteImagemin&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;optipng&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;optimizationLevel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="na"&gt;mozjpeg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;quality&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;75&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ৫. পরিবেশ পরিবর্তনশীল (Environment Variables) কনফিগার করা
&lt;/h3&gt;

&lt;p&gt;Vite &lt;code&gt;mode&lt;/code&gt; ব্যবহার করে পরিবেশ পরিবর্তনশীল কনফিগার করতে দেয়। &lt;code&gt;.env&lt;/code&gt; ফাইলে আমরা API URL সেট করতে পারি:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;VITE_API_URL=https://api.example.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;main.jsx&lt;/code&gt; ফাইলে এটি ব্যবহার করা যেতে পারে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;apiUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;meta&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;VITE_API_URL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  উপসংহার
&lt;/h2&gt;

&lt;p&gt;Vite React অ্যাপগুলোর জন্য দ্রুত ও কার্যকর প্রোডাকশন বিল্ড সরবরাহ করে। উপরের অপ্টিমাইজেশন টেকনিকগুলো অনুসরণ করলে আমরা আরও উন্নত পারফরম্যান্স পেতে পারি। উন্নত স্পিড, ছোট ফাইল সাইজ এবং ভালো ইউজার এক্সপেরিয়েন্সের জন্য Vite-এর অপ্টিমাইজেশন টুলগুলো ব্যবহার করা অবশ্যই গুরুত্বপূর্ণ।&lt;/p&gt;

</description>
      <category>react</category>
      <category>vite</category>
      <category>programmerhasan</category>
    </item>
    <item>
      <title>React অ্যাপের পারফরম্যান্স উন্নতকরণ Vite ব্যবহার করে</title>
      <dc:creator>Mehedi Hasan</dc:creator>
      <pubDate>Wed, 19 Mar 2025 09:40:00 +0000</pubDate>
      <link>https://forem.com/programmerhasan/react-ayaaper-paarphrmyaans-unntkrnn-vite-bybhaar-kre-2bb</link>
      <guid>https://forem.com/programmerhasan/react-ayaaper-paarphrmyaans-unntkrnn-vite-bybhaar-kre-2bb</guid>
      <description>&lt;p&gt;React অ্যাপ্লিকেশন ডেভেলপমেন্টের সময় পারফরম্যান্স একটি গুরুত্বপূর্ণ বিষয়। দ্রুত লোডিং টাইম, কম বিল্ড সময় এবং উন্নত ডেভেলপমেন্ট অভিজ্ঞতা পেতে হলে Vite একটি আদর্শ টুল। এটি Webpack-এর মতো পুরনো টুলের তুলনায় অনেক দ্রুত এবং উন্নত ফিচার সরবরাহ করে। এই লেখায়, আমরা দেখব কীভাবে Vite React অ্যাপের পারফরম্যান্স উন্নত করতে সাহায্য করে এবং এর গুরুত্বপূর্ণ ফিচারগুলো কী কী।&lt;/p&gt;

&lt;h2&gt;
  
  
  Vite কীভাবে পারফরম্যান্স উন্নত করে?
&lt;/h2&gt;

&lt;p&gt;Vite মূলত দুটি বড় কারণে React অ্যাপের পারফরম্যান্স উন্নত করে:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;দ্রুত সার্ভার স্টার্টআপ:&lt;/strong&gt; Vite ব্রাউজারের নেটিভ ES Module (ESM) ব্যবহার করে, যার ফলে এটি সার্ভার দ্রুত চালু করতে পারে। Webpack-এর মতো ভারী বান্ডলিং ছাড়া সরাসরি মডিউল লোড করা হয়, ফলে ডেভেলপমেন্ট সার্ভার অনেক দ্রুত কাজ করে।&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Hot Module Replacement (HMR):&lt;/strong&gt; React কম্পোনেন্টে পরিবর্তন আনার সাথে সাথেই সেই পরিবর্তন ব্রাউজারে প্রতিফলিত হয়, পুরো অ্যাপ পুনরায় লোড করার প্রয়োজন হয় না। এটি উন্নত ডেভেলপমেন্ট অভিজ্ঞতা প্রদান করে এবং সময় বাঁচায়।&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Vite-এর প্রধান ফিচারসমূহ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ১. ইনস্ট্যান্ট সার্ভার স্টার্টআপ
&lt;/h3&gt;

&lt;p&gt;Webpack-এর তুলনায় Vite কয়েকগুণ দ্রুত স্টার্টআপ প্রদান করে কারণ এটি পুরো অ্যাপ বান্ডল না করেই সরাসরি মডিউল সার্ভ করে।&lt;/p&gt;

&lt;h3&gt;
  
  
  ২. Hot Module Replacement (HMR)
&lt;/h3&gt;

&lt;p&gt;HMR ফিচারের মাধ্যমে শুধুমাত্র পরিবর্তিত অংশ আপডেট হয়, ফলে ডেভেলপমেন্টের সময়কার প্রতিক্রিয়াশীলতা (reactivity) অনেক উন্নত হয়।&lt;/p&gt;

&lt;h3&gt;
  
  
  ৩. ফাস্ট বিল্ড টাইম
&lt;/h3&gt;

&lt;p&gt;Vite ESBuild ব্যবহার করে যা অত্যন্ত দ্রুতগতিতে জাভাস্ক্রিপ্ট ও টাইপস্ক্রিপ্ট কম্পাইল করতে পারে। ফলে প্রোডাকশন বিল্ড Webpack-এর তুলনায় অনেক দ্রুত হয়ে থাকে।&lt;/p&gt;

&lt;h3&gt;
  
  
  ৪. অটোমেটিক কোড স্প্লিটিং
&lt;/h3&gt;

&lt;p&gt;Vite স্বয়ংক্রিয়ভাবে কোড স্প্লিটিং করে, যার ফলে প্রোডাকশন বিল্ড হালকা হয় এবং অ্যাপ দ্রুত লোড হয়।&lt;/p&gt;

&lt;h3&gt;
  
  
  ৫. অপটিমাইজড ডেভেলপমেন্ট এক্সপেরিয়েন্স
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;ইনস্ট্যান্ট ফাইল সার্ভিং&lt;/li&gt;
&lt;li&gt;কম RAM ব্যবহার&lt;/li&gt;
&lt;li&gt;সহজ কনফিগারেশন&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Vite ব্যবহার করে React অ্যাপ তৈরি করা
&lt;/h2&gt;

&lt;p&gt;নিচের ধাপগুলো অনুসরণ করে আপনি সহজেই একটি React অ্যাপ তৈরি করতে পারেন:&lt;/p&gt;

&lt;h3&gt;
  
  
  ১. নতুন প্রজেক্ট তৈরি করুন
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm create vite@latest my-app &lt;span class="nt"&gt;--template&lt;/span&gt; react
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অথবা,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn create vite@latest my-app &lt;span class="nt"&gt;--template&lt;/span&gt; react
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ২. প্রজেক্ট ফোল্ডারে যান
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;my-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ৩. ডিপেনডেন্সি ইনস্টল করুন
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অথবা,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ৪. ডেভেলপমেন্ট সার্ভার চালু করুন
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  উপসংহার
&lt;/h2&gt;

&lt;p&gt;Vite React অ্যাপ ডেভেলপমেন্টের জন্য একটি চমৎকার টুল যা দ্রুত স্টার্টআপ, উন্নত HMR, এবং ফাস্ট বিল্ড টাইম প্রদান করে। এটি Webpack-এর তুলনায় অনেক বেশি পারফরম্যান্ট এবং ব্যবহার করা সহজ। আপনি যদি React অ্যাপ তৈরি করেন এবং উন্নত ডেভেলপমেন্ট এক্সপেরিয়েন্স চান, তাহলে Vite ব্যবহার করাই সেরা পছন্দ হবে।&lt;/p&gt;

</description>
      <category>react</category>
      <category>vite</category>
    </item>
    <item>
      <title>How To Deploy a React + Vite Application with cPanel Shared Hosting</title>
      <dc:creator>Mehedi Hasan</dc:creator>
      <pubDate>Mon, 17 Mar 2025 18:00:00 +0000</pubDate>
      <link>https://forem.com/programmerhasan/how-to-deploy-a-react-vite-application-with-cpanel-shared-hosting-421g</link>
      <guid>https://forem.com/programmerhasan/how-to-deploy-a-react-vite-application-with-cpanel-shared-hosting-421g</guid>
      <description>&lt;p&gt;Deploying a &lt;strong&gt;React + Vite&lt;/strong&gt; application to &lt;strong&gt;cPanel shared hosting&lt;/strong&gt; can seem challenging, but it’s manageable with the right steps. In this guide, you'll learn how to deploy your Vite app to a shared hosting environment using &lt;strong&gt;cPanel&lt;/strong&gt;, which is commonly available on hosting services like Bluehost, HostGator, and others.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ &lt;strong&gt;Step 1: Build Your Vite App&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Before deployment, generate the production build of your React + Vite app. Run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command creates a &lt;code&gt;dist&lt;/code&gt; folder, containing all the optimized static files needed to run your application.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ &lt;strong&gt;Step 2: Access cPanel and File Manager&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Log in to cPanel&lt;/strong&gt;: Use the credentials provided by your hosting provider to access your cPanel account.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open File Manager&lt;/strong&gt;: In cPanel, locate and open the &lt;strong&gt;File Manager&lt;/strong&gt; under the &lt;strong&gt;Files&lt;/strong&gt; section. This is where you will upload your Vite app files.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  ✅ &lt;strong&gt;Step 3: Navigate to the Public Directory&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In File Manager, navigate to the directory where your website files are stored. In most shared hosting environments, this is the &lt;code&gt;public_html&lt;/code&gt; folder.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If this is the primary domain, use &lt;code&gt;public_html&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If it's an addon domain or subdomain, navigate to the appropriate folder within &lt;code&gt;public_html&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  ✅ &lt;strong&gt;Step 4: Upload the Vite Build Files&lt;/strong&gt;
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compress the Build Files&lt;/strong&gt;: In your local machine, navigate to your project’s &lt;code&gt;dist&lt;/code&gt; folder and compress the contents into a &lt;code&gt;.zip&lt;/code&gt; file.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Upload the Zip File&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In &lt;strong&gt;File Manager&lt;/strong&gt;, go to the &lt;code&gt;public_html&lt;/code&gt; or the appropriate directory.&lt;/li&gt;
&lt;li&gt;Click the &lt;strong&gt;Upload&lt;/strong&gt; button and upload the compressed &lt;code&gt;.zip&lt;/code&gt; file.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Extract the Files&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After uploading, select the &lt;code&gt;.zip&lt;/code&gt; file and click &lt;strong&gt;Extract&lt;/strong&gt; to decompress the files.&lt;/li&gt;
&lt;li&gt;Ensure that the extracted files are in the root of the directory (e.g., &lt;code&gt;public_html/&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  ✅ &lt;strong&gt;Step 5: Adjust &lt;code&gt;index.html&lt;/code&gt; for cPanel&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Vite often uses &lt;strong&gt;relative paths&lt;/strong&gt;, but in some shared hosting environments, the paths might break. You may need to adjust the &lt;code&gt;base&lt;/code&gt; URL in &lt;code&gt;index.html&lt;/code&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Open &lt;code&gt;index.html&lt;/code&gt;&lt;/strong&gt;: Navigate to the &lt;code&gt;index.html&lt;/code&gt; file in your build folder.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add a &lt;code&gt;&amp;lt;base&amp;gt;&lt;/code&gt; tag&lt;/strong&gt;: In the &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; section of the file, add the following line:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;base&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This ensures that the app can correctly resolve relative URLs.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ &lt;strong&gt;Step 6: Set Up &lt;code&gt;.htaccess&lt;/code&gt; (Optional)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If your React app uses &lt;strong&gt;client-side routing&lt;/strong&gt; (e.g., &lt;code&gt;react-router&lt;/code&gt;), you need to tell the server to always serve &lt;code&gt;index.html&lt;/code&gt; for any route.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Create or edit a &lt;code&gt;.htaccess&lt;/code&gt; file in the root of your &lt;code&gt;public_html&lt;/code&gt; (or equivalent) folder.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add the following lines to the &lt;code&gt;.htaccess&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight apache"&gt;&lt;code&gt;&lt;span class="nc"&gt;RewriteEngine&lt;/span&gt; &lt;span class="ss"&gt;On&lt;/span&gt;
&lt;span class="nc"&gt;RewriteBase&lt;/span&gt; /
&lt;span class="nc"&gt;RewriteRule&lt;/span&gt; ^index\.html$ - [L]
&lt;span class="nc"&gt;RewriteCond&lt;/span&gt; %{REQUEST_FILENAME} !-f
&lt;span class="nc"&gt;RewriteCond&lt;/span&gt; %{REQUEST_FILENAME} !-d
&lt;span class="nc"&gt;RewriteRule&lt;/span&gt; . /index.html [L]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This ensures that all requests are redirected to &lt;code&gt;index.html&lt;/code&gt;, allowing your React Router to handle the routing.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ &lt;strong&gt;Step 7: Test Your Application&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Once the files are uploaded and the configuration is complete, visit your domain to ensure the React + Vite application is working correctly.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If everything is set up properly, your app should be live and fully functional.&lt;/li&gt;
&lt;li&gt;If you encounter issues, double-check the file paths in &lt;code&gt;index.html&lt;/code&gt; and ensure that all files were uploaded correctly.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🎯 &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Deploying a &lt;strong&gt;React + Vite&lt;/strong&gt; app on &lt;strong&gt;cPanel shared hosting&lt;/strong&gt; is fairly straightforward when you follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Build your Vite app.&lt;/li&gt;
&lt;li&gt;Upload the production files using &lt;strong&gt;cPanel File Manager&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Adjust the &lt;code&gt;index.html&lt;/code&gt; if needed.&lt;/li&gt;
&lt;li&gt;Set up client-side routing with &lt;code&gt;.htaccess&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once deployed, your React app will be live and ready for users. Let me know if you need further assistance!&lt;/p&gt;

</description>
      <category>react</category>
      <category>vite</category>
      <category>cpanel</category>
    </item>
    <item>
      <title>React এবং Vite: একটি দ্রুত ডেভেলপমেন্ট কম্বো</title>
      <dc:creator>Mehedi Hasan</dc:creator>
      <pubDate>Sun, 16 Mar 2025 18:00:00 +0000</pubDate>
      <link>https://forem.com/programmerhasan/react-ebn-vite-ektti-drut-ddebhelpmentt-kmbo-gj3</link>
      <guid>https://forem.com/programmerhasan/react-ebn-vite-ektti-drut-ddebhelpmentt-kmbo-gj3</guid>
      <description>&lt;h2&gt;
  
  
  ভূমিকা
&lt;/h2&gt;

&lt;p&gt;React হলো বিশ্বের অন্যতম জনপ্রিয় ফ্রন্টএন্ড লাইব্রেরি, যা ব্যবহার করে দ্রুত ও ইন্টারঅ্যাকটিভ ওয়েব অ্যাপ তৈরি করা যায়। সাধারণত, React অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য Webpack-এর মতো টুল ব্যবহার করা হয়। তবে, সাম্প্রতিক বছরগুলোতে Vite একটি শক্তিশালী ও দ্রুত বিকল্প হিসেবে জনপ্রিয়তা অর্জন করেছে। এই আর্টিকেলে আমরা Vite সম্পর্কে জানব এবং এটি কেন React ডেভেলপমেন্টের জন্য চমৎকার একটি পছন্দ, সেটি বিশ্লেষণ করব।&lt;/p&gt;

&lt;h2&gt;
  
  
  Vite কী?
&lt;/h2&gt;

&lt;p&gt;Vite (উচ্চারণ: "ভিট") হলো একটি মডার্ন ফ্রন্টএন্ড টুলিং যা বিশেষভাবে দ্রুত ডেভেলপমেন্ট অভিজ্ঞতা দেওয়ার জন্য ডিজাইন করা হয়েছে। এটি মূলত ES Module (ESM) ভিত্তিক এবং Hot Module Replacement (HMR) সহ দ্রুততম বিল্ড ও রিফ্রেশ পারফরম্যান্স প্রদান করে। Evan You (Vue.js-এর নির্মাতা) এটি তৈরি করেছেন এবং বর্তমানে এটি React, Vue, Svelte সহ বিভিন্ন ফ্রেমওয়ার্কের জন্য ব্যবহৃত হয়।&lt;/p&gt;

&lt;h2&gt;
  
  
  Vite কেন React ডেভেলপমেন্টের জন্য ভালো?
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;দ্রুত সার্ভার স্টার্টআপ:&lt;/strong&gt; Vite সরাসরি ESM ব্যবহার করে, ফলে এটি Webpack-এর তুলনায় কয়েক গুণ দ্রুত সার্ভার স্টার্টআপ দেয়।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hot Module Replacement (HMR):&lt;/strong&gt; পরিবর্তন করা কোড দ্রুত আপডেট হয়, ফলে ডেভেলপারদের জন্য দ্রুত প্রতিক্রিয়া পাওয়া সম্ভব হয়।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;কোনও অতিরিক্ত কনফিগারেশন প্রয়োজন নেই:&lt;/strong&gt; Webpack-এর মতো জটিল কনফিগারেশন ছাড়া, React + Vite ব্যবহার করলেই দ্রুত একটি প্রজেক্ট শুরু করা যায়।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;বিল্ড সময় কম:&lt;/strong&gt; Vite ESBuild ব্যবহার করে যা জাভাস্ক্রিপ্ট ও টাইপস্ক্রিপ্ট কম্পাইল করতে অত্যন্ত দ্রুত।&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Webpack বনাম Vite: তুলনামূলক বিশ্লেষণ
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;বৈশিষ্ট্য&lt;/th&gt;
&lt;th&gt;Webpack&lt;/th&gt;
&lt;th&gt;Vite&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;বিল্ড টাইম&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;তুলনামূলক ধীর&lt;/td&gt;
&lt;td&gt;অত্যন্ত দ্রুত&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HMR পারফরম্যান্স&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;মাঝারি&lt;/td&gt;
&lt;td&gt;চমৎকার&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;কনফিগারেশন&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;অনেক কাস্টমাইজেশন দরকার&lt;/td&gt;
&lt;td&gt;সহজ ও সরল&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ESM সাপোর্ট&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;লিমিটেড&lt;/td&gt;
&lt;td&gt;বিল্ট-ইন&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ডেভেলপমেন্ট সার্ভার স্টার্টআপ&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;ধীর&lt;/td&gt;
&lt;td&gt;মুহূর্তের মধ্যে&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  উপসংহার
&lt;/h2&gt;

&lt;p&gt;React ডেভেলপমেন্টের জন্য Vite একটি দুর্দান্ত টুল, বিশেষ করে যখন দ্রুততার প্রয়োজন হয়। Webpack এখনও বড় প্রজেক্টে ব্যবহৃত হয়, তবে ছোট থেকে মাঝারি প্রকল্পের জন্য Vite একটি সহজ, দ্রুত ও উন্নত সমাধান। আপনি যদি React-এ নতুন হন এবং দ্রুত একটি উন্নয়ন পরিবেশ সেটআপ করতে চান, তাহলে Vite ব্যবহার করাই ভালো সিদ্ধান্ত হবে।&lt;/p&gt;

</description>
      <category>react</category>
      <category>vite</category>
    </item>
    <item>
      <title>React প্রজেক্ট Vite দিয়ে সেটআপ করার পদ্ধতি</title>
      <dc:creator>Mehedi Hasan</dc:creator>
      <pubDate>Sun, 16 Mar 2025 09:33:45 +0000</pubDate>
      <link>https://forem.com/programmerhasan/react-prjektt-vite-diye-settaap-kraar-pddhti-5a7h</link>
      <guid>https://forem.com/programmerhasan/react-prjektt-vite-diye-settaap-kraar-pddhti-5a7h</guid>
      <description>&lt;p&gt;Vite দিয়ে React প্রজেক্ট শুরু করা খুবই সহজ। নিচের ধাপগুলো অনুসরণ করুন:&lt;/p&gt;

&lt;h3&gt;
  
  
  ১. নতুন React প্রজেক্ট তৈরি করুন
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm create vite@latest my-react-app &lt;span class="nt"&gt;--template&lt;/span&gt; react
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অথবা, যদি আপনি Yarn ব্যবহার করেন:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn create vite@latest my-react-app &lt;span class="nt"&gt;--template&lt;/span&gt; react
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ২. প্রজেক্ট ফোল্ডারে যান
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;my-react-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ৩. নির্ভরশীলতা (Dependencies) ইনস্টল করুন
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;অথবা,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;yarn &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ৪. ডেভেলপমেন্ট সার্ভার চালু করুন
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ৫. ব্রাউজারে অ্যাক্সেস করুন
&lt;/h3&gt;

&lt;p&gt;Vite সাধারণত &lt;strong&gt;&lt;a href="http://localhost:5173/" rel="noopener noreferrer"&gt;http://localhost:5173/&lt;/a&gt;&lt;/strong&gt; এ সার্ভার চালু করে। আপনার ব্রাউজারে এই URL ওপেন করলেই React অ্যাপটি দেখতে পারবেন।&lt;/p&gt;

&lt;h2&gt;
  
  
  Vite প্রজেক্টের স্ট্রাকচার
&lt;/h2&gt;

&lt;p&gt;Vite দিয়ে একটি React অ্যাপ তৈরির পর সাধারণত নিম্নলিখিত ফোল্ডার স্ট্রাকচার থাকে:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my-react-app/
├── node_modules/
├── public/
│   ├── vite.svg
├── src/
│   ├── App.jsx
│   ├── main.jsx
│   ├── assets/
│   ├── components/
├── .gitignore
├── index.html
├── package.json
├── vite.config.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  গুরুত্বপূর্ণ ফাইল ও ফোল্ডার:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;src/&lt;/strong&gt;: সমস্ত React কম্পোনেন্ট ও অ্যাপের মূল কোড এখানে থাকে।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;public/&lt;/strong&gt;: এখানে স্ট্যাটিক ফাইল রাখা হয়।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;index.html&lt;/strong&gt;: মূল HTML ফাইল যা অ্যাপ চালানোর জন্য ব্যবহৃত হয়।&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;vite.config.js&lt;/strong&gt;: Vite কনফিগারেশন সংক্রান্ত ফাইল।&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  উপসংহার
&lt;/h2&gt;

&lt;p&gt;React ডেভেলপমেন্টের জন্য Vite একটি দুর্দান্ত টুল, বিশেষ করে যখন দ্রুততার প্রয়োজন হয়। Webpack এখনও বড় প্রজেক্টে ব্যবহৃত হয়, তবে ছোট থেকে মাঝারি প্রকল্পের জন্য Vite একটি সহজ, দ্রুত ও উন্নত সমাধান। আপনি যদি React-এ নতুন হন এবং দ্রুত একটি উন্নয়ন পরিবেশ সেটআপ করতে চান, তাহলে Vite ব্যবহার করাই ভালো সিদ্ধান্ত হবে।&lt;/p&gt;

</description>
      <category>react</category>
      <category>vite</category>
    </item>
    <item>
      <title>Adding a Splash Screen to Your Flutter App with `flutter_native_splash`</title>
      <dc:creator>Mehedi Hasan</dc:creator>
      <pubDate>Sun, 16 Mar 2025 08:50:50 +0000</pubDate>
      <link>https://forem.com/programmerhasan/adding-a-splash-screen-to-your-flutter-app-with-flutternativesplash-32kn</link>
      <guid>https://forem.com/programmerhasan/adding-a-splash-screen-to-your-flutter-app-with-flutternativesplash-32kn</guid>
      <description>&lt;p&gt;A splash screen is an important component of mobile apps, as it gives the user a smooth transition while your app is loading. In Flutter, adding a splash screen is made easy with the &lt;strong&gt;&lt;code&gt;flutter_native_splash&lt;/code&gt;&lt;/strong&gt; package. This package allows you to customize the splash screen and ensures it looks great on both Android and iOS.&lt;/p&gt;

&lt;p&gt;Here’s how you can add a splash screen to your Flutter app using &lt;strong&gt;&lt;code&gt;flutter_native_splash&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ &lt;strong&gt;Step 1: Install &lt;code&gt;flutter_native_splash&lt;/code&gt;&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To get started, add the &lt;code&gt;flutter_native_splash&lt;/code&gt; package to your &lt;code&gt;pubspec.yaml&lt;/code&gt; file. Run the following command in your terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flutter pub add flutter_native_splash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Alternatively, manually add the package by including it in your &lt;code&gt;pubspec.yaml&lt;/code&gt; file under &lt;code&gt;dependencies&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;dependencies&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;flutter_native_splash&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;^2.0.5&lt;/span&gt;  &lt;span class="c1"&gt;# Check the latest version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once added, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flutter pub get
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ✅ &lt;strong&gt;Step 2: Configure Splash Screen Settings&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;After adding the package, you need to configure it by providing the necessary customization options. These configurations go in the &lt;code&gt;pubspec.yaml&lt;/code&gt; file under the &lt;code&gt;flutter_native_splash&lt;/code&gt; section.&lt;/p&gt;

&lt;p&gt;Here's an example configuration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;flutter_native_splash&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#42a5f5"&lt;/span&gt;  &lt;span class="c1"&gt;# Background color of the splash screen&lt;/span&gt;
  &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;assets/images/splash_logo.png&lt;/span&gt;  &lt;span class="c1"&gt;# Path to your logo or splash image&lt;/span&gt;
  &lt;span class="na"&gt;android&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;  &lt;span class="c1"&gt;# Enable splash screen for Android&lt;/span&gt;
  &lt;span class="na"&gt;ios&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;  &lt;span class="c1"&gt;# Enable splash screen for iOS&lt;/span&gt;
  &lt;span class="na"&gt;android_gravity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;center&lt;/span&gt;  &lt;span class="c1"&gt;# Position of the image on Android (center, bottom, etc.)&lt;/span&gt;
  &lt;span class="na"&gt;ios_content_mode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;scaleAspectFit&lt;/span&gt;  &lt;span class="c1"&gt;# Position of the image on iOS (scaleAspectFit, scaleToFill, etc.)&lt;/span&gt;
  &lt;span class="na"&gt;fullscreen&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;  &lt;span class="c1"&gt;# Enable full-screen mode (removes the status bar)&lt;/span&gt;
  &lt;span class="na"&gt;web&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;  &lt;span class="c1"&gt;# Disable splash screen for web&lt;/span&gt;

  &lt;span class="c1"&gt;# Optional advanced configuration&lt;/span&gt;
  &lt;span class="na"&gt;android_12&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;assets/images/splash_logo.png&lt;/span&gt;
    &lt;span class="na"&gt;icon_background_color&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#ffffff"&lt;/span&gt;
    &lt;span class="na"&gt;icon_gravity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;center&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this configuration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;color&lt;/code&gt;&lt;/strong&gt; defines the background color of your splash screen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;image&lt;/code&gt;&lt;/strong&gt; points to the logo or splash image you want to show.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;android&lt;/code&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;code&gt;ios&lt;/code&gt;&lt;/strong&gt; enable the splash screen on respective platforms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;fullscreen&lt;/code&gt;&lt;/strong&gt; allows your splash screen to cover the entire screen.&lt;/li&gt;
&lt;li&gt;You can also specify &lt;strong&gt;gravity/content mode&lt;/strong&gt; to position the splash screen content on both Android and iOS.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Make sure your &lt;strong&gt;image path&lt;/strong&gt; is correct and placed in the appropriate directory. You can adjust the color and image path as per your design needs.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ &lt;strong&gt;Step 3: Generate the Splash Screen&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Once you've configured everything, run the following command to generate the splash screen assets:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flutter pub run flutter_native_splash:create
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command will automatically generate the necessary files for both Android and iOS, updating their respective native folders.&lt;/p&gt;

&lt;p&gt;For &lt;strong&gt;Android&lt;/strong&gt;, it modifies &lt;code&gt;AndroidManifest.xml&lt;/code&gt; and the &lt;code&gt;res&lt;/code&gt; folder with the required assets. For &lt;strong&gt;iOS&lt;/strong&gt;, it updates the &lt;code&gt;LaunchScreen.storyboard&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ &lt;strong&gt;Step 4: Testing the Splash Screen&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Now that your splash screen is set up, you can run your Flutter app to see the result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flutter run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When your app starts, you should see the custom splash screen before your main app interface loads.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ &lt;strong&gt;Step 5: Optional: Customizing Splash Screen Duration&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you want to control how long the splash screen stays visible, you can add some extra configuration in your Dart code. However, by default, the splash screen stays visible until Flutter has finished loading the app.&lt;/p&gt;

&lt;p&gt;To extend the splash screen duration, you can use &lt;code&gt;WidgetsBinding.instance.ensureInitialized()&lt;/code&gt; in the &lt;code&gt;main.dart&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="kd"&gt;async&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;WidgetsFlutterBinding&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ensureInitialized&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;Future&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;delayed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="n"&gt;Duration&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;seconds:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;  &lt;span class="c1"&gt;// Delay splash screen for 2 seconds&lt;/span&gt;
  &lt;span class="n"&gt;runApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MyApp&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will show the splash screen for an additional 2 seconds before loading the main app.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✅ &lt;strong&gt;Step 6: Removing the Splash Screen&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In case you no longer need the splash screen and want to remove it, simply run the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;flutter pub run flutter_native_splash:remove
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command will remove all splash screen-related configurations and files.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;With the &lt;strong&gt;&lt;code&gt;flutter_native_splash&lt;/code&gt;&lt;/strong&gt; package, adding a splash screen to your Flutter app is straightforward and easy. Whether you want a simple splash screen with a logo or a more customized solution, this package offers flexibility for both Android and iOS platforms.&lt;/p&gt;

&lt;p&gt;By following the steps outlined above, you can create a professional and visually appealing splash screen that enhances the user experience.&lt;/p&gt;

&lt;p&gt;Let me know if you need any further assistance!&lt;/p&gt;

</description>
      <category>flutter</category>
    </item>
  </channel>
</rss>
