Push Presentation হলো মোবাইল অ্যাপ্লিকেশনে একটি নেভিগেশন প্যাটার্ন যেখানে প্রতিটি নতুন স্ক্রিন আগেরটির উপরে নেভিগেশন স্ট্যাকে যুক্ত হয়। ব্যবহারকারী ক্রমান্বয়ে কন্টেন্টে এগিয়ে যেতে পারে এবং সিস্টেম বাটন বা সোয়াইপের মাধ্যমে ফিরে আসতে পারে। Apple Developer, 2025-এর মতে, UINavigationController 85% iOS অ্যাপে প্রধান নেভিগেশন প্যাটার্ন হিসেবে ব্যবহৃত হয়। Android-এ, অনুরূপ কার্যকারিতা FragmentManager এবং Navigation Component-এর NavController-এর মাধ্যমে বাস্তবায়িত হয়।
মূল বিষয়
Push Presentation হলো একটি নেভিগেশন প্রক্রিয়া যেখানে প্রতিটি নতুন স্ক্রিন স্ট্যাকের শীর্ষে রাখা হয়, যখন আগের স্ক্রিন তার নীচে মেমরিতে থাকে। ব্যবহারকারী ক্রমান্বয়ে বিস্তারিত স্ক্রিন খুলে কন্টেন্টে গভীরে যায় এবং ফিরে আসার বাটন তাকে আগের ধাপে ফিরিয়ে নিয়ে যায়।
Push নেভিগেশনের আর্কিটেকচার LIFO (Last In, First Out) ডেটা স্ট্রাকচারের উপর ভিত্তি করে তৈরি। একটি নতুন স্ক্রিন সর্বদা স্ট্যাকের শেষে যুক্ত হয় এবং শুধুমাত্র শীর্ষ থেকে অপসারণ ঘটে। এটি পূর্বানুমানযোগ্য আচরণ নিশ্চিত করে: ব্যবহারকারী সর্বদা জানে যে ফিরে আসার বাটন তাকে ঠিক এক ধাপ পিছনে নিয়ে যাবে। নেভিগেশন স্ট্যাক অ্যাপ্লিকেশনের জটিলতার উপর নির্ভর করে 2 থেকে 10+ স্ক্রিন ধারণ করতে পারে।
Push Presentation হলো শ্রেণিবদ্ধ কন্টেন্টযুক্ত অ্যাপ্লিকেশনের প্রধান প্যাটার্ন: নিউজ ফিড, পণ্য ক্যাটালগ, মাল্টি-লেভেল মেনু এবং ডকুমেন্টেশন। Material Design অনুসারে, স্ট্যাক নেভিগেশন সেই পরিস্থিতিতে উপযুক্ত যেখানে ব্যবহারকারী সাধারণ থেকে নির্দিষ্ট পর্যন্ত কন্টেন্ট অন্বেষণ করে এবং প্রতিটি পরবর্তী স্ক্রিন বিষয়টি সম্পর্কে ধারণা গভীর করে।
নেভিগেশন স্ট্যাক হলো স্ক্রিনের একটি ক্রমযুক্ত সেট যেখানে প্রতিটি উপাদান তার ViewController বা Fragment-এর অবস্থা সংরক্ষণ করে। Push অপারেশনের সময়, একটি নতুন স্ক্রিন স্ট্যাকে যুক্ত হয়, এর উপস্থিতি অ্যানিমেটেড হয় (iOS-এ ডান দিক থেকে স্লাইড, Android-এ নিচ থেকে স্লাইড বা Fade), এবং এটি সক্রিয় হয়ে ওঠে।
Pop অপারেশনের সময় (ফিরে যাওয়া বাটন চাপা), শীর্ষ স্ক্রিন স্ট্যাক থেকে সরানো হয়, ধ্বংস হয় বা মেমরিতে চলে যায় এবং আগের স্ক্রিন সক্রিয় হয়ে ওঠে। iOS ডিফল্টভাবে popped ViewController ধ্বংস করে, মেমরি মুক্ত করে। Android Fragment-কে পুনরুদ্ধারের ক্ষমতা সহ ব্যাক স্ট্যাকে সংরক্ষণ করতে পারে পুনর্নির্মাণ ছাড়াই।
স্ট্যাকের গভীরতা পারফরম্যান্সকে প্রভাবিত করে: স্ট্যাকের প্রতিটি স্ক্রিন মেমরি খরচ করে। সুপারিশ করা হয় স্ট্যাকে 10টির বেশি স্ক্রিন না রাখা। গভীর নেভিগেশনের জন্য, PopToRoot ব্যবহার করুন বা নতুন রুট স্ক্রিন দিয়ে স্ট্যাক পুনরায় চালু করুন। Android-এ Navigation Component SavedStateHandle-এর মাধ্যমে স্বয়ংক্রিয়ভাবে স্ট্যাকের অবস্থা পরিচালনা করে।
UINavigationController হলো একটি iOS কন্টেইনার কন্ট্রোলার যা UIViewController-এর স্ট্যাক পরিচালনা করে। এটি স্বয়ংক্রিয়ভাবে বর্তমান স্ক্রিনের শিরোনাম এবং ফিরে আসার বাটন সহ একটি নেভিগেশন বার প্রদর্শন করে। ডিফল্ট push অ্যানিমেশন হলো ডান থেকে বামে স্লাইড, যা ব্যবহারকারীর জন্য কন্টেন্টে নিমজ্জনের অনুভূতি তৈরি করে।
স্ক্রিন যুক্ত করা হয় pushViewController(_:animated:)-এর মাধ্যমে। অপসারণ করা হয় popViewController(animated:)-এর মাধ্যমে। রুট স্ক্রিনে ফিরে আসার জন্য popToRootViewController(animated:) ব্যবহার করুন। UINavigationController viewControllers প্রপার্টির মাধ্যমে প্রোগ্রামেটিক স্ট্যাক পরিচালনাও সমর্থন করে — স্ট্যাকের সমস্ত কন্ট্রোলারের একটি অ্যারে।
নেভিগেশন বারে স্ক্রিনের শিরোনাম, ফিরে আসার বাটন এবং ঐচ্ছিক অ্যাকশন বাটন থাকে। iOS 11 থেকে শুরু করে, Large Titles (prefersLargeTitles) বড় ফন্টে শিরোনাম প্রদর্শনের অনুমতি দেয় যা স্ক্রোল করার সময় অ্যানিমেটেডভাবে সঙ্কুচিত হয়। এটি নেভিগেশন শ্রেণিবিন্যাস উন্নত করে এবং ব্যবহারকারীকে বর্তমান বিভাগ সম্পর্কে জানায়।
let detailVC = DetailViewController()
detailVC.title = "Item Details"
navigationController?.pushViewController(detailVC, animated: true)
// পূর্ববর্তী স্ক্রিনে ফিরে যান
navigationController?.popViewController(animated: true)
// রুটে ফিরে যান
navigationController?.popToRootViewController(animated: true)
Navigation Component হলো ঘোষণামূলক নেভিগেশনের জন্য একটি Android Jetpack লাইব্রেরি। এটি NavController প্রদান করে, যা নেভিগেশন গ্রাফ (nav_graph)-এর মাধ্যমে ফ্র্যাগমেন্ট বা Compose স্ক্রিন পরিচালনা করে। Android-এ Push iOS-এর মতো: প্রতিটি নতুন Fragment ব্যাক স্ট্যাকে যুক্ত হয় এবং ফিরে আসার বাটন আগেরটিতে ফিরিয়ে নেয়।
NavHost হলো একটি কন্টেইনার যা NavGraph থেকে বর্তমান গন্তব্য প্রদর্শন করে। NavGraph হলো একটি XML ফাইল যা সমস্ত অ্যাপ্লিকেশন স্ক্রিন এবং তাদের মধ্যে সংযোগ বর্ণনা করে। রূপান্তরগুলি actions-এর মাধ্যমে গন্তব্য এবং ঐচ্ছিক আর্গুমেন্ট সহ সংজ্ঞায়িত করা হয়। Navigation Component স্বয়ংক্রিয়ভাবে সিস্টেম ব্যাক, অ্যানিমেশন এবং অবস্থা সংরক্ষণ পরিচালনা করে।
স্ক্রিনের মধ্যে ডেটা স্থানান্তরের জন্য, Navigation Component Safe Args সমর্থন করে — টাইপ-সেফ আর্গুমেন্ট ক্লাসের কোড জেনারেশন। ম্যানুয়ালি Bundle-এ ডেটা রাখার পরিবর্তে, ডেভেলপার NavGraph-এ আর্গুমেন্ট ঘোষণা করে এবং জেনারেটেড Directions এবং Args ক্লাসের মাধ্যমে সেগুলি গ্রহণ করে। Safe Args টাইপ অমিল ত্রুটিগুলি দূর করে এবং রিফ্যাক্টরিং সহজ করে।
// XML-এ NavGraph সংজ্ঞা
<!-- res/navigation/nav_graph.xml -->
@navigation {
NavHost(startDestination = "list") {
composable("list") { ListScreen() }
composable(
"detail/{itemId}",
arguments = listOf(navArgument("itemId") { type = NavType.IntType })
) { DetailScreen(it.arguments()?.getInt("itemId") ?: 0) }
}
}
// প্রোগ্রামেটিকভাবে নেভিগেট করুন
navController.navigate("detail/42")
Bottom Navigation এবং Push নেভিগেশনের সংমিশ্রণ মোবাইল অ্যাপ্লিকেশনে একটি সাধারণ প্যাটার্ন। প্রতিটি Bottom Navigation ট্যাবের নিজস্ব স্ক্রিন স্ট্যাক থাকে। Navigation Component এটি প্রতি ট্যাবে NavHost বা প্রতিটি ট্যাবের জন্য পৃথক গ্রাফ সহ একক NavHost-এর মাধ্যমে সমর্থন করে। ট্যাব সুইচ করলে push স্ট্যাকের অবস্থা রিসেট হয় না।
Push Presentation এবং Modal Presentation নেভিগেশনের ভিন্ন ভিন্ন কাজ সমাধান করে। Push ক্রমিক কন্টেন্ট দেখার জন্য ডিজাইন করা হয়েছে, যেখানে প্রতিটি নতুন স্ক্রিন প্রসঙ্গ গভীর করে। Modal ফোকাসড কাজের জন্য যা সম্পূর্ণ করা প্রয়োজন। অনুশীলনে, নির্দিষ্ট পরিস্থিতির জন্য সঠিক প্যাটার্ন বেছে নেওয়া গুরুত্বপূর্ণ।
প্রধান নির্বাচনের মানদণ্ড: যদি ব্যবহারকারীর উচিত প্রসঙ্গ না হারিয়ে স্বাধীনভাবে ফিরে আসতে সক্ষম হওয়া — Push বেছে নিন। যদি কাজটি অস্থায়ী হয় এবং মূল কন্টেন্ট (ফর্ম, অনুমোদন) ব্লক করে — Modal ব্যবহার করুন। একটি স্ক্রিনে প্যাটার্ন মিশ্রিত করা (Modal-এর ভিতরে Push) গ্রহণযোগ্য তবে স্পষ্ট ভিজ্যুয়াল শ্রেণিবিন্যাস প্রয়োজন।
একটি ভুল হলো স্ক্রিনের ক্রমগুলির জন্য Modal ব্যবহার করা যা যৌক্তিকভাবে মূল প্রবাহের অংশ। উদাহরণস্বরূপ, অর্ডার তৈরি উইজার্ড (ধাপ 1 → ধাপ 2 → ধাপ 3) মোডাল উইন্ডোর চেইনের পরিবর্তে মোডাল কন্টেইনারের ভিতরে Push-এর মাধ্যমে বাস্তবায়ন করা ভাল। এটি নেভিগেশন শ্রেণিবিন্যাস এবং ফিরে আসার পূর্বানুমানযোগ্যতা সংরক্ষণ করে।
আসুন উভয় প্ল্যাটফর্মে Push নেভিগেশনের সম্পূর্ণ বাস্তবায়ন দেখি। Swift উদাহরণ প্রোগ্রামেটিক স্ট্যাক পরিচালনা এবং ডিপ লিংক হ্যান্ডলিং সহ UINavigationController প্রদর্শন করে। Kotlin উদাহরণ NavHost, আর্গুমেন্ট এবং অ্যানিমেশন সহ Navigation Component দেখায়।
class ListViewController: UIViewController {
func showDetail(_ itemId: Int) {
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let detailVC = storyboard.instantiateViewController(
withIdentifier: "DetailViewController"
) as! DetailViewController
detailVC.itemId = itemId
navigationController?.pushViewController(detailVC, animated: true)
}
}
class DetailViewController: UIViewController {
var itemId: Int = 0
override func viewDidLoad() {
super.viewDidLoad()
title = "Item #\(itemId)"
}
}
@Composable
fun PushNavigationApp() {
val navController = rememberNavController()
NavHost(navController = navController, startDestination = "list") {
composable("list") {
ListScreen(
onItemClick = { id -> navController.navigate("detail/$id") }
)
}
composable(
"detail/{itemId}",
arguments = listOf(navArgument("itemId") { type = NavType.IntType })
) { backStackEntry ->
val itemId = backStackEntry.arguments()?.getInt("itemId") ?: 0
DetailScreen(itemId = itemId, onBack = { navController.popBackStack() })
}
}
}
উদাহরণগুলি মৌলিক Push নেভিগেশন দেখায়: তালিকা → বিবরণ। iOS ম্যানুয়াল ডেটা পাসিং সহ স্টোরিবোর্ড এবং UINavigationController ব্যবহার করে। Android টাইপ-সেফ আর্গুমেন্ট এবং স্বয়ংক্রিয় ব্যাক স্ট্যাক পরিচালনা সহ NavHost ব্যবহার করে। উভয় পদ্ধতি ডিপ লিংক, কাস্টম অ্যানিমেশন এবং রোটেশনে অবস্থা সংরক্ষণ সমর্থন করে।
সচরাচর জিজ্ঞাসিত প্রশ্ন
Push ফিরে আসার বাটন সহ UINavigationController স্ট্যাকে একটি স্ক্রিন যুক্ত করে। Present ফিরে আসার বাটন ছাড়া একটি মোডাল উইন্ডো খোলে — ব্যবহারকারীকে এটি স্পষ্টভাবে বন্ধ করতে হবে। Push ক্রমিক কন্টেন্টের জন্য উপযুক্ত, Present ফোকাসড কাজের জন্য। SwiftUI-তে, Push NavigationLink-এর সাথে এবং Present .sheet-এর সাথে মিলে যায়।
Navigation Component একটি নির্দিষ্ট বিন্দু পর্যন্ত popBackStack পদ্ধতি এবং স্ট্যাক পরিষ্কারের জন্য popUpTo প্রদান করে। স্ট্যাক ওভারফ্লো প্রতিরোধ করতে, navigate-এর আগে popUpTo(startDestination) { inclusive = true } ব্যবহার করুন। এটি নিশ্চিত করে যে স্ট্যাকে একসাথে 5–7টির বেশি স্ক্রিন নেই।
হ্যাঁ, Push এবং Modal একত্রিত করা একটি মানক প্যাটার্ন। উদাহরণস্বরূপ: তালিকা → বিবরণে Push → অনুমোদনের জন্য Modal। সুপারিশ করা হয় Modal-এর ভিতরে Push নেস্ট না করা: একটি মোডাল উইন্ডোতে স্ট্যাক নেভিগেশন থাকা উচিত নয়। যদি মোডাল উইন্ডোর ভিতরে স্ক্রিনের ক্রম প্রয়োজন হয়, মোডাল কন্টেইনারের ভিতরে Push ব্যবহার করুন।
ডিপ লিংক Push নেভিগেশনে অ্যাপটিকে একটি নির্দিষ্ট স্ক্রিনে খোলে। iOS UINavigationController-এর সাথে URL স্কিম এবং Universal Links ব্যবহার করে। Android NavDeepLink-এর সাথে Intent Filters ব্যবহার করে। উভয় ক্ষেত্রে, সিস্টেম লিংক পার্স করে এবং টার্গেট স্ক্রিনে একটি নেভিগেশন স্ট্যাক তৈরি করে, ফিরে আসার ক্ষমতা সংরক্ষণ করে।
iOS স্ট্যান্ডার্ড স্লাইড অ্যানিমেশন ব্যবহার করে, যা UINavigationControllerDelegate-এর মাধ্যমে কাস্টমাইজযোগ্য। Android Navigation Component XML রিসোর্স (slide_in_right, slide_out_left) এর মাধ্যমে কাস্টম অ্যানিমেশন সমর্থন করে। Compose-এর জন্য, animateItemPlacement মডিফায়ার সহ AnimatedNavHost ব্যবহার করুন।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন