Asset-Borrowing-App / lib / Project / main.dart
main.dart
Raw
import 'package:animated_splash_screen/animated_splash_screen.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_storage/firebase_storage.dart';
import 'package:flutter/material.dart';
import 'package:flutter_application_1/Project/Admin/HomeAdmin.dart';
import 'package:flutter_application_1/Project/LoginPage/login_project.dart';
import 'dart:async';
import 'NavigationBar.dart';

final navigatorKey = GlobalKey<NavigatorState>();

const Color cColor = Color.fromARGB(255, 93, 176, 116);
Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(
    MaterialApp(
      navigatorKey: navigatorKey,
      home: const Splash(),
      debugShowCheckedModeBanner: false,
    ),
  );
}

class Splash extends StatelessWidget {
  const Splash({super.key});

  @override
  Widget build(BuildContext context) {
    return AnimatedSplashScreen(
      splash: Column(
        children: [
          const Spacer(),
          FutureBuilder(
            future: FirebaseStorage.instance
                .ref('admin_images/mfu-logo.png')
                .getDownloadURL(),
            builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
              if (snapshot.hasError) {
                return const Icon(
                  Icons.error_outline,
                  size: 50,
                );
              } else if (snapshot.connectionState == ConnectionState.done) {
                if (snapshot.data.toString() != null) {
                  return Image.network(
                    snapshot.data!,
                    height: 200,
                    width: 180,
                    fit: BoxFit.fitWidth,
                  );
                } else {
                  return const Icon(
                    Icons.error_outline,
                    size: 50,
                  );
                }
              } else {
                return const CircularProgressIndicator();
              }
            },
          ),
          const SizedBox(
            height: 20,
          ),
          const Text(
            'Asset borrowing Application',
            style: TextStyle(
                fontSize: 20, fontWeight: FontWeight.bold, color: Colors.white),
          ),
          const Spacer(),
        ],
      ),
      backgroundColor: cColor,
      nextScreen: StreamBuilder(
        stream: FirebaseAuth.instance.authStateChanges(),
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.waiting) {
            return const Center(child: CircularProgressIndicator());
          } else if (snapshot.hasData) {
            User? user = FirebaseAuth.instance.currentUser;
            FirebaseFirestore.instance
                .collection('users')
                .doc(user?.uid)
                .get()
                .then((doc) {
              if (doc.exists) {
                Map<String, dynamic> data = doc.data()!;
                String role = data['role']!;
                if (role == 'user') {
                  navigatorKey.currentState?.pushReplacement(
                    MaterialPageRoute(
                        builder: (context) =>
                            const MyBottomNavigationBar(getIndex: 0)),
                  );
                } else if (role == 'admin') {
                  navigatorKey.currentState?.pushReplacement(
                    MaterialPageRoute(builder: (context) => const HomeAdmin()),
                  );
                }
              }
            });
            return const Center(child: CircularProgressIndicator());
          } else if (snapshot.hasError) {
            return const Center(
              child: Text('Something Went Wrong!'),
            );
          } else {
            return const LoginProject();
          }
        },
      ),
      splashIconSize: 250,
    );
  }
}