'How to use indexwhere

class SearchBar extends SearchDelegate {
  final TumUrunlerDeneme _tumUrunlerDeneme = TumUrunlerDeneme();

  @override
  List<Widget> buildActions(BuildContext context) {
    return [
      IconButton(
          onPressed: () {
            query = '';
          },
          icon: const Icon(Icons.close))
    ];
  }

  @override
  Widget buildLeading(BuildContext context) {
    return IconButton(
      icon: const Icon(Icons.arrow_back_ios),
      onPressed: () {
        Navigator.pop(context);
      },
    );
  }

  @override
  Widget buildResults(BuildContext context) {
    return FutureBuilder<List<Products>>(
        future: _tumUrunlerDeneme.getuserList(query: query),
        builder: (context, snapshot) {
         if (!snapshot.hasData) {
           return const Center(
             child: CircularProgressIndicator(),
           );
         }
          List<Products> ?data = snapshot.data;
         return ListView.builder(
              shrinkWrap: true,
              //physics: const NeverScrollableScrollPhysics(),
              itemCount: data!.length,
              itemBuilder: (context, index) {
                return Column(
                  children: [
                    Flex(
                      direction: Axis.vertical,
                      children:[ SingleChildScrollView(
                        scrollDirection: Axis.vertical,
                        child: GestureDetector(
                          onTap: () {
                            Get.toNamed(RouteHelper.getAllProduct(index));
                          },
                          child: Container(
                              margin: EdgeInsets.only(
                                  left: Dimensions.width20,
                                  right: Dimensions.width10,
                                  bottom: Dimensions.height15),
                              child: Row(
                                children: [
                                  //image section
                                  Container(
                                    width: Dimensions.listViewImgSize,
                                    height: Dimensions.listViewImgSize,
                                    decoration: BoxDecoration(
                                        borderRadius: BorderRadius.circular(
                                            Dimensions.radius20),
                                        color: Colors.white38,
                                        image: DecorationImage(
                                            fit: BoxFit.cover,
                                            image: CachedNetworkImageProvider(
                                                AppConstans.BASE_URL +
                                                    AppConstans.UPLOAD_URL +
                                                    data[index]
                                                        .img!))),
                                  ),
                                  //text section
                                  Expanded(
                                    child: Container(
                                      height: Dimensions.listViewTextContSize,
                                      decoration: BoxDecoration(
                                          borderRadius: BorderRadius.only(
                                              topRight: Radius.circular(
                                                  Dimensions.radius20),
                                              bottomRight: Radius.circular(
                                                  Dimensions.radius20)),
                                          color: Colors.white),
                                      child: Padding(
                                        padding: EdgeInsets.only(
                                            left: Dimensions.width10,
                                            right: Dimensions.width10),
                                        child: Column(
                                          crossAxisAlignment:
                                          CrossAxisAlignment.start,
                                          mainAxisAlignment:
                                          MainAxisAlignment.center,
                                          children: [
                                            BigText(
                                              text: data[index].name!,
                                            ),
                                            SizedBox(
                                              height: Dimensions.height10,
                                            ),
                                            ExpandableProductText(
                                                text: data[index]
                                                    .description!),
                                            SizedBox(
                                              height: Dimensions.height10,
                                            ),
                                          ],
                                        ),
                                      ),
                                    ),
                                  )
                                ],
                              )),
                        ),
                      ),
                    ]),
                  ],
                );
              });

        });
  }

  @override
  Widget buildSuggestions(BuildContext context) {
    return const Center(
      child: Text('Ürün Arama'),
    );
  }
}

Here is detail page :

 class AllProductDetail extends StatelessWidget {
  final int pageId;
  const AllProductDetail({Key? key, required this.pageId}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    var product = Get.find<TumUrunlerController>().tumUrunlerList[pageId];
    return Scaffold(
      backgroundColor: Colors.white,
      body: CustomScrollView(
        slivers: [
          SliverAppBar(
            automaticallyImplyLeading: false,
            toolbarHeight: 70,
            title: Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children:  [
                GestureDetector(onTap: (){
                  Navigator.of(context).pop(context);
                }
                  ,child: const AppIcon(icon: Icons.arrow_back_ios),
                ),

              ],
            ),
            bottom: PreferredSize(
              preferredSize: const Size.fromHeight(20),
              child: Container(
                child: Center(
                    child: BigText(
                      text: product.name!,
                      size: Dimensions.font20,
                    )),
                width: double.maxFinite,
                padding: const EdgeInsets.only(top: 0, bottom: 0),
                decoration: BoxDecoration(
                    color: Colors.white,
                    borderRadius: BorderRadius.only(
                        topLeft: Radius.circular(Dimensions.radius20),
                        topRight: Radius.circular(Dimensions.radius20))),
              ),
            ),
            backgroundColor: Colors.white,
            pinned: true,
            expandedHeight: Dimensions.imgsize,
            flexibleSpace: FlexibleSpaceBar(
              background: Image.network(
                AppConstans.BASE_URL+AppConstans.UPLOAD_URL+product.img!,
                width: double.maxFinite,
                fit: BoxFit.fitWidth,
              ),
            ),
          ),
          SliverToBoxAdapter(
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Container(
                  child:  ExpandableText(
                      text: product.description!
                  ),
                  margin: EdgeInsets.only(
                      left: Dimensions.width20, right: Dimensions.width20),
                ),
              ],
            ),
          )
        ],
      ),
    );
  }
}

here is Controller page:

class TumUrunlerDeneme {
  late var data = [];
  List<Products> results= [];
  String urlList = 'http://mzpdata.com/api/v1/products/allproduct';

  Future<List<Products>> getuserList({String? query}) async {
    var url = Uri.parse("http://mzpdata.com/api/v1/products/allproduct");
    print("got TumUrunlerDeneme 1");
    try {
      http.Response response = await http.get(url);
      if (response.statusCode == 200) {
        print("got TumUrunlerDeneme 2");
        data = json.decode(response.body)['products'];
        print("got TumUrunlerDeneme 3");
        results = data.map((e) => Products.fromJson(e)).toList();
        print("got TumUrunlerDeneme 4");
        if (query != null) {
           results = results
              .where((element) =>
                  element.name!.toLowerCase().contains((query.toLowerCase())))
              .toList();
          print("got TumUrunlerDeneme 5");
        }
      } else {
        print("fetch error");
      }
    } on Exception catch (e) {
      print('error: $e');
    }
    return results;
  }
}

No matter what I search for, the detail opens according to the product order in the whole list. When I click on the product I am looking for, I reach the details of another product. How can I search for the product I want and find the details of the product I am looking for? I appreciate your help.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source