اذهب إلى المحتوى
  • 0

إخفاء زر الرجوع في الواجهات - Flutter - Navigation

Mohammed Abu Yousef

السؤال

خط سير التطبيق ( عندما يقوم المستخدم بفتح التطبيق _ إذا كان مسجل تظهر الصفحة الرئيسية وإلا فستظهر صفحة تسجيل الدخول " علما أن صفحة تسجيل الدخول هنا تظهر بدون leading " _ )

- عندما يكون المشتخدم بالفعل داخل التطبيق، يوجد drawer يحتوي على مجموعة من الميزات، منها: ( Logout ) عند الضغط عليها يتم تحويل المستخدم إلى صفحة تسجيل الدخول، لكن المشكلة أن صفحة تسجيل الدخول هنا تظهر ب leading ، فكيف يمكن إزالته؟ بحيث تظهر صفحة تسجيل الدخول كما لو كلن المستخدم قد فتح التطبق لتوّه.

باختصار / أريد حذف ال leading الظاهر في الصورة المرفقة والمشار إليه بالسهم الأزرق.

Screenshot (35).png

Screenshot (36)_LI.jpg

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

ربما لا تريد أن يتمكن المستخدم من الضغط على زر الرجوع بالجهاز للعودة إلى المسار السابق. بدلاً من استدعاء pushNamed , حاول الاتصال بـ Navigator.pushReplacementNamed للتسبب في اختفاء الزر.

onPressed: () {
	  Navigator.pushReplacementNamed(context, "/logout");
},

أو يمكنك استخدام automaticallyImplyLeading في واجهة تسجيل الدخول

appBar: AppBar(
  automaticallyImplyLeading: false,
),

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

شكرا، لم ينجح الحل الأول، لكن نجح الحل الثاني، ف تمام.

لكن هناك إشكال، عند النقر على الزر الموجود في الصورة المرفقة، يقوم التطبيق بإرجاع المستخدم إلى الصفحة الرئيسية، وأنا لا أريد أن تتم العملية بهذه الطريقة، أريد ألا يستطيع المستخدم الدخول إلى أي شاشة من شاشات التطبيق إلا ويكون قد قام بعمل تسجيل دخول بالفعل.

Screenshot (38)_LI.jpg

تم التعديل في بواسطة Mohammed Abu Yousef
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 2 دقائق مضت قال Mohammed Abu Yousef:

شكرا، لم ينجح الحل الأول، لكن نجح الحل الثاني، ف تمام.

لكن هناك إشكال، عند النقر على الزر الموجود في الصورة المرفقة، يقوم التطبيق بإرجاع المستخدم إلى الصفحة الرئيسية، وأنا لا أريد أن تتم العملية بهذه الطريقة، أريد ألا يستطيع المستخدم الدخول إلى أي شاشة من شاشات التطبيق إلا ويكون قد قام بعمل تسجيل دخول بالفعل.

هنا يجب عليك استخدام أي حزمة من حزم إدارة الحالة مثل Provider لتتأكد من أن العضو قد قام فعلا بتسجيل الدخول و تخزين التوكن الخاص به أو لا  أو يمكن استخدام Shared_Prefrence لتخزين ذلك.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 4 دقائق مضت قال Mohammed Abu Yousef:

أنا بالفعل أستخدم Provider

راح تجيب قيمة التوكن إذا تم تسجيل الدخول عن طريق Provider مثل 

var auth = Provider.of<AuthProvider>(context, listen: false);

ومن ثم تتأكد من خلال شرط إذا في توكن مخزن تحوله إلى الواجهة الرئيسية أو يتصفح التطبيق إذا ما في تحوله لصفحة تسجيل الدخول. 

