How to filter data in ListView in AlertDialog in flutter?

4,295

Create another Stateful Widget for your dialog. Read this to understand further.

Share:
4,295
Sagar Zala
Author by

Sagar Zala

Contact me: Mail : [email protected] Skype : sagar_zala LinkedIn : Click Here. Best Practices: Either sleep or code Bad mood? Take a break PROUD TO BE INDIAN

Updated on December 10, 2022

Comments

  • Sagar Zala
    Sagar Zala 11 months

    I have ListView in Alert Dialog with Search (Filter). In normal screen the search with list is working but when I adding in AlertDialog it not works. Below is my code,

    return new AlertDialog(
        contentPadding: EdgeInsets.all(0.0),
        shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.all(Radius.circular(5.0))),
        content: Container(
          width: screenSize.width * 0.9,
          height: screenSize.height * 0.5,
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.center,
            mainAxisAlignment: MainAxisAlignment.start,
            children: <Widget>[
              new Container(
                width: screenSize.width,
                height: 40,
                padding: EdgeInsets.only(left: 10, right: 10),
                color: const Color(colorPrimary),
                child: Align(
                  child: Text("Scanned Serial Number",
                      style: TextStyle(
                          fontSize: 14.0,
                          fontWeight: FontWeight.w500,
                          fontFamily: 'helvetica',
                          color: Colors.white)),
                  alignment: Alignment.centerLeft,
                ),
              ),
              Container(
                color: Color(colorAccent),
                padding: EdgeInsets.all(10),
                child: new Container(
                  height: 40,
                  decoration: BoxDecoration(
                      borderRadius: BorderRadius.all(Radius.circular(7)),
                      color: Colors.white),
                  child: new Row(
                    mainAxisSize: MainAxisSize.max,
                    crossAxisAlignment: CrossAxisAlignment.center,
                    children: [
                      Flexible(
                        child: Padding(
                          padding: EdgeInsets.only(left: 10),
                          child: new TextField(
                            controller:_search_controller,
                            decoration: new InputDecoration(
                              border: InputBorder.none,
                              hintStyle: TextStyle(color: Colors.grey),
                              hintText: "Search Label",
                              counterText: "",
                            ),
                            onChanged: (value) {
                              filterSearchResults(value);
                            },
                            maxLines: 1,
                            maxLength: 50,
                          ),
                        ),
                        flex: 1,
                      ),
                      Flexible(
                        child: IconButton(
                            onPressed: () {},
                            icon: Icon(
                              Icons.search,
                              color: const Color(colorPrimary),
                            )),
                        flex: 0,
                      )
                    ],
                  ),
                ),
              ),
              Expanded(
                child: widget.listStickerDisplay.length > 0
                    ? new Container(
                        child: ListView.builder(
                          itemCount: widget.listStickerDisplay.length,
                          shrinkWrap: true,
                          itemBuilder: (BuildContext context, int index) {
                            return new Column(
                              children: <Widget>[
                                Container(
                                  height: 35,
                                  width: screenSize.width,
                                  child: Align(
                                    alignment: Alignment.center,
                                    child: Text(
                                        "#" +
                                            listStickerDisplay[index]
                                                .intRowNo
                                                .toString() +
                                            "     " +
                                            listStickerDisplay[index]
                                                .varSticker,
                                        style: TextStyle(
                                          fontSize: 14.0,
                                          fontWeight: FontWeight.w400,
                                          fontFamily: 'helvetica',
                                        )),
                                  ),
                                ),
                                Container(
                                  width: screenSize.width,
                                  color: Colors.black12,
                                  height: 1,
                                ),
                              ],
                            );
                          },
                        ),
                      )
                    : Container(
                        child: Column(
                          crossAxisAlignment: CrossAxisAlignment.center,
                          mainAxisAlignment: MainAxisAlignment.center,
                          children: <Widget>[
                            Image.asset(
                              "assets/nodata_icon.png",
                              height: 100,
                              width: 100,
                            ),
                            Padding(
                              padding: EdgeInsets.only(top: 10),
                              child: Text(
                                "No Data Found",
                                style: prifixTxtStyle,
                              ),
                            ),
                          ],
                        ),
                      ),
                flex: 1,
              ),
              Container(
                width: screenSize.width,
                height: 45,
                child: Row(
                  children: <Widget>[
                    Expanded(
                      child: ButtonDialogWidgets(
                        buttonName: 'Close',
                        buttonColor: const Color(colorPrimary),
                        textColor: Colors.white,
                        onTap: () {
                          Navigator.of(context).pop();
                        },
                      ),
                      flex: 1,
                    ),
                  ],
                ),
              ),
            ],
          ),
        )
    );
    

    Below is Filter Function:

    void filterSearchResults(String query) {
      List<SalesSummarySKUStickerModel> dummySearchList =
          List<SalesSummarySKUStickerModel>();
      dummySearchList.addAll(widget.listSticker);
      if (query.isNotEmpty) {
        query = query.toLowerCase();
        List<SalesSummarySKUStickerModel> dummyListData =
            List<SalesSummarySKUStickerModel>();
        dummySearchList.forEach((item) {
          if (item.varSticker.toLowerCase().contains(query)) {
            dummyListData.add(item);
          }
        });
        if (mounted)
          setState(() {
            listStickerDisplay.clear();
            listStickerDisplay.addAll(dummyListData);
          });
      } else {
        if (mounted)
          setState(() {
            listStickerDisplay.clear();
            listStickerDisplay.addAll(widget.listSticker);
          });
      } 
    }