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

كيفية تمرير اكثر من قيمة واحده ل SearchDelegate في flutter

Flutter Dev

السؤال

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

استعمل كلاس البحث من فلاتر 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

  • 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));

 

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

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

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


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

 

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

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...