我正在使用带有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()
时不为空?
在抽象类 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();
}
}
它对我有用