Route — यह क्या है, फ्लटर में रूट के प्रकार और निर्माण

लेखक: IT Sectr प्रकाशित: 2026-07-02 पढ़ने का समय: 8 मिनट

Route Flutter में एक अमूर्त वर्ग है जो नैविगेटर के नेविगेशन इतिहास में एक अलग स्क्रीन या पेज का प्रतिनिधित्व करता है। Route के ठोस कार्यान्वयन — MaterialPageRoute, CupertinoPageRoute और PlatformRoute — यह निर्धारित करते हैं कि स्क्रीन कैसे प्रदर्शित होती है और संक्रमण के दौरान कौन सा एनिमेशन उपयोग किया जाता है। सामान्य widget के विपरीत, Route का अपना जीवनचक्र होता है जिसमें विधियाँ didPush, didPop, didReplace और didChangeNext शामिल हैं। Flutter API Reference (2026) के अनुसार, प्रत्येक Route ModalBarrier का प्रबंधन करता है, प्लेटफ़ॉर्म-विशिष्ट सुविधाओं (iOS पर स्वाइप-बैक) को ध्यान में रखता है और स्क्रीन के बीच स्थिति अलगाव सुनिश्चित करता है।

मुख्य बिंदु

  • Route — Flutter में अपने स्वयं के जीवनचक्र (didPush, didPop, didReplace, didChangeNext) के साथ एक अमूर्त स्क्रीन वर्ग
  • MaterialPageRoute — Android और डेस्कटॉप के लिए Material एनिमेशन (नीचे से स्लाइड) के साथ मानक Route कार्यान्वयन
  • CupertinoPageRoute — iPhone और iPad के लिए iOS एनिमेशन (दाएं से स्लाइड + जेस्चर स्वाइप-बैक) के साथ Route कार्यान्वयन
  • जीवनचक्र — Route चरणों से गुज़रता है: संक्रमण, सक्रिय, निष्क्रिय और निपटान
  • डेटा स्थानांतरण — Route कंस्ट्रक्टर के माध्यम से तर्क स्वीकार करता है और समाप्त होने पर Future के माध्यम से परिणाम लौटाता है

Flutter में Route क्या है

Route Flutter नेविगेशन सिस्टम की नींव है। एप्लिकेशन में उपयोगकर्ता द्वारा देखी जाने वाली प्रत्येक स्क्रीन को Navigator स्टैक में स्थित एक Route ऑब्जेक्ट द्वारा दर्शाया जाता है। Route स्क्रीन को नियंत्रण कोड से अलग करता है: Navigator Route को जोड़ता और हटाता है, जबकि Route के अंदर वह इंटरफ़ेस होता है जो उपयोगकर्ता देखता है। यह आर्किटेक्चर नेविगेशन और प्रदर्शन के बीच जिम्मेदारी को अलग करता है।

सामान्य widget प्रतिस्थापन के विपरीत, Route सामान्य widgets के लिए अनुपलब्ध सेवाएँ प्रदान करता है: ModalBarrier (डायलॉग खुलने पर पृष्ठभूमि मंद करना), प्रवेश और निकास एनिमेशन नियंत्रण, Android पर हार्डवेयर बैक बटन हैंडलिंग और स्क्रीन के बीच सुगम संक्रमण के लिए Hero एनिमेशन के साथ एकीकरण।

Flutter Cookbook (2026) के अनुसार, Route Hero एनिमेशन के लिए एक मुख्य तत्व है: एक Route पर Hero widget स्वचालित रूप से अगले Route पर Hero widget में संक्रमण को एनिमेट करता है, जिससे “उड़ने” वाले तत्व का प्रभाव पैदा होता है। यह संभव है क्योंकि Route एनिमेशन के दौरान दोनों स्क्रीन को Overlay में रखता है।

नेविगेशन के निर्माण खंड के रूप में Route

Route सरल मोबाइल एप्लिकेशन (Navigator 1.0 के माध्यम से) और गहरे लिंक वाले जटिल परिदृश्यों (Navigator 2.0) दोनों के लिए आधार है। Navigator 2.0 में, Route एक Page का प्रतिनिधित्व करता है जिसे RouterDelegate रूट कॉन्फ़िगरेशन से परिवर्तित करता है। इस प्रकार, किसी भी Flutter नेविगेशन सिस्टम के साथ काम करने के लिए Route को समझना आवश्यक है — चुने गए दृष्टिकोण या पैकेज की परवाह किए बिना।

Route प्रकार: MaterialPageRoute और CupertinoPageRoute

