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

تحريك PageView في Flutter

Flutter Dev

السؤال

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

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

هل توجد طريقة لعمل Pageview  يتحرك بشكل دائري مستمر؟ بمعنى الان لو قمت بتحريكه سوف يذهب الى اخر صوره ومن ثم انا مجبور الرجوع للخلف ان ارغب ان اجعله يتحرك بشكل مستمر لما يوصل الى اخر صوره استطيع اكمل دائرتي تحركي والذهب الى الصورة الأولى حصلت على طريقة وهيا لما يكون في اخر صوره يعمل قفزة الى الصفحة الأولى ولكن الشكل ليس جيد لنه لا يتحرك بشكل دائري انما يعود للخلف مثل شريط الفيلم الذي يتم اعادته للخلف

 

هل توجد طريقة لتحريكه بشكل دائري بدون ان يصل الى حد نهائي؟

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

Recommended Posts

  • 1

أولاً جرب عدم تمرير itemCount له، إن لم تنجح..

يوجد مكتبة مخصصة لهذه الحركة: carousel_slider تأكد من تمرير enableInfiniteScroll: true للباني

 

يمكن تطبيق فكرة الدوران من خلال تمرير باقي القسمة لمكان دليل الصفحة المراد عرضها، وبذلك تصبح حلقة لانهائية (مثال) حيث أن باقي القسمة على 3  للمتغير i في حال أخذ هذا المتغير مجال من الاعداد سيكون دوري

for i 1:100

i % 3 => 0 1 2 0 1 2 0 1 2 0 1 2..

لذلك،

لمنع الانتقال يمكن عمل حل ذكي نسبياً وهو تكرار المصفوفة الأصلية بشكل معكوس (دمج قائمة الصفحات مع عكسها عدة مرات)

pages =   [1,2,3,4]
reverse = [3,2]  // بدون الأول لمنع التكرار

myList =  pages   + reverse 
       = 1 2 3 4     3 2 
       

final_list = myList + myList + myList ..

= 1 2 3 4 3 2 1 2 3 4 3 2 1 2 3 4 3 2 1 2 3 4 3 2 

مرر الدليل الحالي  على عدد الصفحات ل itemBuilder حيث أن الصفحات موضوعة ضمن مصفوفة باسم childern_ في المثال (final_list)

return PageView.builder(
  itemBuilder: (context, index) {
    return _children[index % _children.length];
  },
  controller: pageController,
);

الآن سوف يتم التمرير بشكل دائري.

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

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

نعم انا استعمل المكتبة التي قمت بالإشارة لها انت ولكن حقيقه الي فتره أحاول اقلل استعمال المكاتب والانتقال الى الأدوات التي تمنحها فلاتر لكثير من الأسباب أولها واهمها توقف المطورين فجاه عن تطوير المكتبة مما يجعلك مجبور على البحث عن حل مختلف 

تفكيرك سليم، كلما استعملنا أمور من صلب إطار العمل، سوف نضمن أنه سيتم تحديثه و أن يكون متوافق مع الإصدارات القادمة.

بشكل عام نستخدم المكتيات للسرعة في العمل واختصار الوقت، فإن كانت متاحة ومتوافقة نستخدمها، ونحاول حل المشكلات إن وجدت إما عن طريق بديل أو باختراع حل جديد

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

  • 0
بتاريخ 11 ساعات قال Wael Aljamal:

أولاً جرب عدم تمرير itemCount له، إن لم تنجح..

يوجد مكتبة مخصصة لهذه الحركة: carousel_slider تأكد من تمرير enableInfiniteScroll: true للباني

 

يمكن تطبيق فكرة الدوران من خلال تمرير باقي القسمة لمكان دليل الصفحة المراد عرضها، وبذلك تصبح حلقة لانهائية (مثال) حيث أن باقي القسمة على 3  للمتغير i في حال أخذ هذا المتغير مجال من الاعداد سيكون دوري


for i 1:100

i % 3 => 0 1 2 0 1 2 0 1 2 0 1 2..

لذلك،

لمنع الانتقال يمكن عمل حل ذكي نسبياً وهو تكرار المصفوفة الأصلية بشكل معكوس (دمج قائمة الصفحات مع عكسها عدة مرات)


pages =   [1,2,3,4]
reverse = [3,2]  // بدون الأول لمنع التكرار

myList =  pages   + reverse 
       = 1 2 3 4     3 2 
       

final_list = myList + myList + myList ..

= 1 2 3 4 3 2 1 2 3 4 3 2 1 2 3 4 3 2 1 2 3 4 3 2 

مرر الدليل الحالي  على عدد الصفحات ل itemBuilder حيث أن الصفحات موضوعة ضمن مصفوفة باسم childern_ في المثال (final_list)


return PageView.builder(
  itemBuilder: (context, index) {
    return _children[index % _children.length];
  },
  controller: pageController,
);

الآن سوف يتم التمرير بشكل دائري.

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

نعم انا استعمل المكتبة التي قمت بالإشارة لها انت ولكن حقيقه الي فتره أحاول اقلل استعمال المكاتب والانتقال الى الأدوات التي تمنحها فلاتر لكثير من الأسباب أولها واهمها توقف المطورين فجاه عن تطوير المكتبة مما يجعلك مجبور على البحث عن حل مختلف 

والنقطة الثانية المكاتب اغلب الأوقات لا تتوافق مع إصدارات فلاتر الحديثة فتره من الزمن حتى يقوم المطور بتحديثها + تحتاج تحديثات وتغيرات بشكل مستمر ما يشكل مشكله مع الانتقال من اصدار فلاتر قديم الى اصدار احدث وهيا عدم التوافق

 

حقيقه لا اعلم اذا كان تفكيري صحيح وانتم اهل الخبرة في هذا الامر ياليت تبدي رايك على هذا النقاط 

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...