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

استفسار حول ListView.builder في flutter

Flutter Dev

السؤال

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

استخدم ListView.builder لعرض مجموعة من القوائم التي احصل عليها من قاعدة البيانات 

لدي سؤال حول ListView.builder / لو صار عدد المنتجات في قاعدة بياناتي يتجاوز 1000 منتج او 10000 منتج هل ListView.builder قادرة على تحميل هذا البيانات بكل كفاه بشكل الطبيعي ؟ ام انا محتاج الى فعل امر ما؟

هل سيتوقف التطبيق او يعمل كراش لو قمت بفتح صفحة يتم عرض ListView.builder فيها مع عدد منتجات كبير يتجاوز ال 1000 منتج ؟

 

شكرا للجميع

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

Recommended Posts

  • 1

نعم ، Listview.builder في الفلاتر معمولة من أجل البيانات الكبيرة فهي تعمل على مبدأ العرض المناسب في كل مرة ، معناه أنو مثلا عملت إستعلام للبيانات حجمها 10000 أو أكثر فهنا Listview.builder تقوم ببناء عرض البيانات 50 الأولى لما المستخدم يعمل scroll مثلا أو اي event تختفي 50 البيانات الأولى ويتم بناء 50 البيانات الثانية وهكذا ..

الفرق الرئيسي بين ListView و ListView.builder

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

بينما

سيقوم مُنشئ ListView.Builder بإنشاء عناصر أثناء تمريرها على الشاشة مثل عند الطلب. هذه هي أفضل ممارسة لتطوير عنصر واجهة مستخدم القائمة حيث لن يتم عرض العناصر إلا عند ظهور العناصر على الشاشة.

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

  • 1

للتعامل مع كمية كبيرة من البيانات لا يمكن تحميلها دفعة واحدة من قاعدة البيانات لأن ذلك يتسبب بمشكلة في الأداء على طرف الواجهة الخلفية backend وكذلك أستهلاك الواجهة الأمامية frontend  للذاكرة وربما حصول crash. لحل هذه المشكلة تستطيع إستعمال مفهوم pagination أي تقسيم البيانات الى أجزاء محسوبة في الbackend يمكن إسقاطها الى صفحات في frontend تعرض جزء معين في كل مرة يغير فيها المستخدم رقم الصفحة وتتم البرمجة لهذه الخاصية في كلا الواجهتين لتعمل بتناغم.

يمكنك أيضاً إستعمال شيء مشابه يدعى lazy loading وهي خاصية من النوع asynchronous أي لا تزامنية تتم عن طريق ajax وهي شائعة الإستخدام في تطبيقات الموبايل يتم فيها التحميل المزيد من البيانات في كل مرة يضغط في المستخدم مثلاً على جملة تحميل المزيد أو ماشابه. هذا الكلام ينطبق على تطبيقات flutter مثل غيره ويمكنك البحث على google عن كيفية تنفيذ أي من الطريقتين أعلاه.

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

  • 1
بتاريخ 1 دقيقة مضت قال مروان مروان3:

اهلا بك اخي الكريم

شاكر لك ردك عزيزي

طيب اخوي هذا بالنسبة اذا كانت البيانات تأتي من خلال api 

ولكن لو كانت من خلال SharedPreferences على سبيل المثال هل يتم معاملتها أيضا مثل بيانات api?

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

 

 

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

  • 1
بتاريخ 3 دقائق مضت قال مروان مروان3:

اهلا بك اخي الكريم

شاكر لك ردك عزيزي

طيب اخوي هذا بالنسبة اذا كانت البيانات تأتي من خلال api 

ولكن لو كانت من خلال SharedPreferences على سبيل المثال هل يتم معاملتها أيضا مثل بيانات api?

 

بتاريخ الآن قال علي محسن:

الdoc يخبرك أن ListView.builder  يقوم بعرض البيانات تباعاً أثناء ما يعمل المستخدم scroll وهذا ما يناسبك في حال أردت تجربة مستخدم متميزة وبدون مشاكل. عكس إستخدام ListView التي تعرض جميع البيانات المحملة جملة واحدة عندما يحصل render. 

 

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

  • 0
بتاريخ 2 دقائق مضت قال علي محسن:

للتعامل مع كمية كبيرة من البيانات لا يمكن يحميلها دفعة واحدة من قاعدة البيانات لأن ذلك يتسبب بمشكلة في الأداء على طرف الواجهة الخلفية backend وكذلك أستهلاك الواجهة الأمامية frontend  للذاكرة وربما حصول crash. لحل هذه المشكلة تستطيع إستعمال مفهوم pagination أي تقسيم البيانات الى أجزاء محسوبة في الbackend يمكن إسقاطها الى صفحات في frontend تعرض جزء معين في كل مرة يغير فيها المستخدم رقم الصفحة وتتم البرمجة لهذه الخاصية في كلا الواجهتين لتعمل بتناغم.

يمكنك أيضاً إستعمال شيء مشابه يدعى lazy loading وهي خاصية من النوع asynchronous أي لا تزامنية تتم عن طريق ajax وهي شائعة الإستخدام في تطبيقات الموبايل يتم فيها التحميل المزيد من البيانات في كل مرة يضغط في المستخدم مثلاً على جملة تحميل المزيد أو ماشابه. هذا الكلام ينطبق على تطبيقات flutter مثل غيره ويمكنك البحث على google عن كيفية تنفيذ أي من الطريقتين أعلاه.

اهلا اخي الكريم

اشكرك على افادتك اول شيء 

حقيقه انا كنت ارغب باستعمال التحميل المتقطع ولكن مريت على هذا الصفحة ثم قريت ان listview.builder  لا تقوم بتحميل البيانات دفعة واحدة حتى لو كانت القائمة تحتوي على 10 الألاف منتج

 

ياليت لو لديك وقت تمر على هذا الرابط قد أكون انا فهمت الامر بشكل خاطئ

https://docs.flutter.dev/cookbook/lists/long-lists

 

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

  • 0
بتاريخ 1 دقيقة مضت قال Ahmed Sadek:

نعم ، Listview.builder في الفلاتر معمولة من أجل البيانات الكبيرة فهي تعمل على مبدأ العرض المناسب في كل مرة ، معناه أنو مثلا عملت إستعلام للبيانات حجمها 10000 أو أكثر فهنا Listview.builder تقوم ببناء عرض البيانات 50 الأولى لما المستخدم يعمل scroll مثلا أو اي event تختفي 50 البيانات الأولى ويتم بناء 50 البيانات الثانية وهكذا ..

الفرق الرئيسي بين ListView و ListView.builder

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

بينما

سيقوم مُنشئ ListView.Builder بإنشاء عناصر أثناء تمريرها على الشاشة مثل عند الطلب. هذه هي أفضل ممارسة لتطوير عنصر واجهة مستخدم القائمة حيث لن يتم عرض العناصر إلا عند ظهور العناصر على الشاشة.

اهلا بك اخي الكريم

شاكر لك ردك عزيزي

طيب اخوي هذا بالنسبة اذا كانت البيانات تأتي من خلال api 

ولكن لو كانت من خلال SharedPreferences على سبيل المثال هل يتم معاملتها أيضا مثل بيانات api?

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

  • 0
بتاريخ 2 دقائق مضت قال Ahmed Sadek:

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

 

 

كل الشكر لك اخي الكريم 

اذن لا توجد مشكلة لو لم استعمل نظام lazy loading  ؟

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...