import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:marianum_mobile/data/accountModel.dart'; import 'package:marianum_mobile/data/incommingPackets/authenticatePacket.dart'; import 'package:marianum_mobile/data/incommingPackets/errorPacket.dart'; import 'package:marianum_mobile/data/incommingPackets/fileListPacket.dart'; import 'package:marianum_mobile/data/incommingPackets/talkChatPacket.dart'; import 'package:marianum_mobile/data/incommingPackets/talkNotificationsPacket.dart'; import 'package:marianum_mobile/screen/login/login.dart'; import 'package:marianum_mobile/screen/pages/timetable/timetable.dart'; import 'package:marianum_mobile/widget/loadingSpinner.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:web_socket_channel/web_socket_channel.dart'; import 'app.dart'; import 'data/incommingPackets/serverInfoPacket.dart'; import 'data/incommingPackets/talkContactsPacket.dart'; import 'data/incommingPackets/timetablePacket.dart'; Future main() async { WidgetsFlutterBinding.ensureInitialized(); ByteData data = await PlatformAssetBundle().load('assets/ca/lets-encrypt-r3.pem'); SecurityContext.defaultContext.setTrustedCertificatesBytes(data.buffer.asUint8List()); AuthenticatePacket(); runApp( MultiProvider( providers: [ ChangeNotifierProvider(create: (context) => AccountModel()), ChangeNotifierProvider(create: (context) => ErrorPacket()), ChangeNotifierProvider(create: (context) => ServerInfoPacket()), ChangeNotifierProvider(create: (context) => TalkContactsPaket()), ChangeNotifierProvider(create: (context) => TalkNotificationsPacket()), ChangeNotifierProvider(create: (context) => FileListPacket()), ChangeNotifierProvider(create: (context) => TalkChatPacket()), ChangeNotifierProvider(create: (context) => TimetablePacket()), ], child: const Main(), ) ); } class Main extends StatefulWidget { const Main({Key? key}) : super(key: key); @override State
createState() => _MainState(); } class _MainState extends State
{ static const Color red = Color.fromARGB(255, 153, 51, 51); final Future _storage = SharedPreferences.getInstance(); @override void initState() { super.initState(); _storage.then((SharedPreferences preferences) => preferences.getBool("loggedIn") ?? false).then((value) => { if(value) { Provider.of(context, listen: false).login() } else { Provider.of(context, listen: false).logout() } }); } @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, title: 'Marianum Fulda', theme: ThemeData( brightness: Brightness.light, primaryColor: red, appBarTheme: const AppBarTheme( backgroundColor: red, ), progressIndicatorTheme: const ProgressIndicatorThemeData( color: red, ), ), home: FutureBuilder( future: _storage, builder: (BuildContext context, AsyncSnapshot snapshot) { if(snapshot.hasData) { return Consumer2( builder: (context, accountModel, errorPacket, child) { if(errorPacket.errorDismissed) { return accountModel.isLoggedIn ? const App() : const Login(); } else { return AlertDialog(title: const Text("Serverseitige Fehlermeldung"), content: Text(errorPacket.errorText), actions: [ TextButton(onPressed: () { Provider.of(context, listen: false).errorDismissed = true; }, child: const Text("Weiter")) ]); } }, ); } else { return const LoadingSpinner(); } }, ) ); } }