add search fragment

This commit is contained in:
Andrew 2022-09-13 11:13:17 +07:00
parent 72a46116b3
commit 4833b5c18c
8 changed files with 542 additions and 6 deletions

View file

@ -0,0 +1,32 @@
import 'package:bloc/bloc.dart';
import 'package:bloc_concurrency/bloc_concurrency.dart';
import 'package:equatable/equatable.dart';
import '../models/scoop_app_model.dart';
import '../utils/scoop_utils.dart';
part 'scoop_search_event.dart';
part 'scoop_search_state.dart';
class ScoopSearchBloc extends Bloc<ScoopSearchEvent, ScoopSearchState> {
ScoopSearchBloc() : super(ScoopSearchInitial()) {
on<ScoopSearchQueryChanged>(
(event, emit) async {
emit(ScoopSearchLoading());
try {
Map<String, List<ScoopAppModel>> data = {};
if (event.query.isEmpty) {
data = await getAllInstallableApps();
} else {
data = await searchInstallableApps(event.query);
}
emit(ScoopSearchLoaded(data));
} catch (e) {
emit(ScoopSearchError(e.toString()));
}
},
transformer: restartable(),
);
}
}

View file

@ -0,0 +1,17 @@
part of 'scoop_search_bloc.dart';
abstract class ScoopSearchEvent extends Equatable {
const ScoopSearchEvent();
@override
List<Object> get props => [];
}
class ScoopSearchQueryChanged extends ScoopSearchEvent {
final String query;
const ScoopSearchQueryChanged(this.query);
@override
List<Object> get props => [query];
}

View file

@ -0,0 +1,30 @@
part of 'scoop_search_bloc.dart';
abstract class ScoopSearchState extends Equatable {
const ScoopSearchState();
@override
List<Object> get props => [];
}
class ScoopSearchInitial extends ScoopSearchState {}
class ScoopSearchLoading extends ScoopSearchState {}
class ScoopSearchLoaded extends ScoopSearchState {
final Map<String, List<ScoopAppModel>> apps;
const ScoopSearchLoaded(this.apps);
@override
List<Object> get props => [apps];
}
class ScoopSearchError extends ScoopSearchState {
final String message;
const ScoopSearchError(this.message);
@override
List<Object> get props => [message];
}