import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:jiffy/jiffy.dart'; import 'package:marianum_mobile/data/appTheme.dart'; import 'package:marianum_mobile/data/timetable/timetableProps.dart'; import 'package:marianum_mobile/screen/login/login.dart'; import 'package:marianum_mobile/theming/darkAppTheme.dart'; import 'package:marianum_mobile/theming/lightAppTheme.dart'; import 'package:marianum_mobile/widget/errorView.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'app.dart'; import 'data/chatList/chatListProps.dart'; import 'data/chatList/chatProps.dart'; import 'data/accountModel.dart'; import 'data/files/filesProps.dart'; import 'data/message/messageProps.dart'; Future main() async { WidgetsFlutterBinding.ensureInitialized(); ByteData data = await PlatformAssetBundle().load('assets/ca/lets-encrypt-r3.pem'); SecurityContext.defaultContext.setTrustedCertificatesBytes(data.buffer.asUint8List()); ErrorWidget.builder = (error) { return ErrorView(icon: Icons.phonelink_erase_rounded, text: error.toString()); }; runApp( MultiProvider( providers: [ ChangeNotifierProvider(create: (context) => AccountModel()), ChangeNotifierProvider(create: (context) => AppTheme()), ChangeNotifierProvider(create: (context) => TimetableProps()), ChangeNotifierProvider(create: (context) => ChatListProps()), ChangeNotifierProvider(create: (context) => ChatProps()), ChangeNotifierProvider(create: (context) => FilesProps()), ChangeNotifierProvider(create: (context) => MessageProps()), ], child: const Main(), ) ); } class Main extends StatefulWidget { const Main({Key? key}) : super(key: key); @override State
createState() => _MainState(); } class _MainState extends State
{ final Future _storage = SharedPreferences.getInstance(); @override void initState() { super.initState(); Jiffy.setLocale("de"); _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) { SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); return Directionality( textDirection: TextDirection.ltr, child: Consumer( builder: (context, value, child) { return MaterialApp( debugShowCheckedModeBanner: false, localizationsDelegates: const [ ...GlobalMaterialLocalizations.delegates, GlobalWidgetsLocalizations.delegate, ], supportedLocales: const [ Locale('de'), Locale('en'), ], locale: const Locale('de'), title: 'Marianum Fulda', themeMode: value.getMode, theme: LightAppTheme.theme, darkTheme: DarkAppTheme.theme, home: FutureBuilder( future: _storage, builder: (BuildContext context, AsyncSnapshot snapshot) { if(snapshot.hasData) { return Consumer( builder: (context, accountModel, child) { return accountModel.isLoggedIn ? const App() : const Login(); }, ); } else { return const Center(child: CircularProgressIndicator()); } }, ) ); }, ), ); } }