Flutter Route के कई अंतर्निहित कार्यान्वयन प्रदान करता है, प्रत्येक व्यवहार को एक विशिष्ट प्लेटफ़ॉर्म के अनुकूल बनाता है। सही Route प्रकार चुनना उपयोगकर्ता अनुभव को प्रभावित करता है: Android पर Material एनिमेशन और iOS पर Cupertino एनिमेशन एक “देशी” एप्लिकेशन की अनुभूति पैदा करता है।

Route प्रकारएनिमेशनप्लेटफ़ॉर्मविशेषताएँ
MaterialPageRouteनीचे से ऊपर स्लाइडAndroid, डेस्कटॉपसंक्रमण पर छाया, स्वचालित SafeArea हैंडलिंग
CupertinoPageRouteदाएं से बाएं स्लाइडiOS, iPadOSजेस्चर स्वाइप-बैक, संक्रमण के दौरान पारदर्शी पृष्ठभूमि
PlatformRouteस्वचालित चयनसभी प्लेटफ़ॉर्मTargetPlatform के आधार पर प्रकार चुनता है
PageRouteBuilderकस्टमसभी प्लेटफ़ॉर्मAnimationController के माध्यम से एनिमेशन पर पूर्ण नियंत्रण

MaterialPageRoute: Android के लिए मानक

MaterialPageRoute सबसे अधिक उपयोग किया जाने वाला Route कार्यान्वयन है। यह क्रमिक प्रकटन के साथ नई स्क्रीन को नीचे से ऊपर एनिमेट करता है। बाहर निकलने पर, स्क्रीन ऊपर से नीचे एनिमेट होती है, अपनी मूल स्थिति में लौट आती है। टूलबार (AppBar) और स्क्रीन बॉडी अलग-अलग एनिमेट होते हैं, जो एक पदानुक्रम प्रभाव पैदा करता है।

CupertinoPageRoute: iOS नेविगेशन शैली

CupertinoPageRoute iOS के UINavigationController की नकल करता है। नई स्क्रीन दाएं से प्रवेश करती है, पिछली स्क्रीन को कवर करती है। मुख्य विशेषता CupertinoBackGestureDetector के माध्यम से कार्यान्वित इंटरैक्टिव स्वाइप-बैक जेस्चर के लिए समर्थन है। यह जेस्चर एनिमेशन के बीच में भी संभाला जाता है, जो iPhone उपयोगकर्ताओं से परिचित प्राकृतिक व्यवहार प्रदान करता है।

Route जीवनचक्र: निर्माण से निपटान तक

Route का अपना जीवनचक्र होता है, जो सामान्य StatefulWidget के जीवनचक्र से भिन्न होता है। इस चक्र को समझना उचित डेटा आरंभीकरण, स्ट्रीम सब्सक्रिप्शन और स्क्रीन बंद करने पर संसाधन मुक्ति के लिए आवश्यक है।

Route जीवनचक्र के चरण

Route जीवनचक्र में चार मुख्य चरण होते हैं। संक्रमण — Route बनाया जाता है और प्रवेश पर एनिमेट किया जाता है (didPush कहा जाता है)। सक्रिय — Route पूरी तरह से प्रदर्शित होता है और उपयोगकर्ता के साथ इंटरैक्ट करता है। निष्क्रिय — दूसरा Route वर्तमान को कवर करता है (डायलॉग, बॉटम शीट), लेकिन Route स्टैक में रहता है। निपटान — Route स्टैक से हटा दिया जाता है और नष्ट कर दिया जाता है, didPop और dispose कहा जाता है।

Route जीवनचक्र विधियों को कस्टम कार्यान्वयन में ओवरराइड किया जा सकता है। उदाहरण के लिए, didPop तब कहा जाता है जब Route स्टैक से हटा दिया जाता है — यहाँ आप ड्राफ्ट डेटा सहेज सकते हैं। didChangeNext तब कहा जाता है जब स्टैक में अगला Route बदल गया है — नेविगेशन इतिहास बदलने पर UI अपडेट करने के लिए उपयोगी।

Flutter API Route.didPop (2026) के अनुसार, Route जीवनचक्र को Route के अंदर State के जीवनचक्र से भ्रमित नहीं करना महत्वपूर्ण है। Route के अंदर StatefulWidget का अपना initState और dispose होता है, जो क्रमशः संक्रमण और निपटान चरणों के दौरान कहा जाता है। Route अपने आंतरिक State से अधिक समय तक जीवित रहता है — Route Overlay में तब भी रहता है जब उसके widgets अस्थायी रूप से दूसरे Route द्वारा छिपाए गए हों।

