как передать значение поиска с шаблоном блока для страницы поиска - PullRequest
0 голосов
/ 01 октября 2019

Я прямо здесь реализовал страницу поиска с шаблоном блока. Но я не знаю, где я могу передать значение поиска в блоке. Я думаю, что должно случиться так, что значение поиска должно быть передано событию, и в соответствии с результатами поиска состояние поиска должно быть изменено, но я не уверен, как это сделать.

search_bloc.dart:

class SearchBloc extends Bloc<SearchEvent, SearchState> {
  static final SearchBloc _searchBlocSingleton = SearchBloc._internal();

  //Search Query variables
  final searchController = StreamController<String>();
  Function(String) get inSearch => searchController.sink.add;
  Stream<String> get outSearch => searchController.stream;

  factory SearchBloc() {
    return _searchBlocSingleton;
  }

  SearchBloc._internal();
  @override
  SearchState get initialState => UnSearchState();

  @override
  Stream<SearchState> mapEventToState(SearchEvent event) async* {
    try {
      yield UnSearchState();
      yield await event.applyAsync(currentState: currentState, bloc: this);
    } catch (_, stacktrace) {
      print('$_ $stacktrace');
      yield currentState;
    }
  }

  @override
  void dispose() {
    super.dispose();
    searchController.close();
  }
}

search_event.dart

@immutable
abstract class SearchEvent extends Equatable {
  SearchEvent([List props = const []]) : super(props);
  Future<SearchState> applyAsync({SearchState currentState, SearchBloc bloc});
}

class LoadSearchEvent extends SearchEvent {
  @override
  String toString() => 'LoadSearchEvent';

  @override
  Future<SearchState> applyAsync(
      {SearchState currentState, SearchBloc bloc}) async {
    try {
      await Future.delayed(Duration(seconds: 1));
      return InSearchState();
    } catch (_, stacktrace) {
      print('$_ $stacktrace');
      return ErrorSearchState(_.toString());
    }
  }
}

search_state.dart

import 'package:equatable/equatable.dart';
import 'package:meta/meta.dart';

@immutable
abstract class SearchState extends Equatable {
  SearchState([List props = const []]) : super(props);

  SearchState getStateCopy();
}

class UnSearchState extends SearchState {
  @override
  String toString() => "UnSearchState";

  @override
  SearchState getStateCopy() {
    return UnSearchState();
  }
}

class InSearchState extends SearchState {
  @override
  String toString() => "InSearchState";

  @override
  SearchState getStateCopy() {
    return InSearchState();
  }
}

class ProcessedSearchState extends SearchState {
  @override
  String toString() => "ProcessedSearchState";

  @override
  SearchState getStateCopy() {
    return ProcessedSearchState();
  }
}

class ErrorSearchState extends SearchState {
  final String errorMessage;
  ErrorSearchState(this.errorMessage);
  @override
  String toString() => "ErrorSearchState";

  @override
  SearchState getStateCopy() {
    return ErrorSearchState(this.errorMessage);
  }
}
...