我在SearchDelegate中使用Stream。
当我在搜索字段中输入一些东西时,它工作得很好。但只要我按下搜索符号,它就什么也不显示,因为流是空的。那件事怎么可能?
下面是一些代码:
List<Notes> notes;
...
void search() {
showSearch(
context: context,
delegate: Search(
Stream.value(UnmodifiableListView<Note>(notes)).asBroadcastStream()
)
}
class Search extends SearchDelegate{
final Stream<UnmodifiableListView<Note>> notes;
Search(this.notes);
...
@override
Widget buildResults(BuildContext context){
return _buildStreamBuilder();
}
@override
Widget buildSuggestions(BuildContext context){
return _buildStreamBuilder();
}
StreamBuilder<UnmodifiableListView<Note>> _buildStreamBuilder() {
return StreamBuilder< UnmodifiableListView<Note>> (
stream: notes
builder: (context, AsyncSnapshot< UnmodifiableListView<Note>>) {
final results = snapshot.data.where((note){
....
}
}为什么调用buildResults()时流为空,而调用buildSuggestions()时流不为空?
发布于 2020-02-06 13:07:30
在抽象类SearchDelegate:中编辑
void showResults(BuildContext context) {
_focusNode?.unfocus();
_currentBody = _SearchBody.results;
}替换
void showResults(BuildContext context) {
if(_queryTextController.text.isNotEmpty) {
_focusNode?.unfocus();
_currentBody = _SearchBody.results;
}else{
_focusNode?.unfocus();
}
}这对我很管用
https://stackoverflow.com/questions/60063341
复制相似问题