TKK_E32230502/lib/main.dart

113 lines
2.6 KiB
Dart

// ============================
// main.dart
// ============================
import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_database/firebase_database.dart';
import 'package:flutter/foundation.dart';
import 'firebase_options.dart';
import 'widgets/whatsapp_notification.dart';
// IMPORT PAGE
import 'screen/welcome.dart';
import 'screen/login.dart';
import 'screen/signup.dart';
import 'screen/dashboard.dart';
import 'screen/notifikasi.dart';
import 'screen/history.dart';
Future<void> main() async {
try {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
// REALTIME CACHE
if (!kIsWeb) {
FirebaseDatabase.instance.setPersistenceEnabled(true);
}
} catch (e) {
debugPrint("Firebase Init Error: $e");
}
runApp(const SafebiteApp());
}
class SafebiteApp extends StatelessWidget {
const SafebiteApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
navigatorKey: navigatorKey,
debugShowCheckedModeBanner: false,
title: 'Safebite',
theme: ThemeData(
useMaterial3: true,
colorSchemeSeed: const Color(0xFF4DB6AC),
scaffoldBackgroundColor: const Color(0xFFF2F6F6),
),
initialRoute: '/',
routes: {
'/': (context) => AuthGate(),
'/welcome': (context) => WelcomePage(),
'/login': (context) => LoginPage(),
'/signup': (context) => RegisterPage(),
'/dashboard': (context) => const DashboardPage(),
'/notifikasi': (context) => const NotifikasiPage(),
'/history': (context) => const RiwayatPage(),
},
);
}
}
// ============================
// AUTH CHECK
// ============================
class AuthGate extends StatelessWidget {
@override
Widget build(BuildContext context) {
return StreamBuilder<User?>(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (context, snapshot) {
if (snapshot.hasError) {
debugPrint("AUTH ERROR: ${snapshot.error}");
return WelcomePage();
}
if (snapshot.connectionState ==
ConnectionState.waiting) {
return const Scaffold(
backgroundColor: Color(0xFFF2F6F6),
body: Center(
child: CircularProgressIndicator(),
),
);
}
if (snapshot.hasData) {
return const DashboardPage();
}
return WelcomePage();
},
);
}
}