Skip to content

Commit 4024aa2

Browse files
committed
refactor: Update API endpoints, add lazy loading for images, and update dependencies
1 parent 4aa730c commit 4024aa2

29 files changed

+811
-2816
lines changed

android/gradle.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
org.gradle.jvmargs=-Xmx4G
22
android.useAndroidX=true
33
android.enableJetifier=true
4+
android.enableDexingArtifactTransform=false

assets/lang/en.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@
6060
"newDrugsDescription": "View or activate new drugs.",
6161
"Active": "Active",
6262
"activeDrugs": "Active Drugs",
63-
"activeDrugsDescription": "View or deactivate new drugs.",
63+
"activeDrugsDescription": "View or deactivate active drugs.",
6464
"Inactive": "Inactive",
6565
"inactiveDrugs": "Inactive Drugs",
6666
"inactiveDrugsDescription": "View or reactivate past drugs.",

lib/core/networking/api/api_constants.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,17 @@ class ApiConstants {
3939
// Get Reminder List
4040
static const reminderList = "Reminder/list/";
4141

42-
// Add Reminder
42+
// Check Reminder
4343
static const makeReminderDone = "Reminder/check/{reminder_id}/";
4444

4545
// Prescription
4646
static const prescriptionsList1 =
4747
"Prescription/user/state-prescriptions/Doctorinfo/";
4848
static const prescriptionsList2 = "Prescription/user/active-prescriptions/";
49+
static const activatePrescription =
50+
"Prescription/user/activate-prescription/{prescription_id}/";
51+
static const deactivatePrescription =
52+
"Prescription/user/deactivate-prescription/{prescription_id}/";
4953

5054
// Prescription Detail
5155
static const specificPrescriptionInfo =

lib/core/networking/api/api_service.dart

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,20 @@ abstract class ApiService {
114114
@Header('Authorization') String? auth,
115115
);
116116

117+
// Activate Prescription
118+
@POST(ApiConstants.activatePrescription)
119+
Future<MessageResponse> activatePrescription(
120+
@Path('prescription_id') int prescriptionId,
121+
@Header('Authorization') String? auth,
122+
);
123+
124+
// Deactivate Prescription
125+
@POST(ApiConstants.deactivatePrescription)
126+
Future<MessageResponse> deactivatePrescription(
127+
@Path('prescription_id') int prescriptionId,
128+
@Header('Authorization') String? auth,
129+
);
130+
117131
//-------------------- DRUG INTERACTION --------------------//
118132

119133
// Search Drug from drug eye

lib/core/networking/api/api_service.g.dart

Lines changed: 64 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/core/networking/api/refresh_token_interceptor.dart

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
import 'dart:async';
2-
import 'dart:io';
3-
42
import 'package:dio/dio.dart';
53
import 'package:logger/logger.dart';
64
import 'package:pharmalink/core/networking/api/auth_service.dart';
@@ -11,8 +9,6 @@ import '../../../features/access/auth/logic/cubit/auth_cubit.dart';
119
import '../../../features/access/sign/data/models/signin/signin_response.dart';
1210
import '../../di/dependency_injection.dart';
1311
import 'api_constants.dart';
14-
import 'api_error_handler.dart';
15-
import 'api_result.dart';
1612

1713
class RefreshTokenInterceptor extends Interceptor {
1814
List<Map<dynamic, dynamic>> failedRequests = [];
@@ -172,11 +168,13 @@ class RefreshTokenInterceptor extends Interceptor {
172168
try {
173169
// Call your refresh token API
174170
final newAccessToken = await _refreshToken();
171+
// Save the new access token
172+
setAccessToken(newAccessToken.accessToken);
175173
// Update the authorization header
176-
dio.options.headers["Authorization"] = "${ApiConstants.tokenKey} ${newAccessToken.accessToken}";
174+
dio.options.headers["Authorization"] = AuthSharedPrefs.getAccessToken();
177175
// Retry the failed request with the new token
178176
final options = err.response!.requestOptions;
179-
options.headers["Authorization"] = "${ApiConstants.tokenKey} ${newAccessToken.accessToken}";
177+
options.headers["Authorization"] = AuthSharedPrefs.getAccessToken();
180178
final response = await dio.fetch(options);
181179
return handler.resolve(response);
182180
} catch (e) {

lib/core/widgets/form/form_button.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class FormButton extends StatelessWidget {
1212
final bool hideKeyboardWhenClicked;
1313
final double? width;
1414
final double? height;
15+
final Color? textColor;
1516

1617
const FormButton({
1718
super.key,
@@ -24,6 +25,7 @@ class FormButton extends StatelessWidget {
2425
this.hideKeyboardWhenClicked = true,
2526
this.width = double.infinity,
2627
this.height = 50.0,
28+
this.textColor,
2729
});
2830

2931
@override
@@ -55,7 +57,7 @@ class FormButton extends StatelessWidget {
5557
child: Text(
5658
text,
5759
style: AppTextStyle.titleSmall(context).copyWith(
58-
color: context.colorScheme.primaryContainer,
60+
color: textColor ?? context.colorScheme.primaryContainer,
5961
),
6062
),
6163
),
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import 'package:auto_route/auto_route.dart';
2+
import 'package:flutter/material.dart';
3+
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
4+
import 'package:pharmalink/core/helpers/extensions.dart';
5+
import 'package:pharmalink/core/theme/colors.dart';
6+
import 'package:pharmalink/core/theme/shadow.dart';
7+
import '../../../../../core/theme/styles.dart';
8+
import 'form/form_button.dart';
9+
10+
class ModalBottomWidget extends StatelessWidget {
11+
final String text;
12+
final List<Widget> buttons;
13+
const ModalBottomWidget(
14+
{super.key, required this.text, required this.buttons});
15+
16+
@override
17+
Widget build(BuildContext context) {
18+
return Container(
19+
width: double.infinity,
20+
height: context.height / 2,
21+
decoration: BoxDecoration(
22+
color: context.colorScheme.primaryContainer,
23+
boxShadow: AppShadows.box(context),
24+
borderRadius: const BorderRadius.only(
25+
topLeft: Radius.circular(16),
26+
topRight: Radius.circular(16),
27+
),
28+
),
29+
child: SingleChildScrollView(
30+
child: Padding(
31+
padding: const EdgeInsets.all(20),
32+
child: Column(
33+
children: [
34+
Padding(
35+
padding: const EdgeInsetsDirectional.fromSTEB(0, 8, 0, 8),
36+
child: Icon(
37+
FontAwesomeIcons.solidCircleQuestion,
38+
color: context.colorScheme.onSecondary,
39+
size: 42,
40+
),
41+
),
42+
Padding(
43+
padding: const EdgeInsetsDirectional.fromSTEB(0, 16, 0, 16),
44+
child: Text(
45+
text,
46+
textAlign: TextAlign.center,
47+
style: AppTextStyle.bodyMedium(context).copyWith(
48+
fontSize: 25,
49+
),
50+
),
51+
),
52+
const SizedBox(
53+
height: 16.0,
54+
),
55+
...buttons,
56+
FormButton(
57+
onPressed: () async => context.maybePop(),
58+
width: double.infinity,
59+
height: 60,
60+
text: 'Cancel',
61+
color: context.colorScheme.primaryContainer,
62+
textColor: context.colorScheme.secondary,
63+
padding: const EdgeInsets.symmetric(vertical: 8.0),
64+
),
65+
],
66+
),
67+
),
68+
),
69+
);
70+
}
71+
}

lib/features/main/home/ui/builders/home_header_builder.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import 'package:flutter/material.dart';
22
import 'package:flutter_bloc/flutter_bloc.dart';
33
import 'package:pharmalink/features/main/home/ui/widgets/home_header_row.dart';
44
import '../../../../../core/models/user.dart';
5-
import '../../../../../core/widgets/app_shimmer.dart';
65
import '../../../../../core/widgets/error_card.dart';
76
import '../../../profile/logic/profile_cubit/profile_cubit.dart';
87
import '../../../profile/logic/profile_cubit/profile_state.dart';

lib/features/main/home/ui/widgets/home_header_row.dart

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -147,32 +147,8 @@ class HomeHeaderRow extends StatelessWidget {
147147

148148
// Shimmer effect
149149
static Widget buildShimmer(BuildContext context) {
150-
return Row(
151-
mainAxisAlignment: MainAxisAlignment.spaceBetween,
152-
crossAxisAlignment: CrossAxisAlignment.end,
153-
children: [
154-
Row(
155-
crossAxisAlignment: CrossAxisAlignment.center,
156-
children: [
157-
AppShimmer.circle(
158-
context,
159-
width: 40,
160-
height: 40,
161-
),
162-
const SizedBox(width: 10),
163-
AppShimmer.rectangle(
164-
context,
165-
width: 200,
166-
height: 40,
167-
),
168-
],
169-
),
170-
AppShimmer.circle(
171-
context,
172-
width: 40,
173-
height: 40,
174-
),
175-
],
150+
return const AppShimmer(
151+
child: HomeHeaderRow(),
176152
);
177153
}
178154
}

0 commit comments

Comments
 (0)