- Add Linter rules for return types and final fields - Enhance exception_handler code - Add ShareUtil to unify modification point
- Add Linter rules for return types and final fields - Enhance exception_handler code - Add ShareUtil to unify modification point
OmarHatem committed
Feb 8, 2023 at 20:16 UTC
8a45cb4dc7f2abe03c06cd6c2e48d0cc2ea88f58
7 files changed
+44
-38
analysis_options.yaml
+2
@@ -18,6 +18,8 @@ analyzer:
18
linter:
19
rules:
20
- cancel_subscriptions
21
+ - always_declare_return_types
22
+ - prefer_final_fields
23
24
25
# analyzer:
lib/src/screens/dashboard/widgets/address_page.dart
+4
-9
@@ -1,10 +1,8 @@
1
import 'package:cake_wallet/src/screens/base_page.dart';
2
-import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
2
import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
3
import 'package:cake_wallet/src/widgets/keyboard_done_button.dart';
5
-import 'package:cake_wallet/src/widgets/primary_button.dart';
6
-import 'package:cake_wallet/store/settings_store.dart';
4
import 'package:cake_wallet/themes/theme_base.dart';
5
+import 'package:cake_wallet/utils/share_util.dart';
6
import 'package:cake_wallet/utils/show_pop_up.dart';
7
import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart';
8
import 'package:flutter/material.dart';
@@ -15,7 +13,6 @@ import 'package:cake_wallet/generated/i18n.dart';
13
import 'package:flutter_mobx/flutter_mobx.dart';
14
import 'package:keyboard_actions/keyboard_actions.dart';
15
import 'package:mobx/mobx.dart';
18
-import 'package:share_plus/share_plus.dart';
16
17
class AddressPage extends BasePage {
18
AddressPage({
@@ -101,11 +98,9 @@ class AddressPage extends BasePage {
98
splashColor: Colors.transparent,
99
iconSize: 25,
100
onPressed: () {
104
- final box = context.findRenderObject() as RenderBox?;
105
-
106
- Share.share(
107
- addressListViewModel.address.address,
108
- sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size,
101
+ ShareUtil.share(
102
+ text: addressListViewModel.address.address,
103
+ context: context,
104
);
105
},
106
icon: shareImage,
lib/src/screens/exchange_trade/exchange_trade_page.dart
+1
-1
@@ -305,7 +305,7 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
305
_effectsInstalled = true;
306
}
307
308
- transactionStatePopup() {
308
+ void transactionStatePopup() {
309
showPopUp<void>(
310
context: context,
311
builder: (BuildContext popupContext) {
lib/src/screens/receive/receive_page.dart
+4
-8
@@ -1,13 +1,11 @@
1
import 'package:cake_wallet/src/widgets/keyboard_done_button.dart';
2
import 'package:cake_wallet/src/widgets/section_divider.dart';
3
import 'package:cake_wallet/themes/theme_base.dart';
4
+import 'package:cake_wallet/utils/share_util.dart';
5
import 'package:cake_wallet/utils/show_pop_up.dart';
5
-import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart';
6
import 'package:cw_core/wallet_type.dart';
7
import 'package:flutter/material.dart';
8
-import 'package:flutter/cupertino.dart';
8
import 'package:flutter_mobx/flutter_mobx.dart';
10
-import 'package:share_plus/share_plus.dart';
9
import 'package:cake_wallet/routes.dart';
10
import 'package:cake_wallet/generated/i18n.dart';
11
import 'package:cake_wallet/di.dart';
@@ -102,11 +100,9 @@ class ReceivePage extends BasePage {
100
splashColor: Colors.transparent,
101
iconSize: 25,
102
onPressed: () {
105
- final box = context.findRenderObject() as RenderBox?;
106
-
107
- Share.share(
108
- addressListViewModel.address.address,
109
- sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size,
103
+ ShareUtil.share(
104
+ text: addressListViewModel.address.address,
105
+ context: context,
106
);
107
},
108
icon: shareImage
lib/src/screens/seed/wallet_seed_page.dart
+4
-7
@@ -1,12 +1,11 @@
1
import 'package:cake_wallet/palette.dart';
2
import 'package:cake_wallet/themes/theme_base.dart';
3
import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
4
+import 'package:cake_wallet/utils/share_util.dart';
5
import 'package:cake_wallet/utils/show_bar.dart';
6
import 'package:cake_wallet/utils/show_pop_up.dart';
6
-import 'package:flutter/cupertino.dart';
7
import 'package:flutter/material.dart';
8
import 'package:flutter/services.dart';
9
-import 'package:share_plus/share_plus.dart';
9
import 'package:flutter_mobx/flutter_mobx.dart';
10
import 'package:cake_wallet/generated/i18n.dart';
11
import 'package:cake_wallet/src/widgets/primary_button.dart';
@@ -160,11 +159,9 @@ class WalletSeedPage extends BasePage {
159
padding: EdgeInsets.only(right: 8.0),
160
child: PrimaryButton(
161
onPressed: () {
163
- final box = context.findRenderObject() as RenderBox?;
164
-
165
- Share.share(
166
- walletSeedViewModel.seed,
167
- sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size,
162
+ ShareUtil.share(
163
+ text: walletSeedViewModel.seed,
164
+ context: context,
165
);
166
},
167
text: S.of(context).save,
lib/utils/exception_handler.dart
+16
-13
@@ -14,6 +14,7 @@ import 'package:shared_preferences/shared_preferences.dart';
14
15
class ExceptionHandler {
16
static bool _hasError = false;
17
+ static const coolDownDurationInDays = 7;
18
19
static void _saveException(String? error, StackTrace? stackTrace) async {
20
final appDocDir = await getApplicationDocumentsDirectory();
@@ -77,12 +78,11 @@ class ExceptionHandler {
78
79
final lastPopupDate =
80
DateTime.tryParse(sharedPrefs.getString(PreferencesKey.lastPopupDate) ?? '') ??
80
- DateTime.parse("2001-01-01");
81
+ DateTime.now().subtract(Duration(days: coolDownDurationInDays + 1));
82
83
final durationSinceLastReport = DateTime.now().difference(lastPopupDate).inDays;
84
84
- // cool-down duration to be 7 days between reports
85
- if (_hasError || durationSinceLastReport < 7) {
85
+ if (_hasError || durationSinceLastReport < coolDownDurationInDays) {
86
return;
87
}
88
_hasError = true;
@@ -117,14 +117,17 @@ class ExceptionHandler {
117
}
118
119
/// Ignore User related errors or system errors
120
- static bool _ignoreError(String error) {
121
- return error.contains("errno = 103") || // SocketException: Software caused connection abort
122
- error.contains("errno = 9") || // SocketException: Bad file descriptor
123
- error.contains("errno = 32") || // SocketException: Write failed (OS Error: Broken pipe)
124
- error.contains("errno = 60") || // SocketException: Operation timed out
125
- error.contains("errno = 54") || // SocketException: Connection reset by peer
126
- error.contains("errno = 49") || // SocketException: Can't assign requested address
127
- error.contains("PERMISSION_NOT_GRANTED") ||
128
- error.contains("errno = 28"); // OS Error: No space left on device
129
- }
120
+ static bool _ignoreError(String error) =>
121
+ _ignoredErrors.any((element) => error.contains(element));
122
+
123
+ static const List<String> _ignoredErrors = const [
124
+ "errno = 103", // SocketException: Software caused connection abort
125
+ "errno = 9", // SocketException: Bad file descriptor
126
+ "errno = 32", // SocketException: Write failed (OS Error: Broken pipe)
127
+ "errno = 60", // SocketException: Operation timed out
128
+ "errno = 54", // SocketException: Connection reset by peer
129
+ "errno = 49", // SocketException: Can't assign requested address
130
+ "errno = 28", // OS Error: No space left on device
131
+ "PERMISSION_NOT_GRANTED",
132
+ ];
133
}
lib/utils/share_util.dart
new
+13
@@ -0,0 +1,13 @@
1
+import 'package:flutter/material.dart';
2
+import 'package:share_plus/share_plus.dart';
3
+
4
+class ShareUtil {
5
+ static void share({required String text, required BuildContext context}) {
6
+ final box = context.findRenderObject() as RenderBox?;
7
+
8
+ Share.share(
9
+ text,
10
+ sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size,
11
+ );
12
+ }
13
+}
\ No newline at end of file