gecko/lib/main.dart

211 lines
7.8 KiB
Dart
Raw Normal View History

2021-04-01 23:45:12 +02:00
// Copyright (C) 2020 Axiom-Team.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
2021-11-14 19:21:20 +01:00
// ignore_for_file: avoid_print
import 'dart:async';
import 'dart:io';
2021-02-27 20:29:35 +01:00
import 'package:flutter/services.dart';
2021-01-26 21:00:26 +01:00
import 'package:gecko/globals.dart';
2021-11-14 19:21:20 +01:00
import 'package:gecko/models/cesium_plus.dart';
import 'package:gecko/models/change_pin.dart';
import 'package:gecko/models/chest_data.dart';
2021-11-17 06:20:23 +01:00
import 'package:gecko/models/chest_provider.dart';
import 'package:gecko/models/g1_wallets_list.dart';
2021-11-14 19:21:20 +01:00
import 'package:gecko/models/generate_wallets.dart';
2021-11-30 01:25:48 +01:00
import 'package:gecko/models/wallets_profiles.dart';
2021-01-26 21:00:26 +01:00
import 'package:gecko/models/home.dart';
2021-11-14 19:21:20 +01:00
import 'package:gecko/models/my_wallets.dart';
2021-11-23 04:11:45 +01:00
import 'package:gecko/models/search.dart';
2021-11-14 19:21:20 +01:00
import 'package:gecko/models/wallet_data.dart';
import 'package:gecko/models/wallet_options.dart';
import 'package:gecko/screens/home.dart';
2020-12-13 05:43:52 +01:00
import 'package:flutter/material.dart';
2021-11-14 19:21:20 +01:00
import 'package:gecko/screens/myWallets/wallets_home.dart';
import 'package:gecko/screens/search.dart';
import 'package:gecko/screens/search_result.dart';
2020-12-21 03:59:25 +01:00
import 'package:graphql_flutter/graphql_flutter.dart';
import 'package:hive_flutter/hive_flutter.dart';
2021-01-23 16:38:03 +01:00
import 'package:provider/provider.dart';
import 'package:flutter/foundation.dart';
2021-02-28 18:28:43 +01:00
import 'package:responsive_framework/responsive_framework.dart';
2021-01-30 15:24:08 +01:00
import 'package:shared_preferences/shared_preferences.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
2021-12-20 21:33:03 +01:00
import 'package:window_size/window_size.dart';
2021-11-14 19:21:20 +01:00
const bool enableSentry = true;
2021-01-06 05:04:54 +01:00
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
2021-12-21 06:56:42 +01:00
if (!kIsWeb && (Platform.isWindows || Platform.isLinux || Platform.isMacOS)) {
2021-12-20 21:33:03 +01:00
setWindowTitle('Ğecko');
setWindowMinSize(const Size(600, 800));
setWindowMaxSize(const Size(800, 1000));
}
2021-01-26 21:00:26 +01:00
HomeProvider _homeProvider = HomeProvider();
2021-12-20 21:33:03 +01:00
await _homeProvider.initHive();
appVersion = await _homeProvider.getAppVersion();
prefs = await SharedPreferences.getInstance();
2021-09-12 07:15:51 +02:00
// Configure Hive and open boxes
Hive.registerAdapter(WalletDataAdapter());
2021-11-09 04:22:04 +01:00
Hive.registerAdapter(ChestDataAdapter());
Hive.registerAdapter(G1WalletsListAdapter());
Hive.registerAdapter(IdAdapter());
walletBox = await Hive.openBox<WalletData>("walletBox");
2021-11-09 04:22:04 +01:00
chestBox = await Hive.openBox<ChestData>("chestBox");
configBox = await Hive.openBox("configBox");
g1WalletsBox = await Hive.openBox<G1WalletsList>("g1WalletsBox");
2021-09-12 07:15:51 +02:00
2021-12-01 08:14:07 +01:00
g1WalletsBox.clear();
2021-03-21 23:04:11 +01:00
// final HiveStore _store =
// await HiveStore.open(path: '${appPath.path}/gqlCache');
2021-01-26 21:00:26 +01:00
// Get a valid GVA endpoint
2021-11-30 10:28:13 +01:00
// endPointGVA = 'https://g1.librelois.fr/gva';
endPointGVA = 'https://duniter-g1.p2p.legal/gva';
// await _homeProvider.getValidEndpoint();
2021-09-12 06:47:50 +02:00
// if (endPointGVA == 'HS') {
// _homeProvider.playSound('faché', 0.8);
// } else {
// _homeProvider.playSound('start', 0.2);
// }
2021-04-04 21:17:29 +02:00
HttpOverrides.global = MyHttpOverrides();
if (kReleaseMode && enableSentry) {
// CatcherOptions debugOptions = CatcherOptions(DialogReportMode(), [
// SentryHandler(SentryClient(SentryOptions(
// dsn:
// "https://c09587b46eaa42e8b9fda28d838ed180@o496840.ingest.sentry.io/5572110")))
// ]);
// // CatcherOptions releaseOptions = CatcherOptions(NotificationReportMode(), [
// // EmailManualHandler(["poka@p2p.legal"])
// // ]);
// Catcher(rootWidget: Gecko(endPointGVA, _store), debugConfig: debugOptions);
await SentryFlutter.init((options) {
options.dsn =
'https://c09587b46eaa42e8b9fda28d838ed180@o496840.ingest.sentry.io/5572110';
2021-03-21 23:04:11 +01:00
}, appRunner: () => runApp(Gecko(endPointGVA)));
// runZoned<Future<void>>(
// () async {
// runApp(Gecko(endPointGVA, _store));
// },
// onError: (dynamic error, StackTrace stackTrace) {
// print("=================== CAUGHT DART ERROR");
// // Sentry.captureException(
// // error,
// // stackTrace: stackTrace,
// // );
// },
// ));
} else {
print('Debug mode enabled: No sentry alerte');
2021-03-21 23:04:11 +01:00
runApp(Gecko(endPointGVA));
}
2021-01-06 05:04:54 +01:00
}
2020-12-13 05:43:52 +01:00
2020-12-21 01:05:00 +01:00
class Gecko extends StatelessWidget {
2021-11-14 19:21:20 +01:00
const Gecko(this.randomEndpoint, {Key key}) : super(key: key);
final String randomEndpoint;
2020-12-13 05:43:52 +01:00
@override
Widget build(BuildContext context) {
2021-02-27 20:29:35 +01:00
SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
2020-12-21 03:59:25 +01:00
final _httpLink = HttpLink(
randomEndpoint,
2020-12-21 03:59:25 +01:00
);
final _client = ValueNotifier(
GraphQLClient(
2021-03-21 23:04:11 +01:00
cache: GraphQLCache(),
2020-12-21 03:59:25 +01:00
link: _httpLink,
),
);
// HistoryProvider _historyProvider = Provider.of<HistoryProvider>(context);
// HistoryProvider('').snackNode(context);
return MultiProvider(
providers: [
// Provider(create: (context) => HistoryProvider()),
ChangeNotifierProvider(create: (_) => HomeProvider()),
ChangeNotifierProvider(create: (_) => WalletsProfilesProvider('')),
ChangeNotifierProvider(create: (_) => MyWalletsProvider()),
ChangeNotifierProvider(create: (_) => ChestProvider()),
ChangeNotifierProvider(create: (_) => GenerateWalletsProvider()),
ChangeNotifierProvider(create: (_) => WalletOptionsProvider()),
ChangeNotifierProvider(create: (_) => ChangePinProvider()),
ChangeNotifierProvider(create: (_) => SearchProvider()),
ChangeNotifierProvider(create: (_) => CesiumPlusProvider())
],
child: GraphQLProvider(
client: _client,
child: MaterialApp(
builder: (context, widget) => ResponsiveWrapper.builder(
BouncingScrollWrapper.builder(context, widget),
maxWidth: 1200,
minWidth: 480,
defaultScale: true,
breakpoints: [
const ResponsiveBreakpoint.resize(480, name: MOBILE),
const ResponsiveBreakpoint.autoScale(800, name: TABLET),
const ResponsiveBreakpoint.resize(1000, name: DESKTOP),
],
background: Container(color: backgroundColor)),
title: 'Ğecko',
theme: ThemeData(
appBarTheme: const AppBarTheme(
color: Color(0xffFFD58D),
foregroundColor: Color(0xFF000000),
2021-02-28 18:28:43 +01:00
),
primaryColor: const Color(0xffFFD58D),
textTheme: const TextTheme(
bodyText1: TextStyle(),
bodyText2: TextStyle(),
).apply(
bodyColor: const Color(0xFF000000),
),
colorScheme:
ColorScheme.fromSwatch().copyWith(secondary: Colors.grey[850]),
2021-02-28 18:28:43 +01:00
),
home: const HomeScreen(),
initialRoute: "/",
routes: {
'/mywallets': (context) => const WalletsHome(),
'/search': (context) => const SearchScreen(),
'/searchResult': (context) => const SearchResultScreen(),
},
),
),
);
2020-12-13 05:43:52 +01:00
}
}
// This http overriding is needed to fix fail certifcat checking for Duniter node on old Android version
class MyHttpOverrides extends HttpOverrides {
@override
HttpClient createHttpClient(SecurityContext context) {
return super.createHttpClient(context)
..badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
}
}