Skip to content

Commit 000bff4

Browse files
authored
feat: fix dio bug and add interceptors for dev (#352)
1 parent 8ca1be0 commit 000bff4

File tree

3 files changed

+27
-4
lines changed

3 files changed

+27
-4
lines changed

mobile-app/lib/service/authentication_service.dart

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
11
import 'dart:convert';
22
import 'dart:developer';
33

4+
import 'package:curl_logger_dio_interceptor/curl_logger_dio_interceptor.dart';
45
import 'package:dio/dio.dart';
56
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
67
import 'package:flutter_webview_plugin/flutter_webview_plugin.dart';
78
import 'package:freecodecamp/models/main/user_model.dart';
9+
import 'package:pretty_dio_logger/pretty_dio_logger.dart';
810

911
class AuthenticationService {
1012
static final AuthenticationService _authenticationService =
1113
AuthenticationService._internal();
1214
final FlutterSecureStorage secureStorage = const FlutterSecureStorage();
13-
final browser = FlutterWebviewPlugin();
1415
bool isLoggedIn = false;
1516
String _csrf = '';
1617
String _csrfToken = '';
1718
String _jwtAccessToken = '';
18-
Dio dio = Dio();
19+
final Dio _dio = Dio();
1920

2021
FccUserModel? userModel;
2122

@@ -24,6 +25,11 @@ class AuthenticationService {
2425
}
2526

2627
Future<void> init() async {
28+
_dio.options.baseUrl = 'https://api.freecodecamp.dev';
29+
// Below two interceptors are for debugging purposes only
30+
// They will be put behind a devMode flag later
31+
_dio.interceptors.add(PrettyDioLogger(responseBody: false));
32+
_dio.interceptors.add(CurlLoggerDioInterceptor());
2733
if ((await secureStorage.containsKey(key: 'jwt_access_token')) == true &&
2834
(await secureStorage.containsKey(key: 'csrf_token')) == true &&
2935
(await secureStorage.containsKey(key: 'csrf')) == true) {
@@ -33,14 +39,14 @@ class AuthenticationService {
3339
isLoggedIn = true;
3440
fetchUser();
3541
}
36-
dio.options.baseUrl = 'https://api.freecodecamp.dev';
3742
}
3843

3944
void setFccUserModel(Map<String, dynamic> data) {
4045
userModel = FccUserModel.fromJson(data);
4146
}
4247

4348
Future<void> login() async {
49+
final browser = FlutterWebviewPlugin();
4450
browser.onUrlChanged.listen((String url) async {
4551
log('onUrlChanged: $url');
4652
if (url ==
@@ -57,6 +63,7 @@ class AuthenticationService {
5763
log('LOGGED IN');
5864
browser.close();
5965
fetchUser();
66+
browser.dispose();
6067
}
6168
});
6269
browser.launch(
@@ -81,7 +88,7 @@ class AuthenticationService {
8188
}
8289

8390
Future<Map<String, dynamic>> fetchUser() async {
84-
Response res = await dio.get(
91+
Response res = await _dio.get(
8592
'/user/get-session-user',
8693
options: Options(
8794
headers: {

mobile-app/pubspec.lock

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,13 @@ packages:
246246
url: "https://pub.dartlang.org"
247247
source: hosted
248248
version: "1.0.4"
249+
curl_logger_dio_interceptor:
250+
dependency: "direct main"
251+
description:
252+
name: curl_logger_dio_interceptor
253+
url: "https://pub.dartlang.org"
254+
source: hosted
255+
version: "0.0.3"
249256
dart_jsonwebtoken:
250257
dependency: "direct main"
251258
description:
@@ -898,6 +905,13 @@ packages:
898905
url: "https://pub.dartlang.org"
899906
source: hosted
900907
version: "1.5.0"
908+
pretty_dio_logger:
909+
dependency: "direct main"
910+
description:
911+
name: pretty_dio_logger
912+
url: "https://pub.dartlang.org"
913+
source: hosted
914+
version: "1.2.0-beta-1"
901915
process:
902916
dependency: transitive
903917
description:

mobile-app/pubspec.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ dependencies:
5757
photo_view: ^0.13.0
5858
share_plus: ^4.0.0
5959
flutter_highlight: ^0.7.0
60+
pretty_dio_logger: ^1.2.0-beta-1
61+
curl_logger_dio_interceptor: ^0.0.3
6062
dev_dependencies:
6163
build_runner: ^2.1.2
6264
integration_test:

0 commit comments

Comments
 (0)