Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 71 additions & 10 deletions lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,23 +1,32 @@
import 'package:flutter/material.dart';
import 'package:mobile_flutter_iot/providers/auth_provider.dart';
import 'package:mobile_flutter_iot/providers/mqtt_provider.dart';
import 'package:mobile_flutter_iot/screens/auth/login_screen.dart';
import 'package:mobile_flutter_iot/screens/auth/register_screen.dart';
import 'package:mobile_flutter_iot/screens/home/details_screen.dart';
import 'package:mobile_flutter_iot/screens/main/main_wrapper.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:mobile_flutter_iot/services/connectivity_service.dart';
import 'package:provider/provider.dart';

void main() async {
WidgetsFlutterBinding.ensureInitialized();

final prefs = await SharedPreferences.getInstance();
final authProvider = AuthProvider();
await authProvider.checkAuth();

final bool isLoggedIn = prefs.getBool('isLoggedIn') ?? false;

runApp(SmartWorkspaceApp(isLoggedIn: isLoggedIn));
runApp(
MultiProvider(
providers: [
ChangeNotifierProvider.value(value: authProvider),
ChangeNotifierProvider(create: (_) => MqttProvider()),
],
child: const SmartWorkspaceApp(),
),
);
}

class SmartWorkspaceApp extends StatelessWidget {
final bool isLoggedIn;
const SmartWorkspaceApp({required this.isLoggedIn, super.key});
const SmartWorkspaceApp({super.key});

@override
Widget build(BuildContext context) {
Expand All @@ -34,9 +43,7 @@ class SmartWorkspaceApp extends StatelessWidget {
error: Color(0xFFF87171),
),
),

home: isLoggedIn ? const MainWrapper() : const LoginScreen(),

home: const RootHandler(),
routes: {
'/login': (context) => const LoginScreen(),
'/register': (context) => const RegisterScreen(),
Expand All @@ -46,3 +53,57 @@ class SmartWorkspaceApp extends StatelessWidget {
);
}
}

class RootHandler extends StatefulWidget {
const RootHandler({super.key});

@override
State<RootHandler> createState() => _RootHandlerState();
}

class _RootHandlerState extends State<RootHandler> {
@override
void initState() {
super.initState();
_checkInitialConnectivity();
}

Future<void> _checkInitialConnectivity() async {
final isOnline = await ConnectivityService().hasConnection();

if (!mounted) return;

final auth = Provider.of<AuthProvider>(context, listen: false);

if (!auth.isLoggedIn) return;

WidgetsBinding.instance.addPostFrameCallback((_) {
if (!mounted) return;

if (!isOnline) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('Offline Mode: Session loaded from cache.'),
backgroundColor: Colors.orange,
behavior: SnackBarBehavior.floating,
),
);
} else {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('System Online. Syncing data...'),
backgroundColor: Color(0xFF4ADE80),
behavior: SnackBarBehavior.floating,
duration: Duration(seconds: 2),
),
);
}
});
}

@override
Widget build(BuildContext context) {
final auth = context.watch<AuthProvider>();
return auth.isLoggedIn ? const MainWrapper() : const LoginScreen();
}
}
Loading
Loading