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

السؤال

نشر

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

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

Recommended Posts

  • 0
نشر

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

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

  • 0
نشر (معدل)

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

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

تم التعديل في بواسطة Mohammed Abu Yousef
  • 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
نشر
بتاريخ 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
نشر
بتاريخ 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();
}

 

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...