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,
|
||||
# packages, and plugins designed to encourage good coding practices.
|
||||
analyzer:
|
||||
errors:
|
||||
avoid_print: ignore
|
||||
include: package:flutter_lints/flutter.yaml
|
||||
|
||||
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_ui_auth/firebase_ui_auth.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:telemednet/user_check_screen.dart';
|
||||
import 'package:telemednet/user_screen.dart';
|
||||
|
||||
class LaunchScreen extends StatefulWidget {
|
||||
const LaunchScreen({super.key});
|
||||
@ -30,7 +30,7 @@ class _LaunchScreenState extends State<LaunchScreen> {
|
||||
child: CircularProgressIndicator(),
|
||||
);
|
||||
} else if (snapshot.hasData) {
|
||||
return const UserCheckScreen();
|
||||
return const UserScreen();
|
||||
} else {
|
||||
return const SignInScreen();
|
||||
}
|
||||
|
||||
@ -3,7 +3,7 @@ import 'package:firebase_ui_auth/firebase_ui_auth.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:telemednet/launch_screen.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 = {
|
||||
'/': (context) => const LaunchScreen(),
|
||||
@ -11,5 +11,5 @@ final Map<String, Widget Function(BuildContext)> routes = {
|
||||
providers: [EmailAuthProvider(), PhoneAuthProvider()],
|
||||
),
|
||||
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"
|
||||
source: hosted
|
||||
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:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
||||
@ -39,6 +39,7 @@ dependencies:
|
||||
firebase_core: ^3.6.0
|
||||
firebase_auth: ^5.3.1
|
||||
firebase_ui_auth: ^1.16.0
|
||||
cloud_firestore: ^5.4.4
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user