gpt4 book ai didi

flutter - Listview 不使用 TextField 动态更新

转载 作者:行者123 更新时间:2023-12-03 02:55:55 24 4
gpt4 key购买 nike

目前我正在尝试使用 TextField 更新 ListView,但我遇到了问题。 ListView 最初在初始化时正确更新,但当我输入内容时,它会变成空白。

这是我的代码:

class TabbarViewWidget extends StatefulWidget {
TabbarViewWidget({this.selectedList});

final List<String> selectedList;

@override
_TabbarViewWidgetState createState() => _TabbarViewWidgetState();
}

class _TabbarViewWidgetState extends State<TabbarViewWidget> {
TextEditingController textController = TextEditingController();

var items = List<String>();

void filteredSearch(String query) {
List<String> dummySearchList = List();
dummySearchList.addAll(widget.selectedList);
if (query.isNotEmpty) {
List<String> dummyListData = List();
dummySearchList.forEach((item) {
if (item.contains(query)) {
dummyListData.add(query);
}
});
setState(() {
items.clear();
items.addAll(dummyListData);
});
return;
} else {
setState(() {
items.clear();
items.addAll(widget.selectedList);
});
}
}

@override
void initState() {
items = widget.selectedList;
super.initState();
}

@override
Widget build(BuildContext context) {
return Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Padding(
padding: EdgeInsets.all(15.0),
child: TextField(
onChanged: (value) {
filteredSearch(value.toUpperCase());
},
controller: textController,
decoration: InputDecoration(
hintText: "Search",
labelText: "Search",
prefixIcon: Icon(Icons.search),
border: OutlineInputBorder(
borderRadius: BorderRadius.all(
Radius.circular(25.0),
))),
),
),
Expanded(
child: ListView.builder(
itemCount: items.length,
itemBuilder: (context, index) {
return ListTile(
title: Text('${items[index]}'),
);
})),
],
);
}
}

需要很多帮助!我是一个自学成才的 Flutter 爱好者,所以我可能不知道很多东西。请多多包涵!

最佳答案

不知何故(我没有深究为什么)您在 widget.selectedList 中的列表在方法 filteredSearch 中被清除。

我稍微更改了您的代码并且它有效:

List items = List<String>();

void filteredSearch(String query) {
items = widget.selectedList.where((txt) => query.isEmpty || txt.contains(query)).toList();
setState(() {
});
}

@override
void initState() {
items = widget.selectedList;
super.initState();
}

关于flutter - Listview 不使用 TextField 动态更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58670897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com