diff --git a/.github/workflows/cache_dependencies.yml b/.github/workflows/cache_dependencies.yml
index 5373bbc87..bf0d0f7bc 100644
--- a/.github/workflows/cache_dependencies.yml
+++ b/.github/workflows/cache_dependencies.yml
@@ -14,7 +14,7 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-java@v1
with:
- java-version: '8.x'
+ java-version: '11.x'
- name: Flutter action
uses: subosito/flutter-action@v1
diff --git a/.github/workflows/pr_test_build.yml b/.github/workflows/pr_test_build.yml
index 5434429b2..3c6b132bd 100644
--- a/.github/workflows/pr_test_build.yml
+++ b/.github/workflows/pr_test_build.yml
@@ -22,7 +22,7 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-java@v1
with:
- java-version: "8.x"
+ java-version: "11.x"
- name: Flutter action
uses: subosito/flutter-action@v1
diff --git a/android/app/build.gradle b/android/app/build.gradle
index 946c53697..e6b9eb2f8 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -75,7 +75,6 @@ android {
shrinkResources false
minifyEnabled false
- useProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
diff --git a/android/app/src/main/AndroidManifestBase.xml b/android/app/src/main/AndroidManifestBase.xml
index 77a555db8..910149f60 100644
--- a/android/app/src/main/AndroidManifestBase.xml
+++ b/android/app/src/main/AndroidManifestBase.xml
@@ -3,6 +3,7 @@
+
diff --git a/android/build.gradle b/android/build.gradle
index bd4ebd770..8286d9cb9 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -1,12 +1,12 @@
buildscript {
- ext.kotlin_version = '1.6.21'
+ ext.kotlin_version = '1.7.10'
repositories {
google()
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:4.1.3'
+ classpath 'com.android.tools.build:gradle:7.3.0'
classpath 'com.google.gms:google-services:4.3.8'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
diff --git a/cw_ethereum/lib/ethereum_client.dart b/cw_ethereum/lib/ethereum_client.dart
index 42221c4f5..f0c7381e8 100644
--- a/cw_ethereum/lib/ethereum_client.dart
+++ b/cw_ethereum/lib/ethereum_client.dart
@@ -38,8 +38,13 @@ class EthereumClient {
// });
}
- Future getBalance(EthereumAddress address) async =>
- await _client!.getBalance(address);
+ Future getBalance(EthereumAddress address) async {
+ try {
+ return await _client!.getBalance(address);
+ } catch (_) {
+ return EtherAmount.zero();
+ }
+ }
Future getGasUnitPrice() async {
try {
diff --git a/cw_haven/android/build.gradle b/cw_haven/android/build.gradle
index 91da1b857..fb941f657 100644
--- a/cw_haven/android/build.gradle
+++ b/cw_haven/android/build.gradle
@@ -2,14 +2,14 @@ group 'com.cakewallet.cw_haven'
version '1.0-SNAPSHOT'
buildscript {
- ext.kotlin_version = '1.3.50'
+ ext.kotlin_version = '1.7.10'
repositories {
google()
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:4.1.0'
+ classpath 'com.android.tools.build:gradle:7.3.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
diff --git a/cw_monero/android/build.gradle b/cw_monero/android/build.gradle
index 1d7ae93d8..fc4835e81 100644
--- a/cw_monero/android/build.gradle
+++ b/cw_monero/android/build.gradle
@@ -2,14 +2,14 @@ group 'com.cakewallet.monero'
version '1.0-SNAPSHOT'
buildscript {
- ext.kotlin_version = '1.3.50'
+ ext.kotlin_version = '1.7.10'
repositories {
google()
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.5.4'
+ classpath 'com.android.tools.build:gradle:7.3.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
diff --git a/cw_shared_external/android/build.gradle b/cw_shared_external/android/build.gradle
index d6cdaf658..8db51f0e6 100644
--- a/cw_shared_external/android/build.gradle
+++ b/cw_shared_external/android/build.gradle
@@ -2,14 +2,14 @@ group 'com.cakewallet.cw_shared_external'
version '1.0-SNAPSHOT'
buildscript {
- ext.kotlin_version = '1.3.50'
+ ext.kotlin_version = '1.7.10'
repositories {
google()
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:4.1.0'
+ classpath 'com.android.tools.build:gradle:7.3.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
diff --git a/lib/core/auth_service.dart b/lib/core/auth_service.dart
index 321b5b94a..c072bf65e 100644
--- a/lib/core/auth_service.dart
+++ b/lib/core/auth_service.dart
@@ -1,3 +1,5 @@
+import 'dart:io';
+
import 'package:cake_wallet/core/totp_request_details.dart';
import 'package:cake_wallet/routes.dart';
import 'package:cake_wallet/src/screens/auth/auth_page.dart';
@@ -40,7 +42,9 @@ class AuthService with Store {
final encodedPassword = encodedPinCode(pin: password);
// secure storage has a weird bug on macOS, where overwriting a key doesn't work, unless
// we delete what's there first:
- await secureStorage.delete(key: key);
+ if (Platform.isMacOS) {
+ await secureStorage.delete(key: key);
+ }
await secureStorage.write(key: key, value: encodedPassword);
}
diff --git a/lib/core/backup_service.dart b/lib/core/backup_service.dart
index 2913505c0..b13a01889 100644
--- a/lib/core/backup_service.dart
+++ b/lib/core/backup_service.dart
@@ -295,7 +295,7 @@ class BackupService {
await _sharedPreferences.setInt(
PreferencesKey.currentTransactionPriorityKeyLegacy, currentTransactionPriorityKeyLegacy);
- if (Platform.isMacOS || Platform.isLinux) {
+ if (DeviceInfo.instance.isDesktop) {
await _sharedPreferences.setBool(PreferencesKey.allowBiometricalAuthenticationKey, false);
} else if (allowBiometricalAuthentication != null) {
await _sharedPreferences.setBool(
diff --git a/lib/ionia/ionia_service.dart b/lib/ionia/ionia_service.dart
index 51e23ad28..0396ed7c1 100644
--- a/lib/ionia/ionia_service.dart
+++ b/lib/ionia/ionia_service.dart
@@ -6,7 +6,6 @@ import 'package:cake_wallet/.secrets.g.dart' as secrets;
import 'package:cake_wallet/ionia/ionia_api.dart';
import 'package:cake_wallet/ionia/ionia_gift_card.dart';
import 'package:cake_wallet/ionia/ionia_category.dart';
-import 'package:platform_device_id/platform_device_id.dart';
class IoniaService {
IoniaService(this.secureStorage, this.ioniaApi);
@@ -112,9 +111,9 @@ class IoniaService {
required String currency}) async {
final username = (await secureStorage.read(key: ioniaUsernameStorageKey))!;
final password = (await secureStorage.read(key: ioniaPasswordStorageKey))!;
- final deviceId = await PlatformDeviceId.getDeviceId;
+ final deviceId = '';
return ioniaApi.purchaseGiftCard(
- requestedUUID: deviceId!,
+ requestedUUID: deviceId,
merchId: merchId,
amount: amount,
currency: currency,
diff --git a/lib/reactions/on_wallet_sync_status_change.dart b/lib/reactions/on_wallet_sync_status_change.dart
index 767bfd7e8..9a13db597 100644
--- a/lib/reactions/on_wallet_sync_status_change.dart
+++ b/lib/reactions/on_wallet_sync_status_change.dart
@@ -7,7 +7,7 @@ import 'package:cw_core/wallet_base.dart';
import 'package:cw_core/balance.dart';
import 'package:cw_core/transaction_info.dart';
import 'package:cw_core/sync_status.dart';
-import 'package:wakelock/wakelock.dart';
+import 'package:wakelock_plus/wakelock_plus.dart';
ReactionDisposer? _onWalletSyncStatusChangeReaction;
@@ -27,10 +27,10 @@ void startWalletSyncStatusChangeReaction(
}
}
if (status is SyncingSyncStatus) {
- await Wakelock.enable();
+ await WakelockPlus.enable();
}
if (status is SyncedSyncStatus || status is FailedSyncStatus) {
- await Wakelock.disable();
+ await WakelockPlus.disable();
}
} catch(e) {
print(e.toString());
diff --git a/lib/src/screens/backup/backup_page.dart b/lib/src/screens/backup/backup_page.dart
index 5995e71c4..d17702724 100644
--- a/lib/src/screens/backup/backup_page.dart
+++ b/lib/src/screens/backup/backup_page.dart
@@ -17,7 +17,6 @@ import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
-import 'package:permission_handler/permission_handler.dart';
class BackupPage extends BasePage {
BackupPage(this.backupViewModelBase);
@@ -129,15 +128,8 @@ class BackupPage extends BasePage {
alertTitle: S.of(context).export_backup,
alertContent: S.of(context).select_destination,
rightButtonText: S.of(context).save_to_downloads,
- leftButtonText:S.of(context).share,
+ leftButtonText: S.of(context).share,
actionRightButton: () async {
- final permission = await Permission.storage.request();
-
- if (permission.isDenied) {
- Navigator.of(dialogContext).pop();
- return;
- }
-
await backupViewModelBase.saveToDownload(backup.name, backup.content);
Navigator.of(dialogContext).pop();
},
diff --git a/lib/src/screens/buy/buy_options_page.dart b/lib/src/screens/buy/buy_options_page.dart
index 45edfc921..930878544 100644
--- a/lib/src/screens/buy/buy_options_page.dart
+++ b/lib/src/screens/buy/buy_options_page.dart
@@ -34,16 +34,6 @@ class BuyOptionsPage extends BasePage {
constraints: BoxConstraints(maxWidth: 330),
child: Column(
children: [
- Padding(
- padding: EdgeInsets.only(top: 24),
- child: OptionTile(
- image: iconRobinhood,
- title: "Robinhood Connect",
- description: S.of(context).robinhood_option_description,
- onPressed: () async =>
- await getIt.get().launchProvider(context),
- ),
- ),
Padding(
padding: EdgeInsets.only(top: 24),
child: OptionTile(
@@ -54,6 +44,16 @@ class BuyOptionsPage extends BasePage {
await getIt.get().launchProvider(context),
),
),
+ Padding(
+ padding: EdgeInsets.only(top: 24),
+ child: OptionTile(
+ image: iconRobinhood,
+ title: "Robinhood Connect",
+ description: S.of(context).robinhood_option_description,
+ onPressed: () async =>
+ await getIt.get().launchProvider(context),
+ ),
+ ),
Spacer(),
Padding(
padding: EdgeInsets.fromLTRB(24, 24, 24, 32),
diff --git a/lib/src/screens/monero_accounts/monero_account_list_page.dart b/lib/src/screens/monero_accounts/monero_account_list_page.dart
index 6b3d3e08b..38055854b 100644
--- a/lib/src/screens/monero_accounts/monero_account_list_page.dart
+++ b/lib/src/screens/monero_accounts/monero_account_list_page.dart
@@ -15,7 +15,7 @@ class MoneroAccountListPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
- double itemHeight = 80;
+ double itemHeight = 65;
double buttonHeight = 62;
return Observer(builder: (_) {
@@ -31,7 +31,7 @@ class MoneroAccountListPage extends StatelessWidget {
child: ListView.separated(
padding: EdgeInsets.zero,
controller: controller,
- separatorBuilder: (context, index) => const VerticalSectionDivider(),
+ separatorBuilder: (context, index) => const HorizontalSectionDivider(),
itemCount: accounts.length,
itemBuilder: (context, index) {
final account = accounts[index];
diff --git a/lib/src/screens/monero_accounts/widgets/account_tile.dart b/lib/src/screens/monero_accounts/widgets/account_tile.dart
index 3e428f355..97d328214 100644
--- a/lib/src/screens/monero_accounts/widgets/account_tile.dart
+++ b/lib/src/screens/monero_accounts/widgets/account_tile.dart
@@ -1,5 +1,4 @@
import 'package:cake_wallet/themes/extensions/account_list_theme.dart';
-import 'package:cake_wallet/themes/extensions/receive_page_theme.dart';
import 'package:flutter/material.dart';
import 'package:flutter_slidable/flutter_slidable.dart';
import 'package:cake_wallet/generated/i18n.dart';
@@ -33,7 +32,7 @@ class AccountTile extends StatelessWidget {
final Widget cell = GestureDetector(
onTap: onTap,
child: Container(
- height: 77,
+ height: 60,
width: double.infinity,
padding: EdgeInsets.only(left: 24, right: 24),
color: color,
diff --git a/lib/src/screens/nodes/node_create_or_edit_page.dart b/lib/src/screens/nodes/node_create_or_edit_page.dart
index ff9d59719..50c1c3be5 100644
--- a/lib/src/screens/nodes/node_create_or_edit_page.dart
+++ b/lib/src/screens/nodes/node_create_or_edit_page.dart
@@ -78,7 +78,7 @@ class NodeCreateOrEditPage extends BasePage {
'assets/images/qr_code_icon.png',
),
);
-
+
final NodeCreateOrEditViewModel nodeCreateOrEditViewModel;
final Node? editingNode;
final bool? isSelected;
@@ -133,27 +133,20 @@ class NodeCreateOrEditPage extends BasePage {
mainAxisAlignment: MainAxisAlignment.center,
children: [
Flexible(
- child: Container(
- padding: EdgeInsets.only(right: 8.0),
- child: LoadingPrimaryButton(
+ child: Container(
+ padding: EdgeInsets.only(right: 8.0),
+ child: LoadingPrimaryButton(
onPressed: () async {
final confirmed = await showPopUp(
context: context,
builder: (BuildContext context) {
return AlertWithTwoActions(
- alertTitle:
- S.of(context).remove_node,
- alertContent: S
- .of(context)
- .remove_node_message,
- rightButtonText:
- S.of(context).remove,
- leftButtonText:
- S.of(context).cancel,
- actionRightButton: () =>
- Navigator.pop(context, true),
- actionLeftButton: () =>
- Navigator.pop(context, false));
+ alertTitle: S.of(context).remove_node,
+ alertContent: S.of(context).remove_node_message,
+ rightButtonText: S.of(context).remove,
+ leftButtonText: S.of(context).cancel,
+ actionRightButton: () => Navigator.pop(context, true),
+ actionLeftButton: () => Navigator.pop(context, false));
}) ??
false;
@@ -163,11 +156,14 @@ class NodeCreateOrEditPage extends BasePage {
}
},
text: S.of(context).delete,
- isDisabled: !nodeCreateOrEditViewModel.isReady ||
+ isDisabled: editingNode == null ||
+ !nodeCreateOrEditViewModel.isReady ||
(isSelected ?? false),
color: Palette.red,
- textColor: Colors.white),
- )),
+ textColor: Colors.white,
+ ),
+ ),
+ ),
Flexible(
child: Container(
padding: EdgeInsets.only(left: 8.0),
diff --git a/lib/src/screens/restore/restore_from_backup_page.dart b/lib/src/screens/restore/restore_from_backup_page.dart
index c3440fb06..f7fddac3f 100644
--- a/lib/src/screens/restore/restore_from_backup_page.dart
+++ b/lib/src/screens/restore/restore_from_backup_page.dart
@@ -4,7 +4,6 @@ import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
import 'package:cake_wallet/utils/responsive_layout_util.dart';
import 'package:cake_wallet/utils/show_pop_up.dart';
import 'package:flutter/material.dart';
-import 'package:flutter/src/widgets/framework.dart';
import 'package:cake_wallet/src/widgets/primary_button.dart';
import 'package:cake_wallet/view_model/restore_from_backup_view_model.dart';
import 'package:cake_wallet/src/screens/base_page.dart';
@@ -31,10 +30,11 @@ class RestoreFromBackupPage extends BasePage {
context: context,
builder: (BuildContext context) {
return AlertWithOneAction(
- alertTitle: S.of(context).error,
- alertContent: state.error,
- buttonText: S.of(context).ok,
- buttonAction: () => Navigator.of(context).pop());
+ alertTitle: S.of(context).error,
+ alertContent: state.error,
+ buttonText: S.of(context).ok,
+ buttonAction: () => Navigator.of(context).pop(),
+ );
});
});
}
@@ -44,42 +44,97 @@ class RestoreFromBackupPage extends BasePage {
child: ConstrainedBox(
constraints: BoxConstraints(maxWidth: ResponsiveLayoutUtilBase.kDesktopMaxWidthConstraint),
child: Padding(
- padding: EdgeInsets.only(bottom: 24, left: 24, right: 24),
- child: Column(children: [
+ padding: EdgeInsets.only(bottom: 24, left: 24, right: 24),
+ child: Column(
+ children: [
Expanded(
child: Container(
child: Center(
- child: TextFormField(
+ child: Column(
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ TextFormField(
obscureText: true,
enableSuggestions: false,
autocorrect: false,
- decoration: InputDecoration(
- hintText: S.of(context).enter_backup_password),
+ decoration:
+ InputDecoration(hintText: S.of(context).enter_backup_password),
keyboardType: TextInputType.visiblePassword,
controller: textEditingController,
- style: TextStyle(fontSize: 26, color: Colors.black))),
+ style: TextStyle(fontSize: 26, color: Colors.black),
+ ),
+ Observer(
+ builder: (_) {
+ if (restoreFromBackupViewModel.filePath.isNotEmpty) {
+ return Column(
+ children: [
+ const SizedBox(height: 100),
+ Row(
+ children: [
+ Text(
+ "File Name: ",
+ style: TextStyle(
+ fontSize: 18.0,
+ fontWeight: FontWeight.bold,
+ fontFamily: 'Lato',
+ color: titleColor(context),
+ ),
+ ),
+ Expanded(
+ child: Text(
+ restoreFromBackupViewModel.filePath.split("/").last,
+ style: TextStyle(
+ fontSize: 18.0,
+ fontWeight: FontWeight.bold,
+ fontFamily: 'Lato',
+ color: titleColor(context),
+ ),
+ ),
+ ),
+ ],
+ ),
+ ],
+ );
+ }
+
+ return const SizedBox();
+ },
+ ),
+ ],
+ ),
+ ),
),
),
Container(
- child: Row(children: [
- Expanded(
- child: PrimaryButton(
+ child: Row(
+ children: [
+ Expanded(
+ child: PrimaryButton(
onPressed: () => presentFilePicker(),
text: S.of(context).select_backup_file,
color: Colors.grey,
- textColor: Colors.white)),
- SizedBox(width: 20),
- Expanded(child: Observer(builder: (_) {
- return LoadingPrimaryButton(
- isLoading:
- restoreFromBackupViewModel.state is IsExecutingState,
- onPressed: () => onImportHandler(context),
- text: S.of(context).import,
- color: Theme.of(context).primaryColor,
- textColor: Colors.white);
- }))
- ])),
- ])),
+ textColor: Colors.white,
+ ),
+ ),
+ SizedBox(width: 20),
+ Expanded(
+ child: Observer(
+ builder: (_) {
+ return LoadingPrimaryButton(
+ isLoading: restoreFromBackupViewModel.state is IsExecutingState,
+ onPressed: () => onImportHandler(context),
+ text: S.of(context).import,
+ color: Theme.of(context).primaryColor,
+ textColor: Colors.white);
+ },
+ ),
+ ),
+ ],
+ ),
+ ),
+ ],
+ ),
+ ),
),
);
}
@@ -87,7 +142,7 @@ class RestoreFromBackupPage extends BasePage {
Future presentFilePicker() async {
final result = await FilePicker.platform.pickFiles();
- if (result?.files?.isEmpty ?? true) {
+ if (result?.files.isEmpty ?? true) {
return;
}
@@ -95,8 +150,7 @@ class RestoreFromBackupPage extends BasePage {
}
Future onImportHandler(BuildContext context) async {
- if (textEditingController.text.isEmpty ||
- (restoreFromBackupViewModel.filePath.isEmpty ?? true)) {
+ if (textEditingController.text.isEmpty || (restoreFromBackupViewModel.filePath.isEmpty)) {
await showPopUp(
context: context,
builder: (_) {
diff --git a/lib/src/screens/restore/restore_options_page.dart b/lib/src/screens/restore/restore_options_page.dart
index e54c0da29..91ee9bd0b 100644
--- a/lib/src/screens/restore/restore_options_page.dart
+++ b/lib/src/screens/restore/restore_options_page.dart
@@ -21,7 +21,6 @@ class RestoreOptionsPage extends BasePage {
@override
String get title => S.current.restore_restore_wallet;
-
final bool isNewInstall;
final imageSeedKeys = Image.asset('assets/images/restore_wallet_image.png');
final imageBackup = Image.asset('assets/images/backup.png');
@@ -38,8 +37,7 @@ class RestoreOptionsPage extends BasePage {
child: Column(
children: [
OptionTile(
- onPressed: () => Navigator.pushNamed(
- context, Routes.restoreWalletFromSeedKeys,
+ onPressed: () => Navigator.pushNamed(context, Routes.restoreWalletFromSeedKeys,
arguments: isNewInstall),
image: imageSeedKeys,
title: S.of(context).restore_title_from_seed_keys,
@@ -58,7 +56,7 @@ class RestoreOptionsPage extends BasePage {
child: OptionTile(
onPressed: () async {
bool isCameraPermissionGranted =
- await PermissionHandler.checkPermission(Permission.camera, context);
+ await PermissionHandler.checkPermission(Permission.camera, context);
if (!isCameraPermissionGranted) return;
bool isPinSet = false;
if (isNewInstall) {
@@ -73,7 +71,8 @@ class RestoreOptionsPage extends BasePage {
final restoreWallet =
await WalletRestoreFromQRCode.scanQRCodeForRestoring(context);
- final restoreFromQRViewModel = getIt.get(param1: restoreWallet.type);
+ final restoreFromQRViewModel =
+ getIt.get(param1: restoreWallet.type);
await restoreFromQRViewModel.create(restoreWallet: restoreWallet);
if (restoreFromQRViewModel.state is FailureState) {
diff --git a/lib/src/widgets/base_alert_dialog.dart b/lib/src/widgets/base_alert_dialog.dart
index 757ee1862..02a1f6ad0 100644
--- a/lib/src/widgets/base_alert_dialog.dart
+++ b/lib/src/widgets/base_alert_dialog.dart
@@ -3,7 +3,6 @@ import 'dart:ui';
import 'package:cake_wallet/src/widgets/section_divider.dart';
import 'package:cake_wallet/themes/extensions/alert_theme.dart';
import 'package:flutter/material.dart';
-import 'package:cake_wallet/palette.dart';
class BaseAlertDialog extends StatelessWidget {
String get titleText => '';
@@ -49,7 +48,7 @@ class BaseAlertDialog extends StatelessWidget {
Widget actionButtons(BuildContext context) {
return Container(
- height: 52,
+ height: 60,
child: Row(
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.stretch,
diff --git a/lib/src/widgets/option_tile.dart b/lib/src/widgets/option_tile.dart
index 6a2825003..8b46641fb 100644
--- a/lib/src/widgets/option_tile.dart
+++ b/lib/src/widgets/option_tile.dart
@@ -52,7 +52,7 @@ class OptionTile extends StatelessWidget {
child: Text(
description,
style: TextStyle(
- fontSize: 16,
+ fontSize: 14,
fontWeight: FontWeight.normal,
color: Theme.of(context).extension()!.descriptionColor,
),
diff --git a/lib/utils/permission_handler.dart b/lib/utils/permission_handler.dart
index 6b76f767a..6a6126df2 100644
--- a/lib/utils/permission_handler.dart
+++ b/lib/utils/permission_handler.dart
@@ -17,7 +17,9 @@ class PermissionHandler {
var status = await permission.status;
if (status.isDenied) {
- status = await permission.request();
+ try {
+ status = await permission.request();
+ } catch (_) {}
}
if (status.isPermanentlyDenied || status.isDenied) {
diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift
index c55241797..68d03b5f8 100644
--- a/macos/Flutter/GeneratedPluginRegistrant.swift
+++ b/macos/Flutter/GeneratedPluginRegistrant.swift
@@ -12,13 +12,12 @@ import devicelocale
import flutter_secure_storage_macos
import in_app_review
import package_info
+import package_info_plus
import path_provider_foundation
-import platform_device_id
-import platform_device_id_macos
import share_plus_macos
import shared_preferences_foundation
import url_launcher_macos
-import wakelock_macos
+import wakelock_plus
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
ConnectivityPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlugin"))
@@ -28,11 +27,10 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin"))
InAppReviewPlugin.register(with: registry.registrar(forPlugin: "InAppReviewPlugin"))
FLTPackageInfoPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlugin"))
+ FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
- PlatformDeviceIdMacosPlugin.register(with: registry.registrar(forPlugin: "PlatformDeviceIdMacosPlugin"))
- PlatformDeviceIdMacosPlugin.register(with: registry.registrar(forPlugin: "PlatformDeviceIdMacosPlugin"))
SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin"))
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
- WakelockMacosPlugin.register(with: registry.registrar(forPlugin: "WakelockMacosPlugin"))
+ WakelockPlusMacosPlugin.register(with: registry.registrar(forPlugin: "WakelockPlusMacosPlugin"))
}
diff --git a/pubspec_base.yaml b/pubspec_base.yaml
index 573f8c671..f43d65400 100644
--- a/pubspec_base.yaml
+++ b/pubspec_base.yaml
@@ -60,16 +60,21 @@ dependencies:
another_flushbar: ^1.12.29
archive: ^3.3.0
cryptography: ^2.0.5
- file_picker: ^5.2.5
+ file_picker:
+ git:
+ url: https://github.com/cake-tech/flutter_file_picker.git
+ ref: master
unorm_dart: ^0.2.0
# check unorm_dart for usage and for replace
permission_handler: ^10.0.0
- device_display_brightness: ^0.0.6
+ device_display_brightness:
+ git:
+ url: https://github.com/cake-tech/device_display_brightness.git
+ ref: master
workmanager: ^0.5.1
- platform_device_id: ^1.0.1
- wakelock: ^0.6.2
+ wakelock_plus: ^1.1.3
flutter_mailer: ^2.0.2
- device_info_plus: 8.1.0
+ device_info_plus: ^9.1.0
base32: 2.1.3
in_app_review: ^2.0.6
cake_backup:
diff --git a/res/values/strings_fr.arb b/res/values/strings_fr.arb
index cae478d7d..9f8a269d4 100644
--- a/res/values/strings_fr.arb
+++ b/res/values/strings_fr.arb
@@ -722,8 +722,8 @@
"awaitDAppProcessing": "Veuillez attendre que l'application décentralisée (dApp) termine le traitement.",
"copyWalletConnectLink": "Copiez le lien WalletConnect depuis l'application décentralisée (dApp) et collez-le ici",
"enterWalletConnectURI": "Saisissez l'URI de WalletConnect.",
- "seed_key": "Clé de graines",
- "enter_seed_phrase": "Entrez votre phrase de semence",
+ "seed_key": "Clé secrète (seed key)",
+ "enter_seed_phrase": "Entrez votre phrase secrète (seed)",
"change_rep_successful": "Représentant changé avec succès",
"add_contact": "Ajouter le contact",
"exchange_provider_unsupported": "${providerName} n'est plus pris en charge !",