Route के माध्यम से स्क्रीन के बीच डेटा स्थानांतरण

Route इनपुट (निर्माण के समय) और आउटपुट (समाप्त होने पर) दोनों पर डेटा स्थानांतरित करने के लिए तंत्र प्रदान करता है। Route के माध्यम से उचित डेटा स्थानांतरण वैश्विक चर और InheritedWidget की आवश्यकता को समाप्त करता है, नेविगेशन को टाइप-सेफ और अनुमानित बनाता है।

नई स्क्रीन पर डेटा स्थानांतरित करने के लिए, प्राप्त करने वाले widget के कंस्ट्रक्टर या Navigator.pushNamed में arguments पैरामीटर का उपयोग करें। Route के अंदर, डेटा RouteSettings.arguments के माध्यम से सुलभ होता है, जो Route ऑब्जेक्ट में संग्रहीत होता है। यह दृष्टिकोण सभी Route प्रकारों — MaterialPageRoute, CupertinoPageRoute और कस्टम कार्यान्वयन के लिए काम करता है।

डेटा लौटाने के लिए, Navigator.pop(context, result) के दूसरे तर्क का उपयोग करें। Navigator.push Future लौटाता है, जो pop को दिए गए मान से पूरा होता है। यदि pop बिना तर्क के कहा जाता है, तो Future null से पूरा होता है। यह तंत्र Android में startActivityForResult और iOS में completion handler के अनुरूप है, लेकिन Dart Futures के माध्यम से कार्यान्वित किया गया है।

Route कंस्ट्रक्टर के माध्यम से डेटा स्थानांतरण

MaterialPageRoute के साथ सीधे Navigator.push कॉल करते समय, डेटा लक्ष्य स्क्रीन के कंस्ट्रक्टर के माध्यम से पारित किया जाता है। MethodChannel का उपयोग नहीं किया जाता है — यह शुद्ध Dart इंटरैक्शन है। यह दृष्टिकोण जटिल ऑब्जेक्ट के टाइप-सेफ स्थानांतरण के लिए बेहतर है।

कस्टम Route निर्माण उदाहरण

आइए अपने स्वयं के एनिमेशन और डेटा स्थानांतरण के साथ कस्टम Route बनाने का एक उदाहरण देखें। PageRouteBuilder एनिमेशन वक्र और अवधि पर पूर्ण नियंत्रण के साथ प्रवेश और निकास एनिमेशन को परिभाषित करने की अनुमति देता है।

dart
// स्लाइड एनिमेशन के साथ कस्टम Route
Navigator.push(context, PageRouteBuilder(
  pageBuilder: (context, animation, secondaryAnimation) {
    return DetailPage(productId: '42');
  },
  transitionsBuilder: (context, animation, secondaryAnimation, child) {
    const begin = Offset(0.0, 0.3);
    const end = Offset.zero;
    final tween = Tween(begin: begin, end: end);
    final offsetAnimation = animation.drive(tween);
    return SlideTransition(position: offsetAnimation, child: child);
  },
  transitionDuration: const Duration(milliseconds: 400),
));

// स्क्रीन से डेटा लौटाएं
ElevatedButton(
  onPressed: () => Navigator.of(context).pop({'selected': true, 'id': '42'}),
  child: const Text('चुनें'),
);

// कॉल करने वाली स्क्रीन पर परिणाम प्राप्त करें
final result = await Navigator.push(context, MaterialPageRoute(
  builder: (context) => const SelectionPage(),
));
if (result != null) {
  print('चयनित: ${result['selected']}');
}

उदाहरण में, PageRouteBuilder पारदर्शिता के साथ नीचे से एक कस्टम स्लाइड एनिमेशन परिभाषित करता है। transitionDuration एनिमेशन की गति निर्धारित करता है। कोड परिणाम स्थानांतरण भी प्रदर्शित करता है: विस्तार स्क्रीन उपयोगकर्ता के चयन के साथ एक Map लौटाती है, और कॉल करने वाली स्क्रीन push से Future के माध्यम से यह डेटा प्राप्त करती है। Route पूर्ण अलगाव सुनिश्चित करता है: विस्तार स्क्रीन पर ड्राफ्ट सूची की स्थिति को प्रभावित नहीं करते हैं।

अक्सर पूछे जाने वाले प्रश्न

Flutter में Route और Widget में क्या अंतर है?

