নেভিগেশন ইভেন্ট

Navigation Event হল একটি লাইব্রেরি যা আপনার অ্যাপ্লিকেশনে সিস্টেম-লেভেল নেভিগেশন ইভেন্ট ইন্টিগ্রেট করার জন্য একটি Kotlin মাল্টিপ্ল্যাটফর্ম (KMP) সমাধান প্রদান করে। বিভিন্ন সাপোর্ট করা প্ল্যাটফর্ম জুড়ে নেভিগেশন নির্দেশাবলী হ্যান্ডেল করার জন্য এটি একটি মৌলিক লেয়ার হিসেবে ডিজাইন করা হয়েছে।

মূল ধারণা

নেভিগেশন ইভেন্ট সিস্টেম একটি সেন্ট্রালাইজড ডিসপ্যাচার-হ্যান্ডলার মডেলের উপর ভিত্তি করে তৈরি করা হয়, যা প্রায়ই জটিল UI স্ট্রাকচারের সাথে ম্যাপ করার জন্য পেরেন্ট-চাইল্ড হায়ারার্কিতে ব্যবহার করা হয়, যেমন Jetpack Compose-এ দেখা যায়।

NavigationEventDispatcher হল কেন্দ্রীয় ক্লাস যা সব রেজিস্টার করা নেভিগেশন ইভেন্ট কনজিউমার (NavigationEventHandler) ম্যানেজ করা এবং ইভেন্টের ফ্লো অর্কেস্ট্রেট করার জন্য দায়ী।

হায়ারার্কিক্যাল সেট-আপে, একই চেনের মধ্যে থাকা সব ডিসপ্যাচার একটি NavigationEventProcessor শেয়ার করে, যা গ্লোবাল স্টেট ম্যানেজ করে এবং পুরো ট্রি জুড়ে একটি, ইউনিফায়েড ডিসপ্যাচিং অর্ডার নিশ্চিত করে।

NavigationEventHandler হল একটি অ্যাবস্ট্রাক্ট ক্লাস যা NavigationEventDispatcher-এর পাঠানো নেভিগেশন ইভেন্ট গ্রহণ ও হ্যান্ডেল করে। এটি নেভিগেশন জেসচারের লাইফসাইকেলের বিভিন্ন স্টেজের সাথে সম্পর্কিত কলব্যাক পদ্ধতি নির্ধারণ করে, যেমন, জেসচার কখন শুরু, অগ্রসর, সম্পূর্ণ বা বাতিল করা হয়।

ব্যবহারকারীর নেভিগেশন অ্যাকশনের উত্তরে UI বা অ্যাপ্লিকেশন স্টেট আপডেট করতে হ্যান্ডলাররা এইসব ইভেন্টে প্রতিক্রিয়া জানাতে পারেন। একটি ডিসপ্যাচারের সাথে একাধিক হ্যান্ডলার রেজিস্টার করা যেতে পারে এবং অগ্রাধিকার ও রেজিস্ট্রেশন ক্রম অনুসারে সেগুলি আহ্বান করা হয়।

NavigationEvent হল এমন একটি ডেটা ক্লাস যা নেভিগেশন জেসচারের বিবরণ বহন করে।

NavigationEventInfo হল একটি অ্যাবস্ট্রাক্ট ক্লাস যা নেভিগেশন স্টেট সম্পর্কে প্রাসঙ্গিক তথ্য প্রদান করে।

NavigationEventInput হল কম্পোনেন্টগুলির জন্য একটি অ্যাবস্ট্রাক্ট ক্লাস যা নেভিগেশন ইভেন্ট তৈরি ও ডিসপ্যাচ করে। এটি নেভিগেশন সিস্টেমের "ইনপুট" সাইড হিসেবে কাজ করে, প্ল্যাটফর্ম-নির্দিষ্ট ইভেন্টকে (যেমন সিস্টেম ব্যাক জেসচার বা বোতামে ক্লিক করা) স্ট্যান্ডার্ড ইভেন্টে ট্রান্সলেট করে যা NavigationEventDispatcher-এ পাঠানো যেতে পারে।

নেভিগেশন সংক্রান্ত যেসব নির্দেশ ও ট্রিগার কাজ করে

নেভিগেশন ইভেন্ট সিস্টেমটি শুধুমাত্র সিস্টেম ব্যাক বোতামের চেয়ে আরও বেশি কিছু কভার করার জন্য ডিজাইন করা হয়েছে, যার ডিজাইন একাধিক নেভিগেশন দিকনির্দেশ এবং ইনপুট পদ্ধতি জুড়ে কাজ করে।

কাজ করে এমন দিকনির্দেশ

বিভিন্ন প্ল্যাটফর্মে আলাদা আলাদা নেভিগেশন নির্দেশাবলী কাজ করে:

প্ল্যাটফর্ম

ফিরে যান

উপরের দিকে

এগিয়ে যান

হোম

Android ফোন

✅

✅

🚫

✅

Android ট্যাবলেট

✅

✅

🚫

✅

ওয়েব (ব্রাউজার)

✅

✅

✅

🚫

iOS (iPhone/iPad)

✅

🚫

✅

✅

কাজ করে এমন ট্রিগার

ইনপুট হ্যান্ডেলিং প্রতিটি প্ল্যাটফর্মে বিভিন্ন মেকানিজমের মাধ্যমে অর্জন করা হয়:

ট্রিগার

Android ফোন

ওয়েব (ব্রাউজার)

iOS (iPhone/iPad)

কীবোর্ডের 'ফিরে যান' বোতাম

✅ ফিরে যান

❓

✅ ফিরে যান

সফ্টওয়্যার ব্যাক বোতাম

🚫

✅ ফিরে যান

✅ ফিরে যান

সফ্টওয়্যার আপ বোতাম

✅ আপ

🚫

🚫

বাঁদিক থেকে জেসচার

✅ ফিরে যান

❓

✅ ফিরে যান

ডানদিক থেকে জেসচার

✅ ফিরে যান

❓

✅ ফরওয়ার্ড করা

নিচ থেকে জেসচার

✅ হোম

🚫

✅ হোম