cake_wallet/lib/main.dart

153 lines
6 KiB
Dart
Raw Normal View History

2020-09-28 15:47:43 +00:00
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:hive/hive.dart';
2020-06-20 07:10:00 +00:00
import 'package:cake_wallet/di.dart';
2020-01-04 19:31:52 +00:00
import 'package:path_provider/path_provider.dart';
import 'package:shared_preferences/shared_preferences.dart';
2020-09-28 15:47:43 +00:00
import 'package:flutter_localizations/flutter_localizations.dart';
2020-01-04 19:31:52 +00:00
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
2020-09-28 15:47:43 +00:00
import 'package:flutter_mobx/flutter_mobx.dart';
2020-01-08 12:26:34 +00:00
import 'package:cw_monero/wallet.dart' as monero_wallet;
2020-01-04 19:31:52 +00:00
import 'package:cake_wallet/router.dart';
2020-09-28 15:47:43 +00:00
import 'package:cake_wallet/routes.dart';
import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/reactions/bootstrap.dart';
import 'package:cake_wallet/store/app_store.dart';
import 'package:cake_wallet/store/authentication_store.dart';
import 'package:cake_wallet/entities/transaction_description.dart';
2020-09-21 11:50:26 +00:00
import 'package:cake_wallet/entities/get_encryption_key.dart';
import 'package:cake_wallet/entities/contact.dart';
import 'package:cake_wallet/entities/node.dart';
import 'package:cake_wallet/entities/wallet_info.dart';
import 'package:cake_wallet/entities/default_settings_migration.dart';
import 'package:cake_wallet/entities/wallet_type.dart';
import 'package:cake_wallet/entities/template.dart';
2020-09-28 15:47:43 +00:00
import 'package:cake_wallet/exchange/trade.dart';
2020-09-21 11:50:26 +00:00
import 'package:cake_wallet/exchange/exchange_template.dart';
2020-09-28 15:47:43 +00:00
import 'package:cake_wallet/src/screens/root/root.dart';
2020-09-14 12:08:33 +00:00
final navigatorKey = GlobalKey<NavigatorState>();
2020-01-04 19:31:52 +00:00
void main() async {
WidgetsFlutterBinding.ensureInitialized();
2020-01-08 12:26:34 +00:00
final appDir = await getApplicationDocumentsDirectory();
2020-01-04 19:31:52 +00:00
Hive.init(appDir.path);
2020-05-26 15:27:10 +00:00
Hive.registerAdapter(ContactAdapter());
Hive.registerAdapter(NodeAdapter());
Hive.registerAdapter(TransactionDescriptionAdapter());
Hive.registerAdapter(TradeAdapter());
Hive.registerAdapter(WalletInfoAdapter());
Hive.registerAdapter(WalletTypeAdapter());
2020-06-01 18:56:21 +00:00
Hive.registerAdapter(TemplateAdapter());
Hive.registerAdapter(ExchangeTemplateAdapter());
2020-01-04 19:31:52 +00:00
final secureStorage = FlutterSecureStorage();
final transactionDescriptionsBoxKey = await getEncryptionKey(
2020-09-21 11:50:26 +00:00
secureStorage: secureStorage, forKey: TransactionDescription.boxKey);
2020-01-04 19:31:52 +00:00
final tradesBoxKey = await getEncryptionKey(
2020-09-21 11:50:26 +00:00
secureStorage: secureStorage, forKey: Trade.boxKey);
2020-01-08 12:26:34 +00:00
final contacts = await Hive.openBox<Contact>(Contact.boxName);
final nodes = await Hive.openBox<Node>(Node.boxName);
final transactionDescriptions = await Hive.openBox<TransactionDescription>(
2020-01-04 19:31:52 +00:00
TransactionDescription.boxName,
encryptionKey: transactionDescriptionsBoxKey);
2020-01-08 12:26:34 +00:00
final trades =
2020-01-04 19:31:52 +00:00
await Hive.openBox<Trade>(Trade.boxName, encryptionKey: tradesBoxKey);
2020-01-08 12:26:34 +00:00
final walletInfoSource = await Hive.openBox<WalletInfo>(WalletInfo.boxName);
final templates = await Hive.openBox<Template>(Template.boxName);
2020-06-03 09:56:23 +00:00
final exchangeTemplates =
await Hive.openBox<ExchangeTemplate>(ExchangeTemplate.boxName);
await initialSetup(
sharedPreferences: await SharedPreferences.getInstance(),
nodes: nodes,
walletInfoSource: walletInfoSource,
contactSource: contacts,
tradesSource: trades,
2020-09-21 11:50:26 +00:00
// fiatConvertationService: fiatConvertationService,
templates: templates,
exchangeTemplates: exchangeTemplates,
2020-08-27 16:54:34 +00:00
initialMigrationVersion: 4);
2020-09-28 15:47:43 +00:00
runApp(App());
2020-01-04 19:31:52 +00:00
}
2020-01-08 12:26:34 +00:00
Future<void> initialSetup(
2020-07-06 20:09:03 +00:00
{@required SharedPreferences sharedPreferences,
@required Box<Node> nodes,
@required Box<WalletInfo> walletInfoSource,
@required Box<Contact> contactSource,
2020-09-01 11:18:07 +00:00
@required Box<Trade> tradesSource,
2020-09-21 11:50:26 +00:00
// @required FiatConvertationService fiatConvertationService,
@required Box<Template> templates,
@required Box<ExchangeTemplate> exchangeTemplates,
2020-09-23 18:26:10 +00:00
int initialMigrationVersion = 5}) async {
2020-01-04 19:31:52 +00:00
await defaultSettingsMigration(
version: initialMigrationVersion,
sharedPreferences: sharedPreferences,
2020-09-23 18:26:10 +00:00
walletInfoSource: walletInfoSource,
contactSource: contactSource,
tradeSource: tradesSource,
2020-01-04 19:31:52 +00:00
nodes: nodes);
2020-07-06 20:09:03 +00:00
await setup(
walletInfoSource: walletInfoSource,
nodeSource: nodes,
contactSource: contactSource,
tradesSource: tradesSource,
templates: templates,
exchangeTemplates: exchangeTemplates);
2020-09-21 11:50:26 +00:00
await bootstrap(navigatorKey);
2020-01-08 12:26:34 +00:00
monero_wallet.onStartup();
2020-01-04 19:31:52 +00:00
}
2020-09-28 15:47:43 +00:00
class App extends StatelessWidget {
App() {
2020-01-04 19:31:52 +00:00
SystemChrome.setPreferredOrientations(
[DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]);
}
@override
Widget build(BuildContext context) {
final settingsStore = getIt.get<AppStore>().settingsStore;
2020-01-04 19:31:52 +00:00
2020-09-28 15:47:43 +00:00
if (settingsStore.theme == null) {
settingsStore.isDarkTheme = false;
}
final statusBarColor = Colors.transparent;
final statusBarBrightness =
2020-09-28 15:47:43 +00:00
settingsStore.isDarkTheme ? Brightness.light : Brightness.dark;
final statusBarIconBrightness =
2020-09-28 15:47:43 +00:00
settingsStore.isDarkTheme ? Brightness.light : Brightness.dark;
2020-09-15 20:35:49 +00:00
final authenticationStore = getIt.get<AuthenticationStore>();
2020-09-21 11:50:26 +00:00
final initialRoute = authenticationStore.state == AuthenticationState.denied
? Routes.disclaimer
2020-09-21 11:50:26 +00:00
: Routes.login;
2020-07-06 20:09:03 +00:00
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
statusBarColor: statusBarColor,
statusBarBrightness: statusBarBrightness,
statusBarIconBrightness: statusBarIconBrightness));
2020-01-04 19:31:52 +00:00
2020-09-28 15:47:43 +00:00
return Observer(builder: (BuildContext context) {
return Root(
authenticationStore: authenticationStore,
2020-09-29 17:56:11 +00:00
navigatorKey: navigatorKey,
2020-09-28 15:47:43 +00:00
child: MaterialApp(
navigatorKey: navigatorKey,
debugShowCheckedModeBanner: false,
theme: settingsStore.theme,
localizationsDelegates: [
S.delegate,
GlobalCupertinoLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: S.delegate.supportedLocales,
locale: Locale(settingsStore.languageCode),
onGenerateRoute: (settings) => Router.generateRoute(settings),
initialRoute: initialRoute,
));
});
2020-01-04 19:31:52 +00:00
}
2020-09-01 11:18:07 +00:00
}