Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions lib/common/auth0/auth.dart
Original file line number Diff line number Diff line change
Expand Up @@ -123,4 +123,9 @@ class Auth {
static Future<dynamic> messageBackground(Map<String, dynamic> message) async {
log(message.toString(), name: 'Backgroud Message');
}

static Future<Stream<User>> currentUserStream() async {
final user = await currentUser();
return UserDao.userStream(user.id);
}
}
15 changes: 15 additions & 0 deletions lib/core/domain/base_entity.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import 'package:equatable/equatable.dart';
import 'package:meta/meta.dart';

class BaseEntity extends Equatable {
final String id;
final DateTime created;
final DateTime updated;

BaseEntity(
{@required this.id, @required this.created, @required this.updated})
: assert(id != null && created != null && updated != null);

@override
List<Object> get props => [id, created, updated];
}
1 change: 1 addition & 0 deletions lib/core/error/exception.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
class DatabaseException implements Exception {}
10 changes: 10 additions & 0 deletions lib/core/usecase/usecase.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import 'package:equatable/equatable.dart';

abstract class UseCase<Type, Params> {
Future<Type> call(Params param);
}

class NoParams extends Equatable {
@override
List<Object> get props => [];
}
11 changes: 2 additions & 9 deletions lib/features/app/app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import 'package:better_help/common/auth0/auth.dart';
import 'package:better_help/common/screens.dart';
import 'package:better_help/features/auth0/ui/welcome_screen.dart';
import 'package:better_help/features/main/main_screen.dart';
import 'package:better_help/features/user_setting/nickname/nickname_screen.dart';
import 'package:better_help/features/user_setting/user_needs/user_needs_screen.dart';
import 'package:better_help/features/user_setting/presentations/pages/nickname_screen.dart';
import 'package:better_help/features/user_setting/presentations/pages/user_needs_screen.dart';
import 'package:better_help/generated/i18n.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
Expand Down Expand Up @@ -53,19 +53,12 @@ class _AppState extends State<App> with WidgetsBindingObserver {
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
appBloc.close();
super.dispose();
}

