这是我到目前为止所做的事情。
点击键盘上的enter键后,flutter正在调用'showResults(context)‘(我想是的)。但是如果我想通过"Navigator.of(context).pushNamed('/rro',arguments: query);“转到另一个屏幕怎么办?
如何在按enter键后停止flutting调用'showResults(context)‘,而不是导航到另一个屏幕?
class DataSearch extends SearchDelegate {
final data = ['a', 'ab', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'];
final recent = ['b', 'c', 'd', 'e'];
@override
List buildActions(BuildContext context) {
return [
IconButton(
icon: Icon(Icons.clear),
onPressed: () {
query = '';
},
),
];
}
@override
Widget buildLeading(BuildContext context) {
return IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () {
close(context, null);
},
);
}
@override
Widget buildResults(BuildContext context) {
// Return type should be a Widget
return null;
}
@override
Widget buildSuggestions(BuildContext context) {
final suggestionList = query.isEmpty
? recent
: data.where((element) => element.startsWith(query)).toList();
return ListView.builder(
itemBuilder: (context, index) => ListTile(
onTap: () {
// On tap on any ListTile I can easily go to another screen
Navigator.of(context).pushNamed('/rro', arguments: query);
},
title: Text(suggestionList[index]),
),
itemCount: suggestionList.length,
);
}
}发布于 2021-02-26 05:41:26
只需覆盖showResults(),并在buildResults中返回一个容器。如果你尝试在这里返回null,这可能会显示一些错误,最好返回一个空的容器。
@override
Widget buildResults(BuildContext context) => Container();
@override
void showResults(BuildContext context) {
Navigator.of(context).popAndPushNamed(
'/rro',
arguments: query,
);
super.showResults(context);
}https://stackoverflow.com/questions/66369864
复制相似问题