From 4558c22a11b2e1022f01cefd1601d3b0fa9411ac Mon Sep 17 00:00:00 2001 From: zaelgohary Date: Sun, 20 Oct 2024 13:08:15 +0300 Subject: [PATCH 1/4] Add precommit --- git_hooks/pre-commit | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100755 git_hooks/pre-commit diff --git a/git_hooks/pre-commit b/git_hooks/pre-commit new file mode 100755 index 000000000..5632f7a71 --- /dev/null +++ b/git_hooks/pre-commit @@ -0,0 +1,38 @@ +#!/bin/sh + +result=$(dart format .) +exitCode=$? # If the exitCode is zero, then command executed successfully. + +if [ $exitCode -ne 0 ]; then + echo "$result" + echo "Dart format found issues, please fix them." + exit 1 +fi +echo "Finished running dart format command." + +################################################################ + +result=$(dart analyze .) +exitCode=$? # If the exitCode is zero, then command executed successfully. + +if [ $exitCode -ne 0 ]; then + echo "$result" +fi +echo "Finished running dart analyze command." + +################################################################ + +# Run `dart dry --apply` to auto-fix basic issues. +result=$(dart fix --apply) +exitCode=$? + +# Adding the files updated by `dart fix` command to git. +git add . + +echo "$result" + +if [ $exitCode -ne 0 ]; then + echo "dart fix command failed to execute." + exit 1 +fi +echo "Finished running dart fix command." \ No newline at end of file From f4d7986ac62e10871aa2b6366c01b9b72193857a Mon Sep 17 00:00:00 2001 From: zaelgohary Date: Sun, 20 Oct 2024 13:26:31 +0300 Subject: [PATCH 2/4] test precommit --- .gitignore | 1 + app/lib/app_config.dart | 20 +++---- app/lib/apps/chatbot/chatbot.dart | 2 +- app/lib/apps/chatbot/chatbot_widget.dart | 19 ++++--- app/lib/apps/farmers/farmers_widget.dart | 38 ++++++++----- app/lib/apps/news/news_widget.dart | 4 +- app/lib/apps/wallet/wallet.dart | 2 +- app/lib/apps/wallet/wallet_widget.dart | 53 +++++++++++-------- app/lib/events/go_settings_event.dart | 1 - app/lib/events/go_sign_event.dart | 3 +- app/lib/helpers/flags.dart | 3 +- app/lib/models/sign.dart | 39 +++++++------- app/lib/screens/authentication_screen.dart | 2 +- app/lib/screens/init_screen.dart | 1 - app/lib/screens/main_screen.dart | 2 +- app/lib/screens/preference_screen.dart | 9 ++-- app/lib/screens/registered_screen.dart | 6 ++- app/lib/screens/splash_screen.dart | 4 +- app/lib/screens/unregistered_screen.dart | 6 ++- app/lib/screens/wallets/wallet_screen.dart | 2 - app/lib/services/crypto_service.dart | 13 +++-- .../services/shared_preference_service.dart | 6 +-- app/lib/services/wallet_service.dart | 6 +-- app/lib/widgets/dao/dao_card.dart | 2 +- app/lib/widgets/phone_widget.dart | 2 +- app/lib/widgets/reusable_text_step.dart | 9 ++-- app/lib/widgets/wallets/add_edit_contact.dart | 2 - app/lib/widgets/wallets/add_wallet.dart | 2 - .../widgets/wallets/select_chain_widget.dart | 1 - app/pubspec.lock | 24 ++++----- app/pubspec.yaml | 4 ++ app/test/flagsmith_tests.dart | 11 ++-- git_hooks/pre-commit | 38 ------------- 33 files changed, 160 insertions(+), 177 deletions(-) delete mode 100755 git_hooks/pre-commit diff --git a/.gitignore b/.gitignore index 8b7172f80..5d59e83b1 100644 --- a/.gitignore +++ b/.gitignore @@ -354,3 +354,4 @@ app/lib/main.reflectable.dart # pubSpec override app/pubspec_overrides.yaml + diff --git a/app/lib/app_config.dart b/app/lib/app_config.dart index e7c14fc61..73de8c894 100644 --- a/app/lib/app_config.dart +++ b/app/lib/app_config.dart @@ -78,7 +78,7 @@ class AppConfigProduction extends AppConfigImpl { @override String openKycApiUrl() { - return "https://openkyc.threefold.me"; + return 'https://openkyc.threefold.me'; } @override @@ -118,7 +118,7 @@ class AppConfigProduction extends AppConfigImpl { class AppConfigStaging extends AppConfigImpl { @override String baseUrl() { - return "login.staging.threefold.me"; + return 'login.staging.threefold.me'; } @override @@ -128,17 +128,17 @@ class AppConfigStaging extends AppConfigImpl { @override String threeBotApiUrl() { - return "https://login.staging.threefold.me/api"; + return 'https://login.staging.threefold.me/api'; } @override String threeBotFrontEndUrl() { - return "https://login.staging.threefold.me/"; + return 'https://login.staging.threefold.me/'; } @override String threeBotSocketUrl() { - return "wss://login.staging.threefold.me"; + return 'wss://login.staging.threefold.me'; } @override @@ -163,27 +163,27 @@ class AppConfigStaging extends AppConfigImpl { class AppConfigTesting extends AppConfigImpl { @override String baseUrl() { - return "login.testing.threefold.me"; + return 'login.testing.threefold.me'; } @override String openKycApiUrl() { - return "https://openkyc.testing.threefold.me"; + return 'https://openkyc.testing.threefold.me'; } @override String threeBotApiUrl() { - return "https://login.testing.threefold.me/api"; + return 'https://login.testing.threefold.me/api'; } @override String threeBotFrontEndUrl() { - return "https://login.testing.threefold.me/"; + return 'https://login.testing.threefold.me/'; } @override String threeBotSocketUrl() { - return "wss://login.testing.threefold.me"; + return 'wss://login.testing.threefold.me'; } @override diff --git a/app/lib/apps/chatbot/chatbot.dart b/app/lib/apps/chatbot/chatbot.dart index 091c4e82b..b6f45a09a 100644 --- a/app/lib/apps/chatbot/chatbot.dart +++ b/app/lib/apps/chatbot/chatbot.dart @@ -33,4 +33,4 @@ class Chatbot implements App { void back() { Events().emit(GoHomeEvent()); } -} \ No newline at end of file +} diff --git a/app/lib/apps/chatbot/chatbot_widget.dart b/app/lib/apps/chatbot/chatbot_widget.dart index ae65482c0..41f09683b 100644 --- a/app/lib/apps/chatbot/chatbot_widget.dart +++ b/app/lib/apps/chatbot/chatbot_widget.dart @@ -13,7 +13,8 @@ class ChatbotWidget extends StatefulWidget { _ChatbotState createState() => _ChatbotState(email: email); } -class _ChatbotState extends State with AutomaticKeepAliveClientMixin { +class _ChatbotState extends State + with AutomaticKeepAliveClientMixin { InAppWebViewController? webView; ChatbotConfig config = ChatbotConfig(); @@ -23,18 +24,23 @@ class _ChatbotState extends State with AutomaticKeepAliveClientMi _ChatbotState({required this.email}) { iaWebview = InAppWebView( initialUrlRequest: URLRequest( - url: Uri.parse('${config.url()}$email&cache_buster=${DateTime.now().millisecondsSinceEpoch}')), + url: Uri.parse( + '${config.url()}$email&cache_buster=${DateTime.now().millisecondsSinceEpoch}')), initialOptions: InAppWebViewGroupOptions( crossPlatform: InAppWebViewOptions(useShouldOverrideUrlLoading: true), - android: AndroidInAppWebViewOptions(supportMultipleWindows: true, useHybridComposition: true)), + android: AndroidInAppWebViewOptions( + supportMultipleWindows: true, useHybridComposition: true)), onWebViewCreated: (InAppWebViewController controller) { webView = controller; }, - onCreateWindow: (InAppWebViewController controller, CreateWindowAction req) { - inAppBrowser.openUrlRequest(urlRequest: req.request, options: InAppBrowserClassOptions()); + onCreateWindow: + (InAppWebViewController controller, CreateWindowAction req) { + inAppBrowser.openUrlRequest( + urlRequest: req.request, options: InAppBrowserClassOptions()); return Future.value(true); }, - onConsoleMessage: (InAppWebViewController controller, ConsoleMessage consoleMessage) { + onConsoleMessage: + (InAppWebViewController controller, ConsoleMessage consoleMessage) { print('CB console: ${consoleMessage.message}'); }, onLoadStart: (InAppWebViewController controller, _) { @@ -69,7 +75,6 @@ class _ChatbotState extends State with AutomaticKeepAliveClientMi ); } - @override void dispose() { super.dispose(); diff --git a/app/lib/apps/farmers/farmers_widget.dart b/app/lib/apps/farmers/farmers_widget.dart index 26b73de18..f235d75e2 100644 --- a/app/lib/apps/farmers/farmers_widget.dart +++ b/app/lib/apps/farmers/farmers_widget.dart @@ -24,7 +24,8 @@ class FarmersWidget extends StatefulWidget { _FarmersState createState() => _FarmersState(); } -class _FarmersState extends State with AutomaticKeepAliveClientMixin { +class _FarmersState extends State + with AutomaticKeepAliveClientMixin { late InAppWebViewController webView; double progress = 0; @@ -32,7 +33,6 @@ class _FarmersState extends State with AutomaticKeepAliveClientMi // Still use wallet configs to have the same derived key var walletConfig = WalletConfig(); - late InAppWebView iaWebView; _back(FarmersBackEvent event) async { @@ -54,15 +54,19 @@ class _FarmersState extends State with AutomaticKeepAliveClientMi '$farmersUri?cache_buster=${DateTime.now().millisecondsSinceEpoch}')), initialOptions: InAppWebViewGroupOptions( crossPlatform: InAppWebViewOptions( - cacheEnabled: Globals().isCacheClearedFarmer, clearCache: !Globals().isCacheClearedFarmer), + cacheEnabled: Globals().isCacheClearedFarmer, + clearCache: !Globals().isCacheClearedFarmer), android: AndroidInAppWebViewOptions( - supportMultipleWindows: true, thirdPartyCookiesEnabled: true, useHybridComposition: true), + supportMultipleWindows: true, + thirdPartyCookiesEnabled: true, + useHybridComposition: true), ios: IOSInAppWebViewOptions()), onWebViewCreated: (InAppWebViewController controller) { webView = controller; addHandler(); }, - onCreateWindow: (InAppWebViewController controller, CreateWindowAction req) { + onCreateWindow: + (InAppWebViewController controller, CreateWindowAction req) { return Future.value(true); }, onLoadStop: (InAppWebViewController controller, Uri? url) async { @@ -76,7 +80,8 @@ class _FarmersState extends State with AutomaticKeepAliveClientMi this.progress = progress / 100; }); }, - onConsoleMessage: (InAppWebViewController controller, ConsoleMessage consoleMessage) { + onConsoleMessage: + (InAppWebViewController controller, ConsoleMessage consoleMessage) { print('Wallet console: ${consoleMessage.message}'); }, ); @@ -106,29 +111,36 @@ class _FarmersState extends State with AutomaticKeepAliveClientMi await SystemChannels.textInput.invokeMethod('TextInput.hide'); // QRCode scanner is black if we don't sleep here. - bool slept = await Future.delayed(const Duration(milliseconds: 400), () => true); + bool slept = + await Future.delayed(const Duration(milliseconds: 400), () => true); String? result; if (slept) { - result = await Navigator.push(context, MaterialPageRoute(builder: (context) => const ScanScreen())); + result = await Navigator.push( + context, MaterialPageRoute(builder: (context) => const ScanScreen())); } return result; } addHandler() { - webView.addJavaScriptHandler(handlerName: 'ADD_IMPORT_WALLET', callback: saveImportedWallet); - webView.addJavaScriptHandler(handlerName: 'ADD_APP_WALLET', callback: saveAppWallet); + webView.addJavaScriptHandler( + handlerName: 'ADD_IMPORT_WALLET', callback: saveImportedWallet); + webView.addJavaScriptHandler( + handlerName: 'ADD_APP_WALLET', callback: saveAppWallet); webView.addJavaScriptHandler(handlerName: 'SCAN_QR', callback: scanQrCode); - webView.addJavaScriptHandler(handlerName: 'VUE_INITIALIZED', callback: vueInitialized); - webView.addJavaScriptHandler(handlerName: 'SAVE_WALLETS', callback: saveWalletCallback); + webView.addJavaScriptHandler( + handlerName: 'VUE_INITIALIZED', callback: vueInitialized); + webView.addJavaScriptHandler( + handlerName: 'SAVE_WALLETS', callback: saveWalletCallback); } saveWalletCallback(List params) async { try { List walletData = []; for (var data in params[0]) { - walletData.add(WalletData(data['name'], data['chain'], data['address'])); + walletData + .add(WalletData(data['name'], data['chain'], data['address'])); } await saveWallets(walletData); diff --git a/app/lib/apps/news/news_widget.dart b/app/lib/apps/news/news_widget.dart index b2664d96a..67ee73c2c 100644 --- a/app/lib/apps/news/news_widget.dart +++ b/app/lib/apps/news/news_widget.dart @@ -37,11 +37,11 @@ class _NewsState extends State with AutomaticKeepAliveClientMixin { } _NewsState() { - this.initialEndsWith = new DateTime.now().millisecondsSinceEpoch.toString(); + initialEndsWith = DateTime.now().millisecondsSinceEpoch.toString(); iaWebView = InAppWebView( initialUrlRequest: URLRequest( url: Uri.parse( - 'https://news.threefold.me?cache_buster=' + initialEndsWith)), + 'https://news.threefold.me?cache_buster=$initialEndsWith')), initialOptions: InAppWebViewGroupOptions( crossPlatform: InAppWebViewOptions(), android: AndroidInAppWebViewOptions( diff --git a/app/lib/apps/wallet/wallet.dart b/app/lib/apps/wallet/wallet.dart index 1fbe13214..b180bfc9b 100644 --- a/app/lib/apps/wallet/wallet.dart +++ b/app/lib/apps/wallet/wallet.dart @@ -37,6 +37,6 @@ class Wallet implements App { @override void back() { - Events().emit(GoHomeEvent()); + Events().emit(GoHomeEvent()); } } diff --git a/app/lib/apps/wallet/wallet_widget.dart b/app/lib/apps/wallet/wallet_widget.dart index fd77a020a..8e632c706 100644 --- a/app/lib/apps/wallet/wallet_widget.dart +++ b/app/lib/apps/wallet/wallet_widget.dart @@ -26,7 +26,8 @@ class WalletWidget extends StatefulWidget { _WalletState createState() => _WalletState(); } -class _WalletState extends State with AutomaticKeepAliveClientMixin { +class _WalletState extends State + with AutomaticKeepAliveClientMixin { late InAppWebViewController webView; late InAppWebView iaWebView; @@ -45,8 +46,9 @@ class _WalletState extends State with AutomaticKeepAliveClientMixi } _WalletState() { - String walletUri = - Globals().useNewWallet == true ? Globals().newWalletUrl : 'https://${config.appId()}/init'; + String walletUri = Globals().useNewWallet == true + ? Globals().newWalletUrl + : 'https://${config.appId()}/init'; iaWebView = InAppWebView( initialUrlRequest: URLRequest( @@ -54,16 +56,19 @@ class _WalletState extends State with AutomaticKeepAliveClientMixi '$walletUri?cache_buster=${DateTime.now().millisecondsSinceEpoch}')), initialOptions: InAppWebViewGroupOptions( crossPlatform: InAppWebViewOptions( - cacheEnabled: Globals().isCacheClearedWallet, - clearCache: !Globals().isCacheClearedWallet - ), - android: AndroidInAppWebViewOptions(supportMultipleWindows: true, thirdPartyCookiesEnabled: true, useHybridComposition: true), + cacheEnabled: Globals().isCacheClearedWallet, + clearCache: !Globals().isCacheClearedWallet), + android: AndroidInAppWebViewOptions( + supportMultipleWindows: true, + thirdPartyCookiesEnabled: true, + useHybridComposition: true), ios: IOSInAppWebViewOptions()), onWebViewCreated: (InAppWebViewController controller) { webView = controller; addHandler(); }, - onCreateWindow: (InAppWebViewController controller, CreateWindowAction req) { + onCreateWindow: + (InAppWebViewController controller, CreateWindowAction req) { return Future.value(true); }, onLoadStop: (InAppWebViewController controller, Uri? url) async { @@ -77,7 +82,8 @@ class _WalletState extends State with AutomaticKeepAliveClientMixi this.progress = progress / 100; }); }, - onConsoleMessage: (InAppWebViewController controller, ConsoleMessage consoleMessage) { + onConsoleMessage: + (InAppWebViewController controller, ConsoleMessage consoleMessage) { print('Wallet console: ${consoleMessage.message}'); }, ); @@ -102,7 +108,6 @@ class _WalletState extends State with AutomaticKeepAliveClientMixi var importedWallets = await getImportedWallets(); var appWallets = await getAppWallets(); - var jsStartApp = Globals().useNewWallet == true ? "window.init('$doubleName', '$seed')" : "window.vueInstance.startWallet('$doubleName', '$seed', '$importedWallets', '$appWallets');"; @@ -124,21 +129,28 @@ class _WalletState extends State with AutomaticKeepAliveClientMixi scanQrCode(List params) async { await SystemChannels.textInput.invokeMethod('TextInput.hide'); // QRCode scanner is black if we don't sleep here. - bool slept = await Future.delayed(const Duration(milliseconds: 400), () => true); + bool slept = + await Future.delayed(const Duration(milliseconds: 400), () => true); late Barcode result; if (slept) { - result = await Navigator.push(context, MaterialPageRoute(builder: (context) => const ScanScreen())); + result = await Navigator.push( + context, MaterialPageRoute(builder: (context) => const ScanScreen())); } return result.code; } addHandler() { - webView.addJavaScriptHandler(handlerName: 'ADD_IMPORT_WALLET', callback: saveImportedWallet); - webView.addJavaScriptHandler(handlerName: 'ADD_APP_WALLET', callback: saveAppWallet); + webView.addJavaScriptHandler( + handlerName: 'ADD_IMPORT_WALLET', callback: saveImportedWallet); + webView.addJavaScriptHandler( + handlerName: 'ADD_APP_WALLET', callback: saveAppWallet); webView.addJavaScriptHandler(handlerName: 'SCAN_QR', callback: scanQrCode); - webView.addJavaScriptHandler(handlerName: 'VUE_INITIALIZED', callback: vueInitialized); - webView.addJavaScriptHandler(handlerName: 'SAVE_WALLETS', callback: saveWalletCallback); - webView.addJavaScriptHandler(handlerName: 'SIGNING', callback: signCallback); + webView.addJavaScriptHandler( + handlerName: 'VUE_INITIALIZED', callback: vueInitialized); + webView.addJavaScriptHandler( + handlerName: 'SAVE_WALLETS', callback: saveWalletCallback); + webView.addJavaScriptHandler( + handlerName: 'SIGNING', callback: signCallback); } signCallback(List params) async { @@ -148,9 +160,7 @@ class _WalletState extends State with AutomaticKeepAliveClientMixi Uint8List sk = await getPrivateKey(); String signedData = await signData(data, sk); return signedData; - } - - catch(e) { + } catch (e) { print(e); return ''; } @@ -160,7 +170,8 @@ class _WalletState extends State with AutomaticKeepAliveClientMixi try { List walletData = []; for (var data in params[0]) { - walletData.add(WalletData(data['name'], data['chain'], data['address'])); + walletData + .add(WalletData(data['name'], data['chain'], data['address'])); } await saveWallets(walletData); diff --git a/app/lib/events/go_settings_event.dart b/app/lib/events/go_settings_event.dart index 7e5504004..59c8c6d8f 100644 --- a/app/lib/events/go_settings_event.dart +++ b/app/lib/events/go_settings_event.dart @@ -1,4 +1,3 @@ class GoSettingsEvent { GoSettingsEvent(); } - diff --git a/app/lib/events/go_sign_event.dart b/app/lib/events/go_sign_event.dart index 14a9374b1..631ec12ac 100644 --- a/app/lib/events/go_sign_event.dart +++ b/app/lib/events/go_sign_event.dart @@ -2,6 +2,5 @@ import 'package:threebotlogin/models/sign.dart'; class NewSignEvent { Sign? signData; - NewSignEvent({ this.signData}); + NewSignEvent({this.signData}); } - diff --git a/app/lib/helpers/flags.dart b/app/lib/helpers/flags.dart index 6b5f36c86..2688611c0 100644 --- a/app/lib/helpers/flags.dart +++ b/app/lib/helpers/flags.dart @@ -72,8 +72,7 @@ class Flags { (await Flags().getFlagValueByFeatureName('terms-conditions-url'))!; Globals().spendingLimit = int.parse( (await Flags().getFlagValueByFeatureName('spending-limit')).toString()); - Globals().newsUrl = - (await Flags().getFlagValueByFeatureName('news-url'))!; + Globals().newsUrl = (await Flags().getFlagValueByFeatureName('news-url'))!; } Future hasFlagValueByFeatureName(String name) async { diff --git a/app/lib/models/sign.dart b/app/lib/models/sign.dart index fceede719..c47bcae62 100644 --- a/app/lib/models/sign.dart +++ b/app/lib/models/sign.dart @@ -16,22 +16,20 @@ class Sign { String? redirectUrl; String? state; - Sign({ - this.doubleName, - this.hashedDataUrl, - this.dataUrl, - this.friendlyName, - this.isJson, - this.appId, - this.type, - this.randomRoom, - this.redirectUrl, - this.state - }); + Sign( + {this.doubleName, + this.hashedDataUrl, + this.dataUrl, + this.friendlyName, + this.isJson, + this.appId, + this.type, + this.randomRoom, + this.redirectUrl, + this.state}); Sign.fromJson(Map json) - : - doubleName = json['doubleName'], + : doubleName = json['doubleName'], hashedDataUrl = json['dataUrlHash'], dataUrl = json['dataUrl'], friendlyName = json['friendlyName'], @@ -43,16 +41,16 @@ class Sign { state = json['state']; Map toJson() => { - 'doubleName' : doubleName, + 'doubleName': doubleName, 'hashedDataUrl': hashedDataUrl, 'dataUrl': dataUrl, 'friendlyName': friendlyName, 'isJson': isJson, 'appId': appId, - 'type' : type, - 'randomRoom' : randomRoom, - 'redirectUrl' : redirectUrl, - 'state' : state + 'type': type, + 'randomRoom': randomRoom, + 'redirectUrl': redirectUrl, + 'state': state }; static Future createAndDecryptSignObject(dynamic data) async { @@ -62,7 +60,8 @@ class Sign { Uint8List pk = await getPublicKey(); Uint8List sk = await getPrivateKey(); - String encryptedSignAttempt = await decrypt(data['encryptedSignAttempt'], pk, sk); + String encryptedSignAttempt = + await decrypt(data['encryptedSignAttempt'], pk, sk); dynamic decryptedSignAttemptMap = jsonDecode(encryptedSignAttempt); print('Decrypted login attempt'); diff --git a/app/lib/screens/authentication_screen.dart b/app/lib/screens/authentication_screen.dart index 382594ab1..4f7ce7e49 100644 --- a/app/lib/screens/authentication_screen.dart +++ b/app/lib/screens/authentication_screen.dart @@ -113,7 +113,7 @@ class AuthenticationScreenState extends State { ); } - validate(String pin) { + validate(String pin) { int currentTime = DateTime.now().millisecondsSinceEpoch; if (globals.incorrectPincodeAttempts >= 3 && diff --git a/app/lib/screens/init_screen.dart b/app/lib/screens/init_screen.dart index 92a07e0e6..fd64ea6ed 100644 --- a/app/lib/screens/init_screen.dart +++ b/app/lib/screens/init_screen.dart @@ -9,7 +9,6 @@ class InitScreen extends StatefulWidget { } class _InitState extends State { - @override Widget build(BuildContext context) { return const Scaffold(body: SafeArea(child: SwipePage())); diff --git a/app/lib/screens/main_screen.dart b/app/lib/screens/main_screen.dart index f47cc9d4a..90ba75389 100644 --- a/app/lib/screens/main_screen.dart +++ b/app/lib/screens/main_screen.dart @@ -201,7 +201,7 @@ class _AppState extends State { // await Navigator.push(context, MaterialPageRoute(builder: (context) => UnregisteredScreen())); await Navigator.of(context).pushReplacement(PageRouteBuilder( - transitionDuration: Duration(seconds: 1), + transitionDuration: const Duration(seconds: 1), pageBuilder: (_, __, ___) => HomeScreen( initialLink: initialLink, backendConnection: _backendConnection))); } diff --git a/app/lib/screens/preference_screen.dart b/app/lib/screens/preference_screen.dart index 62c193007..6cb2f2218 100644 --- a/app/lib/screens/preference_screen.dart +++ b/app/lib/screens/preference_screen.dart @@ -80,7 +80,7 @@ class _PreferenceScreenState extends State { Widget build(BuildContext context) { final themeProvider = Provider.of(context); bool isDarkMode; - if (themeProvider.themeMode == ThemeMode.system){ + if (themeProvider.themeMode == ThemeMode.system) { final brightness = SchedulerBinding.instance.platformDispatcher.platformBrightness; isDarkMode = brightness == Brightness.dark; @@ -204,13 +204,12 @@ class _PreferenceScreenState extends State { child: Center( child: Icon( isDarkMode - ? Icons - .nightlight_round + ? Icons.nightlight_round : Icons.wb_sunny, color: isDarkMode ? Colors.black : Theme.of(context).colorScheme.primary, - size: 14, + size: 14, ), ), ), @@ -219,7 +218,7 @@ class _PreferenceScreenState extends State { ), ), ), - ), + ), ListTile( leading: const Icon(Icons.perm_device_information), title: Text('Version: $version - $buildNumber'), diff --git a/app/lib/screens/registered_screen.dart b/app/lib/screens/registered_screen.dart index 78e29f898..2f0ba309d 100644 --- a/app/lib/screens/registered_screen.dart +++ b/app/lib/screens/registered_screen.dart @@ -114,12 +114,14 @@ class _RegisteredScreenState extends State name: 'Settings', icon: Icons.settings, pageNumber: 6), ], ), - Spacer(), + const Spacer(), const Row( children: [ Spacer(), CrispChatbot(), - SizedBox(width: 20,) + SizedBox( + width: 20, + ) ], ) ], diff --git a/app/lib/screens/splash_screen.dart b/app/lib/screens/splash_screen.dart index 954db18e2..35ebfb303 100644 --- a/app/lib/screens/splash_screen.dart +++ b/app/lib/screens/splash_screen.dart @@ -43,7 +43,9 @@ class _SplashScreenState extends State body: Center( child: Hero( tag: 'logo', - child: HomeLogoWidget(animate: true,), + child: HomeLogoWidget( + animate: true, + ), ), ), ); diff --git a/app/lib/screens/unregistered_screen.dart b/app/lib/screens/unregistered_screen.dart index 78bfbef79..fbf38b288 100644 --- a/app/lib/screens/unregistered_screen.dart +++ b/app/lib/screens/unregistered_screen.dart @@ -49,7 +49,7 @@ class _UnregisteredScreenState extends State showDialog( barrierDismissible: false, context: context, - builder: (BuildContext context) => CustomDialog( + builder: (BuildContext context) => const CustomDialog( image: Icons.check, title: 'Recovered', description: 'Your account has been recovered.', @@ -79,7 +79,9 @@ class _UnregisteredScreenState extends State children: [ const Hero( tag: 'logo', - child: HomeLogoWidget(animate: false,), + child: HomeLogoWidget( + animate: false, + ), ), const SizedBox(height: 150), SizedBox( diff --git a/app/lib/screens/wallets/wallet_screen.dart b/app/lib/screens/wallets/wallet_screen.dart index 4febaee7e..7e9a64d6e 100644 --- a/app/lib/screens/wallets/wallet_screen.dart +++ b/app/lib/screens/wallets/wallet_screen.dart @@ -1,7 +1,5 @@ -import 'dart:ui'; import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; import 'package:threebotlogin/apps/wallet/wallet_config.dart'; import 'package:threebotlogin/models/wallet.dart'; import 'package:threebotlogin/services/shared_preference_service.dart'; diff --git a/app/lib/services/crypto_service.dart b/app/lib/services/crypto_service.dart index 669cc3c1e..920c9500d 100644 --- a/app/lib/services/crypto_service.dart +++ b/app/lib/services/crypto_service.dart @@ -91,8 +91,7 @@ Future> encrypt( Uint8List nonce = sodium.randombytes.buf(24); final secretKey = Uint8List(32); - TweetNaClExt.crypto_sign_ed25519_sk_to_x25519_sk( - secretKey, sk); + TweetNaClExt.crypto_sign_ed25519_sk_to_x25519_sk(secretKey, sk); Uint8List message = Uint8List.fromList(data.codeUnits); Uint8List encryptedData = sodium.crypto.box.easy( @@ -114,15 +113,15 @@ Future decrypt( Sodium sodium = await SodiumInit.init(); final publicKey = Uint8List(32); - TweetNaClExt.crypto_sign_ed25519_pk_to_x25519_pk( - publicKey, pk); + TweetNaClExt.crypto_sign_ed25519_pk_to_x25519_pk(publicKey, pk); final secretKey = Uint8List(32); - TweetNaClExt.crypto_sign_ed25519_sk_to_x25519_sk( - secretKey, sk); + TweetNaClExt.crypto_sign_ed25519_sk_to_x25519_sk(secretKey, sk); Uint8List decryptedData = sodium.crypto.box.sealOpen( - cipherText: cipherText, publicKey: publicKey, secretKey: sodium.secureCopy(secretKey)); + cipherText: cipherText, + publicKey: publicKey, + secretKey: sodium.secureCopy(secretKey)); return String.fromCharCodes(decryptedData); } diff --git a/app/lib/services/shared_preference_service.dart b/app/lib/services/shared_preference_service.dart index d72caa673..fd82fd131 100644 --- a/app/lib/services/shared_preference_service.dart +++ b/app/lib/services/shared_preference_service.dart @@ -126,7 +126,7 @@ Future saveTwinId(int twinId) async { prefs.remove('twinId'); prefs.setInt('twinId', twinId); - updateUserData("twinId", twinId.toString()); + updateUserData('twinId', twinId.toString()); } Future getTwinId() async { @@ -174,7 +174,7 @@ Future saveEmail(String email, String? signedEmailIdentifier) async { prefs.setString('signedEmailIdentifier', signedEmailIdentifier); client.setPKidDoc( 'email', json.encode({'email': email, 'sei': signedEmailIdentifier})); - updateUserData("email", email); + updateUserData('email', email); return; } @@ -222,7 +222,7 @@ Future savePhone(String phone, String? signedPhoneIdentifier) async { prefs.setString('signedPhoneIdentifier', signedPhoneIdentifier); client.setPKidDoc( 'phone', json.encode({'phone': phone, 'spi': signedPhoneIdentifier})); - updateUserData("phone", phone); + updateUserData('phone', phone); return; } diff --git a/app/lib/services/wallet_service.dart b/app/lib/services/wallet_service.dart index 4b27ca9d0..856628b73 100644 --- a/app/lib/services/wallet_service.dart +++ b/app/lib/services/wallet_service.dart @@ -1,8 +1,6 @@ import 'dart:convert'; -import 'dart:typed_data'; import 'package:flutter/foundation.dart'; -import 'package:flutter/services.dart'; import 'package:flutter_pkid/flutter_pkid.dart'; import 'package:threebotlogin/apps/wallet/wallet_config.dart'; import 'package:threebotlogin/helpers/globals.dart'; @@ -178,9 +176,9 @@ Future>> getWalletsTwinIds() async { } final twinWalletMaps = await Future.wait(twinIdWalletFutures); - twinWalletMaps.forEach((element) { + for (var element in twinWalletMaps) { twinWallets.addAll(element); - }); + } return twinWallets; }, null); diff --git a/app/lib/widgets/dao/dao_card.dart b/app/lib/widgets/dao/dao_card.dart index 94a3d5f6e..4c721d925 100644 --- a/app/lib/widgets/dao/dao_card.dart +++ b/app/lib/widgets/dao/dao_card.dart @@ -20,7 +20,7 @@ class DaoCard extends StatefulWidget { class _DaoCardState extends State { Future _launchUrl() async { - if (widget.proposal.link != "") { + if (widget.proposal.link != '') { final Uri url = Uri.parse(widget.proposal.link); if (!await launchUrl(url)) { const SnackBar( diff --git a/app/lib/widgets/phone_widget.dart b/app/lib/widgets/phone_widget.dart index c592bc95f..35c5480f0 100644 --- a/app/lib/widgets/phone_widget.dart +++ b/app/lib/widgets/phone_widget.dart @@ -61,7 +61,7 @@ class PhoneAlertDialog extends StatefulWidget { class PhoneAlertDialogState extends State { bool valid = false; String verificationPhoneNumber = ''; - Country _country = countries.firstWhere((element) => element.code == "US"); + Country _country = countries.firstWhere((element) => element.code == 'US'); @override void initState() { diff --git a/app/lib/widgets/reusable_text_step.dart b/app/lib/widgets/reusable_text_step.dart index c3a14e0da..bb066e862 100644 --- a/app/lib/widgets/reusable_text_step.dart +++ b/app/lib/widgets/reusable_text_step.dart @@ -17,10 +17,8 @@ class ReuseableTextStep extends StatelessWidget { children: [ Text( titleText, - style: Theme.of(context) - .textTheme - .bodyMedium! - .copyWith(color: Theme.of(context).colorScheme.onSecondaryContainer), + style: Theme.of(context).textTheme.bodyMedium!.copyWith( + color: Theme.of(context).colorScheme.onSecondaryContainer), ), const Divider( height: 30, @@ -34,7 +32,8 @@ class ReuseableTextStep extends StatelessWidget { child: Text( extraText, style: Theme.of(context).textTheme.titleLarge!.copyWith( - color: Theme.of(context).colorScheme.onSecondaryContainer, + color: + Theme.of(context).colorScheme.onSecondaryContainer, fontWeight: FontWeight.bold, ), ), diff --git a/app/lib/widgets/wallets/add_edit_contact.dart b/app/lib/widgets/wallets/add_edit_contact.dart index 2cbff0386..55906a291 100644 --- a/app/lib/widgets/wallets/add_edit_contact.dart +++ b/app/lib/widgets/wallets/add_edit_contact.dart @@ -1,6 +1,4 @@ -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; import 'package:threebotlogin/models/contact.dart'; import 'package:threebotlogin/models/wallet.dart'; import 'package:threebotlogin/services/contact_service.dart'; diff --git a/app/lib/widgets/wallets/add_wallet.dart b/app/lib/widgets/wallets/add_wallet.dart index 740a077ee..c1c12a622 100644 --- a/app/lib/widgets/wallets/add_wallet.dart +++ b/app/lib/widgets/wallets/add_wallet.dart @@ -1,8 +1,6 @@ import 'package:bip39/bip39.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/services.dart'; import 'package:threebotlogin/helpers/globals.dart'; import 'package:threebotlogin/models/wallet.dart'; import 'package:threebotlogin/services/stellar_service.dart'; diff --git a/app/lib/widgets/wallets/select_chain_widget.dart b/app/lib/widgets/wallets/select_chain_widget.dart index 3a8c153a9..8ea4ac764 100644 --- a/app/lib/widgets/wallets/select_chain_widget.dart +++ b/app/lib/widgets/wallets/select_chain_widget.dart @@ -1,4 +1,3 @@ -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:threebotlogin/models/wallet.dart'; diff --git a/app/pubspec.lock b/app/pubspec.lock index 63e944db2..ecb343461 100644 --- a/app/pubspec.lock +++ b/app/pubspec.lock @@ -750,18 +750,18 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "7f0df31977cb2c0b88585095d168e689669a2cc9b97c309665e3386f3e9d341a" + sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" url: "https://pub.dev" source: hosted - version: "10.0.4" + version: "10.0.5" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: "06e98f569d004c1315b991ded39924b21af84cf14cc94791b8aea337d25b57f8" + sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.5" leak_tracker_testing: dependency: transitive description: @@ -814,10 +814,10 @@ packages: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.11.1" merlin: dependency: transitive description: @@ -830,10 +830,10 @@ packages: dependency: transitive description: name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.15.0" mime: dependency: transitive description: @@ -1533,10 +1533,10 @@ packages: dependency: transitive description: name: test_api - sha256: "9955ae474176f7ac8ee4e989dadfb411a58c30415bcfb648fa04b2b8a03afa7f" + sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" url: "https://pub.dev" source: hosted - version: "0.7.0" + version: "0.7.2" tfchain_client: dependency: "direct main" description: @@ -1798,10 +1798,10 @@ packages: dependency: transitive description: name: vm_service - sha256: "3923c89304b715fb1eb6423f017651664a03bf5f4b29983627c4da791f74a4ec" + sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d" url: "https://pub.dev" source: hosted - version: "14.2.1" + version: "14.2.5" wakelock_plus: dependency: transitive description: diff --git a/app/pubspec.yaml b/app/pubspec.yaml index 01ddec69d..c54b6fb2a 100644 --- a/app/pubspec.yaml +++ b/app/pubspec.yaml @@ -71,6 +71,10 @@ dependencies: flutter_widget_from_html: ^0.15.2 # idenfy_sdk_flutter: 2.5.3 + convert: any + crypto: any + hashlib: any + stellar_flutter_sdk: any dev_dependencies: flutter_test: sdk: flutter diff --git a/app/test/flagsmith_tests.dart b/app/test/flagsmith_tests.dart index 61e947d23..9abbe10a5 100644 --- a/app/test/flagsmith_tests.dart +++ b/app/test/flagsmith_tests.dart @@ -6,12 +6,11 @@ void main() { test('Check if FlagSmith is correctly configured', () async { Map flagSmithConfig = AppConfig().flagSmithConfig(); - final flagSmithClient = await FlagsmithClient.init( - config: FlagsmithConfig( - baseURI: flagSmithConfig['url'].toString(), - ), - apiKey: flagSmithConfig['apiKey'].toString()); - + final flagSmithClient = await FlagsmithClient.init( + config: FlagsmithConfig( + baseURI: flagSmithConfig['url'].toString(), + ), + apiKey: flagSmithConfig['apiKey'].toString()); String? doubleName = 'HALLODITISEENIDENTIFIER'; Identity user = Identity(identifier: doubleName); diff --git a/git_hooks/pre-commit b/git_hooks/pre-commit deleted file mode 100755 index 5632f7a71..000000000 --- a/git_hooks/pre-commit +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/sh - -result=$(dart format .) -exitCode=$? # If the exitCode is zero, then command executed successfully. - -if [ $exitCode -ne 0 ]; then - echo "$result" - echo "Dart format found issues, please fix them." - exit 1 -fi -echo "Finished running dart format command." - -################################################################ - -result=$(dart analyze .) -exitCode=$? # If the exitCode is zero, then command executed successfully. - -if [ $exitCode -ne 0 ]; then - echo "$result" -fi -echo "Finished running dart analyze command." - -################################################################ - -# Run `dart dry --apply` to auto-fix basic issues. -result=$(dart fix --apply) -exitCode=$? - -# Adding the files updated by `dart fix` command to git. -git add . - -echo "$result" - -if [ $exitCode -ne 0 ]; then - echo "dart fix command failed to execute." - exit 1 -fi -echo "Finished running dart fix command." \ No newline at end of file From a7967b070bc0935f1d69b3baffe31933d5cf0f28 Mon Sep 17 00:00:00 2001 From: zaelgohary Date: Sun, 20 Oct 2024 13:32:02 +0300 Subject: [PATCH 3/4] Add precommit --- .gitignore | 1 - app/lib/screens/wallets/wallet_screen.dart | 1 - app/pubspec.lock | 8 ++--- git_hooks/pre-commit | 38 ++++++++++++++++++++++ 4 files changed, 42 insertions(+), 6 deletions(-) create mode 100755 git_hooks/pre-commit diff --git a/.gitignore b/.gitignore index 5d59e83b1..8b7172f80 100644 --- a/.gitignore +++ b/.gitignore @@ -354,4 +354,3 @@ app/lib/main.reflectable.dart # pubSpec override app/pubspec_overrides.yaml - diff --git a/app/lib/screens/wallets/wallet_screen.dart b/app/lib/screens/wallets/wallet_screen.dart index 7e9a64d6e..5bea41ae6 100644 --- a/app/lib/screens/wallets/wallet_screen.dart +++ b/app/lib/screens/wallets/wallet_screen.dart @@ -1,4 +1,3 @@ - import 'package:flutter/material.dart'; import 'package:threebotlogin/apps/wallet/wallet_config.dart'; import 'package:threebotlogin/models/wallet.dart'; diff --git a/app/pubspec.lock b/app/pubspec.lock index ecb343461..0cebecc7d 100644 --- a/app/pubspec.lock +++ b/app/pubspec.lock @@ -234,7 +234,7 @@ packages: source: hosted version: "1.18.0" convert: - dependency: transitive + dependency: "direct main" description: name: convert sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" @@ -258,7 +258,7 @@ packages: source: hosted version: "2.0.3" crypto: - dependency: transitive + dependency: "direct main" description: name: crypto sha256: ec30d999af904f33454ba22ed9a86162b35e52b44ac4807d1d93c288041d7d27 @@ -619,7 +619,7 @@ packages: source: git version: "1.0.0" hashlib: - dependency: transitive + dependency: "direct main" description: name: hashlib sha256: f572f2abce09fc7aee53f15927052b9732ea1053e540af8cae211111ee0b99b1 @@ -1458,7 +1458,7 @@ packages: source: git version: "0.1.0" stellar_flutter_sdk: - dependency: transitive + dependency: "direct main" description: name: stellar_flutter_sdk sha256: "7d505963fe11d0f90b3f798964c485ed9fa64731c38f14c9b2fb76d5d5bd6cd8" diff --git a/git_hooks/pre-commit b/git_hooks/pre-commit new file mode 100755 index 000000000..6f2c2bfbb --- /dev/null +++ b/git_hooks/pre-commit @@ -0,0 +1,38 @@ +#!/bin/sh + +result=$(dart format .) +exitCode=$? # If the exitCode is zero, then command executed successfully. + +if [ $exitCode -ne 0 ]; then + echo "$result" + echo "Dart format found issues, please fix them." + exit 1 +fi +echo "Finished running dart format command." + +################################################################ + +result=$(dart analyze .) +exitCode=$? # If the exitCode is zero, then command executed successfully. + +if [ $exitCode -ne 0 ]; then + echo "$result" +fi +echo "Finished running dart analyze command." + +################################################################ + +# Run `dart dry --apply` to auto-fix basic issues. +result=$(dart fix --apply) +exitCode=$? + +# Adding the files updated by `dart fix` command to git. +git add . + +echo "$result" + +if [ $exitCode -ne 0 ]; then + echo "dart fix command failed to execute." + exit 1 +fi +echo "Finished running dart fix command." From dbd23b0d469558a41df1813d9450628eb894735c Mon Sep 17 00:00:00 2001 From: zaelgohary Date: Sun, 20 Oct 2024 15:24:22 +0300 Subject: [PATCH 4/4] Refactor pre-commit --- git_hooks/pre-commit | 45 +++++++++++++++++--------------------------- 1 file changed, 17 insertions(+), 28 deletions(-) diff --git a/git_hooks/pre-commit b/git_hooks/pre-commit index 6f2c2bfbb..c9136eed4 100755 --- a/git_hooks/pre-commit +++ b/git_hooks/pre-commit @@ -1,38 +1,27 @@ #!/bin/sh -result=$(dart format .) -exitCode=$? # If the exitCode is zero, then command executed successfully. +# Function to run Dart command and check exit code +run_command() { + directory="$1" + command="$2" -if [ $exitCode -ne 0 ]; then - echo "$result" - echo "Dart format found issues, please fix them." - exit 1 -fi -echo "Finished running dart format command." - -################################################################ - -result=$(dart analyze .) -exitCode=$? # If the exitCode is zero, then command executed successfully. + cd "$directory" || exit 1 -if [ $exitCode -ne 0 ]; then + result=$(eval "$command") echo "$result" -fi -echo "Finished running dart analyze command." +} + +# Change directory to app/lib and run dart format +run_command "app/lib" "dart format ." "dart format" -################################################################ +echo "Finished running dart format command." -# Run `dart dry --apply` to auto-fix basic issues. -result=$(dart fix --apply) -exitCode=$? +# Run dart analyze in the current directory +run_command "." "dart analyze ." "dart analyze" -# Adding the files updated by `dart fix` command to git. -git add . +echo "Finished running dart analyze command." -echo "$result" +# Run dart fix --apply and add updated files to git +run_command "." "dart fix --apply && git add ." "dart fix" -if [ $exitCode -ne 0 ]; then - echo "dart fix command failed to execute." - exit 1 -fi -echo "Finished running dart fix command." +echo "Finished running dart fix command." \ No newline at end of file