无法通过 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)));
                });
          }
       }