Grivdview 搜索无法正常工作 [英] Grivdview search not working properly flutter

查看:19
本文介绍了Grivdview 搜索无法正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个gridview,我已经实现了搜索,搜索工作正常,但是搜索项的查看显示不正确,

I have a gridview,i have implemented search,search is working fine,but the viewing of search item is not shows properly,

搜索前

这是我的网格视图在搜索项目后的显示方式

This how my gridview show after searching a item

代码

SliverGrid(
          gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
              maxCrossAxisExtent: 200,
              childAspectRatio: 6 / 5,
              // crossAxisCount: 2,
              crossAxisSpacing: 0,
              mainAxisSpacing: 0),
          delegate: SliverChildBuilderDelegate(
            (BuildContext context, int index) {
              SubCategoryModel data = sub_category_model[index];
              if (searchController.text.isEmpty) {
                return GestureDetector(
                  child: Card(
                    elevation: 2,
                    shape: RoundedRectangleBorder(
                      borderRadius: BorderRadius.circular(6),
                    ),
                    child: Column(
                      crossAxisAlignment: CrossAxisAlignment.center,
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: [
                        Expanded(
                            flex: 0,
                            child: Container(
                              width: 100,
                              height: 100.0,
                              child: ClipRRect(
                                borderRadius: BorderRadius.circular(10.0),
                                child: CachedNetworkImage(
                                  fit: BoxFit.fill,
                                  imageUrl: Urls.BASE_IMAGE_URL +
                                      data.image.toString(),
                                  placeholder: (context, url) => Center(
                                      child: CircularProgressIndicator()),
                                  errorWidget: (context, url, error) =>
                                      Icon(Icons.error),
                                ),
                              ),
                            )),
                        Expanded(
                          flex: 0,
                          child: Padding(
                            padding: const EdgeInsets.symmetric(
                                horizontal: 10, vertical: 10),
                            child: Text(
                              data.name,
                              style: TextStyle(
                                  color: Colors.black,
                                  fontWeight: FontWeight.bold,
                                  fontSize: 13),
                            ),
                          ),
                        )
                      ],
                    ),
                  ),
                  onTap: () {
                                        Navigator.push(
                        context,
                        MaterialPageRoute(
                          builder: (context) => OnlinecartSubitems(data.id.toString(),Category_Name),
                        ),
                      );
                  },
                );
              } else if (data.name.contains(searchController.text) ||
                  data.name.toLowerCase().contains(searchController.text) ||
                  data.name.toUpperCase().contains(searchController.text)) {
                return GestureDetector(
                  child: Card(
                    elevation: 2,
                    shape: RoundedRectangleBorder(
                      borderRadius: BorderRadius.circular(6),
                    ),
                    child: Column(
                      crossAxisAlignment: CrossAxisAlignment.center,
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: [
                        Expanded(
                            flex: 0,
                            child: Container(
                              width: 100,
                              height: 100.0,
                              child: ClipRRect(
                                borderRadius: BorderRadius.circular(10.0),
                                child: CachedNetworkImage(
                                  fit: BoxFit.fill,
                                  imageUrl: Urls.BASE_IMAGE_URL +
                                      data.image.toString(),
                                  placeholder: (context, url) => Center(
                                      child: CircularProgressIndicator()),
                                  errorWidget: (context, url, error) =>
                                      Icon(Icons.error),
                                ),
                              ),
                            )),
                        Expanded(
                          flex: 0,
                          child: Padding(
                            padding: const EdgeInsets.symmetric(
                                horizontal: 10, vertical: 10),
                            child: Text(
                              data.name,
                              style: TextStyle(
                                  color: Colors.black,
                                  fontWeight: FontWeight.bold,
                                  fontSize: 13),
                            ),
                          ),
                        )
                      ],
                    ),
                  ),
                  onTap: () {
               
                      Navigator.push(
                        context,
                        MaterialPageRoute(
                          builder: (context) => OnlinecartSubitems(data.id.toString(),Category_Name),
                        ),
                      );
                  },
                );
              } else {
                return Container();
              }
            },
            childCount: sub_category_model.length,
          ),
        )

