Skip to content

Commit d7066ff

Browse files
committed
implement home,login and user bloc
1 parent 3dfbf3f commit d7066ff

File tree

9 files changed

+442
-0
lines changed

9 files changed

+442
-0
lines changed
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
import 'package:bloc/bloc.dart';
2+
import 'package:equatable/equatable.dart';
3+
import 'package:flood_mobile/Model/feeds_content_model.dart';
4+
import 'package:flood_mobile/Model/notification_model.dart';
5+
import 'package:flood_mobile/Model/single_feed_and_response_model.dart';
6+
import 'package:flood_mobile/Model/single_rule_model.dart';
7+
import 'package:flood_mobile/Model/torrent_model.dart';
8+
9+
part 'home_screen_event.dart';
10+
part 'home_screen_state.dart';
11+
12+
class HomeScreenBloc extends Bloc<HomeScreenEvent, HomeScreenState> {
13+
HomeScreenBloc() : super(HomeScreenInitial()) {
14+
on<SetUnreadNotificationsEvent>(_setUnreadNotifications);
15+
on<SetNotificationModelEvent>(_setNotificationModel);
16+
on<SetSpeedEvent>(_setSpeed);
17+
on<SetTorrentListEvent>(_setTorrentList);
18+
on<SetRssFeedsListEvent>(_setRssFeedsList);
19+
on<SetRssFeedsContentsListEvent>(_setRssFeedsContentsList);
20+
on<SetTorrentListJsonEvent>(_setTorrentListJson);
21+
on<SetFeedsAndRulesListJsonEvent>(_setFeedsAndRulesListJson);
22+
on<UpdateTorrentListEvent>(_updateTorrentList);
23+
}
24+
25+
// Handle the SetUnreadNotifications event
26+
void _setUnreadNotifications(
27+
SetUnreadNotificationsEvent event, Emitter<HomeScreenState> emit) {
28+
emit(state.copyWith(unreadNotifications: event.count));
29+
}
30+
31+
// Handle the SetNotificationModel event
32+
void _setNotificationModel(
33+
SetNotificationModelEvent event, Emitter<HomeScreenState> emit) {
34+
emit(state.copyWith(notificationModel: event.newModel));
35+
}
36+
37+
// Handle the SetSpeed event
38+
void _setSpeed(SetSpeedEvent event, Emitter<HomeScreenState> emit) {
39+
emit(
40+
state.copyWith(upSpeed: '${event.up}/s', downSpeed: '${event.down}/s'));
41+
}
42+
43+
// Handle the SetTorrentList event
44+
void _setTorrentList(
45+
SetTorrentListEvent event, Emitter<HomeScreenState> emit) {
46+
final newTorrentList = List<TorrentModel>.from(event.newTorrentList);
47+
newTorrentList.sort((a, b) {
48+
return a.dateAdded.compareTo(b.dateAdded);
49+
});
50+
emit(state.copyWith(torrentList: newTorrentList));
51+
}
52+
53+
// Handle the SetRssFeedsList event
54+
void _setRssFeedsList(
55+
SetRssFeedsListEvent event, Emitter<HomeScreenState> emit) {
56+
emit(state.copyWith(
57+
rssFeedsList: event.newRssFeedsList,
58+
rssRulesList: event.newRssRulesList));
59+
}
60+
61+
// Handle the SetRssFeedsContentsList event
62+
void _setRssFeedsContentsList(
63+
SetRssFeedsContentsListEvent event, Emitter<HomeScreenState> emit) {
64+
emit(state.copyWith(rssFeedsContentsList: event.newRssFeedsContentsList));
65+
}
66+
67+
// Handle the SetTorrentListJson event
68+
void _setTorrentListJson(
69+
SetTorrentListJsonEvent event, Emitter<HomeScreenState> emit) {
70+
emit(state.copyWith(torrentListJson: event.newTorrentListJson));
71+
}
72+
73+
// Handle the SetFeedsAndRulesListJson event
74+
void _setFeedsAndRulesListJson(
75+
SetFeedsAndRulesListJsonEvent event, Emitter<HomeScreenState> emit) {
76+
emit(state.copyWith(rssFeedsListJson: event.newRssFeedsListJson));
77+
}
78+
79+
// Handle the UpdateTorrentList event
80+
void _updateTorrentList(
81+
UpdateTorrentListEvent event, Emitter<HomeScreenState> emit) {
82+
emit(state.copyWith(torrentListJson: event.newTorrentListJson));
83+
}
84+
}
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
part of 'home_screen_bloc.dart';
2+
3+
abstract class HomeScreenEvent extends Equatable {
4+
const HomeScreenEvent();
5+
6+
@override
7+
List<Object> get props => [];
8+
}
9+
10+
class SetUnreadNotificationsEvent extends HomeScreenEvent {
11+
final int count;
12+
13+
SetUnreadNotificationsEvent({required this.count});
14+
15+
@override
16+
List<Object> get props => [count];
17+
}
18+
19+
class SetNotificationModelEvent extends HomeScreenEvent {
20+
late final NotificationModel newModel;
21+
22+
SetNotificationModelEvent({required this.newModel});
23+
24+
@override
25+
List<Object> get props => [newModel];
26+
}
27+
28+
class SetSpeedEvent extends HomeScreenEvent {
29+
final String up;
30+
final String down;
31+
32+
SetSpeedEvent({required this.up, required this.down});
33+
34+
@override
35+
List<Object> get props => [up, down];
36+
}
37+
38+
class SetTorrentListEvent extends HomeScreenEvent {
39+
final List<TorrentModel> newTorrentList;
40+
41+
SetTorrentListEvent({required this.newTorrentList});
42+
43+
@override
44+
List<Object> get props => [newTorrentList];
45+
}
46+
47+
class SetRssFeedsListEvent extends HomeScreenEvent {
48+
final List<FeedsAndRulesModel> newRssFeedsList;
49+
final List<RulesModel> newRssRulesList;
50+
51+
SetRssFeedsListEvent(
52+
{required this.newRssFeedsList, required this.newRssRulesList});
53+
54+
@override
55+
List<Object> get props => [newRssFeedsList, newRssRulesList];
56+
}
57+
58+
class SetRssFeedsContentsListEvent extends HomeScreenEvent {
59+
final List<FeedsContentsModel> newRssFeedsContentsList;
60+
61+
SetRssFeedsContentsListEvent({required this.newRssFeedsContentsList});
62+
63+
@override
64+
List<Object> get props => [newRssFeedsContentsList];
65+
}
66+
67+
class SetTorrentListJsonEvent extends HomeScreenEvent {
68+
final Map<String, dynamic> newTorrentListJson;
69+
70+
SetTorrentListJsonEvent({required this.newTorrentListJson});
71+
72+
@override
73+
List<Object> get props => [newTorrentListJson];
74+
}
75+
76+
class SetFeedsAndRulesListJsonEvent extends HomeScreenEvent {
77+
final Map<String, dynamic> newRssFeedsListJson;
78+
79+
SetFeedsAndRulesListJsonEvent({required this.newRssFeedsListJson});
80+
81+
@override
82+
List<Object> get props => [newRssFeedsListJson];
83+
}
84+
85+
class UpdateTorrentListEvent extends HomeScreenEvent {
86+
final Map<String, dynamic> newTorrentListJson;
87+
88+
UpdateTorrentListEvent({required this.newTorrentListJson});
89+
90+
@override
91+
List<Object> get props => [newTorrentListJson];
92+
}
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
// ignore_for_file: must_be_immutable
2+
3+
part of 'home_screen_bloc.dart';
4+
5+
class HomeScreenState extends Equatable {
6+
final List<TorrentModel> torrentList;
7+
final Map<String, dynamic> torrentListJson;
8+
final int unreadNotifications;
9+
final NotificationModel notificationModel;
10+
final Map<String, dynamic> rssFeedsListJson;
11+
final List<FeedsAndRulesModel> rssFeedsList;
12+
final List<RulesModel> rssRulesList;
13+
final List<FeedsContentsModel> rssFeedsContentsList;
14+
String upSpeed;
15+
String downSpeed;
16+
17+
HomeScreenState({
18+
required this.torrentList,
19+
required this.torrentListJson,
20+
required this.unreadNotifications,
21+
required this.notificationModel,
22+
required this.rssFeedsListJson,
23+
required this.rssFeedsList,
24+
required this.rssRulesList,
25+
required this.rssFeedsContentsList,
26+
required this.upSpeed,
27+
required this.downSpeed,
28+
});
29+
30+
HomeScreenState copyWith({
31+
List<TorrentModel>? torrentList,
32+
Map<String, dynamic>? torrentListJson,
33+
int? unreadNotifications,
34+
NotificationModel? notificationModel,
35+
Map<String, dynamic>? rssFeedsListJson,
36+
List<FeedsAndRulesModel>? rssFeedsList,
37+
List<RulesModel>? rssRulesList,
38+
List<FeedsContentsModel>? rssFeedsContentsList,
39+
String? upSpeed,
40+
String? downSpeed,
41+
}) {
42+
return HomeScreenState(
43+
torrentList: torrentList ?? this.torrentList,
44+
torrentListJson: torrentListJson ?? this.torrentListJson,
45+
unreadNotifications: unreadNotifications ?? this.unreadNotifications,
46+
notificationModel: notificationModel ?? this.notificationModel,
47+
rssFeedsListJson: rssFeedsListJson ?? this.rssFeedsListJson,
48+
rssFeedsList: rssFeedsList ?? this.rssFeedsList,
49+
rssRulesList: rssRulesList ?? this.rssRulesList,
50+
rssFeedsContentsList: rssFeedsContentsList ?? this.rssFeedsContentsList,
51+
upSpeed: upSpeed ?? this.upSpeed,
52+
downSpeed: downSpeed ?? this.downSpeed,
53+
);
54+
}
55+
56+
@override
57+
List<Object?> get props => [
58+
torrentList,
59+
torrentListJson,
60+
unreadNotifications,
61+
notificationModel,
62+
rssFeedsListJson,
63+
rssFeedsList,
64+
rssRulesList,
65+
rssFeedsContentsList,
66+
upSpeed,
67+
downSpeed,
68+
];
69+
}
70+
71+
class HomeScreenInitial extends HomeScreenState {
72+
HomeScreenInitial()
73+
: super(
74+
torrentList: [],
75+
torrentListJson: {},
76+
unreadNotifications: 0,
77+
notificationModel: NotificationModel(
78+
read: 0, unread: 0, notifications: [], total: 0),
79+
rssFeedsListJson: {},
80+
rssFeedsList: [],
81+
rssRulesList: [],
82+
rssFeedsContentsList: [],
83+
upSpeed: '0 KB/s',
84+
downSpeed: '0 KB/s',
85+
);
86+
87+
@override
88+
List<Object?> get props => super.props;
89+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import 'package:equatable/equatable.dart';
2+
import 'package:flutter_bloc/flutter_bloc.dart';
3+
import 'package:shared_preferences/shared_preferences.dart';
4+
5+
part 'login_screen_event.dart';
6+
part 'login_screen_state.dart';
7+
8+
class LoginScreenBloc extends Bloc<LoginScreenEvent, LoginScreenState> {
9+
LoginScreenBloc() : super(LoginInitialState()) {
10+
on<SetLoggedInStatusEvent>(_onSetLoggedInStatusEvent);
11+
on<SetBatteryOptimizationInfoStatusEvent>(
12+
_onSetBatteryOptimizationInfoStatusEvent);
13+
}
14+
15+
// Handle the SetLoggedInStatusEvent event
16+
void _onSetLoggedInStatusEvent(
17+
SetLoggedInStatusEvent event, Emitter<LoginScreenState> emit) async {
18+
// Save logged-in status in shared preferences
19+
SharedPreferences prefs = await SharedPreferences.getInstance();
20+
prefs.setBool('loggedInData', event.loggedIn);
21+
emit(UpdatedLoginStatusState(loggedIn: event.loggedIn));
22+
}
23+
24+
// Handle the SetBatteryOptimizationInfoStatusEvent event
25+
void _onSetBatteryOptimizationInfoStatusEvent(
26+
SetBatteryOptimizationInfoStatusEvent event,
27+
Emitter<LoginScreenState> emit,
28+
) async {
29+
// Save battery optimization info status in shared preferences
30+
SharedPreferences prefs = await SharedPreferences.getInstance();
31+
prefs.setBool('batteryOptimizationInfoSeen', event.seen);
32+
emit(UpdatedBatteryOptimizationInfoState(seen: event.seen));
33+
}
34+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
part of 'login_screen_bloc.dart';
2+
3+
abstract class LoginScreenEvent extends Equatable {
4+
const LoginScreenEvent();
5+
6+
@override
7+
List<Object> get props => [];
8+
}
9+
10+
class SetLoggedInStatusEvent extends LoginScreenEvent {
11+
final bool loggedIn;
12+
13+
SetLoggedInStatusEvent({required this.loggedIn});
14+
15+
@override
16+
List<Object> get props => [loggedIn];
17+
}
18+
19+
class SetBatteryOptimizationInfoStatusEvent extends LoginScreenEvent {
20+
final bool seen;
21+
22+
SetBatteryOptimizationInfoStatusEvent({required this.seen});
23+
24+
@override
25+
List<Object> get props => [seen];
26+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
part of 'login_screen_bloc.dart';
2+
3+
abstract class LoginScreenState extends Equatable {
4+
const LoginScreenState();
5+
6+
@override
7+
List<Object> get props => [];
8+
}
9+
10+
class LoginInitialState extends LoginScreenState {}
11+
12+
class UpdatedLoginStatusState extends LoginScreenState {
13+
final bool loggedIn;
14+
15+
UpdatedLoginStatusState({required this.loggedIn});
16+
17+
@override
18+
List<Object> get props => [loggedIn];
19+
}
20+
21+
class UpdatedBatteryOptimizationInfoState extends LoginScreenState {
22+
final bool seen;
23+
24+
UpdatedBatteryOptimizationInfoState({required this.seen});
25+
26+
@override
27+
List<Object> get props => [seen];
28+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import 'package:bloc/bloc.dart';
2+
import 'package:equatable/equatable.dart';
3+
import 'package:flood_mobile/Model/current_user_detail_model.dart';
4+
5+
part 'user_detail_event.dart';
6+
part 'user_detail_state.dart';
7+
8+
class UserDetailBloc extends Bloc<UserDetailEvent, UserDetailState> {
9+
String token = '';
10+
String username = '';
11+
List<CurrentUserDetailModel> usersList = [];
12+
13+
UserDetailBloc() : super(UserDetailInitial()) {
14+
on<UserDetailEvent>(_handleUserDetailEvent);
15+
on<SetUserDetailsEvent>(_setUserDetails);
16+
on<SetUsersListEvent>(_setUsersList);
17+
}
18+
19+
// Handle the UserDetailEvent
20+
void _handleUserDetailEvent(
21+
UserDetailEvent event, Emitter<UserDetailState> emit) {
22+
emit(UserDetailInitial());
23+
}
24+
25+
// Set the user details (token and username)
26+
void _setUserDetails(
27+
SetUserDetailsEvent event, Emitter<UserDetailState> emit) {
28+
token = event.token;
29+
username = event.username;
30+
emit(UserDetailLoaded(
31+
token: token, username: username, usersList: usersList));
32+
}
33+
34+
// Set the users list
35+
void _setUsersList(SetUsersListEvent event, Emitter<UserDetailState> emit) {
36+
usersList = event.usersList;
37+
emit(UserDetailLoaded(
38+
token: token, username: username, usersList: usersList));
39+
}
40+
}

0 commit comments

Comments
 (0)