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

السؤال

نشر

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

استعمل كلاس البحث من فلاتر SearchDelegate واقوم بجلب البيانات الى هذا الكلاس من خلال الدالة التأليه:

  var listsearch=[];
 
  Future getdata() async {
    apiURL = 'https://**********************}';
    var response = await http.post(Uri.parse(apiURL));

    var responsebody=jsonDecode(response.body);
    for (int i=0 ; i < responsebody.length ; i++){
      listsearch.add(responsebody[i]['name']);
    
    }

    print(listsearch) ;

  }

مشكلتي الان انني فقط استطيع تمرير قيمة name من خلال القائمة 

  listsearch.add(responsebody[i]['name']);

ثم انقل هذا ليسته الى كلاس SearchDelegate ولكني احتاج أيضا الى تمرير id  كيف ممكن أقوم بتمرير قيمتين الى كلاس البحث ؟ هل يملك احد فكره لفعل ذلك؟ أيضا في كلاس SearchDelegate

class DataSerch extends SearchDelegate<String> {
  List<dynamic>list;

  DataSerch({this.list});

  @override
  List<Widget> buildActions(BuildContext context) {
    return [IconButton(icon: Icon(Icons.clear), onPressed: () {

query='';
    })
    ];
  }

  @override
  Widget buildLeading(BuildContext context) {
    return IconButton(

        icon: Icon(Icons.arrow_back),


        onPressed: () {
          close(context, null);
        });
  }

  @override
  Widget buildResults(BuildContext context) {
    return Text(query);
  }

  @override
  Widget buildSuggestions(BuildContext context) {
    var seachlist=query.isEmpty?list :list.where((p) => p.startsWith(query)).toList();
    return ListView.builder(itemCount: seachlist.length, itemBuilder: (context, i) {
      return ListTile(leading: Icon(Icons.memory),title: Text(seachlist[i]),
      onTap: (){
        
        query=seachlist[i];
        showResults(context);
      },


      );
    });
  }
}

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

Recommended Posts

  • 0
نشر
بتاريخ الآن قال بلال زيادة:

هل تقصد تمرير القيمة id , name الى نفس list كما يلي ؟ 


  listsearch.add(responsebody[i]['id']);
  listsearch.add(responsebody[i]['name']);

 

مرحبا اخي الكريم نعم انا ارغب بتمرير قيمة الـ id  بجانب الاسم ولكني قمت بتجريب هذا الطريقة الذي اشرت اليها انت والمشكلة كانت ان القائمة تظهر الاسماء وال id  في كلاس SearchDelegate 

  • 1
نشر
بتاريخ 17 ساعات قال مروان مروان3:

مرحبا اخي الكريم نعم انا ارغب بتمرير قيمة الـ id  بجانب الاسم ولكني قمت بتجريب هذا الطريقة الذي اشرت اليها انت والمشكلة كانت ان القائمة تظهر الاسماء وال id  في كلاس SearchDelegate 

ما رأيك أن نلصق ال id باسم المستخدم، أي سنعمل String من الاسم ثم الرقم مع وجود فاصل بينهم مثلاً (:)

for (int i=0 ; i < responsebody.length ; i++){
  listsearch.add(responsebody[i]['name'] + ':' + responsebody[i]['id']);

}

هذه ستنفع لأن البحث يتم عن طريق startsWith أي من اليسار لليمين،

يمكنك لاحقاً اقتصاص id من خلال البحث عن ":" ثم الاحتفاظ بالجزء الأول للاسم و الثاني للرقم

//s هي النص name + : + id

String name = s.substring(0, s.indexOf(':'));

String id =  s.substring(s.indexOf(':') + 1);  

او
// int id = int.parse(s.substring(s.indexOf(':') + 1));

 

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...