Flutter: SearchDelegate Stream пуст при нажатии Поиск - PullRequest
2 голосов
/ 04 февраля 2020

Я использую Stream с SearchDelegate.
Когда я ввожу что-то в поле поиска, все работает нормально. Но как только я нажимаю символ поиска, он ничего не отображает, потому что поток пуст. Как это возможно?

Вот некоторый код:

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() вызывается?

1 Ответ

0 голосов
/ 06 февраля 2020

Изменить в абстрактном классе 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();
    }
  }

Это сработало для меня

...