if(auth.token == null){
	// هنا تحويله لصفحة تسجيل الدخول
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

قمت بفعل ذلك بالفعل.

الإشكال ليس هنا، الإشكال في موضوع ال Navigation ( بسبب أن تطبيق يعتبر صفحة تسجيل الدخول طبقة فوق طبقة الصفحة الرئيسية )، وأنا أريد إظهار صفحة التسجيل التي تظهر عند فتح التطبيق إذا كان غير مسجل، فهو بهذه الطريقة لا يوجد طبقة تحتها بحيث لو قام المستخدم بالرجوع خطوة للوراء فسيتم الخروج من التطبيق.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 15 دقائق مضت قال Mohammed Abu Yousef:

قمت بفعل ذلك بالفعل.

الإشكال ليس هنا، الإشكال في موضوع ال Navigation ( بسبب أن تطبيق يعتبر صفحة تسجيل الدخول طبقة فوق طبقة الصفحة الرئيسية )، وأنا أريد إظهار صفحة التسجيل التي تظهر عند فتح التطبيق إذا كان غير مسجل، فهو بهذه الطريقة لا يوجد طبقة تحتها بحيث لو قام المستخدم بالرجوع خطوة للوراء فسيتم الخروج من التطبيق.

هل ممكن ترفق الكود الذي يحتوي على المشكلة.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

أتمنى أن تكون الفكرة التي أريد الوصول إليها واضحة،إن لم تكن كذلك قم بسؤالي فورا

ملاحظة / قمت بعمل مشروع بسيط حتى نقتصر على الفكرة التي أريدها فقط، وها هو:

https://github.com/MohammedAbuYousef0403/flutter

تم التعديل في بواسطة Mohammed Abu Yousef
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 20 ساعات قال Mohammed Abu Yousef:

أتمنى أن تكون الفكرة التي أريد الوصول إليها واضحة،إن لم تكن كذلك قم بسؤالي فورا

ملاحظة / قمت بعمل مشروع بسيط حتى نقتصر على الفكرة التي أريدها فقط، وها هو:

https://github.com/MohammedAbuYousef0403/flutter

حصل حاجة ي باشا؟

بتاريخ 23 ساعات قال بلال زيادة:

هل ممكن ترفق الكود الذي يحتوي على المشكلة.

حصل حاجة ي باشا؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 21 ساعات قال Mohammed Abu Yousef:

أتمنى أن تكون الفكرة التي أريد الوصول إليها واضحة،إن لم تكن كذلك قم بسؤالي فورا

ملاحظة / قمت بعمل مشروع بسيط حتى نقتصر على الفكرة التي أريدها فقط، وها هو:

https://github.com/MohammedAbuYousef0403/flutter

البرنامج لا يحتوي على إلا على واجهات فقط, يرجى وضع المشروع بصورة كاملة بإكواد الأتصال بbackend وكل شيء حتى أستطيع حل المشكلة.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 20 ساعات قال بلال زيادة:

البرنامج لا يحتوي على إلا على واجهات فقط, يرجى وضع المشروع بصورة كاملة بإكواد الأتصال بbackend وكل شيء حتى أستطيع حل المشكلة.

لا يلزم أخي، الآن عند فتح التطبيق، تظهر ال Splash Screen ، ثم هناك سطر في ال Splash Screen:

var isLogin = true;

حسب هذا المتغير، إما أن تظهر صفحة ال Home Screen وإما أن تظهر صفحة ال Login Screen ( بحيث لا يمكن إظهر صفحة ال Home Screen بتاتا )

الآن عندما يكون قيمة المتغير true ,وظهر للمستخدم بالفعل صفحة ال Home ثم من ال Drawer قام بعمل Logout تظهر صفحة Login لكن عندما يقوم المستخدم بالرجوع خطوة للوراء تظهر صفحة ال Home Screen وأنا لا أريد أن يحصل هذا.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

خلاص ي غالي، الحمد لله بعد رحلة من البحث، وجدت العمل ، وكان كالتالي:

ListTile(
  trailing: Icon(Icons.logout),
  title: Text('Logout'),
  onTap: () {
    Navigator.pushAndRemoveUntil(
    context,
    PageRouteBuilder(pageBuilder: (BuildContext context,
    Animation animation, Animation secondaryAnimation) {
    return LoginScreen();
    }, transitionsBuilder: (BuildContext context,
    Animation<double> animation,
      Animation<double> secondaryAnimation,
      Widget child) {
      return new SlideTransition(
      position: new Tween<Offset>(
      begin: const Offset(1.0, 0.0),
      end: Offset.zero,
      ).animate(animation),
      child: child,
      );
      }),
      (Route route) => false);
      },
),

مشكور يا غالي على الاهتمام

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...