推荐答案

我已经在 Benedict 和 Farhan Syah 的帮助下解决了这个问题,感谢您的想法和一些代码

I have fixed the issue with help of Benedict and Farhan Syah thanks for the idea and some codes

初始化变量

//Search controller for textfield

TextEditingController searchController = TextEditingController();

//For show list data first

List<SubCategoryModel> sub_category_model = [];

//for searchresult list 

List<SubCategoryModel> _searchResult = [];

查看

_searchResult.length != 0 ||searchController.text.isNotEmpty?SliverGrid(
                    gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent(
                        maxCrossAxisExtent: 200,
                        childAspectRatio: 6 / 5,
                        // crossAxisCount: 2,
                        crossAxisSpacing: 0,
                        mainAxisSpacing: 0),
                    delegate: SliverChildBuilderDelegate(
                      (BuildContext context, int index) {
                        SubCategoryModel data = _searchResult[index];

                        return GestureDetector(
                          child: Card(
                            elevation: 2,
                            shape: RoundedRectangleBorder(
                              borderRadius: BorderRadius.circular(6),
                            ),
                            child: Column(
                              crossAxisAlignment: CrossAxisAlignment.center,
                              mainAxisAlignment: MainAxisAlignment.center,
                              children: [
                                Expanded(
                                    flex: 0,
                                    child: Container(
                                      width: 100,
                                      height: 100.0,
                                      child: ClipRRect(
                                        borderRadius:
                                            BorderRadius.circular(10.0),
                                        child: CachedNetworkImage(
                                          fit: BoxFit.fill,
                                          imageUrl: Urls.BASE_IMAGE_URL +
                                              data.image.toString(),
                                          placeholder: (context, url) => Center(
                                              child:
                                                  CircularProgressIndicator()),
                                          errorWidget: (context, url, error) =>
                                              Icon(Icons.error),
                                        ),
                                      ),
                                    )),
                                Expanded(
                                  flex: 0,
                                  child: Padding(
                                    padding: const EdgeInsets.symmetric(
                                        horizontal: 10, vertical: 10),
                                    child: Text(
                                      data.name,
                                      style: TextStyle(
                                          color: Colors.black,
                                          fontWeight: FontWeight.bold,
                                          fontSize: 13),
                                    ),
                                  ),
                                )
                              ],
                            ),
                          ),
                          onTap: () {
                        
                          },
                        );
                      },
                      childCount: _searchResult.length,
                    ),
                  ):SliverGrid(//use same code above with **sub_category_model.length**)

搜索小部件

  Widget _SearchText() {
    return Container(
      width: 360,
      height: 65,
      color: Colors.transparent,
      child: new Padding(
        padding: const EdgeInsets.only(top: 10, left: 10, right: 10),
        child: new Card(
          elevation: 8,
          child: TextField(
            decoration: new InputDecoration(
                filled: true,
                hintStyle: TextStyle(fontSize: 11.5),
                hintText: 'Search by Name',
                suffixIcon: GestureDetector(
                    onTap: () {
                      FocusScope.of(context).unfocus();
                      searchController.clear();
                      _searchResult.clear();
                    },
                    child: Icon(Icons.cancel_rounded,
                        color: Color.fromRGBO(34, 83, 148, 1))),
                prefixIcon:
                    Icon(Icons.search, color: Color.fromRGBO(34, 83, 148, 1)),
                border: InputBorder.none),
            onChanged: onSearchTextChanged,
            controller: searchController,
          ),
        ),
      ),
    );
  }

更改列表搜索功能

onSearchTextChanged(String text) async {
    //clear search data before typing
    _searchResult.clear();
    if (text.isEmpty) {
      setState(() {});
      return;
    }
    //use searchcontroller text and loop through list of api data and add the result to _searchResult

    sub_category_model.forEach((searchValue) {
      if (searchValue.name.toLowerCase().contains(text))
        _searchResult.add(searchValue);
    });

    setState(() {});
  }

这篇关于Grivdview 搜索无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