diff --git a/README.md b/README.md
index 7b86cd9..2bc665a 100644
--- a/README.md
+++ b/README.md
@@ -212,3 +212,42 @@ To know more [Click Here](LICENSE.md)
+
+ -
+ Login to Firebase Console
+
Go to the Firebase Console and log in with your Google account.
+
+ -
+ Setup for Android Version
+
In the Firebase Console, create a new project and follow the instructions to set up Firebase for Android.
+
+ -
+ Download google-services.json
+
Download the google-services.json
file from the Firebase console and add it under the android/app
folder in your Flutter project.
+
+ -
+ Configure build.gradle
+
Open the android/build.gradle
file and add the following classpath under the dependencies
section:
+
+classpath 'com.google.gms:google-services:4.3.15'
+
+ Then, open the android/app/build.gradle
file and add the following line at the bottom:
+
+apply plugin: 'com.google.gms.google-services'
+
+
+ -
+ Setup Firestore for Database
+
In the Firebase console, go to the Firestore section and create a Firestore database for your project. Follow the on-screen instructions to choose between production or test mode.
+
+ -
+ Setup Authentication
+
In the Firebase console, go to the Authentication section and enable the following sign-in methods:
+
+ - Email/Password
+ - Google
+
+ Make sure to configure the necessary credentials and settings for both sign-in methods.
+
+
\ No newline at end of file
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 797315d..5283f1e 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -46,3 +46,7 @@ android {
flutter {
source = "../.."
}
+
+dependencies {
+ implementation platform('com.google.firebase:firebase-bom:33.5.1')
+}
\ No newline at end of file
diff --git a/android/app/google-services.json b/android/app/google-services.json
index 8b7451f..269a029 100644
--- a/android/app/google-services.json
+++ b/android/app/google-services.json
@@ -1,26 +1,44 @@
{
"project_info": {
- "project_number": "445023469277",
- "project_id": "donor-connect-project",
- "storage_bucket": "donor-connect-project.appspot.com"
+ "project_number": "255205177926",
+ "project_id": "donorconnect-40490",
+ "storage_bucket": "donorconnect-40490.firebasestorage.app"
},
"client": [
{
"client_info": {
- "mobilesdk_app_id": "1:445023469277:android:867d6fc40fb1d859a52534",
+ "mobilesdk_app_id": "1:255205177926:android:eae013c60c9efa933c6847",
"android_client_info": {
"package_name": "com.example.donorconnect"
}
},
- "oauth_client": [],
+ "oauth_client": [
+ {
+ "client_id": "255205177926-q7chqmo3b2sh6pmcnnfketcledt3d9jb.apps.googleusercontent.com",
+ "client_type": 1,
+ "android_info": {
+ "package_name": "com.example.donorconnect",
+ "certificate_hash": "c645004972e2e67b6e8fb81cdbff026bad48ab47"
+ }
+ },
+ {
+ "client_id": "255205177926-hd9rrs0i3ti9s2s4bchij1tk8263k8u3.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ],
"api_key": [
{
- "current_key": "AIzaSyDprpAsw0AkuQmFG1Iczpb9N2gghyAFmqo"
+ "current_key": "AIzaSyAaf-WvXzjym1yZ2umggxp5nuWyWM3OcJ0"
}
],
"services": {
"appinvite_service": {
- "other_platform_oauth_client": []
+ "other_platform_oauth_client": [
+ {
+ "client_id": "255205177926-hd9rrs0i3ti9s2s4bchij1tk8263k8u3.apps.googleusercontent.com",
+ "client_type": 3
+ }
+ ]
}
}
}
diff --git a/android/build.gradle b/android/build.gradle
index d2ffbff..b72df73 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -1,3 +1,39 @@
+// allprojects {
+// repositories {
+// google()
+// mavenCentral()
+// }
+// dependencies {
+// // classpath 'com.android.tools.build:gradle:7.0.0' // Use the correct Android Gradle Plugin version here
+// classpath 'com.google.gms:google-services:4.4.2'
+// }
+// }
+
+
+
+// rootProject.buildDir = "../build"
+// subprojects {
+// project.buildDir = "${rootProject.buildDir}/${project.name}"
+// }
+// subprojects {
+// project.evaluationDependsOn(":app")
+// }
+
+// tasks.register("clean", Delete) {
+// delete rootProject.buildDir
+// }
+
+buildscript {
+ repositories {
+ google()
+ mavenCentral()
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:7.0.0' // Ensure you are using the correct version
+ classpath 'com.google.gms:google-services:4.4.2'
+ }
+}
+
allprojects {
repositories {
google()
@@ -5,11 +41,10 @@ allprojects {
}
}
+// Configure root project build directory and tasks
rootProject.buildDir = "../build"
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
-}
-subprojects {
project.evaluationDependsOn(":app")
}
diff --git a/lib/main.dart b/lib/main.dart
index 0037f09..09f3768 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -9,6 +9,7 @@ import 'package:donorconnect/language/cubit/language_cubit.dart';
import 'package:donorconnect/language/helper/language.dart';
import 'package:donorconnect/language/services/language_repositoty.dart';
import 'package:donorconnect/services/blood_bank_service.dart';
+import 'package:donorconnect/views/pages/login/login.dart';
import 'package:donorconnect/views/pages/main_home/homepage.dart';
import 'package:donorconnect/views/pages/onboarding/onboarding.dart';
import 'package:donorconnect/views/pages/welcome/welcome_screen.dart';
@@ -18,36 +19,52 @@ import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:get/get_navigation/src/root/get_material_app.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:jwt_decoder/jwt_decoder.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
-// import 'package:riverpod/riverpod.dart';
-import 'package:flutter_dotenv/flutter_dotenv.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
- await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
+
+ try {
+ await Firebase.initializeApp(
+ options: DefaultFirebaseOptions.currentPlatform,
+ );
+ } catch (e) {
+ print("Firebase initialization error: $e");
+ }
+
await LanguageRepository.init();
SharedPreferences prefs = await SharedPreferences.getInstance();
- ErrorWidget.builder = (FlutterErrorDetails details) {
- return const Material();
- };
await dotenv.load(fileName: '.env');
+
+ // Check if the user has completed onboarding and if they are logged in
+ bool onboardingCompleted = prefs.getBool('onboardingCompleted') ?? false;
+ String? token = prefs.getString('token');
+ bool isLoggedIn = token != null && !JwtDecoder.isExpired(token);
+
+ // Lock orientation
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
]);
+
+ // Initialize the app
runApp(MyApp(
- token: prefs.getString('token'),
+ token: isLoggedIn ? token : null,
+ onboardingCompleted: onboardingCompleted,
));
}
class MyApp extends StatelessWidget {
final String? token;
+ final bool onboardingCompleted;
const MyApp({
required this.token,
+ required this.onboardingCompleted,
super.key,
});
@@ -55,49 +72,39 @@ class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return MultiBlocProvider(
providers: [
+ BlocProvider(create: (context) => ProfileCubit()),
BlocProvider(
- create: (context) => ProfileCubit(),
- ),
- BlocProvider(
- create: (context) => AuthCubit(
- FirebaseAuth.instance,
- FirebaseFirestore.instance,
- ),
- ),
- BlocProvider(
- create: (context) => LocateBloodBanksCubit(BloodBankService()),
- ),
- BlocProvider(
- create: (context) => LanguageCubit()..initilize(),
- ),
+ create: (context) =>
+ AuthCubit(FirebaseAuth.instance, FirebaseFirestore.instance)),
BlocProvider(
- create: (context) => ThemeCubit()..setInitialTheme(),
- ),
+ create: (context) => LocateBloodBanksCubit(BloodBankService())),
+ BlocProvider(create: (context) => LanguageCubit()..initilize()),
+ BlocProvider(create: (context) => ThemeCubit()..setInitialTheme()),
],
child: BlocBuilder