如何在颤振中过滤AlertDialog中ListView中的数据?

如何在颤振中过滤AlertDialog中ListView中的数据?,listview,search,dart,flutter,android-alertdialog,Listview,Search,Dart,Flutter,Android Alertdialog,我在带有搜索(过滤器)的警报对话框中有ListView。在正常屏幕中,使用列表搜索正在工作,但当我在AlertDialog中添加时,它不工作。下面是我的代码 return new AlertDialog( contentPadding: EdgeInsets.all(0.0), shape: RoundedRectangleBorder( borderRadius: BorderRadius.all(Radius.circular(5.0))), cont

我在带有搜索(过滤器)的警报对话框中有ListView。在正常屏幕中,使用列表搜索正在工作,但当我在AlertDialog中添加时,它不工作。下面是我的代码

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,
                ),
              ],
            ),
          ),
        ],
      ),
    )
);
返回新警报对话框(
contentPadding:EdgeInsets.all(0.0),
形状:圆形矩形边框(
borderRadius:borderRadius.all(半径.圆形(5.0)),
内容:容器(
宽度:screenSize.width*0.9,
高度:屏幕大小。高度*0.5,
子:列(
crossAxisAlignment:crossAxisAlignment.center,
mainAxisAlignment:mainAxisAlignment.start,
儿童:[
新容器(
宽度:screenSize.width,
身高:40,
填充:仅限边设置(左:10,右:10),
颜色:常量颜色(colorPrimary),
子对象:对齐(
子项:文本(“扫描序列号”,
样式:TextStyle(
字体大小:14.0,
fontWeight:fontWeight.w500,
fontFamily:“helvetica”,
颜色:颜色。白色),
对齐:alignment.centerLeft,
),
),
容器(
颜色:颜色(colorAccent),
填充:边缘设置。全部(10),
子容器:新容器(
身高:40,
装饰:盒子装饰(
borderRadius:borderRadius.all(半径圆形(7)),
颜色:颜色。白色),
孩子:新的一排(
mainAxisSize:mainAxisSize.max,
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
灵活的(
孩子:填充(
填充:仅限边缘设置(左:10),
孩子:新文本字段(
控制器:\u搜索\u控制器,
装饰:新的输入装饰(
边框:InputBorder.none,
hintStyle:TextStyle(颜色:Colors.grey),
hintText:“搜索标签”,
反文本:“”,
),
一旦更改:(值){
过滤器搜索结果(值);
},
maxLines:1,
最大长度:50,
),
),
弹性:1,
),
灵活的(
孩子:我的钮扣(
按下:(){},
图标:图标(
Icons.search,
颜色:常量颜色(colorPrimary),
)),
弹性:0,
)
],
),
),
),
扩大(
子项:widget.listSticketDisplay.length>0
?新容器(
子项:ListView.builder(
itemCount:widget.listSticketDisplay.length,
收缩膜:对,
itemBuilder:(构建上下文,int索引){
返回新列(
儿童:[
容器(
身高:35,
宽度:screenSize.width,
子对象:对齐(
对齐:对齐.center,
子:文本(
"#" +
列表显示[索引]
英特罗诺先生
.toString()+
"     " +
列表显示[索引]
瓦斯蒂克先生,
样式:TextStyle(
字体大小:14.0,
fontWeight:fontWeight.w400,
fontFamily:“helvetica”,
)),
),
),
容器(
宽度:screenSize.width,
颜色:颜色。黑色,
身高:1,,
),
],
);
},
),
)
:容器(
子:列(
crossAxisAlignment:crossAxisAlignment.center,
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
影像资产(
“assets/nodata_icon.png”,
身高:100,
宽度:100,
),
填充物(
填充:仅限边缘设置(顶部:10),
子:文本(
“未找到任何数据”,
风格:PrifixtStyle,
),
),
],
),
),
弹性:1,
),
容器(
宽度:screenSize.width,
身高:45,
孩子:排(
儿童:[
扩大(
孩子:ButtonDialogWidgets(
按钮名称:“关闭”,
按钮颜色:常量颜色(colorPrimary),
textColor:Colors.white,
onTap:(){
Navigator.of(context.pop();
},
),
弹性:1,
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);
      });
  } 
}
void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Home(),
    );
  }
}

class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  String txt = 'Click Here';
  TextEditingController editingController = TextEditingController();
  bool isLoading = false;

  @override
  void initState() {
    super.initState();
    print("Selected TXT Value ${txt}");
    newDataList.addAll(mainDataList);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Search Cities"),
      ),
      body: SafeArea(
          child: Column(
            children: <Widget>[
              Expanded(
                child: Container(
                  margin: EdgeInsets.all(25),
                  child:
           StatefulBuilder(
          builder: (context, setState) {

                return new FlatButton(
                    height: 30.0,
                    child: Text(
                      txt,
                      style: TextStyle(
                        fontSize: 20.0,
                      ),
                    ),
                    color: Colors.blueAccent,
                    textColor: Colors.white,
                    onPressed: () {
                      setState(() {
                        _showCitiesDialog();
                      });
                    },
                  );
          }
          )
                ),
              ),
            ],
          ),

      ),
    );
  }

  static List<String> mainDataList = [
    "Apple",
    "Apricot",
    "Banana",
    "Blackberry",
    "Coconut",
    "Date",
    "Fig",
    "Gooseberry",
    "Grapes",
    "Lemon",
    "Litchi",
    "Mango",
    "Orange",
    "Papaya",
    "Peach",
    "Pineapple",
    "Pomegranate",
    "Starfruit"
  ];

  void _showCitiesDialog() {
    showDialog(
        context: context,
        builder: (context) {
          return StatefulBuilder(
              builder: (context, setState)
          {
            return AlertDialog(
              title: Text('Favorite Color'),
              content: Container(
                  width: double.minPositive,
                  child: Column(
                    children: [
                      Padding(
                        padding: const EdgeInsets.all(8.0),
                        child: TextField(
                          onChanged: (value) {
                            setState(() {
                              isLoading = true;
                              filterSearchResults(value);
                            });
                          },
                          controller: editingController,
                          decoration: InputDecoration(
                              labelText: "Search",
                              hintText: "Search",
                              prefixIcon: Icon(Icons.search),
                              border: OutlineInputBorder(
                                  borderRadius:
                                  BorderRadius.all(Radius.circular(25.0)))),
                        ),
                      ),
                      Expanded(
                        child: !isLoading ? ListView.builder(
                          shrinkWrap: true,
                          itemCount: newDataList == null ? 0 : newDataList
                              ?.length,
                          itemBuilder: (BuildContext context, int index) {
                            return ListTile(
                              title: Text(newDataList[index]),
                              onTap: () => onSelectedValue(index),
                            );
                          },
                        ) : Text("No records found"),
                      ),
                    ],
                  )),
            );
          });
        });
  }

  // List<String> newDataList = List.from(mainDataList);
  List<String> newDataList = [];

  void filterSearchResults(String query) {
    setState(() {
      newDataList = mainDataList
          .where((string) => string.toLowerCase().contains(query.toLowerCase()))
          .toList();

      debugPrint("Checking Fruit Name ${newDataList.toString()}");
      isLoading = false;

    });
  }

  onSelectedValue(int index)  {
    setState(() {
      print("Slected dialog value is....${newDataList[index]}");
      Navigator.pop(context, newDataList[index]);
      txt = newDataList[index];

    });
  }
}