无法通过 SearchDelegate class 传递用户数据
can't pass userdata through SearchDelegate class in flutter
在我的搜索页面中,我有 userdata
class/object(包括用户名、用户地址等)我想从前一页获取然后传递到下一页,但是我的搜索页面不会将 userdata
class/object 传递到下一页。
为了让它工作,我编写了与典型 StatelessWidget
相同的代码,如下所示,但失败了。
在这个搜索页面中,如何从前一个页面获取userdata
,然后将其传递到下一个页面?
这是我的代码。
在之前的页面(statefulWidget)中,我做了一个iconButton,这样可以转到搜索页面;
IconButton(icon: Icon(Icons.search),
onPressed: () async {await showSearch(context: context,
delegate: DataSearch(***userdata: userdata***));
})
然后,我制作了 DataSearch class 来实现页面搜索;
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***)));}
通过创建 stateful widget
而不是上面发布的 search delegate class
,我能够通过此搜索页面将 userdata
对象传递到下一页。
//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)));
});
}
}
在我的搜索页面中,我有 userdata
class/object(包括用户名、用户地址等)我想从前一页获取然后传递到下一页,但是我的搜索页面不会将 userdata
class/object 传递到下一页。
为了让它工作,我编写了与典型 StatelessWidget
相同的代码,如下所示,但失败了。
在这个搜索页面中,如何从前一个页面获取userdata
,然后将其传递到下一个页面?
这是我的代码。
在之前的页面(statefulWidget)中,我做了一个iconButton,这样可以转到搜索页面;
IconButton(icon: Icon(Icons.search),
onPressed: () async {await showSearch(context: context,
delegate: DataSearch(***userdata: userdata***));
})
然后,我制作了 DataSearch class 来实现页面搜索;
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***)));}
通过创建 stateful widget
而不是上面发布的 search delegate class
,我能够通过此搜索页面将 userdata
对象传递到下一页。
//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)));
});
}
}