Skip to content

Instantly share code, notes, and snippets.

@danagbemava
Last active April 8, 2020 21:22
Show Gist options
  • Save danagbemava/3b8e4b591cd426f9ba570fc88a3bb39f to your computer and use it in GitHub Desktop.
Save danagbemava/3b8e4b591cd426f9ba570fc88a3bb39f to your computer and use it in GitHub Desktop.
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:rnm_graphql/blocs/home/home.dart';
import 'package:rnm_graphql/services/graphql_service.dart';
class HomeBloc extends Bloc<HomeEvents, HomeStates> {
GraphQLService service;
HomeBloc() {
service = GraphQLService();
}
@override
HomeStates get initialState => Loading();
@override
Stream<HomeStates> mapEventToState(HomeEvents event) async* {
if (event is FetchHomeData) {
yield* _mapFetchHomeDataToStates(event);
}
}
Stream<HomeStates> _mapFetchHomeDataToStates(FetchHomeData event) async* {
final query = event.query;
final variables = event.variables ?? null;
try {
final result = await service.performMutation(query, variables: variables);
if (result.hasException) {
print('graphQLErrors: ${result.exception.graphqlErrors.toString()}');
print('clientErrors: ${result.exception.clientException.toString()}');
yield LoadDataFail(result.exception.graphqlErrors[0]);
} else {
yield LoadDataSuccess(result.data);
}
} catch (e) {
print(e);
yield LoadDataFail(e.toString());
}
}
}
export './home_bloc.dart';
export './home_events.dart';
export './home_states.dart';
import 'package:equatable/equatable.dart';
abstract class HomeEvents extends Equatable {
HomeEvents();
@override
List<Object> get props => null;
}
class FetchHomeData extends HomeEvents {
final String query;
final Map<String, dynamic> variables;
FetchHomeData(this.query, {this.variables}) : super();
@override
List<Object> get props => [query, variables];
}
import 'package:equatable/equatable.dart';
abstract class HomeStates extends Equatable {
HomeStates();
@override
List<Object> get props => null;
}
class Loading extends HomeStates {
Loading() : super();
}
class LoadDataSuccess extends HomeStates {
final dynamic data;
LoadDataSuccess(this.data) : super();
@override
List<Object> get props => data;
}
class LoadDataFail extends HomeStates {
final dynamic error;
LoadDataFail(this.error) : super();
@override
List<Object> get props => error;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment