feat: added bloc for request ranking

pull/57/head
RuiAlonso 4 years ago
parent 0dc8851e3b
commit 3d9bc99c2a

@ -0,0 +1,59 @@
import 'dart:async';
import 'package:bloc/bloc.dart';
import 'package:equatable/equatable.dart';
import 'package:pinball_theme/pinball_theme.dart';
part 'leaderboard_event.dart';
part 'leaderboard_state.dart';
class LeaderboardBloc extends Bloc<LeaderboardEvent, LeaderboardState> {
LeaderboardBloc() : super(const LeaderboardState()) {
on<LeaderboardRequested>(_onLeaderboardRequested);
}
FutureOr<void> _onLeaderboardRequested(
LeaderboardRequested event,
Emitter<LeaderboardState> emit,
) {
emit(state.copyWith(status: LeaderboardStatus.loading));
try {
const ranking = <Competitor>[
Competitor(
rank: 1,
characterTheme: DashTheme(),
initials: 'ABC',
score: 100,
),
Competitor(
rank: 2,
characterTheme: SparkyTheme(),
initials: 'DEF',
score: 200,
),
Competitor(
rank: 3,
characterTheme: AndroidTheme(),
initials: 'GHI',
score: 300,
),
Competitor(
rank: 4,
characterTheme: DinoTheme(),
initials: 'JKL',
score: 400,
),
];
emit(
state.copyWith(
status: LeaderboardStatus.success,
ranking: ranking,
),
);
} catch (error, _) {
emit(state.copyWith(status: LeaderboardStatus.error));
addError(error);
}
}
}

@ -0,0 +1,10 @@
part of 'leaderboard_bloc.dart';
abstract class LeaderboardEvent extends Equatable {
const LeaderboardEvent();
@override
List<Object?> get props => [];
}
class LeaderboardRequested extends LeaderboardEvent {}

@ -0,0 +1,43 @@
part of 'leaderboard_bloc.dart';
enum LeaderboardStatus { loading, success, error }
class LeaderboardState extends Equatable {
const LeaderboardState({
this.status = LeaderboardStatus.loading,
this.ranking = const [],
});
final LeaderboardStatus status;
final List<Competitor> ranking;
@override
List<Object> get props => [status, ranking];
LeaderboardState copyWith({
LeaderboardStatus? status,
List<Competitor>? ranking,
}) {
return LeaderboardState(
status: status ?? this.status,
ranking: ranking ?? this.ranking,
);
}
}
class Competitor extends Equatable {
const Competitor({
required this.rank,
required this.characterTheme,
required this.initials,
required this.score,
});
final int rank;
final CharacterTheme characterTheme;
final String initials;
final int score;
@override
List<Object?> get props => [rank, characterTheme, initials, score];
}

@ -0,0 +1 @@
export 'bloc/leaderboard_bloc.dart';
Loading…
Cancel
Save