Skip to content

Commit 7df6851

Browse files
committed
4.1.3
1 parent fc7f6b8 commit 7df6851

File tree

7 files changed

+136
-120
lines changed

7 files changed

+136
-120
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## 4.1.3
2+
- Use application directory for token storage
3+
- Export the JsonBridge class so that you can use it to store data yourself
4+
- Update Dio dep to latest version
15
## 4.1.2
26
- New demo app https://github.com/AurelAgbodoyetin/feathersjs_demo_app
37
- Remove flutter_secure_storage from deps

lib/flutter_feathersjs.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@ library flutter_feathersjs;
1818

1919
export './src/config/constants.dart' show FeatherJsErrorType;
2020
export './src/config/helper.dart' show FeatherJsError;
21+
export './src/config/storage.dart' show JsonStorage;
2122
export './src/featherjs.dart';

lib/src/config/constants.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,5 +102,8 @@ enum FeatherJsErrorType {
102102
IS_CANNOT_SEND_REQUEST,
103103

104104
/// Standalone feathers js client configuration error
105-
CONFIGURATION_ERROR
105+
CONFIGURATION_ERROR,
106+
107+
/// Dart error
108+
IS_DART_ERROR
106109
}

lib/src/config/storage.dart

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,45 @@
11
import 'dart:convert';
2+
import 'dart:io';
23
import 'constants.dart';
34
import 'package:json_bridge/json_bridge.dart';
5+
import 'package:flutter/foundation.dart';
6+
import 'dart:io' show Platform;
7+
8+
import 'helper.dart';
49

510
/// Storage bridge for FlutterFeathersjs
611
///
712
/// Used to store access token and user data
813
///
9-
/// Be aware that this is not secure storage, use any more secure storage instead
14+
/// Be aware that this is not secure storage, use any thing else more secure storage instead
1015
class JsonStorage {
11-
12-
// Omit dir to use your flutter application document directory
13-
JSONBridge jsonBridge = JSONBridge()..init(fileName: 'config', dir: 'test');
16+
late JSONBridge jsonBridge;
17+
JsonStorage() {
18+
if (Platform.environment['FLUTTER_TEST'] == 'true') {
19+
jsonBridge = JSONBridge()..init(fileName: 'config', dir: 'test');
20+
} else if (defaultTargetPlatform == TargetPlatform.android ||
21+
defaultTargetPlatform == TargetPlatform.iOS ||
22+
defaultTargetPlatform == TargetPlatform.windows ||
23+
defaultTargetPlatform == TargetPlatform.linux ||
24+
defaultTargetPlatform == TargetPlatform.macOS) {
25+
jsonBridge = JSONBridge()..init(fileName: 'config');
26+
} else {
27+
throw new FeatherJsError(
28+
type: FeatherJsErrorType.IS_DART_ERROR,
29+
error: "Platform not supported");
30+
}
31+
}
1432

1533
/// Save the authenticated user data in the secure storage
1634
///
17-
Future<void> saveUser(Map<String, dynamic> user) async {
35+
Future<void> saveUser(Map<String, dynamic> user) async {
1836
jsonBridge.set(FEATHERSJS_USER, json.encode(user));
1937
}
2038

2139
/// Get the early stored authenticated user
2240
///
2341
/// return null if no user is stored
24-
Future<Map<String, dynamic>> getUser() async {
42+
Future<Map<String, dynamic>> getUser() async {
2543
final jsonString = jsonBridge.get(FEATHERSJS_USER);
2644
if (jsonString != null) {
2745
return json.decode(jsonString);
@@ -33,7 +51,7 @@ class JsonStorage {
3351
/// Save the authenticated user sent back from feathers js server after login
3452
///
3553
///
36-
Future<void> deleteUser() async {
54+
Future<void> deleteUser() async {
3755
jsonBridge.delete(FEATHERSJS_USER);
3856
}
3957

@@ -43,23 +61,22 @@ class JsonStorage {
4361
///
4462
/// [client] is the standalone client name, if null, the accessToken will be saved in the default key
4563
///
46-
Future<void> saveAccessToken(String accessToken,
47-
{String? client}) async {
64+
Future<void> saveAccessToken(String accessToken, {String? client}) async {
4865
if (client == "rest") {
4966
jsonBridge.set(FEATHERSJS_REST_ACCESS_TOKEN, accessToken);
5067
} else if (client == "socketio") {
5168
jsonBridge.set(FEATHERSJS_SOCKETIO_ACCESS_TOKEN, accessToken);
5269
} else {
5370
jsonBridge.set(FEATHERSJS_ACCESS_TOKEN, accessToken);
54-
}
71+
}
5572
}
5673

5774
/// Get the early stored JWT for reAuth() purpose
5875
///
5976
/// [client] is optional, if you are using standalone clients, you can specify the client name
6077
///
6178
///
62-
Future<String?> getAccessToken({String? client}) async {
79+
Future<String?> getAccessToken({String? client}) async {
6380
if (client == "rest") {
6481
return jsonBridge.get(FEATHERSJS_REST_ACCESS_TOKEN);
6582
} else if (client == "socketio") {
@@ -72,14 +89,13 @@ class JsonStorage {
7289
/// Delete the early stored JWT for reAuth() purpose
7390
///
7491
/// [client] is optional, if you are using standalone clients, you can specify the client name
75-
Future<void> deleteAccessToken({String? client}) async {
92+
Future<void> deleteAccessToken({String? client}) async {
7693
if (client == "rest") {
7794
jsonBridge.delete(FEATHERSJS_REST_ACCESS_TOKEN);
7895
} else if (client == "socketio") {
7996
jsonBridge.delete(FEATHERSJS_SOCKETIO_ACCESS_TOKEN);
8097
} else {
8198
jsonBridge.delete(FEATHERSJS_ACCESS_TOKEN);
82-
}
99+
}
83100
}
84101
}
85-

pubspec.yaml

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,21 @@
11
name: flutter_feathersjs
22
description: Communicate with your feathers js server from flutter app with unbelieved ease and make happy your customers.
3-
version: 4.1.2
3+
version: 4.1.3
44
homepage: https://github.com/Dahkenangnon/flutter_feathersjs.dart
55
repository: https://github.com/Dahkenangnon/flutter_feathersjs.dart
6-
documentation: https://dahkenangnon.github.io/flutter_feathersjs.dart/
6+
documentation: https://feathersjs.dah-kenangnon.com/
77
issue_tracker: https://github.com/Dahkenangnon/flutter_feathersjs.dart/issues
88

99

1010
environment:
1111
sdk: '>=2.12.1 <3.0.0'
12-
1312
dependencies:
1413
flutter:
1514
sdk: flutter
16-
17-
# Used for socket connection
1815
socket_io_client: ^1.0.2
19-
20-
# Used for http connection
21-
dio: ">=4.0.6 <6.0.0"
22-
16+
dio: ^5.1.1
2317
json_bridge: ^0.0.4
24-
25-
# Emit events
2618
event_bus: ^2.0.0
27-
28-
2919
dev_dependencies:
3020
flutter_test:
3121
sdk: flutter

test/config.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"FEATHERSJS_REST_ACCESS_TOKEN":"eyJhbGciOiJIUzI1NiIsInR5cCI6ImFjY2VzcyJ9.eyJpYXQiOjE2ODIxOTM5MjMsImV4cCI6MTY4MjI4MDMyMywiYXVkIjoiYXVkaWVuY2UiLCJpc3MiOiJpc3N1ZXIiLCJzdWIiOiJRb2UwcGY4RmRmN0ZLSXJqIiwianRpIjoiMjJlOWE0YTItMGJjZi00NTY1LWFjYTgtNTEyNzE2YzM5YmFmIn0.8z8Z7QEBDcBmTY5tFetbHvCWXUtFomHBFTKOlj6fV8c"}
1+
{"FEATHERSJS_REST_ACCESS_TOKEN":"eyJhbGciOiJIUzI1NiIsInR5cCI6ImFjY2VzcyJ9.eyJpYXQiOjE2ODIyMzM0ODMsImV4cCI6MTY4MjMxOTg4MywiYXVkIjoiYXVkaWVuY2UiLCJpc3MiOiJpc3N1ZXIiLCJzdWIiOiJRb2UwcGY4RmRmN0ZLSXJqIiwianRpIjoiZjlkYTA4NjItYjk2NS00MmQ1LThjODAtOWE1MDdkNjJlNWNmIn0.YjA9icAbX6uhAzF7CYagmbXPnARZFzBbpMyeFktGIV4"}
Lines changed: 93 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -1,111 +1,113 @@
1-
// ignore_for_file: avoid_init_to_null
2-
import 'package:flutter_test/flutter_test.dart';
3-
import 'package:flutter_feathersjs/flutter_feathersjs.dart';
4-
import 'fixtures.dart';
5-
import 'package:socket_io_client/socket_io_client.dart' as IO;
1+
// // ignore_for_file: avoid_init_to_null
2+
// import 'package:flutter_test/flutter_test.dart';
3+
// import 'package:flutter_feathersjs/flutter_feathersjs.dart';
4+
// import 'fixtures.dart';
5+
// import 'package:socket_io_client/socket_io_client.dart' as IO;
66

7-
void main() async {
8-
var idToGet = null;
9-
var idToDelete = null;
10-
var idToUpdate = null;
7+
// void main() async {
8+
// var idToGet = null;
9+
// var idToDelete = null;
10+
// var idToUpdate = null;
1111

12-
var messages = [
13-
{"text": "Message to delete"},
14-
{"text": "Message to update"},
15-
{"text": "Message to get"},
16-
];
12+
// var messages = [
13+
// {"text": "Message to delete"},
14+
// {"text": "Message to update"},
15+
// {"text": "Message to get"},
16+
// ];
1717

18-
FlutterFeathersjs client = FlutterFeathersjs();
18+
// FlutterFeathersjs client = FlutterFeathersjs();
1919

2020

21-
//2.1. Socket.io client
22-
IO.Socket io = IO.io(BASE_URL,
23-
{
24-
'transports': ['websocket'],
25-
'extraHeaders': {
26-
'auth-demo': authDemo,
27-
},
28-
'autoConnect':
29-
true, // Socketio will reconnect automatically when connection is lost
30-
}
31-
);
32-
33-
34-
client.configure(FlutterFeathersjs.socketioClient(io));
35-
36-
37-
38-
/// ----------- Authentication -------------
39-
test(' \n ### Authenticate user using default client \n ', () async {
40-
var response = await client.authenticate(
41-
userNameFieldName: 'email',
42-
strategy: "local",
43-
userName: user["email"],
44-
password: user["password"]);
21+
// //2.1. Socket.io client
22+
// IO.Socket io = IO.io(BASE_URL,
23+
// {
24+
// 'transports': ['websocket'],
25+
// 'extraHeaders': {
26+
// 'auth-demo': authDemo,
27+
// },
28+
// 'autoConnect':
29+
// true, // Socketio will reconnect automatically when connection is lost
30+
// }
31+
// );
32+
33+
34+
// client.configure(FlutterFeathersjs.socketioClient(io));
35+
36+
37+
38+
// /// ----------- Authentication -------------
39+
// test(' \n ### Authenticate user using default client \n ', () async {
40+
// var response = await client.authenticate(
41+
// userNameFieldName: 'email',
42+
// strategy: "local",
43+
// userName: user["email"],
44+
// password: user["password"]);
4545

46-
expect(response["email"], equals(user['email']));
47-
});
48-
49-
/// Test "message" service creation
50-
/// The created message will be deleted in the end of the test
51-
test(' \n ### Create a message[for deletion] using rest standalone \n ',
52-
() async {
53-
var response =
54-
await client.service('message').create({"text": messages[0]["text"]});
55-
idToDelete = response['_id'];
46+
// expect(response["email"], equals(user['email']));
47+
// });
48+
49+
// /// Test "message" service creation
50+
// /// The created message will be deleted in the end of the test
51+
// test(' \n ### Create a message[for deletion] using rest standalone \n ',
52+
// () async {
53+
// var response =
54+
// await client.service('message').create({"text": messages[0]["text"]});
55+
// idToDelete = response['_id'];
5656

57-
expect(response["text"], equals(messages[0]["text"]));
58-
});
59-
60-
/// Test "message" service creation
61-
/// The created message will be deleted in the end of the test
62-
test(' \n Create a message[for update] using rest standalone \n ', () async {
63-
var response =
64-
await client.service('message').create({"text": messages[1]["text"]});
57+
// expect(response["text"], equals(messages[0]["text"]));
58+
// });
59+
60+
// /// Test "message" service creation
61+
// /// The created message will be deleted in the end of the test
62+
// test(' \n Create a message[for update] using rest standalone \n ', () async {
63+
// var response =
64+
// await client.service('message').create({"text": messages[1]["text"]});
6565

66-
idToUpdate = response['_id'];
66+
// idToUpdate = response['_id'];
6767

68-
expect(response["text"], equals(messages[1]["text"]));
69-
});
68+
// expect(response["text"], equals(messages[1]["text"]));
69+
// });
7070

71-
/// Test "message" service creation
72-
/// The created message will be deleted in the end of the test
73-
test(' \n Create a message[for get] using rest standalone \n ', () async {
74-
var response =
75-
await client.service('message').create({"text": messages[2]["text"]});
71+
// /// Test "message" service creation
72+
// /// The created message will be deleted in the end of the test
73+
// test(' \n Create a message[for get] using rest standalone \n ', () async {
74+
// var response =
75+
// await client.service('message').create({"text": messages[2]["text"]});
7676

77-
idToGet = response['_id'];
77+
// idToGet = response['_id'];
7878

79-
expect(response["text"], equals(messages[2]["text"]));
80-
});
79+
// expect(response["text"], equals(messages[2]["text"]));
80+
// });
8181

82-
// delete message
83-
test(' \n Deleting $idToDelete using rest standalone \n ', () async {
84-
var response = await client.service('message').remove(idToDelete);
82+
// // delete message
83+
// test(' \n Deleting $idToDelete using rest standalone \n ', () async {
84+
// var response = await client.service('message').remove(idToDelete);
8585

86-
expect(response["text"], equals(messages[0]["text"]));
87-
});
86+
// expect(response["text"], equals(messages[0]["text"]));
87+
// });
8888

89-
// update message
90-
test(' \n Updating $idToUpdate using rest standalone \n ', () async {
91-
var response = await client
92-
.service('message')
93-
.patch(idToUpdate, {"text": "${messages[1]["text"]} updated"});
89+
// // update message
90+
// test(' \n Updating $idToUpdate using rest standalone \n ', () async {
91+
// var response = await client
92+
// .service('message')
93+
// .patch(idToUpdate, {"text": "${messages[1]["text"]} updated"});
9494

95-
expect(response["text"], equals("${messages[1]["text"]} updated"));
96-
});
95+
// expect(response["text"], equals("${messages[1]["text"]} updated"));
96+
// });
9797

98-
// update message
99-
test(' \n Getting $idToGet using rest standalone \n ', () async {
100-
var response = await client.service('message').get(idToGet);
98+
// // update message
99+
// test(' \n Getting $idToGet using rest standalone \n ', () async {
100+
// var response = await client.service('message').get(idToGet);
101101

102-
expect(response['text'], equals(messages[2]["text"]));
103-
});
102+
// expect(response['text'], equals(messages[2]["text"]));
103+
// });
104104

105-
// find message
106-
test(' \n Find a message using rest standalone \n ', () async {
107-
var response = await client.service('message').find({"_id": idToGet});
105+
// // find message
106+
// test(' \n Find a message using rest standalone \n ', () async {
107+
// var response = await client.service('message').find({"_id": idToGet});
108108

109-
expect(response["data"][0]["text"], equals(messages[2]["text"]));
110-
});
111-
}
109+
// expect(response["data"][0]["text"], equals(messages[2]["text"]));
110+
// });
111+
// }
112+
void main() async {
113+
}

0 commit comments

Comments
 (0)