Flutter Dev نشر 10 أغسطس 2022 أرسل تقرير نشر 10 أغسطس 2022 تحيه طيبه للجميع كنت أقوم بعملية تطبيق تقسيم القائمة Lazy Loading ولكن واجهتني مشكلة لم اجد حل لها لو قمت بتشغيل التطبيق سيقوم التطبيق بتحميل الصفحة الأولى حسب العدد الذي قمت بتحديده مسبقا من خلال Lazy Loading وليكن 15 مستخدم او 15 اسم ولكن لو حاولت الانتقال الى الجزء التالي من القائمة وهيا ال 15 التالي سوف احصل على الخطاء التالي: type 'int' is not a subtype of type 'String' قمت بمحاولة وضع toString كالتالي: ListTile(title: Text((users[index]['name'].toString()))) ; ولكن المشكلة في هذا الحالة يتم تحميل القائمة كاملة ولا يتم تقسيمها بمعنى خاصية Lazy Loading لا تعمل في هذا الحالة الكود المستعمل كالتالي: class HomeState extends State<Home> { static int page = 0; ScrollController _sc = new ScrollController(); bool isLoading = false; List users = []; @override void initState() { this._getMoreData(); super.initState(); _sc.addListener(() { if (_sc.position.pixels == _sc.position.maxScrollExtent) { _getMoreData(); } }); } @override void dispose() { _sc.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: const Text("Lazy Load Large List"), ), body: Container( child: _buildList(), ), resizeToAvoidBottomInset: false, ), ); } Widget _buildList() { return ListView.builder( itemCount: users.length + 1, padding: EdgeInsets.symmetric(vertical: 8.0), itemBuilder: (BuildContext context, int index) { if (index == users.length) { return _buildProgressIndicator(); } else { return ListTile(title: Text((users[index]['name']))) ; } }, controller: _sc, ); } final int _limit = 15; Future _getMoreData() async { if (!isLoading) { setState(() { isLoading = true; }); final String url = "*********************.php?=" + "&results=$_limit"; final response = await http.get(Uri.parse(url)); print(url); List tList = []; var responsebody = jsonDecode(response.body); for (int i = 0; i < responsebody.length; i++) { tList.add(responsebody[i]); print(tList); } setState(() { isLoading = false; users.addAll(tList); page++; }); } } Widget _buildProgressIndicator() { return new Padding( padding: const EdgeInsets.all(8.0), child: new Center( child: new Opacity( opacity: isLoading ? 1.0 : 00, child: new CircularProgressIndicator(), ), ), ); } } هل يوجد حل لهذا المشكلة ؟ اقتباس
1 Wael Aljamal نشر 10 أغسطس 2022 أرسل تقرير نشر 10 أغسطس 2022 إن Text widget تقبل معامل القيمة من نوع ?String حاول طباعة: print(users) print(users[index]['name']) على الأغلب المشكلة في index 1 اقتباس
0 Flutter Dev نشر 10 أغسطس 2022 الكاتب أرسل تقرير نشر 10 أغسطس 2022 (معدل) بتاريخ منذ ساعة مضت قال Wael Aljamal: إن Text widget تقبل معامل القيمة من نوع ?String حاول طباعة: print(users) print(users[index]['name']) على الأغلب المشكلة في index اهلا اخي الكريم في الحقيقة انا لم اكن مخطي في العمل ولكن لم اكتشف ذلك الا بعد مجهود يوم كامل ساقوم بشرح المشكلة للفائدة المشكلة كالتالي: لدي عمود يحتوي على كل من الاسم نص + ارقام لو عملت الكود بشكل أعلاه بدون إضافة تحويل الى نص او tostring سيعمل اول صفحة ثم يتوقف مع الصفحة الثانية بسب وجود الأرقام مع النصوص ولو قمت بإضافة tostring احصل على القائمة كامل بدون استقطاع كنت أتوقع ان هذا الامر خطاء ولكن في الحقيقة هو صحيح فقد كان يجلب النصوص + الارقام وهذا الامر صحيح من خلال السطر التالي: ListTile(title: Text((users[index]['name'].toString()))) ; السطر هذا صحيح الان ولكن المشكلة المتبقية في السطر التالي: final String url = "*********************.php?=" + "&results=$_limit"; السطر هذا يحتوي على URL بالإضافة الى limit وهو الذي نستطيع من خلاله تحديد كمية الاقتصاص المشكلة تكمن هنا في الكلمة "&results= اذا لم تكن الكلمة صحيحه لا يتم الاقتصاص الان اخي اذا كانت لديك فكرة من اين استطيع الحصول على هذا الكلمة او من اين اتي بها هذا المشكلة التي لم استطيع حلها حتى الان انا اجلب البيانات من خلال ملف php التالي لا اعلم اذا كان من المفترض ان تكون من خلاله <?php include 'con.php'; $sql = "SELECT name FROM User ORDER BY id DESC"; $stmt = $con->prepare($sql); $stmt->execute(); $result = $stmt->get_result(); $json = []; if ($result) { while ($row = $result->fetch_assoc()) { $json[] = $row; } } echo json_encode($json, JSON_NUMERIC_CHECK); ?> تم التعديل في 10 أغسطس 2022 بواسطة مروان مروان3 اقتباس
1 Wael Aljamal نشر 10 أغسطس 2022 أرسل تقرير نشر 10 أغسطس 2022 بتاريخ منذ ساعة مضت قال مروان مروان3: لسطر هذا يحتوي على URL بالإضافة الى limit وهو الذي نستطيع من خلاله تحديد كمية الاقتصاص المشكلة تكمن هنا في الكلمة "&results= اذا لم تكن الكلمة صحيحه لا يتم الاقتصاص علامة & غير ضرورية لأنها توضع بين ثنائيتين مختلفتين. x=1&y=2 أما في حالتك لديك مفتاح وحيد حتى = بعد اشارة الاستفهام غير ضرورية x=1? 1 اقتباس
0 Flutter Dev نشر 11 أغسطس 2022 الكاتب أرسل تقرير نشر 11 أغسطس 2022 بتاريخ 7 ساعات قال Wael Aljamal: علامة & غير ضرورية لأنها توضع بين ثنائيتين مختلفتين. x=1&y=2 أما في حالتك لديك مفتاح وحيد حتى = بعد اشارة الاستفهام غير ضرورية x=1? مرحب اخي الكريم المشكلة ليست في العلامات انا عامل تطبيق على اكثر من نموذج مع اختلاف شكل url كامل ولكن الجميع الكلامه المفتاحيه لتحديد السلسله غلط لدي احتاج اعرف كيف يمكنني تحديد هذا keyword اقتباس
1 Wael Aljamal نشر 11 أغسطس 2022 أرسل تقرير نشر 11 أغسطس 2022 بتاريخ 4 ساعات قال مروان مروان3: مرحب اخي الكريم المشكلة ليست في العلامات انا عامل تطبيق على اكثر من نموذج مع اختلاف شكل url كامل ولكن الجميع الكلامه المفتاحيه لتحديد السلسله غلط لدي احتاج اعرف كيف يمكنني تحديد هذا keyword أي تفصد قراءة قيمة _limit ؟ تتعلق قيمتها بالمفتاح results ونجلبه في PHP حسب نوع الطلب ولديك http.get <?php $limit = $_GET['results']; include 'con.php'; .. اكتب url final String url = "*********************.php?results=$_limit"; 1 اقتباس
0 Flutter Dev نشر 11 أغسطس 2022 الكاتب أرسل تقرير نشر 11 أغسطس 2022 بتاريخ 6 ساعات قال Wael Aljamal: أي تفصد قراءة قيمة _limit ؟ تتعلق قيمتها بالمفتاح results ونجلبه في PHP حسب نوع الطلب ولديك http.get <?php $limit = $_GET['results']; include 'con.php'; .. اكتب url final String url = "*********************.php?results=$_limit"; اهلا اخي الكريم نعم الان فهمت الامر وكلامك صحيح 100% انا لم اكن اعلم بوجود القواعد الثابتة limit and offset هذا اول مره اتعامل معهم لذلك كنت تائه اعتذر على ذلك كل الشكر لك اخوي اقتباس
السؤال
Flutter Dev
تحيه طيبه للجميع
كنت أقوم بعملية تطبيق تقسيم القائمة Lazy Loading ولكن واجهتني مشكلة لم اجد حل لها
لو قمت بتشغيل التطبيق سيقوم التطبيق بتحميل الصفحة الأولى حسب العدد الذي قمت بتحديده مسبقا من خلال Lazy Loading وليكن 15 مستخدم او 15 اسم
ولكن لو حاولت الانتقال الى الجزء التالي من القائمة وهيا ال 15 التالي سوف احصل على الخطاء التالي:
type 'int' is not a subtype of type 'String'
قمت بمحاولة وضع toString كالتالي:
ListTile(title: Text((users[index]['name'].toString()))) ;
ولكن المشكلة في هذا الحالة يتم تحميل القائمة كاملة ولا يتم تقسيمها بمعنى خاصية Lazy Loading لا تعمل في هذا الحالة
الكود المستعمل كالتالي:
هل يوجد حل لهذا المشكلة ؟
6 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.