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

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

Mohammed Abu Yousef

السؤال

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

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

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

Recommended Posts

  • 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.

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

  • 0

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

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

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

  • 0

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

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

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

  • 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  و من ثم تستخدمها في أي مكان بالتطبيق. حتى لا تسبب مشاكل بعد ذلك لك في أي مكان بالتطبيق.

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

  • 0
بتاريخ الآن قال Mohammed Abu Yousef:

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

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

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

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

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

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

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

  • 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();
}

 

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

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

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

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

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...