Skip to content

Factorn #1145

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
May 28, 2025
Merged

Factorn #1145

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified asset_sources/default_themes/stack_duo/dark.zip
Binary file not shown.
Binary file modified asset_sources/default_themes/stack_duo/light.zip
Binary file not shown.
Binary file modified asset_sources/default_themes/stack_wallet/dark.zip
Binary file not shown.
Binary file modified asset_sources/default_themes/stack_wallet/light.zip
Binary file not shown.
13 changes: 7 additions & 6 deletions lib/models/isar/models/blockchain_data/address.dart
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,8 @@ class Address extends CryptoCurrencyAddress {
}

@override
String toString() => "{ "
String toString() =>
"{ "
"id: $id, "
"walletId: $walletId, "
"value: $value, "
Expand Down Expand Up @@ -130,10 +131,7 @@ class Address extends CryptoCurrencyAddress {
return jsonEncode(result);
}

static Address fromJsonString(
String jsonString, {
String? overrideWalletId,
}) {
static Address fromJsonString(String jsonString, {String? overrideWalletId}) {
final json = jsonDecode(jsonString);
final derivationPathString = json["derivationPath"] as String?;

Expand Down Expand Up @@ -176,7 +174,8 @@ enum AddressType {
p2tr,
solana,
cardanoShelley,
xelis;
xelis,
fact0rn;

String get readableName {
switch (this) {
Expand Down Expand Up @@ -216,6 +215,8 @@ enum AddressType {
return "Cardano Shelley";
case AddressType.xelis:
return "Xelis";
case AddressType.fact0rn:
return "FACT0RN";
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import 'dart:async';
import 'dart:io';

import 'package:barcode_scan2/barcode_scan2.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
Expand All @@ -14,6 +13,7 @@ import '../../../../providers/providers.dart';
import '../../../../services/frost.dart';
import '../../../../themes/stack_colors.dart';
import '../../../../utilities/assets.dart';
import '../../../../utilities/barcode_scanner_interface.dart';
import '../../../../utilities/constants.dart';
import '../../../../utilities/logger.dart';
import '../../../../utilities/show_loading.dart';
Expand Down Expand Up @@ -212,7 +212,7 @@ class _RestoreFrostMsWalletViewState
await Future<void>.delayed(const Duration(milliseconds: 75));
}

final qrResult = await BarcodeScanner.scan();
final qrResult = await ref.read(pBarcodeScanner).scan();

configFieldController.text = qrResult.rawContent;

Expand All @@ -238,11 +238,26 @@ class _RestoreFrostMsWalletViewState
}
}
} on PlatformException catch (e, s) {
Logging.instance.w(
"Failed to get camera permissions while trying to scan qr code: ",
error: e,
stackTrace: s,
);
if (mounted) {
try {
await checkCamPermDeniedMobileAndOpenAppSettings(
context,
logging: Logging.instance,
);
} catch (e, s) {
Logging.instance.e(
"Failed to check cam permissions",
error: e,
stackTrace: s,
);
}
} else {
Logging.instance.w(
"Failed to get camera permissions while trying to scan qr code: ",
error: e,
stackTrace: s,
);
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import '../../../providers/global/secure_store_provider.dart';
import '../../../providers/providers.dart';
import '../../../themes/stack_colors.dart';
import '../../../utilities/assets.dart';
import '../../../utilities/barcode_scanner_interface.dart';
import '../../../utilities/clipboard_interface.dart';
import '../../../utilities/constants.dart';
import '../../../utilities/text_styles.dart';
Expand Down Expand Up @@ -50,7 +49,7 @@ class RestoreViewOnlyWalletView extends ConsumerStatefulWidget {
required this.coin,
required this.restoreBlockHeight,
this.enableLelantusScanning = false,
this.barcodeScanner = const BarcodeScannerWrapper(),

this.clipboard = const ClipboardWrapper(),
});

Expand All @@ -60,7 +59,6 @@ class RestoreViewOnlyWalletView extends ConsumerStatefulWidget {
final CryptoCurrency coin;
final int restoreBlockHeight;
final bool enableLelantusScanning;
final BarcodeScannerInterface barcodeScanner;
final ClipboardInterface clipboard;

@override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ class RestoreWalletView extends ConsumerStatefulWidget {
required this.mnemonicPassphrase,
required this.restoreBlockHeight,
this.enableLelantusScanning = false,
this.barcodeScanner = const BarcodeScannerWrapper(),

this.clipboard = const ClipboardWrapper(),
});

Expand All @@ -91,7 +91,6 @@ class RestoreWalletView extends ConsumerStatefulWidget {
final int restoreBlockHeight;
final bool enableLelantusScanning;

final BarcodeScannerInterface barcodeScanner;
final ClipboardInterface clipboard;

@override
Expand All @@ -111,8 +110,6 @@ class _RestoreWalletViewState extends ConsumerState<RestoreWalletView> {
final List<FormInputStatus> _inputStatuses = [];
// final List<FocusNode> _focusNodes = [];

late final BarcodeScannerInterface scanner;

late final TextSelectionControls textSelectionControls;

bool _hideSeedWords = false;
Expand Down Expand Up @@ -162,7 +159,6 @@ class _RestoreWalletViewState extends ConsumerState<RestoreWalletView> {
? CustomCupertinoTextSelectionControls(onPaste: onControlsPaste)
: CustomMaterialTextSelectionControls(onPaste: onControlsPaste);

scanner = widget.barcodeScanner;
for (int i = 0; i < _seedWordCount; i++) {
_controllers.add(TextEditingController());
_inputStatuses.add(FormInputStatus.empty);
Expand Down Expand Up @@ -608,7 +604,7 @@ class _RestoreWalletViewState extends ConsumerState<RestoreWalletView> {

Future<void> scanMnemonicQr() async {
try {
final qrResult = await scanner.scan();
final qrResult = await ref.read(pBarcodeScanner).scan();

final results = AddressUtils.decodeQRSeedData(qrResult.rawContent);

Expand All @@ -625,11 +621,26 @@ class _RestoreWalletViewState extends ConsumerState<RestoreWalletView> {
}
} on PlatformException catch (e, s) {
// likely failed to get camera permissions
Logging.instance.e(
"Restore wallet qr scan failed: $e",
error: e,
stackTrace: s,
);
if (mounted) {
try {
await checkCamPermDeniedMobileAndOpenAppSettings(
context,
logging: Logging.instance,
);
} catch (e, s) {
Logging.instance.e(
"Failed to check cam permissions",
error: e,
stackTrace: s,
);
}
} else {
Logging.instance.e(
"Restore wallet qr scan failed: $e",
error: e,
stackTrace: s,
);
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import '../../../providers/ui/address_book_providers/contact_name_is_not_empty_s
import '../../../providers/ui/address_book_providers/valid_contact_state_provider.dart';
import '../../../themes/stack_colors.dart';
import '../../../utilities/assets.dart';
import '../../../utilities/barcode_scanner_interface.dart';
import '../../../utilities/clipboard_interface.dart';
import '../../../utilities/constants.dart';
import '../../../utilities/text_styles.dart';
Expand All @@ -43,13 +42,11 @@ import 'new_contact_address_entry_form.dart';
class AddAddressBookEntryView extends ConsumerStatefulWidget {
const AddAddressBookEntryView({
super.key,
this.barcodeScanner = const BarcodeScannerWrapper(),
this.clipboard = const ClipboardWrapper(),
});

static const String routeName = "/addAddressBookEntry";

final BarcodeScannerInterface barcodeScanner;
final ClipboardInterface clipboard;

@override
Expand All @@ -63,7 +60,6 @@ class _AddAddressBookEntryViewState
late final FocusNode nameFocusNode;
late final ScrollController scrollController;

late final BarcodeScannerInterface scanner;
late final ClipboardInterface clipboard;

Emoji? _selectedEmoji;
Expand All @@ -72,7 +68,7 @@ class _AddAddressBookEntryViewState
@override
initState() {
ref.refresh(addressEntryDataProviderFamilyRefresher);
scanner = widget.barcodeScanner;

clipboard = widget.clipboard;

nameController = TextEditingController();
Expand Down Expand Up @@ -114,7 +110,6 @@ class _AddAddressBookEntryViewState
key: Key("contactAddressEntryForm_$id"),
id: ref.read(addressEntryDataProvider(id)).id,
clipboard: clipboard,
barcodeScanner: scanner,
),
);
setState(() {});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ import '../../../providers/ui/address_book_providers/address_entry_data_provider
import '../../../providers/ui/address_book_providers/valid_contact_state_provider.dart';
import '../../../themes/stack_colors.dart';
import '../../../utilities/assets.dart';
import '../../../utilities/barcode_scanner_interface.dart';
import '../../../utilities/clipboard_interface.dart';
import '../../../utilities/text_styles.dart';
import '../../../utilities/util.dart';
Expand All @@ -33,15 +32,13 @@ class AddNewContactAddressView extends ConsumerStatefulWidget {
const AddNewContactAddressView({
super.key,
required this.contactId,
this.barcodeScanner = const BarcodeScannerWrapper(),
this.clipboard = const ClipboardWrapper(),
});

static const String routeName = "/addNewContactAddress";

final String contactId;

final BarcodeScannerInterface barcodeScanner;
final ClipboardInterface clipboard;

@override
Expand All @@ -53,13 +50,12 @@ class _AddNewContactAddressViewState
extends ConsumerState<AddNewContactAddressView> {
late final String contactId;

late final BarcodeScannerInterface barcodeScanner;
late final ClipboardInterface clipboard;

@override
void initState() {
contactId = widget.contactId;
barcodeScanner = widget.barcodeScanner;

clipboard = widget.clipboard;

super.initState();
Expand Down Expand Up @@ -173,11 +169,7 @@ class _AddNewContactAddressViewState
],
),
const SizedBox(height: 16),
NewContactAddressEntryForm(
id: 0,
barcodeScanner: barcodeScanner,
clipboard: clipboard,
),
NewContactAddressEntryForm(id: 0, clipboard: clipboard),
const SizedBox(height: 16),
const Spacer(),
Row(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ import '../../../providers/ui/address_book_providers/address_entry_data_provider
import '../../../providers/ui/address_book_providers/valid_contact_state_provider.dart';
import '../../../themes/stack_colors.dart';
import '../../../utilities/assets.dart';
import '../../../utilities/barcode_scanner_interface.dart';
import '../../../utilities/clipboard_interface.dart';
import '../../../utilities/text_styles.dart';
import '../../../utilities/util.dart';
Expand All @@ -34,7 +33,7 @@ class EditContactAddressView extends ConsumerStatefulWidget {
super.key,
required this.contactId,
required this.addressEntry,
this.barcodeScanner = const BarcodeScannerWrapper(),

this.clipboard = const ClipboardWrapper(),
});

Expand All @@ -43,7 +42,6 @@ class EditContactAddressView extends ConsumerStatefulWidget {
final String contactId;
final ContactAddressEntry addressEntry;

final BarcodeScannerInterface barcodeScanner;
final ClipboardInterface clipboard;

@override
Expand All @@ -56,7 +54,6 @@ class _EditContactAddressViewState
late final String contactId;
late final ContactAddressEntry addressEntry;

late final BarcodeScannerInterface barcodeScanner;
late final ClipboardInterface clipboard;

Future<void> save(ContactEntry contact) async {
Expand Down Expand Up @@ -97,7 +94,6 @@ class _EditContactAddressViewState
void initState() {
contactId = widget.contactId;
addressEntry = widget.addressEntry;
barcodeScanner = widget.barcodeScanner;
clipboard = widget.clipboard;

super.initState();
Expand Down Expand Up @@ -211,11 +207,7 @@ class _EditContactAddressViewState
],
),
const SizedBox(height: 16),
NewContactAddressEntryForm(
id: 0,
barcodeScanner: barcodeScanner,
clipboard: clipboard,
),
NewContactAddressEntryForm(id: 0, clipboard: clipboard),
const SizedBox(height: 24),
ConditionalParent(
condition: isDesktop,
Expand Down
Loading
Loading