在我的搜索页面中,我有userdata
想要从前一页获取然后传递到下一页的类/对象(包括用户名,用户地址等),但是我的搜索页面没有将userdata
类/对象传递到下一页。为了使其正常工作,我编写了与StatelessWidget
以下典型代码相同的代码,但是失败了。在此搜索页面中,如何userdata
从上一页获取然后传递到下一页?这是我的代码。在前一页(statefulWidget)中,我制作了一个iconButton来转到搜索页面,如下所示:
IconButton(icon: Icon(Icons.search),
onPressed: () async {await showSearch(context: context,
delegate: DataSearch(***userdata: userdata***));
})
然后,我制作了DataSearch类以在页面上实现搜索;
class DataSearch extends SearchDelegate<String> {
***final Userdata userdata;
DataSearch({this.userdata});***
@override
List<Widget> buildActions(BuildContext context) {
return ... }
@override
Widget buildLeading(BuildContext context) {
return ... }
@override
Widget buildResults(BuildContext context) {
... }
@override
Widget buildSuggestions(BuildContext context) {
return ListView(
.....
onTap: () async {
if (afields.contains(e)) {
await Navigator.push(context,
MaterialPageRoute(builder: (context) =>
NextPage(***userdata: userdata***)));}
userdata
通过创建stateful widget
而不是search delegate class
上面发布的内容,我能够将对象通过此搜索页面传递到下一页。
//part of statefulWidget
class _DataSearchState extends State<DataSearch> {
TextEditingController _searchController = TextEditingController();
@override
void initState() {
super.initState();
_searchController.addListener(_onSearchChanged);
}
@override
void dispose() {
_searchController.removeListener(_onSearchChanged);
_searchController.dispose();
super.dispose();
}
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
TextField(
controller: _searchController,
decoration: InputDecoration(prefixIcon: Icon(Icons.search)),
),
),
ListView.builder(
itemCount: resultsList.length,
itemBuilder: (BuildContext context, int ndx) {
return ListTile(
title: Text(resultsList[ndx]),
onTap: () {
Navigator.push(context,
MaterialPageRoute(builder: (context) => NextPage(userdata: userdata)));
});
}
}