Skip to content

Commit d5ef8ea

Browse files
committed
feat: adds Reload functionality using BLoC
1 parent d098978 commit d5ef8ea

File tree

5 files changed

+102
-17
lines changed

5 files changed

+102
-17
lines changed

lib/data/constants/env_config.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
class EnvironmentConfig {
22
static const String BASE_URL = String.fromEnvironment(
33
'BASE_URL',
4-
defaultValue: 'https://faf1-103-37-201-177.ngrok-free.app',
4+
defaultValue: 'https://appetizer.onrender.com',
55
);
66

77
static const String OAUTH_CLIENT_ID = String.fromEnvironment(
Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import 'package:appetizer/domain/models/user/user.dart';
21
import 'package:appetizer/domain/repositories/user/user_repository.dart';
32
import 'package:bloc/bloc.dart';
43
import 'package:equatable/equatable.dart';
@@ -8,15 +7,18 @@ part 'no_internet_state.dart';
87

98
class NoInternetBloc extends Bloc<NoInternetEvent, NoInternetState> {
109
final UserRepository repo;
11-
NoInternetBloc({required this.repo}) : super(const NoInternetState()) {
10+
NoInternetBloc({required this.repo}) : super(const NoInternetInitial()) {
1211
on<ReloadPressed>(_onReloadPressed);
1312
}
1413

1514
void _onReloadPressed(
1615
ReloadPressed event, Emitter<NoInternetState> emit) async {
16+
emit(const Loading());
1717
try {
18-
User user = await repo.getCurrentUser();
19-
20-
} catch (e) {}
18+
await repo.getCurrentUser();
19+
emit(const ReloadSuccess());
20+
} catch (e) {
21+
emit(const NoInternetInitial());
22+
}
2123
}
2224
}

lib/presentation/no_internet/bloc/no_internet_event.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ part of 'no_internet_bloc.dart';
22

33
class NoInternetEvent extends Equatable {
44
const NoInternetEvent();
5-
5+
66
@override
77
List<Object?> get props => [];
88
}
99

1010
class ReloadPressed extends NoInternetEvent {
1111
const ReloadPressed();
12-
}
12+
}

lib/presentation/no_internet/bloc/no_internet_state.dart

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,14 @@ class NoInternetState extends Equatable {
77
List<Object> get props => [];
88
}
99

10+
class NoInternetInitial extends NoInternetState {
11+
const NoInternetInitial();
12+
}
13+
14+
class Loading extends NoInternetState {
15+
const Loading();
16+
}
17+
18+
class ReloadSuccess extends NoInternetState {
19+
const ReloadSuccess();
20+
}

lib/presentation/no_internet/no_internet.dart

Lines changed: 81 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
1+
import 'package:appetizer/app_theme.dart';
2+
import 'package:appetizer/data/core/theme/dimensional/dimensional.dart';
3+
import 'package:appetizer/domain/repositories/user/user_repository.dart';
4+
import 'package:appetizer/presentation/app/bloc/app_bloc.dart';
5+
import 'package:appetizer/presentation/components/loading_indicator.dart';
16
import 'package:appetizer/presentation/components/no_data_found_container.dart';
7+
import 'package:appetizer/presentation/no_internet/bloc/no_internet_bloc.dart';
28
import 'package:appetizer/presentation/no_internet/components/no_internet_banner.dart';
39
import 'package:auto_route/auto_route.dart';
410
import 'package:flutter/material.dart';
11+
import 'package:flutter_bloc/flutter_bloc.dart';
512

613
@RoutePage()
714
class NoInternetWrapper extends StatelessWidget {
@@ -19,14 +26,79 @@ class NoInternetScreen extends StatelessWidget {
1926

2027
@override
2128
Widget build(BuildContext context) {
22-
return Container(
23-
color: Colors.white,
24-
child: const Column(
25-
children: [
26-
NoInternetBanner(),
27-
NoDataFoundContainer(title: "No Internet Connection"),
28-
],
29-
),
30-
);
29+
return BlocProvider(
30+
create: (context) =>
31+
NoInternetBloc(repo: context.read<UserRepository>()),
32+
child: Container(
33+
color: Colors.white,
34+
child: Column(
35+
mainAxisAlignment: MainAxisAlignment.spaceBetween,
36+
children: [
37+
const NoInternetBanner(),
38+
BlocBuilder<NoInternetBloc, NoInternetState>(
39+
builder: (context, state) {
40+
if (state is ReloadSuccess) {
41+
context.read<AppBloc>().add(const GetUser());
42+
}
43+
if (state is NoInternetInitial) {
44+
return Column(
45+
children: [
46+
const NoDataFoundContainer(
47+
title: "No Internet Connectivity!"),
48+
SizedBox(
49+
height: 20.toAutoScaledHeight,
50+
),
51+
GestureDetector(
52+
onTap: () => context
53+
.read<NoInternetBloc>()
54+
.add(const ReloadPressed()),
55+
child: Container(
56+
height: 24.toAutoScaledHeight,
57+
width: 72.toAutoScaledWidth,
58+
padding: EdgeInsets.symmetric(
59+
horizontal: 8.toAutoScaledWidth,
60+
),
61+
decoration: ShapeDecoration(
62+
color: AppTheme.primary,
63+
shape: RoundedRectangleBorder(
64+
borderRadius: BorderRadius.circular(6)),
65+
),
66+
child: Center(
67+
child: Text(
68+
'Reload',
69+
style: AppTheme.bodyText1.copyWith(
70+
color: AppTheme.white,
71+
fontSize: 14.toAutoScaledFont,
72+
fontWeight: FontWeight.w600,
73+
decoration: TextDecoration.none),
74+
),
75+
),
76+
)),
77+
],
78+
);
79+
}
80+
return SizedBox(
81+
height: 200.toAutoScaledHeight,
82+
child: const Align(
83+
alignment: Alignment.bottomCenter,
84+
child: LoadingIndicator(),
85+
),
86+
);
87+
}),
88+
SizedBox(
89+
height: 100.toAutoScaledHeight,
90+
)
91+
],
92+
),
93+
));
3194
}
3295
}
96+
// Container(
97+
// color: Colors.white,
98+
// child: const Column(
99+
// children: [
100+
// NoInternetBanner(),
101+
// NoDataFoundContainer(title: "No Internet Connection"),
102+
// ],
103+
// ),
104+
// ),

0 commit comments

Comments
 (0)