Added user screen
This commit is contained in:
parent
a1e07ef7e9
commit
8fea8a95e4
3
.env
3
.env
@ -1 +1,2 @@
|
|||||||
AUTH0_CUSTOM_SCHEME=com.cosqnet.telemednet
|
CUSTOM_SCHEME=com.cosqnet.telemednet
|
||||||
|
PROFILE_COLLECTION_NAME=telemednetusers
|
||||||
|
|||||||
@ -7,6 +7,9 @@
|
|||||||
|
|
||||||
# The following line activates a set of recommended lints for Flutter apps,
|
# The following line activates a set of recommended lints for Flutter apps,
|
||||||
# packages, and plugins designed to encourage good coding practices.
|
# packages, and plugins designed to encourage good coding practices.
|
||||||
|
analyzer:
|
||||||
|
errors:
|
||||||
|
avoid_print: ignore
|
||||||
include: package:flutter_lints/flutter.yaml
|
include: package:flutter_lints/flutter.yaml
|
||||||
|
|
||||||
linter:
|
linter:
|
||||||
|
|||||||
39
lib/data_service.dart
Normal file
39
lib/data_service.dart
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
import 'package:cloud_firestore/cloud_firestore.dart';
|
||||||
|
import 'package:firebase_auth/firebase_auth.dart';
|
||||||
|
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
||||||
|
import 'package:telemednet/telemed_user.dart';
|
||||||
|
|
||||||
|
class DataService {
|
||||||
|
static final String profileCollectionName =
|
||||||
|
dotenv.env['PROFILE_COLLECTION_NAME']!;
|
||||||
|
static final db = FirebaseFirestore.instance;
|
||||||
|
|
||||||
|
static User? getCurrentUser() {
|
||||||
|
return FirebaseAuth.instance.currentUser;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Future<TelemedUser?> getProfile() async {
|
||||||
|
try {
|
||||||
|
final user = getCurrentUser();
|
||||||
|
if (user == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
final uid = user.uid;
|
||||||
|
final profiles = db.collection(profileCollectionName);
|
||||||
|
final profile = await profiles.doc(uid).get();
|
||||||
|
if (!profile.exists) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
final profileData = profile.data();
|
||||||
|
if (profileData == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
var telemedUser = TelemedUser.fromJson(profileData, uid);
|
||||||
|
return telemedUser;
|
||||||
|
} catch (e) {
|
||||||
|
print(e);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
31
lib/error_view.dart
Normal file
31
lib/error_view.dart
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class ErrorView extends StatefulWidget {
|
||||||
|
final String message;
|
||||||
|
final String okMessage;
|
||||||
|
final Function() onPressed;
|
||||||
|
|
||||||
|
const ErrorView(
|
||||||
|
{super.key,
|
||||||
|
required this.message,
|
||||||
|
required this.okMessage,
|
||||||
|
required this.onPressed});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<ErrorView> createState() => _ErrorViewState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _ErrorViewState extends State<ErrorView> {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Center(
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Text(widget.message),
|
||||||
|
ElevatedButton(
|
||||||
|
onPressed: widget.onPressed, child: Text(widget.okMessage))
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,7 +1,7 @@
|
|||||||
import 'package:firebase_auth/firebase_auth.dart';
|
import 'package:firebase_auth/firebase_auth.dart';
|
||||||
import 'package:firebase_ui_auth/firebase_ui_auth.dart';
|
import 'package:firebase_ui_auth/firebase_ui_auth.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:telemednet/user_check_screen.dart';
|
import 'package:telemednet/user_screen.dart';
|
||||||
|
|
||||||
class LaunchScreen extends StatefulWidget {
|
class LaunchScreen extends StatefulWidget {
|
||||||
const LaunchScreen({super.key});
|
const LaunchScreen({super.key});
|
||||||
@ -30,7 +30,7 @@ class _LaunchScreenState extends State<LaunchScreen> {
|
|||||||
child: CircularProgressIndicator(),
|
child: CircularProgressIndicator(),
|
||||||
);
|
);
|
||||||
} else if (snapshot.hasData) {
|
} else if (snapshot.hasData) {
|
||||||
return const UserCheckScreen();
|
return const UserScreen();
|
||||||
} else {
|
} else {
|
||||||
return const SignInScreen();
|
return const SignInScreen();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import 'package:firebase_ui_auth/firebase_ui_auth.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:telemednet/launch_screen.dart';
|
import 'package:telemednet/launch_screen.dart';
|
||||||
import 'package:telemednet/route_names.dart';
|
import 'package:telemednet/route_names.dart';
|
||||||
import 'package:telemednet/user_check_screen.dart';
|
import 'package:telemednet/user_screen.dart';
|
||||||
|
|
||||||
final Map<String, Widget Function(BuildContext)> routes = {
|
final Map<String, Widget Function(BuildContext)> routes = {
|
||||||
'/': (context) => const LaunchScreen(),
|
'/': (context) => const LaunchScreen(),
|
||||||
@ -11,5 +11,5 @@ final Map<String, Widget Function(BuildContext)> routes = {
|
|||||||
providers: [EmailAuthProvider(), PhoneAuthProvider()],
|
providers: [EmailAuthProvider(), PhoneAuthProvider()],
|
||||||
),
|
),
|
||||||
RouteNames.profile: (context) => const ProfileScreen(),
|
RouteNames.profile: (context) => const ProfileScreen(),
|
||||||
RouteNames.userCheck: (context) => const UserCheckScreen(),
|
RouteNames.userCheck: (context) => const UserScreen(),
|
||||||
};
|
};
|
||||||
|
|||||||
41
lib/telemed_user.dart
Normal file
41
lib/telemed_user.dart
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
enum UserRole { doctor, patient }
|
||||||
|
|
||||||
|
class TelemedUser {
|
||||||
|
String uid;
|
||||||
|
late String? name;
|
||||||
|
late String? email;
|
||||||
|
late String? photoURL;
|
||||||
|
late String? phoneNumber;
|
||||||
|
late String? alterPhoneNumber;
|
||||||
|
late UserRole? role;
|
||||||
|
TelemedUser(
|
||||||
|
{required this.uid,
|
||||||
|
this.name,
|
||||||
|
this.email,
|
||||||
|
this.photoURL,
|
||||||
|
this.phoneNumber,
|
||||||
|
this.alterPhoneNumber,
|
||||||
|
this.role});
|
||||||
|
|
||||||
|
TelemedUser.fromJson(Map<String, dynamic> json, this.uid) {
|
||||||
|
uid = json['uid'];
|
||||||
|
name = json['name'];
|
||||||
|
email = json['email'];
|
||||||
|
photoURL = json['photoURL'];
|
||||||
|
phoneNumber = json['phoneNumber'];
|
||||||
|
alterPhoneNumber = json['alterPhoneNumber'];
|
||||||
|
role = json['role'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = <String, dynamic>{};
|
||||||
|
data['uid'] = uid;
|
||||||
|
data['name'] = name;
|
||||||
|
data['email'] = email;
|
||||||
|
data['photoURL'] = photoURL;
|
||||||
|
data['phoneNumber'] = phoneNumber;
|
||||||
|
data['alterPhoneNumber'] = alterPhoneNumber;
|
||||||
|
data['role'] = role;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,23 +0,0 @@
|
|||||||
import 'package:flutter/material.dart';
|
|
||||||
|
|
||||||
class UserCheckScreen extends StatefulWidget {
|
|
||||||
const UserCheckScreen({super.key});
|
|
||||||
|
|
||||||
@override
|
|
||||||
State<UserCheckScreen> createState() => _UserCheckScreenState();
|
|
||||||
}
|
|
||||||
|
|
||||||
class _UserCheckScreenState extends State<UserCheckScreen> {
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return const Center(
|
|
||||||
widthFactor: double.infinity,
|
|
||||||
heightFactor: double.infinity,
|
|
||||||
child: Column(
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.center,
|
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
|
||||||
children: [CircularProgressIndicator()],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
55
lib/user_screen.dart
Normal file
55
lib/user_screen.dart
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:telemednet/data_service.dart';
|
||||||
|
import 'package:telemednet/error_view.dart';
|
||||||
|
import 'package:telemednet/telemed_user.dart';
|
||||||
|
|
||||||
|
class UserScreen extends StatefulWidget {
|
||||||
|
const UserScreen({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<UserScreen> createState() => _UserScreenState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _UserScreenState extends State<UserScreen> {
|
||||||
|
late Future<TelemedUser?> telemedUserFuture;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
telemedUserFuture = DataService.getProfile();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Center(
|
||||||
|
widthFactor: double.infinity,
|
||||||
|
heightFactor: double.infinity,
|
||||||
|
child: FutureBuilder(
|
||||||
|
future: telemedUserFuture,
|
||||||
|
builder: (context, snapshot) {
|
||||||
|
if (snapshot.connectionState == ConnectionState.waiting) {
|
||||||
|
return const Center(
|
||||||
|
child: CircularProgressIndicator(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (snapshot.hasError) {
|
||||||
|
return ErrorView(
|
||||||
|
message: "Error while loading profile",
|
||||||
|
okMessage: "OK",
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (snapshot.hasData) {
|
||||||
|
final user = snapshot.data!;
|
||||||
|
return Container();
|
||||||
|
} else {
|
||||||
|
return Container();
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
24
pubspec.lock
24
pubspec.lock
@ -49,6 +49,30 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.1"
|
version: "1.1.1"
|
||||||
|
cloud_firestore:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: cloud_firestore
|
||||||
|
sha256: bdc7607e9169ee3ce736bbbe6a81c2a6cb15c41379346b74f77f8e641211a17f
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "5.4.4"
|
||||||
|
cloud_firestore_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: cloud_firestore_platform_interface
|
||||||
|
sha256: "884fa34c6be2d9c7c1f4af86f90f36c0a3b3afef585a12b350a5d15368e7ec7a"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "6.4.3"
|
||||||
|
cloud_firestore_web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: cloud_firestore_web
|
||||||
|
sha256: "6e621bbcc999f32db0bc6bfcb18d9991617ec20f8d6bf51b6a1571f5c324fafd"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "4.3.2"
|
||||||
collection:
|
collection:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
@ -39,6 +39,7 @@ dependencies:
|
|||||||
firebase_core: ^3.6.0
|
firebase_core: ^3.6.0
|
||||||
firebase_auth: ^5.3.1
|
firebase_auth: ^5.3.1
|
||||||
firebase_ui_auth: ^1.16.0
|
firebase_ui_auth: ^1.16.0
|
||||||
|
cloud_firestore: ^5.4.4
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user