From bde1028c70486f96a89e4a436e9fe6ccb43f24dc Mon Sep 17 00:00:00 2001 From: poka <poka@p2p.legal> Date: Thu, 18 Feb 2021 04:42:57 +0100 Subject: [PATCH] Fix bugs reports in forum; change Sentry mode --- android/app/build.gradle | 1 + assets/qrcode-scan.png | Bin 0 -> 6713 bytes lib/main.dart | 96 +++++++++++++++------ lib/models/generateWallets.dart | 43 ++++----- lib/models/history.dart | 10 +-- lib/models/home.dart | 4 + lib/screens/history.dart | 8 +- lib/screens/home.dart | 7 +- lib/screens/myWallets/generateWallets.dart | 2 + lib/screens/myWallets/importWallet.dart | 23 +---- lib/screens/myWallets/walletsHome.dart | 8 +- pubspec.lock | 83 +++++++++++++++++- pubspec.yaml | 10 ++- 13 files changed, 203 insertions(+), 92 deletions(-) create mode 100644 assets/qrcode-scan.png diff --git a/android/app/build.gradle b/android/app/build.gradle index 0038032f..c892da86 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -49,6 +49,7 @@ android { targetSdkVersion 29 versionCode flutterVersionCode.toInteger() versionName flutterVersionName + multiDexEnabled true } signingConfigs { diff --git a/assets/qrcode-scan.png b/assets/qrcode-scan.png new file mode 100644 index 0000000000000000000000000000000000000000..acd14345289f834eaf1e52ba98d4a856b954c6f6 GIT binary patch literal 6713 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 literal 0 HcmV?d00001 diff --git a/lib/main.dart b/lib/main.dart index 700fe124..eabf207b 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -12,45 +12,84 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:provider/provider.dart'; -import 'package:sentry_flutter/sentry_flutter.dart'; import 'package:flutter/foundation.dart'; import 'package:shared_preferences/shared_preferences.dart'; +import 'package:sentry_flutter/sentry_flutter.dart'; +import 'package:catcher/catcher.dart'; -final bool enableSentry = true; +// import 'dart:io'; +// import 'package:flutter_logs/flutter_logs.dart'; +// import 'package:downloads_path_provider/downloads_path_provider.dart'; -// Future<String> getJsonEndpoints() { -// return rootBundle.loadString('config/gva_endpoints.json'); -// } +final bool enableSentry = true; Future<void> main() async { - WidgetsFlutterBinding.ensureInitialized(); - HomeProvider _homeProvider = HomeProvider(); - await _homeProvider.getAppPath(); - await _homeProvider.createDefaultAvatar(); - appVersion = await _homeProvider.getAppVersion(); - prefs = await SharedPreferences.getInstance(); - final HiveStore _store = - await HiveStore.open(path: '${appPath.path}/gqlCache'); + try { + WidgetsFlutterBinding.ensureInitialized(); - // Get a valid GVA endpoint - endPointGVA = await _homeProvider.getValidEndpoint(); + // var downloadsDirectory = DownloadsPathProvider.downloadsDirectory; + // File logFile = File(downloadsDirectory.toString() + '/gecko.log'); - if (kReleaseMode && enableSentry) { - await SentryFlutter.init( - (options) { - options.dsn = - 'https://c09587b46eaa42e8b9fda28d838ed180@o496840.ingest.sentry.io/5572110'; - }, - appRunner: () => runApp(Gecko(endPointGVA, _store)), - ); - } else { - print('Debug mode enabled: No sentry alerte'); + // await FlutterLogs.initLogs( + // logLevelsEnabled: [ + // LogLevel.INFO, + // LogLevel.WARNING, + // LogLevel.ERROR, + // LogLevel.SEVERE + // ], + // timeStampFormat: TimeStampFormat.TIME_FORMAT_READABLE, + // directoryStructure: DirectoryStructure.FOR_EVENT, + // logTypesEnabled: ["Locations", "APIs"], + // logFileExtension: LogFileExtension.LOG, + // logsWriteDirectoryName: downloadsDirectory.toString(), + // logsExportDirectoryName: downloadsDirectory.toString()); + + HomeProvider _homeProvider = HomeProvider(); + await _homeProvider.getAppPath(); + await _homeProvider.createDefaultAvatar(); + appVersion = await _homeProvider.getAppVersion(); + prefs = await SharedPreferences.getInstance(); + final HiveStore _store = + await HiveStore.open(path: '${appPath.path}/gqlCache'); - runApp(Gecko(endPointGVA, _store)); + // Get a valid GVA endpoint + endPointGVA = await _homeProvider.getValidEndpoint(); + + 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'; + // }, + // appRunner: () => runApp(Gecko(endPointGVA, _store)), + // ); + } else { + print('Debug mode enabled: No sentry alerte'); + + runApp(Gecko(endPointGVA, _store)); + } + } catch (e, stack) { + print(e); + if (kReleaseMode) { + await Sentry.captureException( + e, + stackTrace: stack, + ); + } } } -// ignore: must_be_immutable class Gecko extends StatelessWidget { Gecko(this.randomEndpoint, this._store); final String randomEndpoint; @@ -68,8 +107,8 @@ class Gecko extends StatelessWidget { link: _httpLink, ), ); - DubpRust.setup(); + return MultiProvider( providers: [ // Provider(create: (context) => HistoryProvider()), @@ -84,6 +123,7 @@ class Gecko extends StatelessWidget { child: GraphQLProvider( client: _client, child: MaterialApp( + navigatorKey: Catcher.navigatorKey, title: 'Ğecko', theme: ThemeData( primaryColor: Color(0xffFFD58D), diff --git a/lib/models/generateWallets.dart b/lib/models/generateWallets.dart index 77f1431d..d7947eb1 100644 --- a/lib/models/generateWallets.dart +++ b/lib/models/generateWallets.dart @@ -7,7 +7,6 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:gecko/globals.dart'; -import 'package:sentry_flutter/sentry_flutter.dart' as sentry; import 'package:pdf/pdf.dart'; import 'package:pdf/widgets.dart' as pw; import 'package:printing/printing.dart'; @@ -81,6 +80,9 @@ class GenerateWalletsProvider with ChangeNotifier { .writeAsString('$nbrWallet:$_name:$_derivationNbr:$_pubkey'); } + print('CODE PIN :::'); + print(wallet.pin); + Navigator.pop(context, true); return _name; @@ -147,14 +149,8 @@ class GenerateWalletsProvider with ChangeNotifier { this.actualWallet = await generateWallet(this.generatedMnemonic); walletIsGenerated = true; // notifyListeners(); - } catch (e, stack) { + } catch (e) { print(e); - if (kReleaseMode) { - await sentry.Sentry.captureException( - e, - stackTrace: stack, - ); - } } // await checkIfWalletExist(); return generatedMnemonic; @@ -167,14 +163,8 @@ class GenerateWalletsProvider with ChangeNotifier { mnemonic: generatedMnemonic, secretCodeType: SecretCodeType.letters, walletType: WalletType.bip32Ed25519); - } catch (e, stack) { + } catch (e) { print(e); - if (kReleaseMode) { - await sentry.Sentry.captureException( - e, - stackTrace: stack, - ); - } } mnemonicController.text = generatedMnemonic; @@ -243,6 +233,8 @@ class GenerateWalletsProvider with ChangeNotifier { salt: _cesiumID, password: _cesiumPWD); cesiumPubkey.text = _walletPubkey; + pin.text = actualWallet.pin; + isPinChanged = true; print(_walletPubkey); } @@ -274,13 +266,24 @@ class GenerateWalletsProvider with ChangeNotifier { notifyListeners(); } - void showPinIfEmpty() { - if (!isPinChanged) { - changePinCode(reload: true); - isPinChanged = true; - } + void resetImportView() { + cesiumID.text = ''; + cesiumPWD.text = ''; + cesiumPubkey.text = ''; + pin.text = ''; + canImport = false; + isPinChanged = false; + isCesiumIDVisible = false; + isCesiumPWDVisible = false; + actualWallet = null; + notifyListeners(); } + // void makeError() { + // var tata = File(appPath.path + '/ddfhjftjfg'); + // tata.readAsLinesSync(); + // } + void reloadBuild() { notifyListeners(); } diff --git a/lib/models/history.dart b/lib/models/history.dart index da3ce264..0b6f6fb6 100644 --- a/lib/models/history.dart +++ b/lib/models/history.dart @@ -3,7 +3,6 @@ import 'package:flutter/material.dart'; import 'package:gecko/globals.dart'; import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:permission_handler/permission_handler.dart'; -import 'package:sentry/sentry.dart' as sentry; import 'package:qrscan/qrscan.dart' as scanner; import 'dart:math'; import 'package:intl/intl.dart'; @@ -28,14 +27,8 @@ class HistoryProvider with ChangeNotifier { String barcode; try { barcode = await scanner.scan(); - } catch (e, stack) { + } catch (e) { print(e); - if (kReleaseMode) { - await sentry.Sentry.captureException( - e, - stackTrace: stack, - ); - } return 'false'; } if (barcode != null) { @@ -63,7 +56,6 @@ class HistoryProvider with ChangeNotifier { getShortPubkey(pubkey); this.outputPubkey.text = pubkey; - print(pubkeyShort); isHistoryScreen = false; historySwitchButtun = "Voir l'historique"; diff --git a/lib/models/home.dart b/lib/models/home.dart index 9d854de8..69287288 100644 --- a/lib/models/home.dart +++ b/lib/models/home.dart @@ -6,6 +6,8 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'dart:async'; import 'package:gecko/globals.dart'; +import 'package:gecko/screens/history.dart'; +import 'package:gecko/screens/myWallets/walletsHome.dart'; import 'package:package_info/package_info.dart'; import 'package:path_provider/path_provider.dart'; @@ -15,6 +17,8 @@ class HomeProvider with ChangeNotifier { Icon searchIcon = Icon(Icons.search); final TextEditingController searchQuery = new TextEditingController(); Widget appBarTitle = Text('Ğecko', style: TextStyle(color: Colors.grey[850])); + List currentTab = [HistoryScreen(), WalletsHome()]; + get currentIndex => _currentIndex; diff --git a/lib/screens/history.dart b/lib/screens/history.dart index 12c5d2b0..a46980c0 100644 --- a/lib/screens/history.dart +++ b/lib/screens/history.dart @@ -48,7 +48,9 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { child: Container( height: 40.0, width: 40.0, - child: Image.asset('images/scanner.png')), + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 3), + child: Image.asset('assets/qrcode-scan.png'))), backgroundColor: Color( 0xffEFEFBF), //Color(0xffFFD68E), //Color.fromARGB(500, 204, 255, 255), ), @@ -174,7 +176,9 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { text: _historyProvider.pubkey)); _historyProvider.snackCopyKey(context); }, - child: Text(_historyProvider.pubkeyShort, + child: Text( + _historyProvider + .getShortPubkey(_historyProvider.pubkey), style: TextStyle( fontSize: 22, fontWeight: FontWeight.w800, diff --git a/lib/screens/home.dart b/lib/screens/home.dart index dc5ca63c..31324437 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -1,17 +1,12 @@ import 'package:gecko/globals.dart'; import 'package:gecko/models/history.dart'; import 'package:gecko/models/home.dart'; -import 'package:gecko/screens/history.dart'; import 'package:flutter/material.dart'; import 'dart:ui'; -import 'package:gecko/screens/myWallets/walletsHome.dart'; import 'package:gecko/screens/settings.dart'; import 'package:provider/provider.dart'; -// ignore: must_be_immutable class HomeScreen extends StatelessWidget { - var currentTab = [HistoryScreen(), WalletsHome()]; - @override Widget build(BuildContext context) { HomeProvider _homeProvider = Provider.of<HomeProvider>(context); @@ -116,7 +111,7 @@ class HomeScreen extends StatelessWidget { backgroundColor: Color(0xffFFD58D), ), backgroundColor: Color(0xffF9F9F1), - body: currentTab[_homeProvider.currentIndex], + body: _homeProvider.currentTab[_homeProvider.currentIndex], bottomNavigationBar: BottomNavigationBar( backgroundColor: Color(0xffFFD58D), fixedColor: Colors.grey[850], diff --git a/lib/screens/myWallets/generateWallets.dart b/lib/screens/myWallets/generateWallets.dart index 0c163216..9b2f9fbb 100644 --- a/lib/screens/myWallets/generateWallets.dart +++ b/lib/screens/myWallets/generateWallets.dart @@ -21,6 +21,8 @@ class GenerateWalletsScreen extends StatelessWidget { GenerateWalletsProvider _generateWalletProvider = Provider.of<GenerateWalletsProvider>(context); _generateWalletProvider.generateMnemonic(); + + // _generateWalletProvider.makeError(); print('IS GENERATED ? : ' + _generateWalletProvider.walletIsGenerated.toString()); return Scaffold( diff --git a/lib/screens/myWallets/importWallet.dart b/lib/screens/myWallets/importWallet.dart index 2a548af3..5955469c 100644 --- a/lib/screens/myWallets/importWallet.dart +++ b/lib/screens/myWallets/importWallet.dart @@ -18,19 +18,9 @@ class ImportWalletScreen extends StatelessWidget { WalletOptionsProvider _walletOptions = Provider.of<WalletOptionsProvider>(context); - _generateWalletProvider.showPinIfEmpty(); - return WillPopScope( onWillPop: () { - _generateWalletProvider.cesiumID.text = ''; - _generateWalletProvider.cesiumPWD.text = ''; - _generateWalletProvider.cesiumPubkey.text = ''; - _generateWalletProvider.pin.text = ''; - _generateWalletProvider.canImport = false; - _generateWalletProvider.isPinChanged = false; - _generateWalletProvider.isCesiumIDVisible = false; - _generateWalletProvider.isCesiumPWDVisible = false; - _generateWalletProvider.reloadBuild(); + _generateWalletProvider.resetImportView(); return Future<bool>.value(true); }, child: Scaffold( @@ -38,15 +28,7 @@ class ImportWalletScreen extends StatelessWidget { leading: IconButton( icon: Icon(Icons.arrow_back, color: Colors.black), onPressed: () { - _generateWalletProvider.cesiumID.text = ''; - _generateWalletProvider.cesiumPWD.text = ''; - _generateWalletProvider.cesiumPubkey.text = ''; - _generateWalletProvider.pin.text = ''; - _generateWalletProvider.canImport = false; - _generateWalletProvider.isPinChanged = false; - _generateWalletProvider.isCesiumIDVisible = false; - _generateWalletProvider.isCesiumPWDVisible = false; - _generateWalletProvider.reloadBuild(); + _generateWalletProvider.resetImportView(); Navigator.of(context).pop(); }), title: SizedBox( @@ -195,6 +177,7 @@ class ImportWalletScreen extends StatelessWidget { .cesiumPWD.text) .then((value) { _myWalletProvider.rebuildWidget(); + _generateWalletProvider.resetImportView(); }); } : null, diff --git a/lib/screens/myWallets/walletsHome.dart b/lib/screens/myWallets/walletsHome.dart index e66b0d38..9ea2c064 100644 --- a/lib/screens/myWallets/walletsHome.dart +++ b/lib/screens/myWallets/walletsHome.dart @@ -9,6 +9,7 @@ import 'package:provider/provider.dart'; // ignore: must_be_immutable class WalletsHome extends StatelessWidget { final _derivationKey = GlobalKey<FormState>(); + int firstWalletDerivation; @override Widget build(BuildContext context) { @@ -20,9 +21,14 @@ class WalletsHome extends StatelessWidget { myWalletProvider.listWallets = myWalletProvider.getAllWalletsNames(); final bool isWalletsExists = myWalletProvider.checkIfWalletExist(); + if (myWalletProvider.listWallets != '') { + firstWalletDerivation = + int.parse(myWalletProvider.listWallets.split('\n')[0].split(':')[2]); + } + return Scaffold( floatingActionButton: Visibility( - visible: (isWalletsExists), + visible: (isWalletsExists && firstWalletDerivation != -1), child: Container( height: 80.0, width: 80.0, diff --git a/pubspec.lock b/pubspec.lock index efabd63f..9a59dae6 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -36,6 +36,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.0-nullsafety.1" + catcher: + dependency: "direct main" + description: + name: catcher + url: "https://pub.dartlang.org" + source: hosted + version: "0.4.1" characters: dependency: transitive description: @@ -106,6 +113,27 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.5" + device_info: + dependency: transitive + description: + name: device_info + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.0" + device_info_platform_interface: + dependency: transitive + description: + name: device_info_platform_interface + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" + dio: + dependency: transitive + description: + name: dio + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.10" dubp: dependency: "direct main" description: @@ -160,6 +188,20 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.8.1" + flutter_logs: + dependency: "direct main" + description: + name: flutter_logs + url: "https://pub.dartlang.org" + source: hosted + version: "2.1.3" + flutter_mailer: + dependency: transitive + description: + name: flutter_mailer + url: "https://pub.dartlang.org" + source: hosted + version: "1.0.1" flutter_plugin_android_lifecycle: dependency: transitive description: @@ -177,6 +219,13 @@ packages: description: flutter source: sdk version: "0.0.0" + fluttertoast: + dependency: transitive + description: + name: fluttertoast + url: "https://pub.dartlang.org" + source: hosted + version: "7.1.6" globbing: dependency: transitive description: @@ -317,6 +366,27 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.6.2" + logger: + dependency: "direct main" + description: + name: logger + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.4" + logging: + dependency: transitive + description: + name: logging + url: "https://pub.dartlang.org" + source: hosted + version: "0.11.4" + mailer: + dependency: transitive + description: + name: mailer + url: "https://pub.dartlang.org" + source: hosted + version: "3.3.0" matcher: dependency: transitive description: @@ -331,6 +401,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "1.3.0-nullsafety.3" + mime: + dependency: transitive + description: + name: mime + url: "https://pub.dartlang.org" + source: hosted + version: "0.9.7" nested: dependency: transitive description: @@ -500,19 +577,19 @@ packages: source: hosted version: "0.24.1" sentry: - dependency: transitive + dependency: "direct main" description: name: sentry url: "https://pub.dartlang.org" source: hosted - version: "4.0.1" + version: "4.0.4" sentry_flutter: dependency: "direct main" description: name: sentry_flutter url: "https://pub.dartlang.org" source: hosted - version: "4.0.1" + version: "4.0.4" shared_preferences: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 74b7c4c4..f38a6319 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -5,7 +5,7 @@ description: A new Flutter project. # pub.dev using `pub publish`. This is preferred for private packages. publish_to: 'none' # Remove this line if you wish to publish to pub.dev -version: 0.0.1+6 +version: 0.0.1+8 environment: sdk: ">=2.7.0 <3.0.0" @@ -23,7 +23,6 @@ dependencies: graphql_flutter: ^4.0.0 #^3.1.0 provider: ^4.3.2+3 truncate: ^2.1.2 - sentry_flutter: ^4.0.1 path_provider: ^1.6.24 pin_code_fields: ^6.0.2 http: ^0.12.2 @@ -34,7 +33,11 @@ dependencies: sync_http: ^0.2.0 crypto: ^2.1.5 fast_base58: - + logger: ^0.9.4 + flutter_logs: ^2.1.3 + sentry: ^4.0.4 + sentry_flutter: ^4.0.4 + catcher: ^0.4.1 flutter_icons: android: "ic_launcher" @@ -57,3 +60,4 @@ flutter: - assets/ - assets/OpenSans-Regular.ttf - assets/icon_user.png + - assets/qrcode-scan.png -- GitLab