- Add Linter rules for return types and final fields

- Enhance exception_handler code
- Add ShareUtil to unify modification point
wow-support
OmarHatem 1 year ago
parent 318e3b92e5
commit 8a45cb4dc7

@ -18,6 +18,8 @@ analyzer:
linter:
rules:
- cancel_subscriptions
- always_declare_return_types
- prefer_final_fields
# analyzer:

@ -1,10 +1,8 @@
import 'package:cake_wallet/src/screens/base_page.dart';
import 'package:cake_wallet/src/widgets/alert_with_one_action.dart';
import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
import 'package:cake_wallet/src/widgets/keyboard_done_button.dart';
import 'package:cake_wallet/src/widgets/primary_button.dart';
import 'package:cake_wallet/store/settings_store.dart';
import 'package:cake_wallet/themes/theme_base.dart';
import 'package:cake_wallet/utils/share_util.dart';
import 'package:cake_wallet/utils/show_pop_up.dart';
import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart';
import 'package:flutter/material.dart';
@ -15,7 +13,6 @@ import 'package:cake_wallet/generated/i18n.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import 'package:keyboard_actions/keyboard_actions.dart';
import 'package:mobx/mobx.dart';
import 'package:share_plus/share_plus.dart';
class AddressPage extends BasePage {
AddressPage({
@ -101,11 +98,9 @@ class AddressPage extends BasePage {
splashColor: Colors.transparent,
iconSize: 25,
onPressed: () {
final box = context.findRenderObject() as RenderBox?;
Share.share(
addressListViewModel.address.address,
sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size,
ShareUtil.share(
text: addressListViewModel.address.address,
context: context,
);
},
icon: shareImage,

@ -305,7 +305,7 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
_effectsInstalled = true;
}
transactionStatePopup() {
void transactionStatePopup() {
showPopUp<void>(
context: context,
builder: (BuildContext popupContext) {

@ -1,13 +1,11 @@
import 'package:cake_wallet/src/widgets/keyboard_done_button.dart';
import 'package:cake_wallet/src/widgets/section_divider.dart';
import 'package:cake_wallet/themes/theme_base.dart';
import 'package:cake_wallet/utils/share_util.dart';
import 'package:cake_wallet/utils/show_pop_up.dart';
import 'package:cake_wallet/view_model/dashboard/dashboard_view_model.dart';
import 'package:cw_core/wallet_type.dart';
import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import 'package:share_plus/share_plus.dart';
import 'package:cake_wallet/routes.dart';
import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/di.dart';
@ -102,11 +100,9 @@ class ReceivePage extends BasePage {
splashColor: Colors.transparent,
iconSize: 25,
onPressed: () {
final box = context.findRenderObject() as RenderBox?;
Share.share(
addressListViewModel.address.address,
sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size,
ShareUtil.share(
text: addressListViewModel.address.address,
context: context,
);
},
icon: shareImage

@ -1,12 +1,11 @@
import 'package:cake_wallet/palette.dart';
import 'package:cake_wallet/themes/theme_base.dart';
import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
import 'package:cake_wallet/utils/share_util.dart';
import 'package:cake_wallet/utils/show_bar.dart';
import 'package:cake_wallet/utils/show_pop_up.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:share_plus/share_plus.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/src/widgets/primary_button.dart';
@ -160,11 +159,9 @@ class WalletSeedPage extends BasePage {
padding: EdgeInsets.only(right: 8.0),
child: PrimaryButton(
onPressed: () {
final box = context.findRenderObject() as RenderBox?;
Share.share(
walletSeedViewModel.seed,
sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size,
ShareUtil.share(
text: walletSeedViewModel.seed,
context: context,
);
},
text: S.of(context).save,

@ -14,6 +14,7 @@ import 'package:shared_preferences/shared_preferences.dart';
class ExceptionHandler {
static bool _hasError = false;
static const coolDownDurationInDays = 7;
static void _saveException(String? error, StackTrace? stackTrace) async {
final appDocDir = await getApplicationDocumentsDirectory();
@ -77,12 +78,11 @@ class ExceptionHandler {
final lastPopupDate =
DateTime.tryParse(sharedPrefs.getString(PreferencesKey.lastPopupDate) ?? '') ??
DateTime.parse("2001-01-01");
DateTime.now().subtract(Duration(days: coolDownDurationInDays + 1));
final durationSinceLastReport = DateTime.now().difference(lastPopupDate).inDays;
// cool-down duration to be 7 days between reports
if (_hasError || durationSinceLastReport < 7) {
if (_hasError || durationSinceLastReport < coolDownDurationInDays) {
return;
}
_hasError = true;
@ -117,14 +117,17 @@ class ExceptionHandler {
}
/// Ignore User related errors or system errors
static bool _ignoreError(String error) {
return error.contains("errno = 103") || // SocketException: Software caused connection abort
error.contains("errno = 9") || // SocketException: Bad file descriptor
error.contains("errno = 32") || // SocketException: Write failed (OS Error: Broken pipe)
error.contains("errno = 60") || // SocketException: Operation timed out
error.contains("errno = 54") || // SocketException: Connection reset by peer
error.contains("errno = 49") || // SocketException: Can't assign requested address
error.contains("PERMISSION_NOT_GRANTED") ||
error.contains("errno = 28"); // OS Error: No space left on device
}
static bool _ignoreError(String error) =>
_ignoredErrors.any((element) => error.contains(element));
static const List<String> _ignoredErrors = const [
"errno = 103", // SocketException: Software caused connection abort
"errno = 9", // SocketException: Bad file descriptor
"errno = 32", // SocketException: Write failed (OS Error: Broken pipe)
"errno = 60", // SocketException: Operation timed out
"errno = 54", // SocketException: Connection reset by peer
"errno = 49", // SocketException: Can't assign requested address
"errno = 28", // OS Error: No space left on device
"PERMISSION_NOT_GRANTED",
];
}

@ -0,0 +1,13 @@
import 'package:flutter/material.dart';
import 'package:share_plus/share_plus.dart';
class ShareUtil {
static void share({required String text, required BuildContext context}) {
final box = context.findRenderObject() as RenderBox?;
Share.share(
text,
sharePositionOrigin: box!.localToGlobal(Offset.zero) & box.size,
);
}
}
Loading…
Cancel
Save