157 lines
5.1 KiB
Dart
157 lines
5.1 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'ui/pages/conversation/conversation.dart';
|
|
import 'ui/pages/conversations.dart';
|
|
import 'ui/pages/profile/profile.dart';
|
|
//import 'ui/pages/newconversation.dart';
|
|
import 'ui/pages/login/login.dart';
|
|
import 'ui/pages/register/register.dart';
|
|
import 'ui/pages/intro.dart';
|
|
import 'ui/pages/addcontact/addcontact.dart';
|
|
import 'ui/pages/postregister/postregister.dart';
|
|
import 'ui/pages/sendfiles.dart';
|
|
import 'ui/pages/settings/settings.dart';
|
|
import 'ui/pages/settings/licenses.dart';
|
|
import 'ui/pages/settings/about.dart';
|
|
import 'ui/constants.dart';
|
|
import 'repositories/roster.dart';
|
|
import "repositories/conversation.dart";
|
|
import "repositories/roster.dart";
|
|
import "repositories/xmpp.dart";
|
|
import "redux/conversation/actions.dart";
|
|
import "redux/conversation/reducers.dart";
|
|
import "redux/conversation/actions.dart";
|
|
import "redux/start/actions.dart";
|
|
import "redux/conversations/middlewares.dart";
|
|
import "redux/account/middlewares.dart";
|
|
import "redux/start/middlewares.dart";
|
|
import "redux/login/middlewares.dart";
|
|
import "redux/registration/middlewares.dart";
|
|
import "redux/addcontact/middlewares.dart";
|
|
import "redux/roster/middlewares.dart";
|
|
import "redux/messages/middleware.dart";
|
|
import "redux/conversation/middlewares.dart";
|
|
import "redux/state.dart";
|
|
|
|
import "package:get_it/get_it.dart";
|
|
import "package:flutter_redux/flutter_redux.dart";
|
|
import "package:flutter_redux_navigation/flutter_redux_navigation.dart";
|
|
import "package:redux_logging/redux_logging.dart";
|
|
import "package:redux/redux.dart";
|
|
import "package:isar/isar.dart";
|
|
|
|
import "isar.g.dart";
|
|
|
|
Future<Store<MoxxyState>> createStore(Isar isar) async {
|
|
final store = Store<MoxxyState>(
|
|
moxxyReducer,
|
|
initialState: MoxxyState.initialState(),
|
|
middleware: [
|
|
conversationsMiddleware,
|
|
startMiddleware,
|
|
accountMiddleware,
|
|
loginMiddleware,
|
|
registrationMiddleware,
|
|
addcontactMiddleware,
|
|
rosterMiddleware,
|
|
messageMiddleware,
|
|
conversationMiddleware,
|
|
NavigationMiddleware(),
|
|
// TODO: Hide behind a build flavour
|
|
LoggingMiddleware.printer()
|
|
]
|
|
);
|
|
|
|
GetIt.I.registerSingleton<DatabaseRepository>(DatabaseRepository(isar: isar, store: store));
|
|
GetIt.I.registerSingleton<RosterRepository>(RosterRepository(isar: isar, store: store));
|
|
GetIt.I.get<DatabaseRepository>().loadConversations();
|
|
GetIt.I.registerSingleton<XmppRepository>(XmppRepository(store: store));
|
|
|
|
return store;
|
|
}
|
|
|
|
// TODO: Replace all single quotes with double quotes
|
|
// TODO: Replace all Column(children: [ Padding(), Padding, ...]) with a
|
|
// Padding(padding: ..., child: Column(children: [ ... ]))
|
|
// TODO: Theme the switches
|
|
// TODO: Find a better way to do this
|
|
void main() async {
|
|
final isar = await openIsar();
|
|
final store = await createStore(isar);
|
|
|
|
runApp(MyApp(isar: isar, store: store));
|
|
}
|
|
|
|
// TODO: Move somewhere else
|
|
class SplashScreen extends StatelessWidget {
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
body: Center(
|
|
child: Image.asset(
|
|
"assets/images/logo.png",
|
|
width: 200, height: 200
|
|
)
|
|
)
|
|
);
|
|
}
|
|
}
|
|
|
|
class MyApp extends StatelessWidget {
|
|
final Store<MoxxyState> store;
|
|
final Isar isar;
|
|
|
|
MyApp({ required this.isar, required this.store });
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
this.store.dispatch(PerformPrestartAction());
|
|
|
|
return StoreProvider(
|
|
store: this.store,
|
|
child: MaterialApp(
|
|
title: 'Moxxy',
|
|
theme: ThemeData(
|
|
primarySwatch: Colors.blue,
|
|
),
|
|
darkTheme: ThemeData(
|
|
brightness: Brightness.dark,
|
|
elevatedButtonTheme: ElevatedButtonThemeData(
|
|
style: ElevatedButton.styleFrom(
|
|
primary: PRIMARY_COLOR,
|
|
onPrimary: Colors.white
|
|
)
|
|
),
|
|
textButtonTheme: TextButtonThemeData(
|
|
style: TextButton.styleFrom(
|
|
primary: PRIMARY_COLOR
|
|
)
|
|
),
|
|
// NOTE: Mainly for the SettingsSection
|
|
colorScheme: ColorScheme.dark(
|
|
secondary: PRIMARY_COLOR
|
|
)
|
|
),
|
|
navigatorKey: NavigatorHolder.navigatorKey,
|
|
//themeMode: ThemeMode.system,
|
|
themeMode: ThemeMode.dark,
|
|
routes: {
|
|
"/intro": (context) => IntroPage(),
|
|
"/login": (context) => LoginPage(),
|
|
"/register": (context) => RegistrationPage(),
|
|
"/register/post": (context) => PostRegistrationPage(),
|
|
"/conversations": (context) => ConversationsPage(),
|
|
"/conversation": (context) => ConversationPage(),
|
|
"/conversation/profile": (context) => ProfilePage(),
|
|
"/conversation/send_files": (context) => SendFilesPage(),
|
|
//"/new_conversation": (context) => NewConversationPage(),
|
|
"/new_conversation/add_contact": (context) => AddContactPage(),
|
|
"/settings": (context) => SettingsPage(),
|
|
"/settings/licenses": (context) => SettingsLicensesPage(),
|
|
"/settings/about": (context) => SettingsAboutPage(),
|
|
},
|
|
home: SplashScreen(),
|
|
)
|
|
);
|
|
}
|
|
}
|