如何在颤振中过滤AlertDialog中ListView中的数据?
我在带有搜索(过滤器)的警报对话框中有ListView。在正常屏幕中,使用列表搜索正在工作,但当我在AlertDialog中添加时,它不工作。下面是我的代码如何在颤振中过滤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
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];
});
}
}