Route एक ऑब्जेक्ट है जो नेविगेशन स्तर पर स्क्रीन का प्रबंधन करता है: यह एनिमेशन, ModalBarrier और जीवनचक्र संग्रहीत करता है। Widget इंटरफ़ेस के एक भाग का विवरण है। Route अपने अंदर Widget रखता है, लेकिन सामान्य widgets के लिए अनुपलब्ध सेवाएँ (Overlay परत, Hero एनिमेशन) भी प्रदान करता है। एक Route किसी भी गहराई के widgets का जटिल पदानुक्रम रख सकता है।

कस्टम एनिमेशन के साथ Route कैसे बनाएं?

PageRouteBuilder का उपयोग pageBuilder (स्क्रीन निर्माण) और transitionsBuilder (एनिमेशन परिभाषा) पैरामीटर के साथ करें। transitionsBuilder में, समानांतर एनिमेशन के लिए animation (0.0–1.0) और secondaryAnimation उपलब्ध हैं। पूर्ण नियंत्रण के लिए, Route की उपश्रेणी बनाएं और buildPage, createAnimationController और buildTransitions को ओवरराइड करें, जो निम्न-स्तरीय AnimationController तक पहुँच प्रदान करता है।

Route के बीच जटिल ऑब्जेक्ट कैसे स्थानांतरित करें?

जटिल ऑब्जेक्ट स्थानांतरित करने के लिए, सीधे Navigator.push कॉल करते समय लक्ष्य स्क्रीन के कंस्ट्रक्टर का उपयोग करें या pushNamed के साथ arguments पैरामीटर का उपयोग करें। सुनिश्चित करें कि ऑब्जेक्ट क्रमबद्ध करने योग्य है (Map, JSON या कस्टम वर्ग)। Flutter में टाइप-सेफ स्थानांतरण के लिए, freezed या json_serializable मॉडल का उपयोग करें जो RouteSettings के माध्यम से स्थानांतरित करते समय सही डिसीरियलाइज़ेशन सुनिश्चित करते हैं।

Route dispose को क्यों नहीं बुला सकता है?

Route.dispose नहीं बुलाया जाता है यदि Route Navigator स्टैक में रहता है। उदाहरण के लिए, नया Route खोलते समय, पुराना Route निष्क्रिय स्थिति में चला जाता है लेकिन नष्ट नहीं होता — यह त्वरित वापसी के लिए स्टैक में रहता है। Dispose केवल तब बुलाया जाता है जब Route को pop, pushReplacement या pushAndRemoveUntil के माध्यम से स्टैक से हटा दिया जाता है। संसाधन मुक्त करने के लिए, Route के अंदर State के dispose का उपयोग करें, Route के अपने dispose का नहीं।

कैसे जांचें कि वर्तमान में कौन सा Route सक्रिय है?

BuildContext से वर्तमान Route प्राप्त करने के लिए ModalRoute.of(context) का उपयोग करें। ModalRoute.isActive गुण दिखाता है कि Route वर्तमान में दिखाई देने वाली स्क्रीन है या नहीं। ModalRoute.isCurrent — true यदि Route स्टैक के शीर्ष पर है। स्टैक परिवर्तनों का निरीक्षण करने के लिए, RouteAware और RouteObserver के माध्यम से Navigator प्रेक्षकों की सदस्यता लें, जो सक्रिय Route परिवर्तनों के बारे में सूचित करते हैं।

सारांश

  • Route — Flutter में जीवनचक्र (didPush, didPop, didReplace, didChangeNext) और ModalBarrier व Hero एनिमेशन समर्थन के साथ एक अमूर्त स्क्रीन वर्ग
  • MaterialPageRoute — नीचे से स्लाइड एनिमेशन, छाया और स्वचालित SafeArea के साथ Android कार्यान्वयन
  • CupertinoPageRoute — दाएं से स्लाइड एनिमेशन और इंटरैक्टिव स्वाइप-बैक जेस्चर के साथ iOS कार्यान्वयन
  • PageRouteBuilder — transitionsBuilder और AnimationController के माध्यम से कस्टम एनिमेशन के साथ Route बनाने की उपयोगिता
  • डेटा स्थानांतरण — इनपुट पर Route कंस्ट्रक्टर (push) या arguments (pushNamed) के माध्यम से; आउटपुट पर Future के साथ Navigator.pop(context, result) के माध्यम से
  • जीवनचक्र — चार चरण: संक्रमण (didPush), सक्रिय, निष्क्रिय (दूसरे Route से ढका हुआ), निपटान (didPop + dispose)
  • स्क्रीन अलगाव — प्रत्येक Route का अपना BuildContext और स्थिति होती है, जो लीक को रोकता है और डेटा प्रबंधन को सरल बनाता है

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें