Skip to content

Commit

Permalink
fix DI, add image avatar
Browse files Browse the repository at this point in the history
  • Loading branch information
dungngminh committed Nov 29, 2021
1 parent 2037c86 commit d264982
Show file tree
Hide file tree
Showing 25 changed files with 341 additions and 141 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/
.vscode/

# Flutter/Dart/Pub related
**/doc/api/
Expand Down
27 changes: 12 additions & 15 deletions lib/data/models/room_chat/room_chat.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,37 +7,34 @@ class RoomChat {
String? name;
List<Member>? members;
bool? isRead;

RoomChat({this.id, this.name, this.members, this.isRead});
bool? haveMessage;
RoomChat({this.id, this.name, this.members, this.isRead, this.haveMessage});

@override
String toString() {
return 'RoomChat(id: $id, name: $name, members: $members, isRead: $isRead)';
return 'RoomChat(id: $id, name: $name, members: $members, isRead: $isRead, haveMessage: $haveMessage)';
}

factory RoomChat.fromMap(Map<String, dynamic> data) => RoomChat(
id: data['_id'] as String?,
name: data['name'] as String?,
members: (data['members'] as List<dynamic>?)
?.map((e) => Member.fromMap(e as Map<String, dynamic>))
.toList(),
isRead: data['isRead'] as bool?,
);
factory RoomChat.fromJson(Map<String, dynamic> data) => RoomChat(
id: data['_id'] as String?,
name: data['name'] as String?,
members: (data['members'] as List<dynamic>?)
?.map((e) => Member.fromMap(e as Map<String, dynamic>))
.toList(),
isRead: data['isRead'] as bool?,
haveMessage: data['haveMessage'] as bool?);

Map<String, dynamic> toMap() => {
'_id': id,
'name': name,
'members': members?.map((e) => e.toMap()).toList(),
'isRead': isRead,
'haveMessage': haveMessage,
};

/// `dart:convert`
///
/// Parses the string and returns the resulting Json object as [RoomChat].
factory RoomChat.fromJson(String data) {
return RoomChat.fromMap(json.decode(data) as Map<String, dynamic>);
}

/// `dart:convert`
///
/// Converts [RoomChat] to a JSON string.
Expand Down
5 changes: 5 additions & 0 deletions lib/data/models/user.dart
Original file line number Diff line number Diff line change
Expand Up @@ -82,20 +82,24 @@ class Profile {
this.age,
this.phone,
this.address,
this.avatar,
});

String? fullname;
String? gender;
int? age;
String? phone;
String? address;
String? avatar;

factory Profile.fromJson(Map<String, dynamic> json) => Profile(
fullname: json["fullname"],
gender: json["gender"],
age: json["age"],
phone: json["phone"],
address: json["address"],
avatar: json["avatar"],

);

Map<String, dynamic> toJson() => {
Expand All @@ -104,5 +108,6 @@ class Profile {
"age": age,
"phone": phone,
"address": address,
"avatar": avatar,
};
}
14 changes: 14 additions & 0 deletions lib/data/repositories/room_repository.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import 'package:happy_care/core/utils/shared_pref.dart';
import 'package:happy_care/data/models/room_chat/room_chat.dart';
import 'package:happy_care/data/services/room_api.dart';
import 'dart:convert' as convert;

Expand All @@ -15,4 +16,17 @@ class RoomRepository {
var converted = convert.jsonDecode(response);
return converted["success"];
}

Future<List<RoomChat>?> getMyRoom() async {
try {
String token = await SharedPrefUtils.getStringKey('token');
String response = await roomApi!.getMyRoom(token);
var converted = convert.jsonDecode(response);
Iterable listRoom = converted['data']['rooms'];
return listRoom.map((room) => RoomChat.fromJson(room)).toList();
} catch (_) {
print(_.toString());
return null;
}
}
}
27 changes: 12 additions & 15 deletions lib/data/repositories/user_repository.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,10 @@ import 'dart:convert' as convert;
import 'package:happy_care/core/utils/shared_pref.dart';
import 'package:happy_care/data/models/user.dart';
import 'package:happy_care/data/services/user_api.dart';
import 'package:happy_care/data/socket/socket_io_service.dart';

