• 0

تحميل بيانات api قبل البدء ببناء الواجهة في فلاتر

أريد أن أرسل معلومة من صفحة إلى صفحة أخرى ( طبعا المعلومة مرتبطة بأنها تذهب للإتيان ببعض البيانات من ال API )، عند الضغط على الزر الذي يحول إلى الصفحة الأخرى من أول مرة تكون القيمة null ثم عند الضغط مرة أخرى بيشتغل تمام.

هل من حل ( مثلا عند الضغط على الزر يظهر أيقونة loading عحتى تأتي البيانات من ال APi )

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1
بتاريخ 10 دقائق مضت قال Mohammed Abu Yousef:

أريد أن أرسل معلومة من صفحة إلى صفحة أخرى ( طبعا المعلومة مرتبطة بأنها تذهب للإتيان ببعض البيانات من ال API )، عند الضغط على الزر الذي يحول إلى الصفحة الأخرى من أول مرة تكون القيمة null ثم عند الضغط مرة أخرى بيشتغل تمام.

هل من حل ( مثلا عند الضغط على الزر يظهر أيقونة loading عحتى تأتي البيانات من ال APi )

يمكنك وضع دالة الاتصال و الاستعلام من api  في دالة initState 

@override
  void initState() {
    // ignore: todo
    // TODO: implement initState
    super.initState();
    getAsync();
  }

ليتم الاتصال ب api في اول عملية بناء الواجهة وهكذا تضمن عدم تخزين قيم فارغة في المتغيرات.

هناك طريقة ثانية وهي استخدام FutureBuilder بحيث تستخدم hasData التي توفرها FutureBuilder إذا كان هناك داتا أعرض الواجهة إذا لم يكن بيانات ضع shimmer لتلطيف عملية loading.

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


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

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

أرجو التأكد من وضع الكلمة المفتاحية await قبل استدعاء الدالة التي تتصل بالمخدم.

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


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

كل الدوال المتعلقة بال API تحتوي على ( async / await )

السؤال بصورة أخرى/ عند الضغط على الزر، قبل الانتقال إلى الصفحة التالية، تظهر أيقونة تحميل حتى تأتي البيانات ( null! ) ثم يقوم بعمل انتقال إلى الصفحة التالية.

تمّ تعديل بواسطة Mohammed Abu Yousef
1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
Consumer<Auth>(builder: (context, auth, child)
  
// data is a thing inside auth
  
// note: i use Provider

تمام، لكن البيانات التي أقوم بإرسالها ( كما يظهر في الكود ).

ف ما هي الدالة المناسبة لجلب شيء هكذا حتى أضعها في initState ؟

 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
بتاريخ 6 دقائق مضت قال Mohammed Abu Yousef:

Consumer<Auth>(builder: (context, auth, child)
  
// data is a thing inside auth
  
// note: i use Provider

تمام، لكن البيانات التي أقوم بإرسالها ( كما يظهر في الكود ).

ف ما هي الدالة المناسبة لجلب شيء هكذا حتى أضعها في initState ؟

 

انت تستخدم Provider يجب عليك هنا تشغيل الProvider عند إقلاع التطبيق حتى تستطيع جلبها من API  و من ثم تستخدمها في أي مكان بالتطبيق. حتى لا تسبب مشاكل بعد ذلك لك في أي مكان بالتطبيق.

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


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

مش فاهم، يعني أعمل ايه دلوقتي؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
بتاريخ الآن قال Mohammed Abu Yousef:

مش فاهم، يعني أعمل ايه دلوقتي؟

الي حتعمله انك تستدعي api الي بتخزن بياناته في Provider عند إقلاع التطبيق.

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


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

اعذرني، لكن برضه مش فاهم، ممكن كود للتوضيح

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
بتاريخ 5 دقائق مضت قال Mohammed Abu Yousef:

اعذرني، لكن برضه مش فاهم، ممكن كود للتوضيح

يمكنك في main.dart من استدعاء الدالة حتى تجلب البيانات وتخزنها في Provider  ومن ثم تستطيع جلبها عن طريق Consumer في أي مكان بالتطبيق. و ملف main هو بداية إقلاع التطبيق.

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


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

لا أعلم ماذا تقصد بتخزينها في provider

ممكن كود لكيفية تخزين شيء في ال provider

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
بتاريخ 9 دقائق مضت قال Mohammed Abu Yousef:

لا أعلم ماذا تقصد بتخزينها في provider

ممكن كود لكيفية تخزين شيء في ال provider

سأخبرك عن طريق الكود  

Future getAsync() async {
    var cartProvider = Provider.of<Cart>(context, listen: false);
    var auth = Provider.of<AuthProvider>(context, listen: false);
    cartProvider.fetchShippingDetails(auth.id);
}

@override
void initState() {
    // ignore: todo
    // TODO: implement initState
    super.initState();
    getAsync();
}

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


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

تمام جدا، متشكر، وصلت الفكرة

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 0
بتاريخ 1 دقيقة مضت قال Mohammed Abu Yousef:

تمام جدا، متشكر، وصلت الفكرة

العفو , يمكنك وضع أي سؤال هنا ويمكننا مساعدتك في حله بإذن الله .

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


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

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن