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

السؤال

نشر

تحيه طيبه للجميع

الدي استفسار لو تكرمتم 

هل توجد طريقة لتحكم ب Drawer من صفحة مختلفة ؟

على سبيل المثال انا واضع Drawer في صفحة ازار  Button Bar وهيا تحتوي على 4 صفحات يتم عرضهم في داخلها

الان انا ارغب بتحكم او فتح  Drawer من صفحة ال home  

هل يمكن فعل ذلك؟

طبعا حاولت اضع Drawer في صفحة home   ولكن تحدث مشكلة وهيا ان Drawer    يأتي تحت ازار  Button Bar لذلك الحل الوحيد لدي ان اضع Drawer في صفحة Button Bar ثم أقوم باستخدامه من خلال صفحة Home 

مثل الصورة التأليه:

 63652350-21999c80-c77f-11e9-9da6-56b47c36ed27.thumb.jpg.e4a07e4ba562842d6ffb5b077c29dc26.jpg

 

Recommended Posts

  • 1
نشر

يوجد طريقة من خلال GlobalKey أي تعيين مفتاح عام ل Scafold ومن ثم يمكنك التحكم به من خلال ذلك المفتاح وفتح Drawer 

final GlobalKey<ScaffoldState> _key = GlobalKey(); // انشاء مفتاح key

@override
Widget build(BuildContext context) {
  return Scaffold(
    key: _key, // اسناد المفتاح the key ل Scaffold.
    drawer: Drawer(),
    floatingActionButton: FloatingActionButton(
      onPressed: () => _key.currentState!.openDrawer(), // <-- فتح drawer
    ),
  );
}

يمكنك تمرير المفتاح لأي مكون و التحكم بفتح وإغلاق Drawer.

الطريقة الثانية من  خلال تمرير السياق context من خلال builder

@override
Widget build(BuildContext context) {
  return Scaffold(
    drawer: Drawer(),
    floatingActionButton: Builder(builder: (context) {
      return FloatingActionButton(
        onPressed: () => Scaffold.of(context).openDrawer(), // <-- فتح drawer.
      );
    }),
  );
}

الطريقة الثالثة هي عمل مكون Drawer عام (بالأصل هو عبارة عن حاوية Container) تكون قابلة للانزلاق، هذا المكون يرث من StatefulWidget

import 'package:flutter/widgets.dart';

class PublicDrawer extends StatefulWidget {
  PublicDrawer({Key key}) : super(key: key);

  @override
  _PublicDrawerState createState() => _PublicDrawerState();
}

class _PublicDrawerState extends State<PublicDrawer> {
  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Container();
  }
}

ثم في الصفحة الخاصة ب Home لديك نقوم باستدعائه وإسناده ل drawer من scaffold

import 'package:~~~~~~~/Widgets/drawer.dart';

class HomePage extends StatefulWidget {
  HomePage({Key key}) : super(key: key);

  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        drawer: PublicDrawer(), <----
        body: Container(),
      ),
    );
  }
}

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...