class UserRepository {
final SocketIOService? ioService;
final UserApi? userApi;
UserRepository({this.userApi, this.ioService});
UserRepository({this.userApi});

Future<bool> createNewUser(
{required String email, required String password}) async {
Expand All @@ -29,21 +27,15 @@ class UserRepository {
await SharedPrefUtils.setStringKey('token', token);
return true;
} catch (_) {
print(_ as Exception);
return false;
}
}

Future<bool> signOut() async {
try {
String token = await SharedPrefUtils.getStringKey('token');
ioService!.signOut();
await userApi!.signOut(token: token);
await SharedPrefUtils.removeStringKey('token');
return true;
} catch (_) {
return false;
}
String token = await SharedPrefUtils.getStringKey('token');
await userApi!.signOut(token: token);
print("Token is deleted ?${await SharedPrefUtils.removeStringKey('token')}");
return true;
}

Future<User> getUserData() async {
Expand All @@ -61,12 +53,17 @@ class UserRepository {
}

Future<bool> updateInformation(
{String? fullname, int? age, String? phone, String? address}) async {
{String? fullname,
int? age,
String? phone,
String? address,
String? avatar}) async {
Map<String, dynamic> body = {
"fullname": fullname,
"age": age,
"phone": phone,
"address": address
"address": address,
"avatar": avatar,
};

String token = await SharedPrefUtils.getStringKey('token');
Expand Down
2 changes: 1 addition & 1 deletion lib/data/services/doctor_api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class DoctorApi {
// Uri.parse("${dotenv.env['BASE_URL']}$path"),
Uri.parse("${dotenv.env['DEV_URL']}$path"),
headers: headers)
.timeout(Duration(minutes: 2), onTimeout: () {
.timeout(Duration(minutes: 1), onTimeout: () {
throw TimeoutException("Time out exception");
});
if (response.statusCode == 200) {
Expand Down
42 changes: 37 additions & 5 deletions lib/data/services/room_api.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import 'dart:async';

import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:http/http.dart';
import 'dart:convert' as convert;

class RoomApi {
final Client http;

Expand All @@ -20,11 +23,15 @@ class RoomApi {
'Content-Type': 'application/json',
};

var response = await http.post(
// Uri.parse("${dotenv.env['BASE_URL']}/api/rooms/verify-room"),
Uri.parse("${dotenv.env['DEV_URL']}/api/rooms/verify-room"),
body: convert.jsonEncode(body),
headers: headers);
var response = await http
.post(
// Uri.parse("${dotenv.env['BASE_URL']}/api/rooms/verify-room"),
Uri.parse("${dotenv.env['DEV_URL']}/api/rooms/verify-room"),
body: convert.jsonEncode(body),
headers: headers)
.timeout(Duration(minutes: 1), onTimeout: () {
throw TimeoutException("Time out exception");
});

if (response.statusCode == 200) {
print("============CHECK_ROOM_API_RESPONSE===========");
Expand All @@ -35,4 +42,29 @@ class RoomApi {
}
return response.body;
}

Future<String> getMyRoom(String token) async {
Map<String, String> headers = {
'Authorization': 'Bearer $token',
};

var response = await http
.get(
// Uri.parse("${dotenv.env['BASE_URL']}/api/rooms/me"),
Uri.parse("${dotenv.env['DEV_URL']}/api/rooms/me"),
headers: headers,
)
.timeout(Duration(minutes: 2), onTimeout: () {
throw TimeoutException("Time out exception");
});

if (response.statusCode == 200) {
print("============GET_ROOM_API_RESPONSE===========");
print(response.body);
} else {
print("============ERROR_GET_ROOM_API_RESPONSE===========");
print(response.body);
}
return response.body;
}
}
3 changes: 2 additions & 1 deletion lib/data/socket/socket_io_service.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:happy_care/core/utils/shared_pref.dart';
import 'package:happy_care/data/models/doctor_inapp.dart';
import 'package:socket_io_client/socket_io_client.dart' as io;
import 'package:flutter_dotenv/flutter_dotenv.dart';

class SocketIOService {
late io.Socket socket;
Expand All @@ -16,6 +16,7 @@ class SocketIOService {
.build());
socket.connect();
String token = await SharedPrefUtils.getStringKey('token');
print(token);
socket.onConnect((_) {
socket.emitWithAck('join', token, ack: (data) {
if (data != null) {
Expand Down
25 changes: 23 additions & 2 deletions lib/modules/chat/chat_controller.dart
Original file line number Diff line number Diff line change
@@ -1,17 +1,38 @@
import 'package:get/get.dart';
import 'package:happy_care/data/models/room_chat/room_chat.dart';
import 'package:happy_care/data/repositories/room_repository.dart';
import 'package:happy_care/data/repositories/user_repository.dart';
import 'package:happy_care/data/socket/socket_io_service.dart';
import 'package:happy_care/modules/user/user_controller.dart';

enum Statuss { loading, error, idle }

class ChatController extends GetxController {
final SocketIOService? socketService;
final RoomRepository? roomRepository;

final UserController userController = Get.find();
final listRoom = RxList<RoomChat>([]);
final status = Statuss.idle.obs;

ChatController({this.socketService, this.roomRepository});

@override
Future<void> onInit() async {
super.onInit();
status(Statuss.loading);
await loadMyRooms();
}

Future<void> loadMyRooms() async {
await roomRepository!.getMyRoom().then((room) {
listRoom(room!.where((element) => element.haveMessage == true).toList());
print(listRoom.toString());
status(Statuss.idle);
}).onError((error, stackTrace) {
print(error);
status(Statuss.error);
});
}

joinToChatRoom({required String doctorId}) async {
bool result = await roomRepository!.checkRoomIfExist(
userId: userController.user.value.id, doctorId: doctorId);
Expand Down
Loading

0 comments on commit d264982

Please sign in to comment.