moxxy/lib/main.dart
Ikjot Singh Dhody e6ae8182c2 feat(all): Organize import in main.dart.
Signed-off-by: Ikjot Singh Dhody <ikjotsd@gmail.com>
2023-07-31 01:47:16 +05:30

354 lines
13 KiB
Dart

import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:get_it/get_it.dart';
import 'package:logging/logging.dart';
import 'package:moxplatform/moxplatform.dart';
import 'package:moxxyv2/i18n/strings.g.dart';
import 'package:moxxyv2/service/service.dart';
import 'package:moxxyv2/shared/commands.dart';
import 'package:moxxyv2/shared/synchronized_queue.dart';
import 'package:moxxyv2/ui/bloc/blocklist_bloc.dart';
import 'package:moxxyv2/ui/bloc/conversation_bloc.dart';
import 'package:moxxyv2/ui/bloc/conversations_bloc.dart';
import 'package:moxxyv2/ui/bloc/crop_bloc.dart';
import 'package:moxxyv2/ui/bloc/cropbackground_bloc.dart';
import 'package:moxxyv2/ui/bloc/devices_bloc.dart';
import 'package:moxxyv2/ui/bloc/groupchat/joingroupchat_bloc.dart';
import 'package:moxxyv2/ui/bloc/login_bloc.dart';
import 'package:moxxyv2/ui/bloc/navigation_bloc.dart';
import 'package:moxxyv2/ui/bloc/newconversation_bloc.dart';
import 'package:moxxyv2/ui/bloc/own_devices_bloc.dart';
import 'package:moxxyv2/ui/bloc/preferences_bloc.dart';
import 'package:moxxyv2/ui/bloc/profile_bloc.dart';
import 'package:moxxyv2/ui/bloc/sendfiles_bloc.dart';
import 'package:moxxyv2/ui/bloc/server_info_bloc.dart';
import 'package:moxxyv2/ui/bloc/share_selection_bloc.dart';
import 'package:moxxyv2/ui/bloc/startchat_bloc.dart';
import 'package:moxxyv2/ui/bloc/sticker_pack_bloc.dart';
import 'package:moxxyv2/ui/bloc/stickers_bloc.dart';
import 'package:moxxyv2/ui/constants.dart';
import 'package:moxxyv2/ui/controller/conversation_controller.dart';
import 'package:moxxyv2/ui/events.dart';
/*
import "package:moxxyv2/ui/pages/register/register.dart";
import "package:moxxyv2/ui/pages/postregister/postregister.dart";
*/
import 'package:moxxyv2/ui/pages/blocklist.dart';
import 'package:moxxyv2/ui/pages/conversation/conversation.dart';
import 'package:moxxyv2/ui/pages/conversations.dart';
import 'package:moxxyv2/ui/pages/crop.dart';
import 'package:moxxyv2/ui/pages/intro.dart';
import 'package:moxxyv2/ui/pages/login.dart';
import 'package:moxxyv2/ui/pages/newconversation.dart';
import 'package:moxxyv2/ui/pages/profile/devices.dart';
import 'package:moxxyv2/ui/pages/profile/own_devices.dart';
import 'package:moxxyv2/ui/pages/profile/profile.dart';
import 'package:moxxyv2/ui/pages/sendfiles.dart';
import 'package:moxxyv2/ui/pages/server_info.dart';
import 'package:moxxyv2/ui/pages/settings/about.dart';
import 'package:moxxyv2/ui/pages/settings/appearance/appearance.dart';
import 'package:moxxyv2/ui/pages/settings/appearance/cropbackground.dart';
import 'package:moxxyv2/ui/pages/settings/conversation.dart';
import 'package:moxxyv2/ui/pages/settings/debugging.dart';
import 'package:moxxyv2/ui/pages/settings/licenses.dart';
import 'package:moxxyv2/ui/pages/settings/network.dart';
import 'package:moxxyv2/ui/pages/settings/privacy/privacy.dart';
import 'package:moxxyv2/ui/pages/settings/settings.dart';
import 'package:moxxyv2/ui/pages/settings/stickers.dart';
import 'package:moxxyv2/ui/pages/share_selection.dart';
//import 'package:moxxyv2/ui/pages/sharedmedia.dart';
import 'package:moxxyv2/ui/pages/splashscreen/splashscreen.dart';
import 'package:moxxyv2/ui/pages/startchat.dart';
import 'package:moxxyv2/ui/pages/startgroupchat.dart';
import 'package:moxxyv2/ui/pages/sticker_pack.dart';
import 'package:moxxyv2/ui/pages/util/qrcode.dart';
import 'package:moxxyv2/ui/service/avatars.dart';
import 'package:moxxyv2/ui/service/connectivity.dart';
import 'package:moxxyv2/ui/service/data.dart';
import 'package:moxxyv2/ui/service/progress.dart';
import 'package:moxxyv2/ui/service/sharing.dart';
import 'package:moxxyv2/ui/theme.dart';
import 'package:page_transition/page_transition.dart';
void setupLogging() {
Logger.root.level = kDebugMode ? Level.ALL : Level.INFO;
Logger.root.onRecord.listen((record) {
// ignore: avoid_print
print(
'[${record.level.name}] (${record.loggerName}) ${record.time}: ${record.message}',
);
});
GetIt.I.registerSingleton<Logger>(Logger('MoxxyMain'));
}
Future<void> setupUIServices() async {
GetIt.I.registerSingleton<UIProgressService>(UIProgressService());
GetIt.I.registerSingleton<UIDataService>(UIDataService());
GetIt.I.registerSingleton<UIAvatarsService>(UIAvatarsService());
GetIt.I.registerSingleton<UISharingService>(UISharingService());
GetIt.I.registerSingleton<UIConnectivityService>(UIConnectivityService());
/// Initialize services
await GetIt.I.get<UIConnectivityService>().initialize();
}
void setupBlocs(GlobalKey<NavigatorState> navKey) {
GetIt.I
.registerSingleton<NavigationBloc>(NavigationBloc(navigationKey: navKey));
GetIt.I.registerSingleton<ConversationsBloc>(ConversationsBloc());
GetIt.I.registerSingleton<NewConversationBloc>(NewConversationBloc());
GetIt.I.registerSingleton<ConversationBloc>(ConversationBloc());
GetIt.I.registerSingleton<BlocklistBloc>(BlocklistBloc());
GetIt.I.registerSingleton<ProfileBloc>(ProfileBloc());
GetIt.I.registerSingleton<PreferencesBloc>(PreferencesBloc());
GetIt.I.registerSingleton<StartChatBloc>(StartChatBloc());
GetIt.I.registerSingleton<CropBloc>(CropBloc());
GetIt.I.registerSingleton<SendFilesBloc>(SendFilesBloc());
GetIt.I.registerSingleton<CropBackgroundBloc>(CropBackgroundBloc());
GetIt.I.registerSingleton<ShareSelectionBloc>(ShareSelectionBloc());
GetIt.I.registerSingleton<ServerInfoBloc>(ServerInfoBloc());
GetIt.I.registerSingleton<DevicesBloc>(DevicesBloc());
GetIt.I.registerSingleton<OwnDevicesBloc>(OwnDevicesBloc());
GetIt.I.registerSingleton<StickersBloc>(StickersBloc());
GetIt.I.registerSingleton<StickerPackBloc>(StickerPackBloc());
GetIt.I.registerSingleton<JoinGroupchatBloc>(JoinGroupchatBloc());
}
void main() async {
setupLogging();
await setupUIServices();
setupEventHandler();
final navKey = GlobalKey<NavigatorState>();
setupBlocs(navKey);
await initializeServiceIfNeeded();
imageCache.maximumSizeBytes = 500 * 1024 * 1024;
runApp(
MultiBlocProvider(
providers: [
BlocProvider<NavigationBloc>(
create: (_) => GetIt.I.get<NavigationBloc>(),
),
BlocProvider<LoginBloc>(
create: (_) => LoginBloc(),
),
BlocProvider<ConversationsBloc>(
create: (_) => GetIt.I.get<ConversationsBloc>(),
),
BlocProvider<NewConversationBloc>(
create: (_) => GetIt.I.get<NewConversationBloc>(),
),
BlocProvider<ConversationBloc>(
create: (_) => GetIt.I.get<ConversationBloc>(),
),
BlocProvider<BlocklistBloc>(
create: (_) => GetIt.I.get<BlocklistBloc>(),
),
BlocProvider<ProfileBloc>(
create: (_) => GetIt.I.get<ProfileBloc>(),
),
BlocProvider<PreferencesBloc>(
create: (_) => GetIt.I.get<PreferencesBloc>(),
),
BlocProvider<StartChatBloc>(
create: (_) => GetIt.I.get<StartChatBloc>(),
),
BlocProvider<CropBloc>(
create: (_) => GetIt.I.get<CropBloc>(),
),
BlocProvider<SendFilesBloc>(
create: (_) => GetIt.I.get<SendFilesBloc>(),
),
BlocProvider<CropBackgroundBloc>(
create: (_) => GetIt.I.get<CropBackgroundBloc>(),
),
BlocProvider<ShareSelectionBloc>(
create: (_) => GetIt.I.get<ShareSelectionBloc>(),
),
BlocProvider<ServerInfoBloc>(
create: (_) => GetIt.I.get<ServerInfoBloc>(),
),
BlocProvider<DevicesBloc>(
create: (_) => GetIt.I.get<DevicesBloc>(),
),
BlocProvider<OwnDevicesBloc>(
create: (_) => GetIt.I.get<OwnDevicesBloc>(),
),
BlocProvider<StickersBloc>(
create: (_) => GetIt.I.get<StickersBloc>(),
),
BlocProvider<StickerPackBloc>(
create: (_) => GetIt.I.get<StickerPackBloc>(),
),
BlocProvider<JoinGroupchatBloc>(
create: (_) => GetIt.I.get<JoinGroupchatBloc>(),
),
],
child: TranslationProvider(
child: MyApp(navKey),
),
),
);
}
class MyApp extends StatefulWidget {
const MyApp(this.navigationKey, {super.key});
final GlobalKey<NavigatorState> navigationKey;
@override
MyAppState createState() => MyAppState();
}
class MyAppState extends State<MyApp> with WidgetsBindingObserver {
MyAppState();
@override
void initState() {
super.initState();
_initState();
}
/// Async "version" of initState()
Future<void> _initState() async {
WidgetsBinding.instance.addObserver(this);
// Set up receiving share intents
await GetIt.I.get<UISharingService>().initialize();
// Lift the UI block
await GetIt.I
.get<SynchronizedQueue<Map<String, dynamic>?>>()
.removeQueueLock();
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
final sender = MoxplatformPlugin.handler.getDataSender();
switch (state) {
case AppLifecycleState.paused:
sender.sendData(
SetCSIStateCommand(active: false),
);
BidirectionalConversationController.currentController
?.handleAppStateChange(false);
break;
case AppLifecycleState.resumed:
sender.sendData(
SetCSIStateCommand(active: true),
);
BidirectionalConversationController.currentController
?.handleAppStateChange(true);
break;
case AppLifecycleState.detached:
case AppLifecycleState.inactive:
break;
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
locale: TranslationProvider.of(context).flutterLocale,
supportedLocales: LocaleSettings.supportedLocales,
localizationsDelegates: GlobalMaterialLocalizations.delegates,
title: 'Moxxy',
theme: getThemeData(context, Brightness.light),
darkTheme: getThemeData(context, Brightness.dark),
navigatorKey: widget.navigationKey,
onGenerateRoute: (settings) {
switch (settings.name) {
case introRoute:
return Intro.route;
case loginRoute:
return Login.route;
case conversationsRoute:
return ConversationsPage.route;
case newConversationRoute:
return NewConversationPage.route;
case conversationRoute:
return PageTransition<dynamic>(
type: PageTransitionType.rightToLeft,
settings: settings,
child: ConversationPage(
conversationJid: settings.arguments! as String,
),
);
// case sharedMediaRoute:
// return SharedMediaPage.getRoute(
// settings.arguments! as SharedMediaPageArguments,
// );
case blocklistRoute:
return BlocklistPage.route;
case profileRoute:
return ProfilePage.getRoute(
settings.arguments! as ProfileArguments,
);
case settingsRoute:
return SettingsPage.route;
case aboutRoute:
return SettingsAboutPage.route;
case licensesRoute:
return SettingsLicensesPage.route;
case networkRoute:
return NetworkPage.route;
case privacyRoute:
return PrivacyPage.route;
case debuggingRoute:
return DebuggingPage.route;
case addContactRoute:
return StartChatPage.route;
case joinGroupchatRoute:
return JoinGroupchatPage.getRoute(
settings.arguments! as JoinGroupchatArguments,
);
case cropRoute:
return CropPage.route;
case sendFilesRoute:
return SendFilesPage.route;
case backgroundCroppingRoute:
return CropBackgroundPage.route;
case shareSelectionRoute:
return ShareSelectionPage.route;
case serverInfoRoute:
return ServerInfoPage.route;
case conversationSettingsRoute:
return ConversationSettingsPage.route;
case devicesRoute:
return DevicesPage.route;
case ownDevicesRoute:
return OwnDevicesPage.route;
case appearanceRoute:
return AppearanceSettingsPage.route;
case qrCodeScannerRoute:
return QrCodeScanningPage.getRoute(
settings.arguments! as QrCodeScanningArguments,
);
case stickersRoute:
return StickersSettingsPage.route;
case stickerPackRoute:
return StickerPackPage.route;
}
return null;
},
home: const Splashscreen(),
);
}
}