@override
Widget build(BuildContext context) {
return CupertinoApp(
theme: CupertinoThemeData(
primaryColor: Color(0xff54bd98),
brightness: Brightness.light,
primaryContrastingColor: Colors.white,
scaffoldBackgroundColor: Colors.white,
),
debugShowCheckedModeBanner: false,
onGenerateTitle: (BuildContext context) => S.of(context).app_name,
localizationsDelegates: const <LocalizationsDelegate>[
Expand Down
2 changes: 1 addition & 1 deletion lib/features/main/main_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import 'package:better_help/features/app/components/notification.dart';
import 'package:better_help/features/main/sharing_tab.dart';
import 'package:better_help/features/message/message_group_list/message_tab.dart';
import 'package:better_help/features/need_help/need_help_tab.dart';
import 'package:better_help/features/user_setting/more/more_tab.dart';
import 'package:better_help/features/user_setting/presentations/pages/more_tab.dart';
import 'package:better_help/generated/i18n.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
Expand Down
70 changes: 70 additions & 0 deletions lib/features/user_setting/data/models/user_model.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import 'package:better_help/features/user_setting/domain/entities/user.dart';
import 'package:better_help/generated/i18n.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/widgets.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:meta/meta.dart';
import 'package:uuid/uuid.dart';

part 'user_model.g.dart';

@JsonSerializable()
class UserModel extends User {
UserModel(
{String id,
DateTime created,
DateTime updated,
@required String displayName,
@required String email,
String phoneNumber,
@required String photoUrl,
List<UserType> types = const [UserType.NORMAL],
List<String> friendIds = const [],
List<String> tokens = const [],
UserNeeds needs,
bool online = false})
: super(
id: id ?? Uuid().v1(),
created: created ?? DateTime.now(),
updated: updated ?? DateTime.now(),
displayName: displayName,
email: email,
phoneNumber: phoneNumber,
photoUrl: photoUrl,
tokens: tokens,
types: types,
needs: needs,
friendIds: friendIds,
online: online);

factory UserModel.fromJson(Map<String, dynamic> json) =>
_$UserModelFromJson(json);

factory UserModel.fromUser(User user) => UserModel(
id: user.id,
displayName: user.displayName,
email: user.email,
photoUrl: user.photoUrl,
created: user.created,
updated: user.updated,
phoneNumber: user.phoneNumber,
tokens: user.tokens,
types: user.types,
needs: user.needs,
friendIds: user.friendIds,
online: user.online,
);

Map<String, dynamic> toJson() => _$UserModelToJson(this);
}

Map<UserNeeds, String> userNeedsOptionMapString(BuildContext context) => {
UserNeeds.TEENAGE: S.of(context).option_family,
UserNeeds.FAMILY: S.of(context).option_family,
UserNeeds.LOVE: S.of(context).option_love,
UserNeeds.GO_AHEAD: S.of(context).option_go_a_head,
};

String userNeedsDescription(BuildContext context, UserNeeds needs) =>
S.of(context).need_help_description(
userNeedsOptionMapString(context)[needs].toLowerCase());
89 changes: 89 additions & 0 deletions lib/features/user_setting/data/models/user_model.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import 'package:better_help/features/user_setting/data/models/user_model.dart';
import 'package:better_help/features/user_setting/data/user_setting_data_source.dart';
import 'package:better_help/features/user_setting/domain/entities/user.dart';
import 'package:better_help/features/user_setting/domain/repositories/user_setting_repository.dart';
import 'package:meta/meta.dart';

class UserSettingRepositoryImpl implements UserSettingRepository {
final UserSettingDataSource dataSource;

UserSettingRepositoryImpl({@required this.dataSource});

@override
Future<void> updateUser(User user) => dataSource.updateUser(UserModel.fromUser(user));

@override
Future<User> getUser(String id) => dataSource.getUser(id);
}
30 changes: 30 additions & 0 deletions lib/features/user_setting/data/user_setting_data_source.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import 'dart:async';

import 'package:better_help/core/error/exception.dart';
import 'package:better_help/features/user_setting/data/models/user_model.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

abstract class UserSettingDataSource {
Future<void> updateUser(UserModel user);

Future<UserModel> getUser(String id);
}

class UserSettingDataSourceImpl implements UserSettingDataSource {
CollectionReference get _userCollection =>
Firestore.instance.collection('users');

@override
Future<void> updateUser(UserModel user) =>
_userCollection.document(user.id).updateData(user.toJson());

@override
Future<UserModel> getUser(String id) async {
final doc = await _userCollection.document(id).get();
if (doc.exists) {
return UserModel.fromJson(doc.data);
} else {
throw DatabaseException();
}
}
}
63 changes: 63 additions & 0 deletions lib/features/user_setting/domain/entities/user.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import 'package:better_help/core/domain/base_entity.dart';
import 'package:flutter/cupertino.dart';

enum UserType { NORMAL, VOLUNTEER }

enum UserNeeds { TEENAGE, FAMILY, LOVE, GO_AHEAD }

class User extends BaseEntity {
final String displayName;
final String email;
final String phoneNumber;
final String photoUrl;
final List<UserType> types;
final List<String> friendIds;
final List<String> tokens;
final UserNeeds needs;
final bool online;

User(
{@required String id,
@required DateTime created,
@required DateTime updated,
@required this.displayName,
@required this.email,
this.phoneNumber,
@required this.photoUrl,
@required this.types,
@required this.friendIds,
@required this.tokens,
this.needs,
@required this.online})
: super(id: id, created: created, updated: updated);

User copyWith({
String id,
DateTime created,
DateTime updated,
String displayName,
String email,
String phoneNumber,
String photoUrl,
List<UserType> types,
List<String> friendIds,
List<String> tokens,
UserNeeds needs,
bool online,
}) {
return User(
id: id ?? this.id,
created: created ?? this.created,
updated: updated ?? this.updated,
displayName: displayName ?? this.displayName,
email: email ?? this.email,
phoneNumber: phoneNumber ?? this.phoneNumber,
photoUrl: photoUrl ?? this.photoUrl,
types: types ?? this.types,
tokens: tokens ?? this.tokens,
needs: needs ?? this.needs,
online: online ?? this.online,
friendIds: friendIds ?? this.friendIds,
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import 'package:better_help/features/user_setting/domain/entities/user.dart';

abstract class UserSettingRepository {
Future<User> getUser(String id);

Future<void> updateUser(User user);
}
17 changes: 17 additions & 0 deletions lib/features/user_setting/domain/usecases/get_current_user.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import 'package:better_help/core/usecase/usecase.dart';
import 'package:better_help/features/user_setting/domain/entities/user.dart';
import 'package:better_help/features/user_setting/domain/repositories/user_setting_repository.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:meta/meta.dart';

class GetCurrentUser implements UseCase<User, NoParams> {
final UserSettingRepository repository;

GetCurrentUser({@required this.repository});

@override
Future<User> call(NoParams param) async {
final fUser = await FirebaseAuth.instance.currentUser();
return repository.getUser(fUser.uid);
}
}
13 changes: 13 additions & 0 deletions lib/features/user_setting/domain/usecases/update_user.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import 'package:better_help/core/usecase/usecase.dart';
import 'package:better_help/features/user_setting/domain/entities/user.dart';
import 'package:better_help/features/user_setting/domain/repositories/user_setting_repository.dart';
import 'package:meta/meta.dart';

class UpdateUser implements UseCase<void, User> {
final UserSettingRepository repository;

UpdateUser({@required this.repository});

@override
Future<void> call(User user) => repository.updateUser(user);
}
3 changes: 0 additions & 3 deletions lib/features/user_setting/more/bloc/bloc.dart

This file was deleted.

Loading