Flutter هو إطار عمل تطبيقات متعددة المنصات يستخدم لتطوير تطبيقات الجوال والويب وسطح المكتب باستخدام لغة برمجة Dart. يتميز Flutter بسرعة التطوير والأداء العالي وسهولة الصيانة.
إذا كنت تطوّر تطبيقًا في Flutter، فمن المهم جدًا أن تتعلم كيفية تحويل المستخدمين من صفحة إلى أخرى باستخدام نظام التنقل والتوجيه (Navigation & Routing) المتاح في Flutter. يتيح لك هذا النظام تحويل المستخدمين إلى الصفحات المناسبة، وتحميل البيانات اللازمة في كل صفحة، وإرجاع البيانات المسجلة بعد الانتهاء من الصفحة.
تحديد الصفحات باستخدام MaterialApp
لتعيين المظهر العام لتطبيقك وتحديد الصفحات الرئيسية والمتاحة في التطبيق، يتم استخدام عنصر واجهة المستخدم MaterialApp
. يمكنك تحديد الصفحة الرئيسية باستخدام خاصية home
، وتحديد الصفحات المتاحة باستخدام خاصية routes
.
MaterialApp( home: HomePage(), routes: { '/page1': (context) => Page1(), '/page2': (context) => Page2(), }, )
في المثال أعلاه، تم استخدام MaterialApp
لتعيين صفحة HomePage
كصفحة رئيسية، وتحديد Page1
و Page2
كصفحات متاحة في التطبيق. تذكر أن الصفحات المعرفة في routes
يمكن استخدامها للانتقال بين الصفحات باستخدام Navigator
.
“اقرأ أيضاً: شرح استخدام ويدجت PopupMenuButton في فلاتر“
التنقل باستخدام Navigator
Navigator
هو عنصر واجهة مستخدم يستخدم لتحويل المستخدمين بين الصفحات. يمكنك استخدام Navigator
للانتقال إلى صفحة جديدة باستخدام اسم الصفحة المعينة في خصائص routes
في MaterialApp
.
Navigator.pushNamed(context, '/page1');
في المثال أعلاه، تم استخدام Navigator
للانتقال إلى Page1
باستخدام اسم الصفحة /page1
. يمكنك استخدام Navigator.pop()
للعودة إلى الصفحة السابقة.
يمكنك استخدام Navigator.pushReplacementNamed()
للانتقال إلى صفحة جديدة وإزالة الصفحة الحالية من سجل الصفحات.
Navigator.pushReplacementNamed(context, '/page2');
“اقرأ أيضاً: شرح استخدام ويدجت AnimatedBuilder في فلاتر“
الانتقال إلى الصفحات مع البيانات
يمكنك إرسال البيانات من صفحة إلى أخرى باستخدام البيانات المسجلة في Navigator
. يمكنك استخدام Navigator.pushNamed
مع خاصية arguments
لإرسال البيانات إلى الصفحة الجديدة.
Navigator.pushNamed(context, '/page1', arguments: data);
في المثال أعلاه، تم إرسال data
إلى Page1
باستخدام Navigator.pushNamed
. يمكنك استخدام ModalRoute.of(context).settings.arguments
لاسترداد البيانات المرسلة من الصفحة السابقة.
class Page1 extends StatelessWidget { @override Widget build(BuildContext context) { final data = ModalRoute.of(context).settings.arguments; // استخدم البيانات هنا return Scaffold( // ... ); } }
“اقرأ أيضاً: شرح استخدام ويدجت IntrinsicHeight في فلاتر“
استخدام MaterialPageRoute في Flutter
يعتبر MaterialPageRoute
هو النوع الأكثر استخدامًا من التنقل بين الصفحات في Flutter. يمكن استخدامه لتنفيذ عملية التنقل التقليدية بين الصفحات وتحديد عنوان URL لكل صفحة. يمكن استخدام Navigator.push
مع MaterialPageRoute
للانتقال إلى صفحة جديدة.
Navigator.push( context, MaterialPageRoute(builder: (context) => SecondScreen()), );
في المثال أعلاه، تم استخدام MaterialPageRoute
للانتقال إلى SecondScreen
. يتم تمرير وظيفة builder
كمعامل إلى MaterialPageRoute
، والتي تقوم بإنشاء SecondScreen
وإعادتها. بمجرد الانتهاء من SecondScreen
، سيتم إرجاع البيانات المسجلة إلى الصفحة السابقة باستخدام Navigator.pop
.
Navigator.pop(context, result);
يمكن استخدام Navigator.pushNamed
بدلاً من Navigator.push
لتحديد اسم الصفحة المعينة عوضًا عن إنشاء MaterialPageRoute
بشكل صريح.
Navigator.pushNamed(context, '/second');
في المثال أعلاه، تم استخدام Navigator.pushNamed
للانتقال إلى الصفحة المسماة /second
. يجب تعريف /second
في MaterialApp
باستخدام خاصية routes
كما وضحنا بالأعلى.
MaterialApp( title: 'Flutter Navigation', initialRoute: '/', routes: { '/': (context) => FirstScreen(), '/second': (context) => SecondScreen(), }, );
“اقرأ أيضاً: شرح استخدام ويدجت SnackBar في فلاتر“
مراقبة التنقل بواسطة onGenerateRoute
يمكن استخدام onGenerateRoute
في MaterialApp
لمراقبة عمليات التنقل التي تتم في التطبيق. يمكن استخدامه لتحديد صفحة معينة بناءً على الاسم المحدد في Navigator.pushNamed
.
MaterialApp( onGenerateRoute: (settings) { if (settings.name == '/second') { return MaterialPageRoute(builder: (context) => SecondScreen()); } }, );
في المثال أعلاه، تم استخدام onGenerateRoute
لتحديد صفحة SecondScreen()
إذا تم تحديد الاسم /second
في Navigator.pushNamed
. إذا كان الاسم غير موجود، يمكن إرجاع null
لمنع التنقل إلى الصفحة المحددة.
“اقرأ أيضاً: شرح استخدام ويدجت RadioListTile في فلاتر“
تعتبر المفاهيم الأساسية لنظام التنقل والتوجيه في Flutter أساسية لتطوير تطبيقات عالية الأداء وسهلة الصيانة. ويمكن استخدام MaterialPageRoute
لتنفيذ عملية التنقل التقليدية بين الصفحات، ويمكن استخدام Navigator.pushNamed
لتحديد اسم الصفحة المطلوبة بدلاً من إنشاء MaterialPageRoute
بشكل صريح. يمكنك أيضًا إرسال البيانات من صفحة إلى أخرى باستخدام Navigator.pushNamed
مع خاصية arguments
.ويمكن استخدام onGenerateRoute
لمراقبة العمليات التي تتم في التنقل وتحديد الصفحة المناسبة بناءً على الاسم المحدد في Navigator.pushNamed
. باستخدام هذه الأساليب، يمكنك تحسين تجربة المستخدم في تطبيقك وتحويله بسلاسة بين الصفحات وتحقيق تجربة مستخدم سلسة وفعالة في التطبيقات.