update flutter and isar (and various other required deps)
What changed, and why it matters
This is a large routine maintenance commit that updates the app's Flutter framework and switches the local database library from the original 'isar' package to the community-maintained 'isar_community' fork. Most visible changes are automatic import renames and code formatting. There is no direct evidence in the commit of a security vulnerability being fixed or introduced, but any database-layer migration in a wallet app can affect how keys, transaction data, and backups are stored. The change should be reviewed for compatibility and data-integrity risks rather than treated as a security patch.
Treat this as a dependency-maintenance change, not a confirmed security fix. Verify that the isar_community fork is pinned to a reviewed version, run full migration and backup/restore tests, and confirm generated .g.dart files were regenerated with the new package. If this commit is being evaluated for incident response, look for a companion commit or advisory that explains why the original isar package was replaced.
Security signals we found
Dependency migration from isar to isar_community fork
Large formatting diff obscures semantic changes
Database layer touched across wallet info, UTXO, transaction, and encrypted string models
No explicit security claim or CVE in commit metadata
No changes to encryption, authentication, or network code visible in supplied diff
Evidence from the diff
The commit replaces package:isar/isar.dart imports with package:isar_community/isar.dart across ~100 Dart files, updates generated plugin registrants for Linux/macOS/Windows, refreshes pubspec.lock, and applies Dart formatter changes (trailing commas, line breaks). It also touches iOS .gitignore to exclude Flutter ephemeral LLDB helper files. No explicit security fix, CVE reference, or vulnerability description is present in the commit message or diff. The database schema annotations remain structurally identical; only formatting and import paths changed. Because Isar is the primary persistence layer for wallet info, UTXOs, transactions, address labels, and encrypted values, a fork swap could have behavioral differences in serialization, indexing, or migration, but the diff does not reveal such changes.
Changed components
lib/db/isar/main_db.dartlib/db/db_version_migration.dartlib/db/migrate_wallets_to_isar.dartlib/models/isar/*lib/wallets/isar/*pubspec.lockscripts/app_config/templates/pubspec.templatelinux/flutter/generated_plugin_registrant.ccmacos/Flutter/GeneratedPluginRegistrant.swiftwindows/flutter/generated_plugin_registrant.ccInspect captured patch +2366 / −2570
diff --git a/ios/.gitignore b/ios/.gitignore
index c41f80e..c079131 100644
--- a/ios/.gitignore
+++ b/ios/.gitignore
@@ -35,3 +35,5 @@ Runner/GeneratedPluginRegistrant.*
# app specific, handled by scripts
Runner/Assets.xcassets/LaunchImage.imageset/*.png
+/Flutter/ephemeral/flutter_lldb_helper.py
+/Flutter/ephemeral/flutter_lldbinit
diff --git a/lib/db/db_version_migration.dart b/lib/db/db_version_migration.dart
index 9c278ff..ab2b8bc 100644
--- a/lib/db/db_version_migration.dart
+++ b/lib/db/db_version_migration.dart
@@ -8,7 +8,7 @@
*
*/
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import 'package:tuple/tuple.dart';
import '../app_config.dart';
diff --git a/lib/db/isar/main_db.dart b/lib/db/isar/main_db.dart
index 0a02690..d951a1a 100644
--- a/lib/db/isar/main_db.dart
+++ b/lib/db/isar/main_db.dart
@@ -9,7 +9,7 @@
*/
import 'package:decimal/decimal.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import 'package:tuple/tuple.dart';
import '../../exceptions/main_db/main_db_exception.dart';
diff --git a/lib/db/migrate_wallets_to_isar.dart b/lib/db/migrate_wallets_to_isar.dart
index 6433799..de9cff6 100644
--- a/lib/db/migrate_wallets_to_isar.dart
+++ b/lib/db/migrate_wallets_to_isar.dart
@@ -1,6 +1,6 @@
import 'dart:convert';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../app_config.dart';
import '../models/isar/models/blockchain_data/v2/transaction_v2.dart';
diff --git a/lib/models/isar/exchange_cache/currency.dart b/lib/models/isar/exchange_cache/currency.dart
index 67a7f40..f450535 100644
--- a/lib/models/isar/exchange_cache/currency.dart
+++ b/lib/models/isar/exchange_cache/currency.dart
@@ -8,7 +8,7 @@
*
*/
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../../app_config.dart';
import '../../../services/exchange/change_now/change_now_exchange.dart';
diff --git a/lib/models/isar/exchange_cache/pair.dart b/lib/models/isar/exchange_cache/pair.dart
index 923aeb2..2e77ee7 100644
--- a/lib/models/isar/exchange_cache/pair.dart
+++ b/lib/models/isar/exchange_cache/pair.dart
@@ -8,7 +8,7 @@
*
*/
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
part 'pair.g.dart';
@@ -29,12 +29,7 @@ class Pair {
@Index()
final String exchangeName;
- @Index(
- composite: [
- CompositeIndex("exchangeName"),
- CompositeIndex("to"),
- ],
- )
+ @Index(composite: [CompositeIndex("exchangeName"), CompositeIndex("to")])
final String from;
final String to;
@@ -61,12 +56,7 @@ class Pair {
rateType == other.rateType;
@override
- int get hashCode => Object.hash(
- exchangeName,
- from,
- to,
- rateType,
- );
+ int get hashCode => Object.hash(exchangeName, from, to, rateType);
@override
String toString() => "Pair: ${toMap()}";
diff --git a/lib/models/isar/models/address_label.dart b/lib/models/isar/models/address_label.dart
index ebee663..ae6e337 100644
--- a/lib/models/isar/models/address_label.dart
+++ b/lib/models/isar/models/address_label.dart
@@ -8,7 +8,7 @@
*
*/
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
part 'address_label.g.dart';
diff --git a/lib/models/isar/models/block_explorer.dart b/lib/models/isar/models/block_explorer.dart
index 6bde450..ab0c1e8 100644
--- a/lib/models/isar/models/block_explorer.dart
+++ b/lib/models/isar/models/block_explorer.dart
@@ -8,7 +8,8 @@
*
*/
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
+
import '../../../app_config.dart';
import '../../../wallets/crypto_currency/crypto_currency.dart';
@@ -16,10 +17,7 @@ part 'block_explorer.g.dart';
@collection
class TransactionBlockExplorer {
- TransactionBlockExplorer({
- required this.ticker,
- required this.url,
- });
+ TransactionBlockExplorer({required this.ticker, required this.url});
Id id = Isar.autoIncrement;
@@ -37,10 +35,6 @@ class TransactionBlockExplorer {
}
}
- Uri? getUrlFor({required String txid}) => Uri.tryParse(
- url.replaceFirst(
- "%5BTXID%5D",
- txid,
- ),
- );
+ Uri? getUrlFor({required String txid}) =>
+ Uri.tryParse(url.replaceFirst("%5BTXID%5D", txid));
}
diff --git a/lib/models/isar/models/blockchain_data/address.dart b/lib/models/isar/models/blockchain_data/address.dart
index c1dfb3a..3366eb5 100644
--- a/lib/models/isar/models/blockchain_data/address.dart
+++ b/lib/models/isar/models/blockchain_data/address.dart
@@ -10,7 +10,7 @@
import 'dart:convert';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../../../exceptions/address/address_exception.dart';
import 'crypto_currency_address.dart';
diff --git a/lib/models/isar/models/blockchain_data/input.dart b/lib/models/isar/models/blockchain_data/input.dart
index e816a55..a8fbf8b 100644
--- a/lib/models/isar/models/blockchain_data/input.dart
+++ b/lib/models/isar/models/blockchain_data/input.dart
@@ -10,7 +10,7 @@
import 'dart:convert';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
part 'input.g.dart';
diff --git a/lib/models/isar/models/blockchain_data/output.dart b/lib/models/isar/models/blockchain_data/output.dart
index f544e99..f65f268 100644
--- a/lib/models/isar/models/blockchain_data/output.dart
+++ b/lib/models/isar/models/blockchain_data/output.dart
@@ -10,7 +10,7 @@
import 'dart:convert';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
part 'output.g.dart';
diff --git a/lib/models/isar/models/blockchain_data/transaction.dart b/lib/models/isar/models/blockchain_data/transaction.dart
index 4178560..3e43ffb 100644
--- a/lib/models/isar/models/blockchain_data/transaction.dart
+++ b/lib/models/isar/models/blockchain_data/transaction.dart
@@ -11,7 +11,7 @@
import 'dart:convert';
import 'dart:math';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import 'package:tuple/tuple.dart';
import '../../../../utilities/amount/amount.dart';
diff --git a/lib/models/isar/models/blockchain_data/utxo.dart b/lib/models/isar/models/blockchain_data/utxo.dart
index 57f9ede..f417b4c 100644
--- a/lib/models/isar/models/blockchain_data/utxo.dart
+++ b/lib/models/isar/models/blockchain_data/utxo.dart
@@ -11,7 +11,7 @@
import 'dart:convert';
import 'dart:math';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
part 'utxo.g.dart';
@@ -42,10 +42,7 @@ class UTXO {
@Index(
unique: true,
replace: true,
- composite: [
- CompositeIndex("walletId"),
- CompositeIndex("vout"),
- ],
+ composite: [CompositeIndex("walletId"), CompositeIndex("vout")],
)
late final String txid;
@@ -132,26 +129,26 @@ class UTXO {
String? address,
bool? used,
String? otherData,
- }) =>
- UTXO(
- walletId: walletId ?? this.walletId,
- txid: txid ?? this.txid,
- vout: vout ?? this.vout,
- value: value ?? this.value,
- name: name ?? this.name,
- isBlocked: isBlocked ?? this.isBlocked,
- blockedReason: blockedReason ?? this.blockedReason,
- isCoinbase: isCoinbase ?? this.isCoinbase,
- blockHash: blockHash ?? this.blockHash,
- blockHeight: blockHeight ?? this.blockHeight,
- blockTime: blockTime ?? this.blockTime,
- address: address ?? this.address,
- used: used ?? this.used,
- otherData: otherData ?? this.otherData,
- )..id = id ?? this.id;
+ }) => UTXO(
+ walletId: walletId ?? this.walletId,
+ txid: txid ?? this.txid,
+ vout: vout ?? this.vout,
+ value: value ?? this.value,
+ name: name ?? this.name,
+ isBlocked: isBlocked ?? this.isBlocked,
+ blockedReason: blockedReason ?? this.blockedReason,
+ isCoinbase: isCoinbase ?? this.isCoinbase,
+ blockHash: blockHash ?? this.blockHash,
+ blockHeight: blockHeight ?? this.blockHeight,
+ blockTime: blockTime ?? this.blockTime,
+ address: address ?? this.address,
+ used: used ?? this.used,
+ otherData: otherData ?? this.otherData,
+ )..id = id ?? this.id;
@override
- String toString() => "{ "
+ String toString() =>
+ "{ "
"id: $id, "
"walletId: $walletId, "
"txid: $txid, "
diff --git a/lib/models/isar/models/blockchain_data/v2/input_v2.dart b/lib/models/isar/models/blockchain_data/v2/input_v2.dart
index 7442bd2..7e4ae14 100644
--- a/lib/models/isar/models/blockchain_data/v2/input_v2.dart
+++ b/lib/models/isar/models/blockchain_data/v2/input_v2.dart
@@ -1,6 +1,6 @@
import 'dart:convert';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
part 'input_v2.g.dart';
diff --git a/lib/models/isar/models/blockchain_data/v2/output_v2.dart b/lib/models/isar/models/blockchain_data/v2/output_v2.dart
index 01bfcfb..44da1a1 100644
--- a/lib/models/isar/models/blockchain_data/v2/output_v2.dart
+++ b/lib/models/isar/models/blockchain_data/v2/output_v2.dart
@@ -1,5 +1,5 @@
import 'package:decimal/decimal.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
part 'output_v2.g.dart';
diff --git a/lib/models/isar/models/blockchain_data/v2/transaction_v2.dart b/lib/models/isar/models/blockchain_data/v2/transaction_v2.dart
index 06d9646..44fbaf3 100644
--- a/lib/models/isar/models/blockchain_data/v2/transaction_v2.dart
+++ b/lib/models/isar/models/blockchain_data/v2/transaction_v2.dart
@@ -1,7 +1,7 @@
import 'dart:convert';
import 'dart:math';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../../../../utilities/amount/amount.dart';
import '../../../../../utilities/extensions/extensions.dart';
diff --git a/lib/models/isar/models/contact_entry.dart b/lib/models/isar/models/contact_entry.dart
index 66cd68d..af926e5 100644
--- a/lib/models/isar/models/contact_entry.dart
+++ b/lib/models/isar/models/contact_entry.dart
@@ -8,7 +8,7 @@
*
*/
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../../app_config.dart';
import '../../../wallets/crypto_currency/crypto_currency.dart';
diff --git a/lib/models/isar/models/encrypted_string_value.dart b/lib/models/isar/models/encrypted_string_value.dart
index 96b3d17..c222358 100644
--- a/lib/models/isar/models/encrypted_string_value.dart
+++ b/lib/models/isar/models/encrypted_string_value.dart
@@ -8,7 +8,7 @@
*
*/
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
part 'encrypted_string_value.g.dart';
diff --git a/lib/models/isar/models/ethereum/eth_contract.dart b/lib/models/isar/models/ethereum/eth_contract.dart
index df19d9d..adaec31 100644
--- a/lib/models/isar/models/ethereum/eth_contract.dart
+++ b/lib/models/isar/models/ethereum/eth_contract.dart
@@ -8,7 +8,7 @@
*
*/
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../contract.dart';
part 'eth_contract.g.dart';
diff --git a/lib/models/isar/models/log.dart b/lib/models/isar/models/log.dart
index 79f5808..8fa1f1e 100644
--- a/lib/models/isar/models/log.dart
+++ b/lib/models/isar/models/log.dart
@@ -8,7 +8,8 @@
*
*/
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
+
// import 'package:stackwallet/models/isar/type_converters/log_level_converter.dart';
import '../../../utilities/enums/log_level_enum.dart';
diff --git a/lib/models/isar/models/sent_to_address.dart b/lib/models/isar/models/sent_to_address.dart
index f18b18a..16ad55c 100644
--- a/lib/models/isar/models/sent_to_address.dart
+++ b/lib/models/isar/models/sent_to_address.dart
@@ -8,7 +8,7 @@
*
*/
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
part 'sent_to_address.g.dart';
diff --git a/lib/models/isar/models/transaction_note.dart b/lib/models/isar/models/transaction_note.dart
index 698d005..f91c1ab 100644
--- a/lib/models/isar/models/transaction_note.dart
+++ b/lib/models/isar/models/transaction_note.dart
@@ -8,7 +8,7 @@
*
*/
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
part 'transaction_note.g.dart';
@@ -25,18 +25,12 @@ class TransactionNote {
@Index()
late String walletId;
- @Index(
- unique: true,
- replace: true,
- composite: [CompositeIndex("walletId")],
- )
+ @Index(unique: true, replace: true, composite: [CompositeIndex("walletId")])
late String txid;
late String value;
- TransactionNote copyWith({
- String? value,
- }) {
+ TransactionNote copyWith({String? value}) {
return TransactionNote(
walletId: walletId,
txid: txid,
diff --git a/lib/models/isar/ordinal.dart b/lib/models/isar/ordinal.dart
index 6ac3a2d..99b4dcd 100644
--- a/lib/models/isar/ordinal.dart
+++ b/lib/models/isar/ordinal.dart
@@ -1,4 +1,4 @@
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../db/isar/main_db.dart';
import '../../dto/ordinals/inscription_data.dart';
@@ -15,10 +15,7 @@ class Ordinal {
@Index(
unique: true,
replace: true,
- composite: [
- CompositeIndex("utxoTXID"),
- CompositeIndex("utxoVOUT"),
- ],
+ composite: [CompositeIndex("utxoTXID"), CompositeIndex("utxoVOUT")],
)
final String inscriptionId;
@@ -45,8 +42,10 @@ class Ordinal {
inscriptionId: data.inscriptionId,
inscriptionNumber: data.inscriptionNumber,
content: data.content,
- utxoTXID: data.output.split(':')[
- 0], // "output": "062f32e21aa04246b8873b5d9a929576addd0339881e1ea478b406795d6b6c47:0"
+ utxoTXID:
+ data.output.split(
+ ':',
+ )[0], // "output": "062f32e21aa04246b8873b5d9a929576addd0339881e1ea478b406795d6b6c47:0"
utxoVOUT: int.parse(data.output.split(':')[1]),
);
}
diff --git a/lib/models/isar/stack_theme.dart b/lib/models/isar/stack_theme.dart
index 7c2f0b7..476494d 100644
--- a/lib/models/isar/stack_theme.dart
+++ b/lib/models/isar/stack_theme.dart
@@ -12,7 +12,7 @@ import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../app_config.dart';
import '../../utilities/extensions/impl/box_shadow.dart';
diff --git a/lib/pages/add_wallet_views/add_token_view/edit_wallet_tokens_view.dart b/lib/pages/add_wallet_views/add_token_view/edit_wallet_tokens_view.dart
index 3294ce1..b1f07ce 100644
--- a/lib/pages/add_wallet_views/add_token_view/edit_wallet_tokens_view.dart
+++ b/lib/pages/add_wallet_views/add_token_view/edit_wallet_tokens_view.dart
@@ -13,7 +13,7 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../../db/isar/main_db.dart';
import '../../../models/isar/models/ethereum/eth_contract.dart';
diff --git a/lib/pages/add_wallet_views/add_token_view/sub_widgets/add_token_list_element.dart b/lib/pages/add_wallet_views/add_token_view/sub_widgets/add_token_list_element.dart
index 9137e21..a477c57 100644
--- a/lib/pages/add_wallet_views/add_token_view/sub_widgets/add_token_list_element.dart
+++ b/lib/pages/add_wallet_views/add_token_view/sub_widgets/add_token_list_element.dart
@@ -11,7 +11,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/flutter_svg.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../../../models/isar/exchange_cache/currency.dart';
import '../../../../models/isar/models/ethereum/eth_contract.dart';
diff --git a/lib/pages/add_wallet_views/add_wallet_view/add_wallet_view.dart b/lib/pages/add_wallet_views/add_wallet_view/add_wallet_view.dart
index ef4248d..4d289a4 100644
--- a/lib/pages/add_wallet_views/add_wallet_view/add_wallet_view.dart
+++ b/lib/pages/add_wallet_views/add_wallet_view/add_wallet_view.dart
@@ -13,7 +13,7 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../../app_config.dart';
import '../../../db/isar/main_db.dart';
diff --git a/lib/pages/add_wallet_views/add_wallet_view/sub_widgets/coin_select_item.dart b/lib/pages/add_wallet_views/add_wallet_view/sub_widgets/coin_select_item.dart
index 2506b41..72adf39 100644
--- a/lib/pages/add_wallet_views/add_wallet_view/sub_widgets/coin_select_item.dart
+++ b/lib/pages/add_wallet_views/add_wallet_view/sub_widgets/coin_select_item.dart
@@ -13,7 +13,7 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../../../models/add_wallet_list_entity/add_wallet_list_entity.dart';
import '../../../../models/add_wallet_list_entity/sub_classes/eth_token_entity.dart';
diff --git a/lib/pages/add_wallet_views/name_your_wallet_view/name_your_wallet_view.dart b/lib/pages/add_wallet_views/name_your_wallet_view/name_your_wallet_view.dart
index ec7419d..fa81075 100644
--- a/lib/pages/add_wallet_views/name_your_wallet_view/name_your_wallet_view.dart
+++ b/lib/pages/add_wallet_views/name_your_wallet_view/name_your_wallet_view.dart
@@ -12,7 +12,7 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import 'package:tuple/tuple.dart';
import '../../../pages_desktop_specific/my_stack_view/exit_to_my_stack_button.dart';
diff --git a/lib/pages/address_book_views/subviews/contact_details_view.dart b/lib/pages/address_book_views/subviews/contact_details_view.dart
index 0ee0e6b..2540c73 100644
--- a/lib/pages/address_book_views/subviews/contact_details_view.dart
+++ b/lib/pages/address_book_views/subviews/contact_details_view.dart
@@ -14,7 +14,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import 'package:tuple/tuple.dart';
import '../../../models/isar/models/isar_models.dart';
diff --git a/lib/pages/buy_view/buy_form.dart b/lib/pages/buy_view/buy_form.dart
index 64a7ba4..8f8a0c9 100644
--- a/lib/pages/buy_view/buy_form.dart
+++ b/lib/pages/buy_view/buy_form.dart
@@ -16,7 +16,7 @@ import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart';
import 'package:intl/intl.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../app_config.dart';
import '../../models/buy/response_objects/crypto.dart';
diff --git a/lib/pages/coin_control/coin_control_view.dart b/lib/pages/coin_control/coin_control_view.dart
index cb288f8..7960733 100644
--- a/lib/pages/coin_control/coin_control_view.dart
+++ b/lib/pages/coin_control/coin_control_view.dart
@@ -13,7 +13,7 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/flutter_svg.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import 'package:tuple/tuple.dart';
import '../../db/isar/main_db.dart';
@@ -44,10 +44,7 @@ import '../../widgets/toggle.dart';
import 'utxo_card.dart';
import 'utxo_details_view.dart';
-enum CoinControlViewType {
- manage,
- use;
-}
+enum CoinControlViewType { manage, use }
class CoinControlView extends ConsumerStatefulWidget {
const CoinControlView({
@@ -126,11 +123,12 @@ class _CoinControlViewState extends ConsumerState<CoinControlView> {
Widget build(BuildContext context) {
debugPrint("BUILD: $runtimeType");
- final minConfirms = ref
- .watch(pWallets)
- .getWallet(widget.walletId)
- .cryptoCurrency
- .minConfirms;
+ final minConfirms =
+ ref
+ .watch(pWallets)
+ .getWallet(widget.walletId)
+ .cryptoCurrency
+ .minConfirms;
final coin = ref.watch(pWalletCoin(widget.walletId));
final currentHeight = ref.watch(pWalletChainHeight(widget.walletId));
@@ -148,9 +146,10 @@ class _CoinControlViewState extends ConsumerState<CoinControlView> {
_map = null;
_list = MainDB.instance.queryUTXOsSync(
walletId: widget.walletId,
- filter: _isSearching
- ? CCFilter.all
- : _showBlocked
+ filter:
+ _isSearching
+ ? CCFilter.all
+ : _showBlocked
? CCFilter.frozen
: CCFilter.available,
sort: _sort,
@@ -173,119 +172,121 @@ class _CoinControlViewState extends ConsumerState<CoinControlView> {
Theme.of(context).extension<StackColors>()!.background,
appBar: AppBar(
automaticallyImplyLeading: false,
- leading: _isSearching
- ? null
- : widget.type == CoinControlViewType.use &&
+ leading:
+ _isSearching
+ ? null
+ : widget.type == CoinControlViewType.use &&
_selectedAvailable.isNotEmpty
? AppBarIconButton(
- icon: XIcon(
- width: 24,
- height: 24,
- color: Theme.of(context)
- .extension<StackColors>()!
- .topNavIconPrimary,
- ),
- onPressed: () {
- setState(() {
- _selectedAvailable.clear();
- });
- },
- )
- : AppBarBackButton(
- onPressed: () {
- unawaited(_refreshBalance());
- Navigator.of(context).pop(
- widget.type == CoinControlViewType.use
- ? _selectedAvailable
- : null,
- );
- },
- ),
- title: _isSearching
- ? AppBarSearchField(
- controller: searchController,
- focusNode: searchFocus,
- )
- : Text(
- "Coin control",
- style: STextStyles.navBarTitle(context),
- ),
- titleSpacing: 0,
- actions: _isSearching
- ? [
- AspectRatio(
- aspectRatio: 1,
- child: AppBarIconButton(
- size: 36,
- icon: SvgPicture.asset(
- Assets.svg.x,
- width: 20,
- height: 20,
- color: Theme.of(context)
- .extension<StackColors>()!
- .topNavIconPrimary,
- ),
- onPressed: () {
- // show search
- setState(() {
- _isSearching = false;
- });
- },
+ icon: XIcon(
+ width: 24,
+ height: 24,
+ color:
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.topNavIconPrimary,
),
+ onPressed: () {
+ setState(() {
+ _selectedAvailable.clear();
+ });
+ },
+ )
+ : AppBarBackButton(
+ onPressed: () {
+ unawaited(_refreshBalance());
+ Navigator.of(context).pop(
+ widget.type == CoinControlViewType.use
+ ? _selectedAvailable
+ : null,
+ );
+ },
),
- ]
- : [
- AspectRatio(
- aspectRatio: 1,
- child: AppBarIconButton(
- size: 36,
- icon: SvgPicture.asset(
- Assets.svg.search,
- width: 20,
- height: 20,
- color: Theme.of(context)
- .extension<StackColors>()!
- .topNavIconPrimary,
+ title:
+ _isSearching
+ ? AppBarSearchField(
+ controller: searchController,
+ focusNode: searchFocus,
+ )
+ : Text(
+ "Coin control",
+ style: STextStyles.navBarTitle(context),
+ ),
+ titleSpacing: 0,
+ actions:
+ _isSearching
+ ? [
+ AspectRatio(
+ aspectRatio: 1,
+ child: AppBarIconButton(
+ size: 36,
+ icon: SvgPicture.asset(
+ Assets.svg.x,
+ width: 20,
+ height: 20,
+ color:
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.topNavIconPrimary,
+ ),
+ onPressed: () {
+ // show search
+ setState(() {
+ _isSearching = false;
+ });
+ },
),
- onPressed: () {
- // show search
- setState(() {
- _isSearching = true;
- });
- },
),
- ),
- AspectRatio(
- aspectRatio: 1,
- child: JDropdownIconButton(
- mobileAppBar: true,
- groupValue: _sort,
- items: CCSortDescriptor.values.toSet(),
- onSelectionChanged: (CCSortDescriptor? newValue) {
- if (newValue != null && newValue != _sort) {
+ ]
+ : [
+ AspectRatio(
+ aspectRatio: 1,
+ child: AppBarIconButton(
+ size: 36,
+ icon: SvgPicture.asset(
+ Assets.svg.search,
+ width: 20,
+ height: 20,
+ color:
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.topNavIconPrimary,
+ ),
+ onPressed: () {
+ // show search
setState(() {
- _sort = newValue;
+ _isSearching = true;
});
- }
- },
- displayPrefix: "Sort by",
+ },
+ ),
),
- ),
- ],
+ AspectRatio(
+ aspectRatio: 1,
+ child: JDropdownIconButton(
+ mobileAppBar: true,
+ groupValue: _sort,
+ items: CCSortDescriptor.values.toSet(),
+ onSelectionChanged: (CCSortDescriptor? newValue) {
+ if (newValue != null && newValue != _sort) {
+ setState(() {
+ _sort = newValue;
+ });
+ }
+ },
+ displayPrefix: "Sort by",
+ ),
+ ),
+ ],
),
body: SafeArea(
child: Column(
children: [
Expanded(
child: Padding(
- padding: const EdgeInsets.symmetric(
- horizontal: 16,
- ),
+ padding: const EdgeInsets.symmetric(horizontal: 16),
child: Column(
children: [
- const SizedBox(
- height: 10,
- ),
+ const SizedBox(height: 10),
if (!_isSearching)
RoundedWhiteContainer(
child: Text(
@@ -293,28 +294,28 @@ class _CoinControlViewState extends ConsumerState<CoinControlView> {
"outputs at your discretion. Tap the output circle to "
"select.",
style: STextStyles.w500_14(context).copyWith(
- color: Theme.of(context)
- .extension<StackColors>()!
- .textSubtitle1,
+ color:
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.textSubtitle1,
),
),
),
- if (!_isSearching)
- const SizedBox(
- height: 10,
- ),
+ if (!_isSearching) const SizedBox(height: 10),
if (!(_isSearching || _map != null))
SizedBox(
height: 48,
child: Toggle(
key: UniqueKey(),
- onColor: Theme.of(context)
- .extension<StackColors>()!
- .popupBG,
+ onColor:
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.popupBG,
onText: "Available outputs",
- offColor: Theme.of(context)
- .extension<StackColors>()!
- .textFieldDefaultBG,
+ offColor:
+ Theme.of(context)
+ .extension<StackColors>()!
+ .textFieldDefaultBG,
offText: "Frozen outputs",
isOn: _showBlocked,
onValueChanged: (value) {
@@ -330,26 +331,23 @@ class _CoinControlViewState extends ConsumerState<CoinControlView> {
),
),
),
- if (!_isSearching)
- const SizedBox(
- height: 10,
- ),
+ if (!_isSearching) const SizedBox(height: 10),
if (_isSearching)
Expanded(
child: ListView.separated(
itemCount: _list!.length,
- separatorBuilder: (context, _) => const SizedBox(
- height: 10,
- ),
+ separatorBuilder:
+ (context, _) => const SizedBox(height: 10),
itemBuilder: (context, index) {
- final utxo = MainDB.instance.isar.utxos
- .where()
- .idEqualTo(_list![index])
- .findFirstSync()!;
+ final utxo =
+ MainDB.instance.isar.utxos
+ .where()
+ .idEqualTo(_list![index])
+ .findFirstSync()!;
final isSelected =
_selectedBlocked.contains(utxo) ||
- _selectedAvailable.contains(utxo);
+ _selectedAvailable.contains(utxo);
return UtxoCard(
key: Key(
@@ -357,7 +355,8 @@ class _CoinControlViewState extends ConsumerState<CoinControlView> {
),
walletId: widget.walletId,
utxo: utxo,
- canSelect: widget.type ==
+ canSelect:
+ widget.type ==
CoinControlViewType.manage ||
(widget.type == CoinControlViewType.use &&
!utxo.isBlocked &&
@@ -366,8 +365,9 @@ class _CoinControlViewState extends ConsumerState<CoinControlView> {
currentHeight,
ref.watch(
pWallets.select(
- (s) => s
- .getWallet(widget.walletId),
+ (s) => s.getWallet(
+ widget.walletId,
+ ),
),
),
)),
@@ -385,8 +385,9 @@ class _CoinControlViewState extends ConsumerState<CoinControlView> {
setState(() {});
},
onPressed: () async {
- final result =
- await Navigator.of(context).pushNamed(
+ final result = await Navigator.of(
+ context,
+ ).pushNamed(
UtxoDetailsView.routeName,
arguments: Tuple2(
utxo.id,
@@ -404,170 +405,176 @@ class _CoinControlViewState extends ConsumerState<CoinControlView> {
if (!_isSearching)
_list != null
? Expanded(
- child: ListView.separated(
- itemCount: _list!.length,
- separatorBuilder: (context, _) =>
- const SizedBox(
- height: 10,
- ),
- itemBuilder: (context, index) {
- final utxo = MainDB.instance.isar.utxos
- .where()
- .idEqualTo(_list![index])
- .findFirstSync()!;
+ child: ListView.separated(
+ itemCount: _list!.length,
+ separatorBuilder:
+ (context, _) =>
+ const SizedBox(height: 10),
+ itemBuilder: (context, index) {
+ final utxo =
+ MainDB.instance.isar.utxos
+ .where()
+ .idEqualTo(_list![index])
+ .findFirstSync()!;
- final isSelected = _showBlocked
- ? _selectedBlocked.contains(utxo)
- : _selectedAvailable.contains(utxo);
+ final isSelected =
+ _showBlocked
+ ? _selectedBlocked.contains(utxo)
+ : _selectedAvailable.contains(utxo);
- return UtxoCard(
- key: Key(
- "${utxo.walletId}_${utxo.id}_$isSelected",
- ),
- walletId: widget.walletId,
- utxo: utxo,
- canSelect: widget.type ==
- CoinControlViewType.manage ||
- (widget.type ==
- CoinControlViewType.use &&
- !_showBlocked &&
- _isConfirmed(
- utxo,
- currentHeight,
- ref.watch(
- pWallets.select(
- (s) => s.getWallet(
- widget.walletId,
- ),
+ return UtxoCard(
+ key: Key(
+ "${utxo.walletId}_${utxo.id}_$isSelected",
+ ),
+ walletId: widget.walletId,
+ utxo: utxo,
+ canSelect:
+ widget.type ==
+ CoinControlViewType.manage ||
+ (widget.type ==
+ CoinControlViewType.use &&
+ !_showBlocked &&
+ _isConfirmed(
+ utxo,
+ currentHeight,
+ ref.watch(
+ pWallets.select(
+ (s) => s.getWallet(
+ widget.walletId,
),
),
- )),
- initialSelectedState: isSelected,
- onSelectedChanged: (value) {
- if (value) {
- _showBlocked
- ? _selectedBlocked.add(utxo)
- : _selectedAvailable.add(utxo);
- } else {
- _showBlocked
- ? _selectedBlocked.remove(utxo)
- : _selectedAvailable
- .remove(utxo);
- }
+ ),
+ )),
+ initialSelectedState: isSelected,
+ onSelectedChanged: (value) {
+ if (value) {
+ _showBlocked
+ ? _selectedBlocked.add(utxo)
+ : _selectedAvailable.add(utxo);
+ } else {
+ _showBlocked
+ ? _selectedBlocked.remove(utxo)
+ : _selectedAvailable.remove(utxo);
+ }
+ setState(() {});
+ },
+ onPressed: () async {
+ final result = await Navigator.of(
+ context,
+ ).pushNamed(
+ UtxoDetailsView.routeName,
+ arguments: Tuple2(
+ utxo.id,
+ widget.walletId,
+ ),
+ );
+ if (mounted && result == "refresh") {
setState(() {});
- },
- onPressed: () async {
- final result =
- await Navigator.of(context)
- .pushNamed(
- UtxoDetailsView.routeName,
- arguments: Tuple2(
- utxo.id,
- widget.walletId,
- ),
- );
- if (mounted && result == "refresh") {
- setState(() {});
- }
- },
- );
- },
- ),
- )
+ }
+ },
+ );
+ },
+ ),
+ )
: Expanded(
- child: ListView.separated(
- itemCount: _map!.entries.length,
- separatorBuilder: (context, _) =>
- const SizedBox(
- height: 10,
- ),
- itemBuilder: (context, index) {
- final entry =
- _map!.entries.elementAt(index);
- final _controller =
- RotateIconController();
+ child: ListView.separated(
+ itemCount: _map!.entries.length,
+ separatorBuilder:
+ (context, _) =>
+ const SizedBox(height: 10),
+ itemBuilder: (context, index) {
+ final entry = _map!.entries.elementAt(
+ index,
+ );
+ final _controller = RotateIconController();
- return Expandable2(
- border: Theme.of(context)
- .extension<StackColors>()!
- .backgroundAppBar,
- background: Theme.of(context)
- .extension<StackColors>()!
- .popupBG,
- animationDurationMultiplier:
- 0.2 * entry.value.length,
- onExpandWillChange: (state) {
- if (state ==
- Expandable2State.expanded) {
- _controller.forward?.call();
- } else {
- _controller.reverse?.call();
- }
- },
- header: RoundedContainer(
- padding: const EdgeInsets.all(14),
- color: Colors.transparent,
- child: Row(
- children: [
- Expanded(
- child: Column(
- crossAxisAlignment:
- CrossAxisAlignment.start,
- children: [
- Text(
- entry.key,
- style:
- STextStyles.w600_14(
- context,
- ),
- ),
- const SizedBox(
- height: 2,
+ return Expandable2(
+ border:
+ Theme.of(context)
+ .extension<StackColors>()!
+ .backgroundAppBar,
+ background:
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.popupBG,
+ animationDurationMultiplier:
+ 0.2 * entry.value.length,
+ onExpandWillChange: (state) {
+ if (state ==
+ Expandable2State.expanded) {
+ _controller.forward?.call();
+ } else {
+ _controller.reverse?.call();
+ }
+ },
+ header: RoundedContainer(
+ padding: const EdgeInsets.all(14),
+ color: Colors.transparent,
+ child: Row(
+ children: [
+ Expanded(
+ child: Column(
+ crossAxisAlignment:
+ CrossAxisAlignment.start,
+ children: [
+ Text(
+ entry.key,
+ style: STextStyles.w600_14(
+ context,
),
- Text(
- "${entry.value.length} "
- "output${entry.value.length > 1 ? "s" : ""}",
- style:
- STextStyles.w500_12(
- context,
- ).copyWith(
- color: Theme.of(context)
- .extension<
- StackColors>()!
- .textSubtitle1,
- ),
+ ),
+ const SizedBox(height: 2),
+ Text(
+ "${entry.value.length} "
+ "output${entry.value.length > 1 ? "s" : ""}",
+ style: STextStyles.w500_12(
+ context,
+ ).copyWith(
+ color:
+ Theme.of(context)
+ .extension<
+ StackColors
+ >()!
+ .textSubtitle1,
),
- ],
- ),
+ ),
+ ],
),
- RotateIcon(
- animationDurationMultiplier:
- 0.2 * entry.value.length,
- icon: SvgPicture.asset(
- Assets.svg.chevronDown,
- width: 14,
- color: Theme.of(context)
- .extension<StackColors>()!
- .textSubtitle1,
- ),
- curve: Curves.easeInOut,
- controller: _controller,
+ ),
+ RotateIcon(
+ animationDurationMultiplier:
+ 0.2 * entry.value.length,
+ icon: SvgPicture.asset(
+ Assets.svg.chevronDown,
+ width: 14,
+ color:
+ Theme.of(context)
+ .extension<
+ StackColors
+ >()!
+ .textSubtitle1,
),
- ],
- ),
+ curve: Curves.easeInOut,
+ controller: _controller,
+ ),
+ ],
),
- children: entry.value.map(
- (id) {
- final utxo = MainDB
- .instance.isar.utxos
- .where()
- .idEqualTo(id)
- .findFirstSync()!;
+ ),
+ children:
+ entry.value.map((id) {
+ final utxo =
+ MainDB.instance.isar.utxos
+ .where()
+ .idEqualTo(id)
+ .findFirstSync()!;
- final isSelected = _selectedBlocked
- .contains(utxo) ||
- _selectedAvailable
- .contains(utxo);
+ final isSelected =
+ _selectedBlocked.contains(
+ utxo,
+ ) ||
+ _selectedAvailable.contains(
+ utxo,
+ );
return UtxoCard(
key: Key(
@@ -575,7 +582,8 @@ class _CoinControlViewState extends ConsumerState<CoinControlView> {
),
walletId: widget.walletId,
utxo: utxo,
- canSelect: widget.type ==
+ canSelect:
+ widget.type ==
CoinControlViewType
.manage ||
(widget.type ==
@@ -597,14 +605,17 @@ class _CoinControlViewState extends ConsumerState<CoinControlView> {
onSelectedChanged: (value) {
if (value) {
utxo.isBlocked
- ? _selectedBlocked
- .add(utxo)
- : _selectedAvailable
- .add(utxo);
+ ? _selectedBlocked.add(
+ utxo,
+ )
+ : _selectedAvailable.add(
+ utxo,
+ );
} else {
utxo.isBlocked
- ? _selectedBlocked
- .remove(utxo)
+ ? _selectedBlocked.remove(
+ utxo,
+ )
: _selectedAvailable
.remove(utxo);
}
@@ -612,26 +623,26 @@ class _CoinControlViewState extends ConsumerState<CoinControlView> {
},
onPressed: () async {
final result =
- await Navigator.of(context)
- .pushNamed(
- UtxoDetailsView.routeName,
- arguments: Tuple2(
- utxo.id,
- widget.walletId,
- ),
- );
+ await Navigator.of(
+ context,
+ ).pushNamed(
+ UtxoDetailsView.routeName,
+ arguments: Tuple2(
+ utxo.id,
+ widget.walletId,
+ ),
+ );
if (mounted &&
result == "refresh") {
setState(() {});
}
},
);
- },
- ).toList(),
- );
- },
- ),
+ }).toList(),
+ );
+ },
),
+ ),
],
),
),
@@ -641,13 +652,14 @@ class _CoinControlViewState extends ConsumerState<CoinControlView> {
widget.type == CoinControlViewType.manage)
Container(
decoration: BoxDecoration(
- color: Theme.of(context)
- .extension<StackColors>()!
- .backgroundAppBar,
+ color:
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.backgroundAppBar,
boxShadow: [
- Theme.of(context)
- .extension<StackColors>()!
- .standardBoxShadow,
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.standardBoxShadow,
],
),
child: Padding(
@@ -658,22 +670,14 @@ class _CoinControlViewState extends ConsumerState<CoinControlView> {
if (_showBlocked) {
await MainDB.instance.putUTXOs(
_selectedBlocked
- .map(
- (e) => e.copyWith(
- isBlocked: false,
- ),
- )
+ .map((e) => e.copyWith(isBlocked: false))
.toList(),
);
_selectedBlocked.clear();
} else {
await MainDB.instance.putUTXOs(
_selectedAvailable
- .map(
- (e) => e.copyWith(
- isBlocked: true,
- ),
- )
+ .map((e) => e.copyWith(isBlocked: true))
.toList(),
);
_selectedAvailable.clear();
@@ -686,13 +690,14 @@ class _CoinControlViewState extends ConsumerState<CoinControlView> {
if (!_showBlocked && widget.type == CoinControlViewType.use)
Container(
decoration: BoxDecoration(
- color: Theme.of(context)
- .extension<StackColors>()!
- .backgroundAppBar,
+ color:
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.backgroundAppBar,
boxShadow: [
- Theme.of(context)
- .extension<StackColors>()!
- .standardBoxShadow,
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.standardBoxShadow,
],
),
child: Padding(
@@ -724,30 +729,42 @@ class _CoinControlViewState extends ConsumerState<CoinControlView> {
(value, element) =>
value += element,
);
- final selectedSum =
- selectedSumInt.toAmountAsRaw(
- fractionDigits: coin.fractionDigits,
- );
+ final selectedSum = selectedSumInt
+ .toAmountAsRaw(
+ fractionDigits:
+ coin.fractionDigits,
+ );
return SelectableText(
ref
.watch(pAmountFormatter(coin))
.format(selectedSum),
- style: widget.requestedTotal == null
- ? STextStyles.w600_14(context)
- : STextStyles.w600_14(context)
- .copyWith(
- color: selectedSum >=
- widget
- .requestedTotal!
- ? Theme.of(context)
- .extension<
- StackColors>()!
- .accentColorGreen
- : Theme.of(context)
- .extension<
- StackColors>()!
- .accentColorRed,
- ),
+ style:
+ widget.requestedTotal == null
+ ? STextStyles.w600_14(
+ context,
+ )
+ : STextStyles.w600_14(
+ context,
+ ).copyWith(
+ color:
+ selectedSum >=
+ widget
+ .requestedTotal!
+ ? Theme.of(
+ context,
+ )
+ .extension<
+ StackColors
+ >()!
+ .accentColorGreen
+ : Theme.of(
+ context,
+ )
+ .extension<
+ StackColors
+ >()!
+ .accentColorRed,
+ ),
);
},
),
@@ -758,9 +775,10 @@ class _CoinControlViewState extends ConsumerState<CoinControlView> {
Container(
width: double.infinity,
height: 1.5,
- color: Theme.of(context)
- .extension<StackColors>()!
- .backgroundAppBar,
+ color:
+ Theme.of(context)
+ .extension<StackColors>()!
+ .backgroundAppBar,
),
if (widget.requestedTotal != null)
Padding(
@@ -785,9 +803,7 @@ class _CoinControlViewState extends ConsumerState<CoinControlView> {
],
),
),
- const SizedBox(
- height: 12,
- ),
+ const SizedBox(height: 12),
PrimaryButton(
label: "Use coins",
enabled: _selectedAvailable.isNotEmpty,
@@ -795,9 +811,7 @@ class _CoinControlViewState extends ConsumerState<CoinControlView> {
if (searchFocus.hasFocus) {
searchFocus.unfocus();
}
- Navigator.of(context).pop(
- _selectedAvailable,
- );
+ Navigator.of(context).pop(_selectedAvailable);
},
),
],
diff --git a/lib/pages/coin_control/utxo_details_view.dart b/lib/pages/coin_control/utxo_details_view.dart
index 3e4a936..b77b152 100644
--- a/lib/pages/coin_control/utxo_details_view.dart
+++ b/lib/pages/coin_control/utxo_details_view.dart
@@ -12,7 +12,7 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../db/isar/main_db.dart';
import '../../models/isar/models/isar_models.dart';
diff --git a/lib/pages/exchange_view/exchange_coin_selection/exchange_currency_selection_view.dart b/lib/pages/exchange_view/exchange_coin_selection/exchange_currency_selection_view.dart
index edfe6ba..4a539ec 100644
--- a/lib/pages/exchange_view/exchange_coin_selection/exchange_currency_selection_view.dart
+++ b/lib/pages/exchange_view/exchange_coin_selection/exchange_currency_selection_view.dart
@@ -12,7 +12,7 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import 'package:tuple/tuple.dart';
import '../../../app_config.dart';
diff --git a/lib/pages/exchange_view/exchange_view.dart b/lib/pages/exchange_view/exchange_view.dart
index 1c70a64..276f7e7 100644
--- a/lib/pages/exchange_view/exchange_view.dart
+++ b/lib/pages/exchange_view/exchange_view.dart
@@ -12,7 +12,7 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import 'package:tuple/tuple.dart';
import '../../db/isar/main_db.dart';
@@ -94,10 +94,9 @@ class _ExchangeViewState extends ConsumerState<ExchangeView> {
children: [
child,
Material(
- color: Theme.of(context)
- .extension<StackColors>()!
- .overlay
- .withOpacity(0.6),
+ color: Theme.of(
+ context,
+ ).extension<StackColors>()!.overlay.withOpacity(0.6),
child: const CustomLoadingOverlay(
message: "Updating exchange data",
subMessage: "This could take a few minutes",
@@ -113,15 +112,12 @@ class _ExchangeViewState extends ConsumerState<ExchangeView> {
headerSliverBuilder: (context, innerBoxIsScrolled) {
return [
SliverOverlapAbsorber(
- handle:
- NestedScrollView.sliverOverlapAbsorberHandleFor(context),
+ handle: NestedScrollView.sliverOverlapAbsorberHandleFor(
+ context,
+ ),
sliver: const SliverToBoxAdapter(
child: Padding(
- padding: EdgeInsets.only(
- left: 16,
- right: 16,
- top: 16,
- ),
+ padding: EdgeInsets.only(left: 16, right: 16, top: 16),
child: ExchangeForm(),
),
),
@@ -130,8 +126,9 @@ class _ExchangeViewState extends ConsumerState<ExchangeView> {
},
body: Builder(
builder: (buildContext) {
- final trades = ref
- .watch(tradesServiceProvider.select((value) => value.trades));
+ final trades = ref.watch(
+ tradesServiceProvider.select((value) => value.trades),
+ );
final tradeCount = trades.length;
final hasHistory = tradeCount > 0;
@@ -150,98 +147,94 @@ class _ExchangeViewState extends ConsumerState<ExchangeView> {
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
- const SizedBox(
- height: 12,
- ),
+ const SizedBox(height: 12),
Text(
"Trades",
style: STextStyles.itemSubtitle(context).copyWith(
- color: Theme.of(context)
- .extension<StackColors>()!
- .textDark3,
+ color:
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.textDark3,
),
),
- const SizedBox(
- height: 12,
- ),
+ const SizedBox(height: 12),
],
),
),
),
if (hasHistory)
SliverList(
- delegate: SliverChildBuilderDelegate(
- (context, index) {
- return Padding(
- padding: const EdgeInsets.all(4),
- child: TradeCard(
- key: Key("tradeCard_${trades[index].uuid}"),
- trade: trades[index],
- onTap: () async {
- final String tradeId = trades[index].tradeId;
+ delegate: SliverChildBuilderDelegate((context, index) {
+ return Padding(
+ padding: const EdgeInsets.all(4),
+ child: TradeCard(
+ key: Key("tradeCard_${trades[index].uuid}"),
+ trade: trades[index],
+ onTap: () async {
+ final String tradeId = trades[index].tradeId;
- final lookup = ref
- .read(tradeSentFromStackLookupProvider)
- .all;
+ final lookup =
+ ref
+ .read(tradeSentFromStackLookupProvider)
+ .all;
- //todo: check if print needed
- // debugPrint("ALL: $lookup");
+ //todo: check if print needed
+ // debugPrint("ALL: $lookup");
- final String? txid = ref
- .read(tradeSentFromStackLookupProvider)
- .getTxidForTradeId(tradeId);
- final List<String>? walletIds = ref
- .read(tradeSentFromStackLookupProvider)
- .getWalletIdsForTradeId(tradeId);
+ final String? txid = ref
+ .read(tradeSentFromStackLookupProvider)
+ .getTxidForTradeId(tradeId);
+ final List<String>? walletIds = ref
+ .read(tradeSentFromStackLookupProvider)
+ .getWalletIdsForTradeId(tradeId);
- if (txid != null &&
- walletIds != null &&
- walletIds.isNotEmpty) {
- final wallet = ref
- .read(pWallets)
- .getWallet(walletIds.first);
+ if (txid != null &&
+ walletIds != null &&
+ walletIds.isNotEmpty) {
+ final wallet = ref
+ .read(pWallets)
+ .getWallet(walletIds.first);
- //todo: check if print needed
- // debugPrint("name: ${manager.walletName}");
+ //todo: check if print needed
+ // debugPrint("name: ${manager.walletName}");
- final tx = await MainDB.instance
- .getTransactions(walletIds.first)
- .filter()
- .txidEqualTo(txid)
- .findFirst();
+ final tx =
+ await MainDB.instance
+ .getTransactions(walletIds.first)
+ .filter()
+ .txidEqualTo(txid)
+ .findFirst();
- if (mounted) {
- unawaited(
- Navigator.of(context).pushNamed(
- TradeDetailsView.routeName,
- arguments: Tuple4(
- tradeId,
- tx,
- walletIds.first,
- wallet.info.name,
- ),
- ),
- );
- }
- } else {
+ if (mounted) {
unawaited(
Navigator.of(context).pushNamed(
TradeDetailsView.routeName,
arguments: Tuple4(
tradeId,
- null,
- walletIds?.first,
- null,
+ tx,
+ walletIds.first,
+ wallet.info.name,
),
),
);
}
- },
- ),
- );
- },
- childCount: tradeCount,
- ),
+ } else {
+ unawaited(
+ Navigator.of(context).pushNamed(
+ TradeDetailsView.routeName,
+ arguments: Tuple4(
+ tradeId,
+ null,
+ walletIds?.first,
+ null,
+ ),
+ ),
+ );
+ }
+ },
+ ),
+ );
+ }, childCount: tradeCount),
),
if (!hasHistory)
SliverToBoxAdapter(
@@ -249,9 +242,10 @@ class _ExchangeViewState extends ConsumerState<ExchangeView> {
padding: const EdgeInsets.symmetric(horizontal: 4),
child: Container(
decoration: BoxDecoration(
- color: Theme.of(context)
- .extension<StackColors>()!
- .popupBG,
+ color:
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.popupBG,
borderRadius: BorderRadius.circular(
Constants.size.circularBorderRadius,
),
diff --git a/lib/pages/namecoin_names/sub_widgets/manage_domains_option_widget.dart b/lib/pages/namecoin_names/sub_widgets/manage_domains_option_widget.dart
index f4a7df8..f7961c3 100644
--- a/lib/pages/namecoin_names/sub_widgets/manage_domains_option_widget.dart
+++ b/lib/pages/namecoin_names/sub_widgets/manage_domains_option_widget.dart
@@ -2,7 +2,7 @@ import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import 'package:namecoin/namecoin.dart';
import '../../../models/isar/models/blockchain_data/utxo.dart';
@@ -12,10 +12,7 @@ import '../../../wallets/isar/providers/wallet_info_provider.dart';
import 'owned_name_card.dart';
class ManageDomainsOptionWidget extends ConsumerStatefulWidget {
- const ManageDomainsOptionWidget({
- super.key,
- required this.walletId,
- });
+ const ManageDomainsOptionWidget({super.key, required this.walletId});
final String walletId;
@@ -62,40 +59,37 @@ class _ManageDomainsWidgetState
builder: (context, snapshot) {
List<(UTXO, OpNameData)> list = [];
if (snapshot.hasData) {
- list = snapshot.data!.map((utxo) {
- final data = jsonDecode(utxo.otherData!) as Map;
+ list = snapshot.data!
+ .map((utxo) {
+ final data = jsonDecode(utxo.otherData!) as Map;
- final nameData = jsonDecode(data["nameOpData"] as String) as Map;
+ final nameData =
+ jsonDecode(data["nameOpData"] as String) as Map;
- return (
- utxo,
- OpNameData(nameData.cast(), utxo.blockHeight ?? height)
- );
- }).toList(growable: false);
+ return (
+ utxo,
+ OpNameData(nameData.cast(), utxo.blockHeight ?? height),
+ );
+ })
+ .toList(growable: false);
}
return Column(
children: [
...list.map(
(e) => Padding(
- padding: const EdgeInsets.only(
- bottom: 10,
- ),
+ padding: const EdgeInsets.only(bottom: 10),
child: OwnedNameCard(
key: ValueKey(e),
utxo: e.$1,
opNameData: e.$2,
firstColWidth: _width,
- calculatedFirstColWidth: (value) => _sillyHack(
- value,
- list.length,
- ),
+ calculatedFirstColWidth:
+ (value) => _sillyHack(value, list.length),
),
),
),
- SizedBox(
- height: Util.isDesktop ? 14 : 6,
- ),
+ SizedBox(height: Util.isDesktop ? 14 : 6),
],
);
},
diff --git a/lib/pages/namecoin_names/sub_widgets/name_details.dart b/lib/pages/namecoin_names/sub_widgets/name_details.dart
index d16ca0b..560297a 100644
--- a/lib/pages/namecoin_names/sub_widgets/name_details.dart
+++ b/lib/pages/namecoin_names/sub_widgets/name_details.dart
@@ -2,7 +2,7 @@ import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import 'package:namecoin/namecoin.dart';
import '../../../models/isar/models/isar_models.dart';
diff --git a/lib/pages/ordinals/widgets/ordinals_list.dart b/lib/pages/ordinals/widgets/ordinals_list.dart
index ec67d7e..ff69da8 100644
--- a/lib/pages/ordinals/widgets/ordinals_list.dart
+++ b/lib/pages/ordinals/widgets/ordinals_list.dart
@@ -2,7 +2,7 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../../models/isar/ordinal.dart';
import '../../../providers/db/main_db_provider.dart';
@@ -13,10 +13,7 @@ import '../../../widgets/rounded_white_container.dart';
import 'ordinal_card.dart';
class OrdinalsList extends ConsumerStatefulWidget {
- const OrdinalsList({
- super.key,
- required this.walletId,
- });
+ const OrdinalsList({super.key, required this.walletId});
final String walletId;
@@ -33,23 +30,25 @@ class _OrdinalsListState extends ConsumerState<OrdinalsList> {
@override
void initState() {
- _stream = ref
- .read(mainDBProvider)
- .isar
- .ordinals
- .where()
- .filter()
- .walletIdEqualTo(widget.walletId)
- .watch();
+ _stream =
+ ref
+ .read(mainDBProvider)
+ .isar
+ .ordinals
+ .where()
+ .filter()
+ .walletIdEqualTo(widget.walletId)
+ .watch();
- _data = ref
- .read(mainDBProvider)
- .isar
- .ordinals
- .where()
- .filter()
- .walletIdEqualTo(widget.walletId)
- .findAllSync();
+ _data =
+ ref
+ .read(mainDBProvider)
+ .isar
+ .ordinals
+ .where()
+ .filter()
+ .walletIdEqualTo(widget.walletId)
+ .findAllSync();
super.initState();
}
@@ -71,13 +70,15 @@ class _OrdinalsListState extends ConsumerState<OrdinalsList> {
child: Center(
child: Text(
"Your ordinals will appear here",
- style: Util.isDesktop
- ? STextStyles.w500_14(context).copyWith(
- color: Theme.of(context)
- .extension<StackColors>()!
- .textSubtitle1,
- )
- : STextStyles.label(context),
+ style:
+ Util.isDesktop
+ ? STextStyles.w500_14(context).copyWith(
+ color:
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.textSubtitle1,
+ )
+ : STextStyles.label(context),
),
),
),
@@ -89,18 +90,19 @@ class _OrdinalsListState extends ConsumerState<OrdinalsList> {
return Wrap(
spacing: _spacing,
runSpacing: _spacing,
- children: _data
- .map(
- (e) => SizedBox(
- width: 220,
- height: 270,
- child: OrdinalCard(
- walletId: widget.walletId,
- ordinal: e,
- ),
- ),
- )
- .toList(),
+ children:
+ _data
+ .map(
+ (e) => SizedBox(
+ width: 220,
+ height: 270,
+ child: OrdinalCard(
+ walletId: widget.walletId,
+ ordinal: e,
+ ),
+ ),
+ )
+ .toList(),
);
} else {
return GridView.builder(
@@ -112,10 +114,9 @@ class _OrdinalsListState extends ConsumerState<OrdinalsList> {
crossAxisCount: Util.isDesktop ? 4 : 2,
childAspectRatio: 6 / 7, // was 3/4, less data displayed now
),
- itemBuilder: (_, i) => OrdinalCard(
- walletId: widget.walletId,
- ordinal: _data[i],
- ),
+ itemBuilder:
+ (_, i) =>
+ OrdinalCard(walletId: widget.walletId, ordinal: _data[i]),
);
}
},
diff --git a/lib/pages/receive_view/addresses/address_card.dart b/lib/pages/receive_view/addresses/address_card.dart
index 59074d9..901cd57 100644
--- a/lib/pages/receive_view/addresses/address_card.dart
+++ b/lib/pages/receive_view/addresses/address_card.dart
@@ -18,7 +18,7 @@ import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/flutter_svg.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import 'package:path_provider/path_provider.dart';
import 'package:share_plus/share_plus.dart';
@@ -76,8 +76,9 @@ class _AddressCardState extends ConsumerState<AddressCard> {
final RenderRepaintBoundary boundary =
_qrKey.currentContext?.findRenderObject() as RenderRepaintBoundary;
final ui.Image image = await boundary.toImage();
- final ByteData? byteData =
- await image.toByteData(format: ui.ImageByteFormat.png);
+ final ByteData? byteData = await image.toByteData(
+ format: ui.ImageByteFormat.png,
+ );
final Uint8List pngBytes = byteData!.buffer.asUint8List();
if (shouldSaveInsteadOfShare) {
@@ -129,10 +130,9 @@ class _AddressCardState extends ConsumerState<AddressCard> {
final file = await File("${tempDir.path}/qrcode.png").create();
await file.writeAsBytes(pngBytes);
- await Share.shareFiles(
- ["${tempDir.path}/qrcode.png"],
- text: "Receive URI QR Code",
- );
+ await Share.shareFiles([
+ "${tempDir.path}/qrcode.png",
+ ], text: "Receive URI QR Code");
}
} catch (e) {
//todo: comeback to this
@@ -142,10 +142,11 @@ class _AddressCardState extends ConsumerState<AddressCard> {
@override
void initState() {
- address = MainDB.instance.isar.addresses
- .where()
- .idEqualTo(widget.addressId)
- .findFirstSync()!;
+ address =
+ MainDB.instance.isar.addresses
+ .where()
+ .idEqualTo(widget.addressId)
+ .findFirstSync()!;
label = MainDB.instance.getAddressLabelSync(widget.walletId, address.value);
Id? id = label?.id;
@@ -154,9 +155,10 @@ class _AddressCardState extends ConsumerState<AddressCard> {
walletId: widget.walletId,
addressString: address.value,
value: "",
- tags: address.subType == AddressSubType.receiving
- ? ["receiving"]
- : address.subType == AddressSubType.change
+ tags:
+ address.subType == AddressSubType.receiving
+ ? ["receiving"]
+ : address.subType == AddressSubType.change
? ["change"]
: null,
);
@@ -180,26 +182,19 @@ class _AddressCardState extends ConsumerState<AddressCard> {
return ConditionalParent(
condition: isDesktop,
- builder: (child) => Row(
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- SvgPicture.file(
- File(
- ref.watch(
- coinIconProvider(widget.coin),
+ builder:
+ (child) => Row(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ SvgPicture.file(
+ File(ref.watch(coinIconProvider(widget.coin))),
+ width: 32,
+ height: 32,
),
- ),
- width: 32,
- height: 32,
- ),
- const SizedBox(
- width: 12,
- ),
- Expanded(
- child: child,
+ const SizedBox(width: 12),
+ Expanded(child: child),
+ ],
),
- ],
- ),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
@@ -218,17 +213,13 @@ class _AddressCardState extends ConsumerState<AddressCard> {
disableIcon: true,
onValueChanged: (value) {
MainDB.instance.putAddressLabel(
- label!.copyWith(
- label: value,
- ),
+ label!.copyWith(label: value),
);
},
),
],
),
- SizedBox(
- height: isDesktop ? 2 : 8,
- ),
+ SizedBox(height: isDesktop ? 2 : 8),
Row(
children: [
Expanded(
@@ -239,36 +230,28 @@ class _AddressCardState extends ConsumerState<AddressCard> {
),
],
),
- const SizedBox(
- height: 10,
- ),
+ const SizedBox(height: 10),
Row(
children: [
CustomTextButton(
text: "Copy address",
onTap: () {
widget.clipboard
- .setData(
- ClipboardData(
- text: address.value,
- ),
- )
+ .setData(ClipboardData(text: address.value))
.then((value) {
- if (context.mounted) {
- unawaited(
- showFloatingFlushBar(
- type: FlushBarType.info,
- message: "Copied to clipboard",
- context: context,
- ),
- );
- }
- });
+ if (context.mounted) {
+ unawaited(
+ showFloatingFlushBar(
+ type: FlushBarType.info,
+ message: "Copied to clipboard",
+ context: context,
+ ),
+ );
+ }
+ });
},
),
- const SizedBox(
- width: 16,
- ),
+ const SizedBox(width: 16),
CustomTextButton(
text: "Show QR code",
onTap: () async {
@@ -284,21 +267,19 @@ class _AddressCardState extends ConsumerState<AddressCard> {
style: STextStyles.w600_18(context),
),
if (label!.value.isNotEmpty)
- const SizedBox(
- height: 8,
- ),
+ const SizedBox(height: 8),
Text(
address.value,
- style:
- STextStyles.w500_16(context).copyWith(
- color: Theme.of(context)
- .extension<StackColors>()!
- .textSubtitle1,
+ style: STextStyles.w500_16(
+ context,
+ ).copyWith(
+ color:
+ Theme.of(context)
+ .extension<StackColors>()!
+ .textSubtitle1,
),
),
- const SizedBox(
- height: 16,
- ),
+ const SizedBox(height: 16),
Center(
child: RepaintBoundary(
key: _qrKey,
@@ -312,25 +293,25 @@ class _AddressCardState extends ConsumerState<AddressCard> {
),
),
),
- const SizedBox(
- height: 16,
- ),
+ const SizedBox(height: 16),
Row(
children: [
if (!isDesktop)
Expanded(
child: SecondaryButton(
label: "Share",
- buttonHeight: isDesktop
- ? ButtonHeight.l
- : null,
+ buttonHeight:
+ isDesktop
+ ? ButtonHeight.l
+ : null,
icon: SvgPicture.asset(
Assets.svg.share,
width: 14,
height: 14,
- color: Theme.of(context)
- .extension<StackColors>()!
- .buttonTextSecondary,
+ color:
+ Theme.of(context)
+ .extension<StackColors>()!
+ .buttonTextSecondary,
),
onPressed: () async {
await _capturePng(false);
@@ -340,9 +321,10 @@ class _AddressCardState extends ConsumerState<AddressCard> {
if (isDesktop)
Expanded(
child: PrimaryButton(
- buttonHeight: isDesktop
- ? ButtonHeight.l
- : null,
+ buttonHeight:
+ isDesktop
+ ? ButtonHeight.l
+ : null,
onPressed: () async {
// TODO: add save functionality instead of share
// save works on linux at the moment
@@ -353,9 +335,10 @@ class _AddressCardState extends ConsumerState<AddressCard> {
Assets.svg.arrowDown,
width: 20,
height: 20,
- color: Theme.of(context)
- .extension<StackColors>()!
- .buttonTextPrimary,
+ color:
+ Theme.of(context)
+ .extension<StackColors>()!
+ .buttonTextPrimary,
),
),
),
diff --git a/lib/pages/receive_view/addresses/address_details_view.dart b/lib/pages/receive_view/addresses/address_details_view.dart
index 51dfd7e..aa6fd9b 100644
--- a/lib/pages/receive_view/addresses/address_details_view.dart
+++ b/lib/pages/receive_view/addresses/address_details_view.dart
@@ -11,7 +11,7 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../../db/isar/main_db.dart';
import '../../../models/isar/models/blockchain_data/v2/transaction_v2.dart';
diff --git a/lib/pages/receive_view/addresses/edit_address_label_view.dart b/lib/pages/receive_view/addresses/edit_address_label_view.dart
index f0508f4..78a8ea9 100644
--- a/lib/pages/receive_view/addresses/edit_address_label_view.dart
+++ b/lib/pages/receive_view/addresses/edit_address_label_view.dart
@@ -10,7 +10,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../../db/isar/main_db.dart';
import '../../../models/isar/models/address_label.dart';
diff --git a/lib/pages/receive_view/addresses/wallet_addresses_view.dart b/lib/pages/receive_view/addresses/wallet_addresses_view.dart
index 8b87fd0..7dcf0ea 100644
--- a/lib/pages/receive_view/addresses/wallet_addresses_view.dart
+++ b/lib/pages/receive_view/addresses/wallet_addresses_view.dart
@@ -10,7 +10,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import 'package:tuple/tuple.dart';
import '../../../db/isar/main_db.dart';
diff --git a/lib/pages/receive_view/receive_view.dart b/lib/pages/receive_view/receive_view.dart
index 3cd473b..5fa78b3 100644
--- a/lib/pages/receive_view/receive_view.dart
+++ b/lib/pages/receive_view/receive_view.dart
@@ -15,7 +15,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/flutter_svg.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../models/isar/models/isar_models.dart';
import '../../models/keys/view_only_wallet_data.dart';
diff --git a/lib/pages/send_view/frost_ms/send_steps/frost_send_step_1b.dart b/lib/pages/send_view/frost_ms/send_steps/frost_send_step_1b.dart
index e5f6581..f7e6d0b 100644
--- a/lib/pages/send_view/frost_ms/send_steps/frost_send_step_1b.dart
+++ b/lib/pages/send_view/frost_ms/send_steps/frost_send_step_1b.dart
@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../../../frost_route_generator.dart';
import '../../../../models/input.dart';
diff --git a/lib/pages/settings_views/global_settings_view/appearance_settings/sub_widgets/stack_theme_card.dart b/lib/pages/settings_views/global_settings_view/appearance_settings/sub_widgets/stack_theme_card.dart
index 06cbfe8..b350fa5 100644
--- a/lib/pages/settings_views/global_settings_view/appearance_settings/sub_widgets/stack_theme_card.dart
+++ b/lib/pages/settings_views/global_settings_view/appearance_settings/sub_widgets/stack_theme_card.dart
@@ -14,7 +14,7 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../../../../models/isar/stack_theme.dart';
import '../../../../../notifications/show_flush_bar.dart';
@@ -34,10 +34,7 @@ import '../../../../../widgets/rounded_white_container.dart';
import '../../../../../widgets/stack_dialog.dart';
class StackThemeCard extends ConsumerStatefulWidget {
- const StackThemeCard({
- super.key,
- required this.data,
- });
+ const StackThemeCard({super.key, required this.data});
final StackThemeMetaData data;
@@ -57,29 +54,33 @@ class _StackThemeCardState extends ConsumerState<StackThemeCard> {
final service = ref.read(pThemeService);
try {
- final data = await service.fetchTheme(
- themeMetaData: widget.data,
- );
+ final data = await service.fetchTheme(themeMetaData: widget.data);
await service.install(themeArchiveData: data);
return true;
} catch (e, s) {
- Logging.instance.w("Failed _downloadAndInstall of ${widget.data.id}: ", error: e, stackTrace: s);
+ Logging.instance.w(
+ "Failed _downloadAndInstall of ${widget.data.id}: ",
+ error: e,
+ stackTrace: s,
+ );
return false;
}
}
Future<void> _downloadPressed() async {
- final result = (await showLoading(
- whileFuture: _downloadAndInstall(),
- context: context,
- message: "Downloading and installing theme...",
- ))!;
+ final result =
+ (await showLoading(
+ whileFuture: _downloadAndInstall(),
+ context: context,
+ message: "Downloading and installing theme...",
+ ))!;
if (mounted) {
- final message = result
- ? "${widget.data.name} theme installed!"
- : "Failed to install ${widget.data.name} theme";
+ final message =
+ result
+ ? "${widget.data.name} theme installed!"
+ : "Failed to install ${widget.data.name} theme";
if (isDesktop) {
await showFloatingFlushBar(
type: result ? FlushBarType.success : FlushBarType.warning,
@@ -89,15 +90,16 @@ class _StackThemeCardState extends ConsumerState<StackThemeCard> {
} else {
await showDialog<void>(
context: context,
- builder: (_) => StackOkDialog(
- title: message,
- onOkPressed: (_) {
- setState(() {
- _needsUpdate = !result;
- _hasTheme = result;
- });
- },
- ),
+ builder:
+ (_) => StackOkDialog(
+ title: message,
+ onOkPressed: (_) {
+ setState(() {
+ _needsUpdate = !result;
+ _hasTheme = result;
+ });
+ },
+ ),
);
}
}
@@ -128,8 +130,9 @@ class _StackThemeCardState extends ConsumerState<StackThemeCard> {
final themeDir = Directory("${themesDir.path}/${widget.data.id}");
int bytes = 0;
if (await themeDir.exists()) {
- await for (final FileSystemEntity entity
- in themeDir.list(recursive: true)) {
+ await for (final FileSystemEntity entity in themeDir.list(
+ recursive: true,
+ )) {
if (entity is File) {
bytes += await entity.length();
}
@@ -152,13 +155,14 @@ class _StackThemeCardState extends ConsumerState<StackThemeCard> {
}
}
- StackTheme? getInstalled() => ref
- .read(mainDBProvider)
- .isar
- .stackThemes
- .where()
- .themeIdEqualTo(widget.data.id)
- .findFirstSync();
+ StackTheme? getInstalled() =>
+ ref
+ .read(mainDBProvider)
+ .isar
+ .stackThemes
+ .where()
+ .themeIdEqualTo(widget.data.id)
+ .findFirstSync();
@override
void initState() {
@@ -174,20 +178,20 @@ class _StackThemeCardState extends ConsumerState<StackThemeCard> {
.stackThemes
.watchLazy()
.listen((event) async {
- final installedTheme = getInstalled();
- final hasTheme = installedTheme != null;
- if (_hasTheme != hasTheme && mounted) {
- WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
- setState(() {
- _hasTheme = hasTheme;
- if (hasTheme) {
- _needsUpdate =
- widget.data.version > (installedTheme.version ?? 0);
- }
- });
+ final installedTheme = getInstalled();
+ final hasTheme = installedTheme != null;
+ if (_hasTheme != hasTheme && mounted) {
+ WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
+ setState(() {
+ _hasTheme = hasTheme;
+ if (hasTheme) {
+ _needsUpdate =
+ widget.data.version > (installedTheme.version ?? 0);
+ }
+ });
+ });
+ }
});
- }
- });
_subscription.resume();
super.initState();
@@ -203,67 +207,46 @@ class _StackThemeCardState extends ConsumerState<StackThemeCard> {
Widget build(BuildContext context) {
return RoundedWhiteContainer(
radiusMultiplier: isDesktop ? 2.5 : 1,
- borderColor: isDesktop
- ? Theme.of(context).extension<StackColors>()!.textSubtitle6
- : null,
+ borderColor:
+ isDesktop
+ ? Theme.of(context).extension<StackColors>()!.textSubtitle6
+ : null,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Padding(
- padding: const EdgeInsets.symmetric(
- horizontal: 18,
- ),
- child: widget.data.previewImageUrl.isNotEmpty
- ? AspectRatio(
- aspectRatio: 1,
- child: ClipRRect(
- borderRadius: BorderRadius.circular(100),
- child: Image.network(
- widget.data.previewImageUrl,
+ padding: const EdgeInsets.symmetric(horizontal: 18),
+ child:
+ widget.data.previewImageUrl.isNotEmpty
+ ? AspectRatio(
+ aspectRatio: 1,
+ child: ClipRRect(
+ borderRadius: BorderRadius.circular(100),
+ child: Image.network(widget.data.previewImageUrl),
),
- ),
- )
- : Builder(
- builder: (context) {
- final themePreview = ref
- .watch(pThemeService)
- .getTheme(themeId: widget.data.id)
- ?.assets
- .themePreview ??
- "";
+ )
+ : Builder(
+ builder: (context) {
+ final themePreview =
+ ref
+ .watch(pThemeService)
+ .getTheme(themeId: widget.data.id)
+ ?.assets
+ .themePreview ??
+ "";
- return (themePreview.endsWith(".png"))
- ? Image.file(
- File(
- themePreview,
- ),
- height: 100,
- )
- : SvgPicture.file(
- File(
- themePreview,
- ),
- height: 100,
- );
- },
- ),
- ),
- const SizedBox(
- height: 12,
- ),
- Text(
- widget.data.name,
- style: STextStyles.itemSubtitle12(context),
- ),
- const SizedBox(
- height: 6,
+ return (themePreview.endsWith(".png"))
+ ? Image.file(File(themePreview), height: 100)
+ : SvgPicture.file(File(themePreview), height: 100);
+ },
+ ),
),
+ const SizedBox(height: 12),
+ Text(widget.data.name, style: STextStyles.itemSubtitle12(context)),
+ const SizedBox(height: 6),
FutureBuilder(
future: getThemeDirectorySize(),
- builder: (
- context,
- AsyncSnapshot<String> snapshot,
- ) {
+ builder: (context, AsyncSnapshot<String> snapshot) {
if (snapshot.connectionState == ConnectionState.done &&
snapshot.hasData) {
_cachedSize = snapshot.data;
@@ -279,31 +262,24 @@ class _StackThemeCardState extends ConsumerState<StackThemeCard> {
style: STextStyles.label(context),
);
} else {
- return Text(
- _cachedSize!,
- style: STextStyles.label(context),
- );
+ return Text(_cachedSize!, style: STextStyles.label(context));
}
},
),
- if (_hasTheme && _needsUpdate)
- const SizedBox(
- height: 12,
- ),
+ if (_hasTheme && _needsUpdate) const SizedBox(height: 12),
if (_hasTheme && _needsUpdate)
PrimaryButton(
label: "Update",
buttonHeight: isDesktop ? ButtonHeight.s : ButtonHeight.l,
onPressed: _downloadPressed,
),
- const SizedBox(
- height: 12,
- ),
+ const SizedBox(height: 12),
AnimatedCrossFade(
duration: const Duration(milliseconds: 300),
- crossFadeState: _hasTheme
- ? CrossFadeState.showSecond
- : CrossFadeState.showFirst,
+ crossFadeState:
+ _hasTheme
+ ? CrossFadeState.showSecond
+ : CrossFadeState.showFirst,
firstChild: PrimaryButton(
label: "Download",
buttonHeight: isDesktop ? ButtonHeight.s : ButtonHeight.l,
diff --git a/lib/pages/settings_views/global_settings_view/stack_backup_views/helpers/restore_create_backup.dart b/lib/pages/settings_views/global_settings_view/stack_backup_views/helpers/restore_create_backup.dart
index a178ddd..4069f06 100644
--- a/lib/pages/settings_views/global_settings_view/stack_backup_views/helpers/restore_create_backup.dart
+++ b/lib/pages/settings_views/global_settings_view/stack_backup_views/helpers/restore_create_backup.dart
@@ -14,7 +14,7 @@ import 'dart:io';
import 'dart:typed_data';
import 'package:frostdart/frostdart.dart' as frost;
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import 'package:stack_wallet_backup/stack_wallet_backup.dart';
import 'package:tuple/tuple.dart';
import 'package:uuid/uuid.dart';
diff --git a/lib/pages/spark_names/buy_spark_name_view.dart b/lib/pages/spark_names/buy_spark_name_view.dart
index fa2cae8..b05d6b2 100644
--- a/lib/pages/spark_names/buy_spark_name_view.dart
+++ b/lib/pages/spark_names/buy_spark_name_view.dart
@@ -6,7 +6,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_libsparkmobile/flutter_libsparkmobile.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../../providers/providers.dart';
import '../../../utilities/amount/amount.dart';
diff --git a/lib/pages/token_view/sub_widgets/my_tokens_list.dart b/lib/pages/token_view/sub_widgets/my_tokens_list.dart
index f6ef70c..a25d342 100644
--- a/lib/pages/token_view/sub_widgets/my_tokens_list.dart
+++ b/lib/pages/token_view/sub_widgets/my_tokens_list.dart
@@ -10,7 +10,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../../db/isar/main_db.dart';
import '../../../models/isar/models/ethereum/eth_contract.dart';
@@ -79,13 +79,11 @@ class MyTokensList extends StatelessWidget {
final token = tokens[index];
return Padding(
key: Key(token.address),
- padding: isDesktop
- ? const EdgeInsets.symmetric(vertical: 5)
- : const EdgeInsets.all(4),
- child: MyTokenSelectItem(
- walletId: walletId,
- token: token,
- ),
+ padding:
+ isDesktop
+ ? const EdgeInsets.symmetric(vertical: 5)
+ : const EdgeInsets.all(4),
+ child: MyTokenSelectItem(walletId: walletId, token: token),
);
},
);
diff --git a/lib/pages/token_view/sub_widgets/token_transaction_list_widget.dart b/lib/pages/token_view/sub_widgets/token_transaction_list_widget.dart
index 657a528..dc82557 100644
--- a/lib/pages/token_view/sub_widgets/token_transaction_list_widget.dart
+++ b/lib/pages/token_view/sub_widgets/token_transaction_list_widget.dart
@@ -12,7 +12,7 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../../models/isar/models/blockchain_data/v2/transaction_v2.dart';
import '../../wallet_view/sub_widgets/no_transactions_found.dart';
import '../../wallet_view/transaction_views/tx_v2/transaction_v2_list_item.dart';
diff --git a/lib/pages/token_view/token_contract_details_view.dart b/lib/pages/token_view/token_contract_details_view.dart
index 08e82e0..3f29205 100644
--- a/lib/pages/token_view/token_contract_details_view.dart
+++ b/lib/pages/token_view/token_contract_details_view.dart
@@ -10,7 +10,8 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
+
import '../../db/isar/main_db.dart';
import '../../models/isar/models/isar_models.dart';
import '../../themes/stack_colors.dart';
@@ -47,10 +48,11 @@ class _TokenContractDetailsViewState
@override
void initState() {
- contract = MainDB.instance.isar.ethContracts
- .where()
- .addressEqualTo(widget.contractAddress)
- .findFirstSync()!;
+ contract =
+ MainDB.instance.isar.ethContracts
+ .where()
+ .addressEqualTo(widget.contractAddress)
+ .findFirstSync()!;
super.initState();
}
@@ -59,92 +61,77 @@ class _TokenContractDetailsViewState
Widget build(BuildContext context) {
return ConditionalParent(
condition: !isDesktop,
- builder: (child) => Background(
- child: Scaffold(
- backgroundColor:
- Theme.of(context).extension<StackColors>()!.background,
- appBar: AppBar(
- backgroundColor:
- Theme.of(context).extension<StackColors>()!.backgroundAppBar,
- leading: AppBarBackButton(
- onPressed: () {
- Navigator.of(context).pop();
- },
- ),
- titleSpacing: 0,
- title: Text(
- "Contract details",
- style: STextStyles.navBarTitle(context),
- ),
- ),
- body: SafeArea(
- child: LayoutBuilder(
- builder: (builderContext, constraints) {
- return SingleChildScrollView(
- child: ConstrainedBox(
- constraints: BoxConstraints(
- minHeight: constraints.maxHeight,
- ),
- child: Padding(
- padding: const EdgeInsets.all(16),
- child: child,
- ),
- ),
- );
- },
+ builder:
+ (child) => Background(
+ child: Scaffold(
+ backgroundColor:
+ Theme.of(context).extension<StackColors>()!.background,
+ appBar: AppBar(
+ backgroundColor:
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.backgroundAppBar,
+ leading: AppBarBackButton(
+ onPressed: () {
+ Navigator.of(context).pop();
+ },
+ ),
+ titleSpacing: 0,
+ title: Text(
+ "Contract details",
+ style: STextStyles.navBarTitle(context),
+ ),
+ ),
+ body: SafeArea(
+ child: LayoutBuilder(
+ builder: (builderContext, constraints) {
+ return SingleChildScrollView(
+ child: ConstrainedBox(
+ constraints: BoxConstraints(
+ minHeight: constraints.maxHeight,
+ ),
+ child: Padding(
+ padding: const EdgeInsets.all(16),
+ child: child,
+ ),
+ ),
+ );
+ },
+ ),
+ ),
),
),
- ),
- ),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
_Item(
title: "Contract address",
data: contract.address,
- button: SimpleCopyButton(
- data: contract.address,
- ),
- ),
- const SizedBox(
- height: 12,
+ button: SimpleCopyButton(data: contract.address),
),
+ const SizedBox(height: 12),
_Item(
title: "Name",
data: contract.name,
- button: SimpleCopyButton(
- data: contract.name,
- ),
- ),
- const SizedBox(
- height: 12,
+ button: SimpleCopyButton(data: contract.name),
),
+ const SizedBox(height: 12),
_Item(
title: "Symbol",
data: contract.symbol,
- button: SimpleCopyButton(
- data: contract.symbol,
- ),
- ),
- const SizedBox(
- height: 12,
+ button: SimpleCopyButton(data: contract.symbol),
),
+ const SizedBox(height: 12),
_Item(
title: "Type",
data: contract.type.name,
- button: SimpleCopyButton(
- data: contract.type.name,
- ),
- ),
- const SizedBox(
- height: 12,
+ button: SimpleCopyButton(data: contract.type.name),
),
+ const SizedBox(height: 12),
_Item(
title: "Decimals",
data: contract.decimals.toString(),
- button: SimpleCopyButton(
- data: contract.decimals.toString(),
- ),
+ button: SimpleCopyButton(data: contract.decimals.toString()),
),
],
),
@@ -173,29 +160,20 @@ class _Item extends StatelessWidget {
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
- Text(
- title,
- style: STextStyles.itemSubtitle(context),
- ),
+ Text(title, style: STextStyles.itemSubtitle(context)),
button,
],
),
- const SizedBox(
- height: 5,
- ),
+ const SizedBox(height: 5),
data.isNotEmpty
- ? SelectableText(
- data,
- style: STextStyles.w500_14(context),
- )
+ ? SelectableText(data, style: STextStyles.w500_14(context))
: Text(
- "$title will appear here",
- style: STextStyles.w500_14(context).copyWith(
- color: Theme.of(context)
- .extension<StackColors>()!
- .textSubtitle3,
- ),
+ "$title will appear here",
+ style: STextStyles.w500_14(context).copyWith(
+ color:
+ Theme.of(context).extension<StackColors>()!.textSubtitle3,
),
+ ),
],
),
);
diff --git a/lib/pages/wallet_view/sub_widgets/transactions_list.dart b/lib/pages/wallet_view/sub_widgets/transactions_list.dart
index 8e2fb5c..12c3d0a 100644
--- a/lib/pages/wallet_view/sub_widgets/transactions_list.dart
+++ b/lib/pages/wallet_view/sub_widgets/transactions_list.dart
@@ -12,7 +12,7 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import 'package:tuple/tuple.dart';
import '../../../models/isar/models/isar_models.dart';
@@ -36,10 +36,7 @@ import '../wallet_view.dart';
import 'no_transactions_found.dart';
class TransactionsList extends ConsumerStatefulWidget {
- const TransactionsList({
- super.key,
- required this.walletId,
- });
+ const TransactionsList({super.key, required this.walletId});
final String walletId;
@@ -57,23 +54,15 @@ class _TransactionsListState extends ConsumerState<TransactionsList> {
BorderRadius get _borderRadiusFirst {
return BorderRadius.only(
- topLeft: Radius.circular(
- Constants.size.circularBorderRadius,
- ),
- topRight: Radius.circular(
- Constants.size.circularBorderRadius,
- ),
+ topLeft: Radius.circular(Constants.size.circularBorderRadius),
+ topRight: Radius.circular(Constants.size.circularBorderRadius),
);
}
BorderRadius get _borderRadiusLast {
return BorderRadius.only(
- bottomLeft: Radius.circular(
- Constants.size.circularBorderRadius,
- ),
- bottomRight: Radius.circular(
- Constants.size.circularBorderRadius,
- ),
+ bottomLeft: Radius.circular(Constants.size.circularBorderRadius),
+ bottomRight: Radius.circular(Constants.size.circularBorderRadius),
);
}
@@ -120,58 +109,62 @@ class _TransactionsListState extends ConsumerState<TransactionsList> {
if (Util.isDesktop) {
await showDialog<void>(
context: context,
- builder: (context) => Navigator(
- initialRoute: TradeDetailsView.routeName,
- onGenerateRoute: RouteGenerator.generateRoute,
- onGenerateInitialRoutes: (_, __) {
- return [
- FadePageRoute(
- DesktopDialog(
- maxHeight: null,
- maxWidth: 580,
- child: Column(
- mainAxisSize: MainAxisSize.min,
- children: [
- Padding(
- padding: const EdgeInsets.only(
- left: 32,
- bottom: 16,
- ),
- child: Row(
- mainAxisAlignment:
- MainAxisAlignment.spaceBetween,
- children: [
- Text(
- "Trade details",
- style: STextStyles.desktopH3(context),
+ builder:
+ (context) => Navigator(
+ initialRoute: TradeDetailsView.routeName,
+ onGenerateRoute: RouteGenerator.generateRoute,
+ onGenerateInitialRoutes: (_, __) {
+ return [
+ FadePageRoute(
+ DesktopDialog(
+ maxHeight: null,
+ maxWidth: 580,
+ child: Column(
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ Padding(
+ padding: const EdgeInsets.only(
+ left: 32,
+ bottom: 16,
),
- DesktopDialogCloseButton(
- onPressedOverride: Navigator.of(
- context,
- rootNavigator: true,
- ).pop,
+ child: Row(
+ mainAxisAlignment:
+ MainAxisAlignment.spaceBetween,
+ children: [
+ Text(
+ "Trade details",
+ style: STextStyles.desktopH3(
+ context,
+ ),
+ ),
+ DesktopDialogCloseButton(
+ onPressedOverride:
+ Navigator.of(
+ context,
+ rootNavigator: true,
+ ).pop,
+ ),
+ ],
),
- ],
- ),
- ),
- Flexible(
- child: TradeDetailsView(
- tradeId: trade.tradeId,
- transactionIfSentFromStack: tx,
- walletName: walletName,
- walletId: widget.walletId,
- ),
+ ),
+ Flexible(
+ child: TradeDetailsView(
+ tradeId: trade.tradeId,
+ transactionIfSentFromStack: tx,
+ walletName: walletName,
+ walletId: widget.walletId,
+ ),
+ ),
+ ],
),
- ],
+ ),
+ const RouteSettings(
+ name: TradeDetailsView.routeName,
+ ),
),
- ),
- const RouteSettings(
- name: TradeDetailsView.routeName,
- ),
- ),
- ];
- },
- ),
+ ];
+ },
+ ),
);
} else {
unawaited(
@@ -209,13 +202,14 @@ class _TransactionsListState extends ConsumerState<TransactionsList> {
@override
void initState() {
- _query = ref
- .read(mainDBProvider)
- .isar
- .transactions
- .where()
- .walletIdEqualTo(widget.walletId)
- .sortByTimestampDesc();
+ _query =
+ ref
+ .read(mainDBProvider)
+ .isar
+ .transactions
+ .where()
+ .walletIdEqualTo(widget.walletId)
+ .sortByTimestampDesc();
_subscription = _query.watch().listen((event) {
WidgetsBinding.instance.addPostFrameCallback((_) {
@@ -252,15 +246,8 @@ class _TransactionsListState extends ConsumerState<TransactionsList> {
return const Column(
children: [
Spacer(),
- Center(
- child: LoadingIndicator(
- height: 50,
- width: 50,
- ),
- ),
- Spacer(
- flex: 4,
- ),
+ Center(child: LoadingIndicator(height: 50, width: 50)),
+ Spacer(flex: 4),
],
);
}
@@ -278,64 +265,66 @@ class _TransactionsListState extends ConsumerState<TransactionsList> {
onRefresh: () async {
await ref.read(pWallets).getWallet(widget.walletId).refresh();
},
- child: Util.isDesktop
- ? ListView.separated(
- shrinkWrap: true,
- itemBuilder: (context, index) {
- BorderRadius? radius;
- if (_transactions2.length == 1) {
- radius = BorderRadius.circular(
- Constants.size.circularBorderRadius,
- );
- } else if (index == _transactions2.length - 1) {
- radius = _borderRadiusLast;
- } else if (index == 0) {
- radius = _borderRadiusFirst;
- }
- final tx = _transactions2[index];
- return itemBuilder(context, tx, radius, coin, height);
- },
- separatorBuilder: (context, index) {
- return Container(
- width: double.infinity,
- height: 2,
- color: Theme.of(context)
- .extension<StackColors>()!
- .background,
- );
- },
- itemCount: _transactions2.length,
- )
- : ListView.builder(
- itemCount: _transactions2.length,
- itemBuilder: (context, index) {
- BorderRadius? radius;
- bool shouldWrap = false;
- if (_transactions2.length == 1) {
- radius = BorderRadius.circular(
- Constants.size.circularBorderRadius,
- );
- } else if (index == _transactions2.length - 1) {
- radius = _borderRadiusLast;
- shouldWrap = true;
- } else if (index == 0) {
- radius = _borderRadiusFirst;
- }
- final tx = _transactions2[index];
- if (shouldWrap) {
- return Column(
- children: [
- itemBuilder(context, tx, radius, coin, height),
- const SizedBox(
- height: WalletView.navBarHeight + 14,
- ),
- ],
- );
- } else {
+ child:
+ Util.isDesktop
+ ? ListView.separated(
+ shrinkWrap: true,
+ itemBuilder: (context, index) {
+ BorderRadius? radius;
+ if (_transactions2.length == 1) {
+ radius = BorderRadius.circular(
+ Constants.size.circularBorderRadius,
+ );
+ } else if (index == _transactions2.length - 1) {
+ radius = _borderRadiusLast;
+ } else if (index == 0) {
+ radius = _borderRadiusFirst;
+ }
+ final tx = _transactions2[index];
return itemBuilder(context, tx, radius, coin, height);
- }
- },
- ),
+ },
+ separatorBuilder: (context, index) {
+ return Container(
+ width: double.infinity,
+ height: 2,
+ color:
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.background,
+ );
+ },
+ itemCount: _transactions2.length,
+ )
+ : ListView.builder(
+ itemCount: _transactions2.length,
+ itemBuilder: (context, index) {
+ BorderRadius? radius;
+ bool shouldWrap = false;
+ if (_transactions2.length == 1) {
+ radius = BorderRadius.circular(
+ Constants.size.circularBorderRadius,
+ );
+ } else if (index == _transactions2.length - 1) {
+ radius = _borderRadiusLast;
+ shouldWrap = true;
+ } else if (index == 0) {
+ radius = _borderRadiusFirst;
+ }
+ final tx = _transactions2[index];
+ if (shouldWrap) {
+ return Column(
+ children: [
+ itemBuilder(context, tx, radius, coin, height),
+ const SizedBox(
+ height: WalletView.navBarHeight + 14,
+ ),
+ ],
+ );
+ } else {
+ return itemBuilder(context, tx, radius, coin, height);
+ }
+ },
+ ),
);
}
},
diff --git a/lib/pages/wallet_view/transaction_views/all_transactions_view.dart b/lib/pages/wallet_view/transaction_views/all_transactions_view.dart
index 397fd7d..98996a7 100644
--- a/lib/pages/wallet_view/transaction_views/all_transactions_view.dart
+++ b/lib/pages/wallet_view/transaction_views/all_transactions_view.dart
@@ -14,7 +14,7 @@ import 'package:decimal/decimal.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import 'package:tuple/tuple.dart';
import '../../../models/isar/models/blockchain_data/transaction.dart';
diff --git a/lib/pages/wallet_view/transaction_views/tx_v2/all_transactions_v2_view.dart b/lib/pages/wallet_view/transaction_views/tx_v2/all_transactions_v2_view.dart
index b4b95f1..356d106 100644
--- a/lib/pages/wallet_view/transaction_views/tx_v2/all_transactions_v2_view.dart
+++ b/lib/pages/wallet_view/transaction_views/tx_v2/all_transactions_v2_view.dart
@@ -15,7 +15,7 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../../../models/isar/models/blockchain_data/v2/transaction_v2.dart';
import '../../../../models/isar/models/contact_entry.dart';
diff --git a/lib/pages/wallet_view/transaction_views/tx_v2/transaction_v2_details_view.dart b/lib/pages/wallet_view/transaction_views/tx_v2/transaction_v2_details_view.dart
index 2f2bbf8..13c0b1f 100644
--- a/lib/pages/wallet_view/transaction_views/tx_v2/transaction_v2_details_view.dart
+++ b/lib/pages/wallet_view/transaction_views/tx_v2/transaction_v2_details_view.dart
@@ -16,7 +16,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/flutter_svg.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import 'package:tuple/tuple.dart';
import 'package:url_launcher/url_launcher.dart';
diff --git a/lib/pages/wallet_view/transaction_views/tx_v2/transaction_v2_list.dart b/lib/pages/wallet_view/transaction_views/tx_v2/transaction_v2_list.dart
index b805cd8..9acb8b7 100644
--- a/lib/pages/wallet_view/transaction_views/tx_v2/transaction_v2_list.dart
+++ b/lib/pages/wallet_view/transaction_views/tx_v2/transaction_v2_list.dart
@@ -12,7 +12,7 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../../../models/isar/models/blockchain_data/transaction.dart';
import '../../../../models/isar/models/blockchain_data/v2/transaction_v2.dart';
@@ -29,10 +29,7 @@ import 'fusion_tx_group_card.dart';
import 'transaction_v2_list_item.dart';
class TransactionsV2List extends ConsumerStatefulWidget {
- const TransactionsV2List({
- super.key,
- required this.walletId,
- });
+ const TransactionsV2List({super.key, required this.walletId});
final String walletId;
@@ -50,48 +47,39 @@ class _TransactionsV2ListState extends ConsumerState<TransactionsV2List> {
BorderRadius get _borderRadiusFirst {
return BorderRadius.only(
- topLeft: Radius.circular(
- Constants.size.circularBorderRadius,
- ),
- topRight: Radius.circular(
- Constants.size.circularBorderRadius,
- ),
+ topLeft: Radius.circular(Constants.size.circularBorderRadius),
+ topRight: Radius.circular(Constants.size.circularBorderRadius),
);
}
BorderRadius get _borderRadiusLast {
return BorderRadius.only(
- bottomLeft: Radius.circular(
- Constants.size.circularBorderRadius,
- ),
- bottomRight: Radius.circular(
- Constants.size.circularBorderRadius,
- ),
+ bottomLeft: Radius.circular(Constants.size.circularBorderRadius),
+ bottomRight: Radius.circular(Constants.size.circularBorderRadius),
);
}
@override
void initState() {
coin = ref.read(pWallets).getWallet(widget.walletId).info.coin;
- _query =
- ref.read(mainDBProvider).isar.transactionV2s.buildQuery<TransactionV2>(
- whereClauses: [
- IndexWhereClause.equalTo(
- indexName: 'walletId',
- value: [widget.walletId],
- ),
- ],
- filter: ref
+ _query = ref
+ .read(mainDBProvider)
+ .isar
+ .transactionV2s
+ .buildQuery<TransactionV2>(
+ whereClauses: [
+ IndexWhereClause.equalTo(
+ indexName: 'walletId',
+ value: [widget.walletId],
+ ),
+ ],
+ filter:
+ ref
.read(pWallets)
.getWallet(widget.walletId)
.transactionFilterOperation,
- sortBy: [
- const SortProperty(
- property: "timestamp",
- sort: Sort.desc,
- ),
- ],
- );
+ sortBy: [const SortProperty(property: "timestamp", sort: Sort.desc)],
+ );
_subscription = _query.watch().listen((event) {
WidgetsBinding.instance.addPostFrameCallback((_) {
@@ -124,15 +112,8 @@ class _TransactionsV2ListState extends ConsumerState<TransactionsV2List> {
return const Column(
children: [
Spacer(),
- Center(
- child: LoadingIndicator(
- height: 50,
- width: 50,
- ),
- ),
- Spacer(
- flex: 4,
- ),
+ Center(child: LoadingIndicator(height: 50, width: 50)),
+ Spacer(flex: 4),
],
);
}
@@ -159,8 +140,9 @@ class _TransactionsV2ListState extends ConsumerState<TransactionsV2List> {
final prevTime = DateTime.fromMillisecondsSinceEpoch(
fusions.last.timestamp * 1000,
);
- final thisTime =
- DateTime.fromMillisecondsSinceEpoch(tx.timestamp * 1000);
+ final thisTime = DateTime.fromMillisecondsSinceEpoch(
+ tx.timestamp * 1000,
+ );
if (prevTime.difference(thisTime).inMinutes > 30) {
_txns.add(FusionTxGroup(fusions));
@@ -190,76 +172,66 @@ class _TransactionsV2ListState extends ConsumerState<TransactionsV2List> {
onRefresh: () async {
await ref.read(pWallets).getWallet(widget.walletId).refresh();
},
- child: Util.isDesktop
- ? ListView.separated(
- shrinkWrap: true,
- itemBuilder: (context, index) {
- BorderRadius? radius;
- if (_txns.length == 1) {
- radius = BorderRadius.circular(
- Constants.size.circularBorderRadius,
- );
- } else if (index == _txns.length - 1) {
- radius = _borderRadiusLast;
- } else if (index == 0) {
- radius = _borderRadiusFirst;
- }
- final tx = _txns[index];
- return TxListItem(
- tx: tx,
- coin: coin,
- radius: radius,
- );
- },
- separatorBuilder: (context, index) {
- return Container(
- width: double.infinity,
- height: 2,
- color: Theme.of(context)
- .extension<StackColors>()!
- .background,
- );
- },
- itemCount: _txns.length,
- )
- : ListView.builder(
- itemCount: _txns.length,
- itemBuilder: (context, index) {
- BorderRadius? radius;
- bool shouldWrap = false;
- if (_txns.length == 1) {
- radius = BorderRadius.circular(
- Constants.size.circularBorderRadius,
- );
- } else if (index == _txns.length - 1) {
- radius = _borderRadiusLast;
- shouldWrap = true;
- } else if (index == 0) {
- radius = _borderRadiusFirst;
- }
- final tx = _txns[index];
- if (shouldWrap) {
- return Column(
- children: [
- TxListItem(
- tx: tx,
- coin: coin,
- radius: radius,
- ),
- const SizedBox(
- height: WalletView.navBarHeight + 14,
- ),
- ],
- );
- } else {
- return TxListItem(
- tx: tx,
- coin: coin,
- radius: radius,
+ child:
+ Util.isDesktop
+ ? ListView.separated(
+ shrinkWrap: true,
+ itemBuilder: (context, index) {
+ BorderRadius? radius;
+ if (_txns.length == 1) {
+ radius = BorderRadius.circular(
+ Constants.size.circularBorderRadius,
+ );
+ } else if (index == _txns.length - 1) {
+ radius = _borderRadiusLast;
+ } else if (index == 0) {
+ radius = _borderRadiusFirst;
+ }
+ final tx = _txns[index];
+ return TxListItem(tx: tx, coin: coin, radius: radius);
+ },
+ separatorBuilder: (context, index) {
+ return Container(
+ width: double.infinity,
+ height: 2,
+ color:
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.background,
);
- }
- },
- ),
+ },
+ itemCount: _txns.length,
+ )
+ : ListView.builder(
+ itemCount: _txns.length,
+ itemBuilder: (context, index) {
+ BorderRadius? radius;
+ bool shouldWrap = false;
+ if (_txns.length == 1) {
+ radius = BorderRadius.circular(
+ Constants.size.circularBorderRadius,
+ );
+ } else if (index == _txns.length - 1) {
+ radius = _borderRadiusLast;
+ shouldWrap = true;
+ } else if (index == 0) {
+ radius = _borderRadiusFirst;
+ }
+ final tx = _txns[index];
+ if (shouldWrap) {
+ return Column(
+ children: [
+ TxListItem(tx: tx, coin: coin, radius: radius),
+ const SizedBox(
+ height: WalletView.navBarHeight + 14,
+ ),
+ ],
+ );
+ } else {
+ return TxListItem(tx: tx, coin: coin, radius: radius);
+ }
+ },
+ ),
);
}
},
diff --git a/lib/pages/wallet_view/wallet_view.dart b/lib/pages/wallet_view/wallet_view.dart
index c61340a..32c565e 100644
--- a/lib/pages/wallet_view/wallet_view.dart
+++ b/lib/pages/wallet_view/wallet_view.dart
@@ -15,7 +15,7 @@ import 'package:event_bus/event_bus.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import 'package:tuple/tuple.dart';
import '../../app_config.dart';
diff --git a/lib/pages/wallets_view/wallets_overview.dart b/lib/pages/wallets_view/wallets_overview.dart
index 7ba5247..bd1dfe5 100644
--- a/lib/pages/wallets_view/wallets_overview.dart
+++ b/lib/pages/wallets_view/wallets_overview.dart
@@ -11,7 +11,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../app_config.dart';
import '../../models/add_wallet_list_entity/sub_classes/coin_entity.dart';
diff --git a/lib/pages_desktop_specific/address_book_view/subwidgets/desktop_contact_details.dart b/lib/pages_desktop_specific/address_book_view/subwidgets/desktop_contact_details.dart
index f3037f5..5346532 100644
--- a/lib/pages_desktop_specific/address_book_view/subwidgets/desktop_contact_details.dart
+++ b/lib/pages_desktop_specific/address_book_view/subwidgets/desktop_contact_details.dart
@@ -11,7 +11,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/flutter_svg.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import 'package:tuple/tuple.dart';
import '../../../models/isar/models/contact_entry.dart';
@@ -35,10 +35,7 @@ import 'desktop_address_card.dart';
import 'desktop_contact_options_menu_popup.dart';
class DesktopContactDetails extends ConsumerStatefulWidget {
- const DesktopContactDetails({
- super.key,
- required this.contactId,
- });
+ const DesktopContactDetails({super.key, required this.contactId});
final String contactId;
@@ -51,24 +48,26 @@ class _DesktopContactDetailsState extends ConsumerState<DesktopContactDetails> {
List<Tuple2<String, Transaction>> _cachedTransactions = [];
Future<List<Tuple2<String, Transaction>>>
- _filteredTransactionsByContact() async {
- final contact =
- ref.read(addressBookServiceProvider).getContactById(widget.contactId);
+ _filteredTransactionsByContact() async {
+ final contact = ref
+ .read(addressBookServiceProvider)
+ .getContactById(widget.contactId);
// TODO: optimise
- final transactions = await ref
- .read(mainDBProvider)
- .isar
- .transactions
- .where()
- .filter()
- .anyOf(
- contact.addresses.map((e) => e.address),
- (q, String e) => q.address((q) => q.valueEqualTo(e)),
- )
- .sortByTimestampDesc()
- .findAll();
+ final transactions =
+ await ref
+ .read(mainDBProvider)
+ .isar
+ .transactions
+ .where()
+ .filter()
+ .anyOf(
+ contact.addresses.map((e) => e.address),
+ (q, String e) => q.address((q) => q.valueEqualTo(e)),
+ )
+ .sortByTimestampDesc()
+ .findAll();
final List<Tuple2<String, Transaction>> result = [];
@@ -88,8 +87,9 @@ class _DesktopContactDetailsState extends ConsumerState<DesktopContactDetails> {
ContactEntry? _contact;
try {
_contact = ref.watch(
- addressBookServiceProvider
- .select((value) => value.getContactById(widget.contactId)),
+ addressBookServiceProvider.select(
+ (value) => value.getContactById(widget.contactId),
+ ),
);
} catch (_) {
return Container();
@@ -115,33 +115,27 @@ class _DesktopContactDetailsState extends ConsumerState<DesktopContactDetails> {
width: 32,
height: 32,
decoration: BoxDecoration(
- color: contact.customId == "default"
- ? Colors.transparent
- : Theme.of(context)
- .extension<StackColors>()!
- .textFieldDefaultBG,
+ color:
+ contact.customId == "default"
+ ? Colors.transparent
+ : Theme.of(context)
+ .extension<StackColors>()!
+ .textFieldDefaultBG,
borderRadius: BorderRadius.circular(32),
),
- child: contact.customId == "default"
- ? const Center(
- child: AppIcon(
- width: 32,
- ),
- )
- : contact.emojiChar != null
- ? Center(
- child: Text(contact.emojiChar!),
- )
+ child:
+ contact.customId == "default"
+ ? const Center(child: AppIcon(width: 32))
+ : contact.emojiChar != null
+ ? Center(child: Text(contact.emojiChar!))
: Center(
- child: SvgPicture.asset(
- Assets.svg.user,
- width: 18,
- ),
+ child: SvgPicture.asset(
+ Assets.svg.user,
+ width: 18,
),
+ ),
),
- const SizedBox(
- width: 16,
- ),
+ const SizedBox(width: 16),
Text(
contact.name,
style: STextStyles.desktopTextSmall(context),
@@ -167,9 +161,7 @@ class _DesktopContactDetailsState extends ConsumerState<DesktopContactDetails> {
),
],
),
- const SizedBox(
- height: 24,
- ),
+ const SizedBox(height: 24),
Flexible(
child: ListView(
primary: false,
@@ -183,8 +175,9 @@ class _DesktopContactDetailsState extends ConsumerState<DesktopContactDetails> {
children: [
Text(
"Addresses",
- style:
- STextStyles.desktopTextExtraExtraSmall(context),
+ style: STextStyles.desktopTextExtraExtraSmall(
+ context,
+ ),
),
CustomTextButton(
text: "Add new",
@@ -195,69 +188,71 @@ class _DesktopContactDetailsState extends ConsumerState<DesktopContactDetails> {
await showDialog<void>(
context: context,
- builder: (context) => DesktopDialog(
- maxWidth: 580,
- maxHeight: 566,
- child: Column(
- children: [
- Row(
+ builder:
+ (context) => DesktopDialog(
+ maxWidth: 580,
+ maxHeight: 566,
+ child: Column(
children: [
- const SizedBox(
- width: 8,
- ),
- const AppBarBackButton(
- isCompact: true,
+ Row(
+ children: [
+ const SizedBox(width: 8),
+ const AppBarBackButton(
+ isCompact: true,
+ ),
+ Text(
+ "Add new address",
+ style: STextStyles.desktopH3(
+ context,
+ ),
+ ),
+ ],
),
- Text(
- "Add new address",
- style:
- STextStyles.desktopH3(context),
+ Expanded(
+ child: Padding(
+ padding: const EdgeInsets.only(
+ top: 20,
+ left: 32,
+ right: 32,
+ bottom: 32,
+ ),
+ child: AddNewContactAddressView(
+ contactId: widget.contactId,
+ ),
+ ),
),
],
),
- Expanded(
- child: Padding(
- padding: const EdgeInsets.only(
- top: 20,
- left: 32,
- right: 32,
- bottom: 32,
- ),
- child: AddNewContactAddressView(
- contactId: widget.contactId,
- ),
- ),
- ),
- ],
- ),
- ),
+ ),
);
},
),
],
),
- const SizedBox(
- height: 12,
- ),
+ const SizedBox(height: 12),
RoundedWhiteContainer(
padding: const EdgeInsets.all(0),
- borderColor: Theme.of(context)
- .extension<StackColors>()!
- .background,
+ borderColor:
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.background,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
- for (int i = 0;
- i < contact.addressesSorted.length;
- i++)
+ for (
+ int i = 0;
+ i < contact.addressesSorted.length;
+ i++
+ )
Column(
mainAxisSize: MainAxisSize.min,
children: [
if (i > 0)
Container(
- color: Theme.of(context)
- .extension<StackColors>()!
- .background,
+ color:
+ Theme.of(context)
+ .extension<StackColors>()!
+ .background,
height: 1,
),
Padding(
@@ -273,14 +268,12 @@ class _DesktopContactDetailsState extends ConsumerState<DesktopContactDetails> {
),
),
Padding(
- padding: const EdgeInsets.only(
- top: 20,
- bottom: 12,
- ),
+ padding: const EdgeInsets.only(top: 20, bottom: 12),
child: Text(
"Transaction history",
- style:
- STextStyles.desktopTextExtraExtraSmall(context),
+ style: STextStyles.desktopTextExtraExtraSmall(
+ context,
+ ),
),
),
FutureBuilder(
@@ -288,7 +281,7 @@ class _DesktopContactDetailsState extends ConsumerState<DesktopContactDetails> {
builder: (
_,
AsyncSnapshot<List<Tuple2<String, Transaction>>>
- snapshot,
+ snapshot,
) {
if (snapshot.connectionState ==
ConnectionState.done &&
@@ -298,9 +291,10 @@ class _DesktopContactDetailsState extends ConsumerState<DesktopContactDetails> {
if (_cachedTransactions.isNotEmpty) {
return RoundedWhiteContainer(
padding: const EdgeInsets.all(0),
- borderColor: Theme.of(context)
- .extension<StackColors>()!
- .background,
+ borderColor:
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.background,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
@@ -333,9 +327,10 @@ class _DesktopContactDetailsState extends ConsumerState<DesktopContactDetails> {
} else {
return RoundedWhiteContainer(
padding: const EdgeInsets.all(0),
- borderColor: Theme.of(context)
- .extension<StackColors>()!
- .background,
+ borderColor:
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.background,
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
diff --git a/lib/pages_desktop_specific/addresses/desktop_wallet_addresses_view.dart b/lib/pages_desktop_specific/addresses/desktop_wallet_addresses_view.dart
index 9186b8f..f3bdb2b 100644
--- a/lib/pages_desktop_specific/addresses/desktop_wallet_addresses_view.dart
+++ b/lib/pages_desktop_specific/addresses/desktop_wallet_addresses_view.dart
@@ -11,7 +11,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../models/isar/models/isar_models.dart';
import '../../pages/receive_view/addresses/address_details_view.dart';
@@ -27,10 +27,7 @@ import 'sub_widgets/desktop_address_list.dart';
final desktopSelectedAddressId = StateProvider.autoDispose<Id?>((ref) => null);
class DesktopWalletAddressesView extends ConsumerStatefulWidget {
- const DesktopWalletAddressesView({
- super.key,
- required this.walletId,
- });
+ const DesktopWalletAddressesView({super.key, required this.walletId});
static const String routeName = "/desktopWalletAddressesView";
@@ -82,32 +79,27 @@ class _DesktopWalletAddressesViewState
leading: Expanded(
child: Row(
children: [
- const SizedBox(
- width: 32,
- ),
+ const SizedBox(width: 32),
AppBarIconButton(
size: 32,
- color: Theme.of(context)
- .extension<StackColors>()!
- .textFieldDefaultBG,
+ color:
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.textFieldDefaultBG,
shadows: const [],
icon: SvgPicture.asset(
Assets.svg.arrowLeft,
width: 18,
height: 18,
- color: Theme.of(context)
- .extension<StackColors>()!
- .topNavIconPrimary,
+ color:
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.topNavIconPrimary,
),
onPressed: Navigator.of(context).pop,
),
- const SizedBox(
- width: 12,
- ),
- Text(
- "Address list",
- style: STextStyles.desktopH3(context),
- ),
+ const SizedBox(width: 12),
+ Text("Address list", style: STextStyles.desktopH3(context)),
const Spacer(),
],
),
@@ -129,15 +121,11 @@ class _DesktopWalletAddressesViewState
walletId: widget.walletId,
),
),
- const SizedBox(
- width: 16,
- ),
+ const SizedBox(width: 16),
Expanded(
child: Column(
children: [
- const SizedBox(
- height: _headerHeight,
- ),
+ const SizedBox(height: _headerHeight),
if (ref.watch(desktopSelectedAddressId.state).state !=
null)
Expanded(
@@ -147,9 +135,10 @@ class _DesktopWalletAddressesViewState
"currentDesktopAddressDetails_key_${ref.watch(desktopSelectedAddressId.state).state}",
),
walletId: widget.walletId,
- addressId: ref
- .watch(desktopSelectedAddressId.state)
- .state!,
+ addressId:
+ ref
+ .watch(desktopSelectedAddressId.state)
+ .state!,
),
),
),
diff --git a/lib/pages_desktop_specific/addresses/sub_widgets/desktop_address_list.dart b/lib/pages_desktop_specific/addresses/sub_widgets/desktop_address_list.dart
index a0a183a..67a3155 100644
--- a/lib/pages_desktop_specific/addresses/sub_widgets/desktop_address_list.dart
+++ b/lib/pages_desktop_specific/addresses/sub_widgets/desktop_address_list.dart
@@ -11,7 +11,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../../models/isar/models/isar_models.dart';
import '../../../pages/receive_view/addresses/address_card.dart';
@@ -87,24 +87,25 @@ class _DesktopAddressListState extends ConsumerState<DesktopAddressList> {
.findAllSync();
}
- final labels = ref
- .read(mainDBProvider)
- .getAddressLabels(widget.walletId)
- .filter()
- .group(
- (q) => q
- .valueContains(term, caseSensitive: false)
- .or()
- .addressStringContains(term, caseSensitive: false)
- .or()
- .group(
- (q) => q
- .tagsIsNotNull()
- .and()
- .tagsElementContains(term, caseSensitive: false),
- ),
- )
- .findAllSync();
+ final labels =
+ ref
+ .read(mainDBProvider)
+ .getAddressLabels(widget.walletId)
+ .filter()
+ .group(
+ (q) => q
+ .valueContains(term, caseSensitive: false)
+ .or()
+ .addressStringContains(term, caseSensitive: false)
+ .or()
+ .group(
+ (q) => q.tagsIsNotNull().and().tagsElementContains(
+ term,
+ caseSensitive: false,
+ ),
+ ),
+ )
+ .findAllSync();
if (labels.isEmpty) {
return [];
@@ -188,14 +189,16 @@ class _DesktopAddressListState extends ConsumerState<DesktopAddressList> {
_searchString = value;
});
},
- style: isDesktop
- ? STextStyles.desktopTextExtraSmall(context).copyWith(
- color: Theme.of(context)
- .extension<StackColors>()!
- .textFieldActiveText,
- height: 1.8,
- )
- : STextStyles.field(context),
+ style:
+ isDesktop
+ ? STextStyles.desktopTextExtraSmall(context).copyWith(
+ color:
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.textFieldActiveText,
+ height: 1.8,
+ )
+ : STextStyles.field(context),
decoration: standardInputDecoration(
"Search...",
searchFieldFocusNode,
@@ -213,58 +216,61 @@ class _DesktopAddressListState extends ConsumerState<DesktopAddressList> {
height: isDesktop ? 20 : 16,
),
),
- suffixIcon: _searchController.text.isNotEmpty
- ? Padding(
- padding: const EdgeInsets.only(right: 0),
- child: UnconstrainedBox(
- child: Row(
- children: [
- TextFieldIconButton(
- child: const XIcon(),
- onTap: () async {
- setState(() {
- _searchController.text = "";
- _searchString = "";
- });
- },
- ),
- ],
+ suffixIcon:
+ _searchController.text.isNotEmpty
+ ? Padding(
+ padding: const EdgeInsets.only(right: 0),
+ child: UnconstrainedBox(
+ child: Row(
+ children: [
+ TextFieldIconButton(
+ child: const XIcon(),
+ onTap: () async {
+ setState(() {
+ _searchController.text = "";
+ _searchString = "";
+ });
+ },
+ ),
+ ],
+ ),
),
- ),
- )
- : null,
+ )
+ : null,
),
),
),
),
),
- const SizedBox(
- height: 20,
- ),
+ const SizedBox(height: 20),
Expanded(
child: RoundedWhiteContainer(
padding: EdgeInsets.zero,
child: ListView.separated(
shrinkWrap: true,
itemCount: ids.length,
- separatorBuilder: (_, __) => Container(
- height: 1,
- color: Theme.of(context)
- .extension<StackColors>()!
- .backgroundAppBar,
- ),
- itemBuilder: (_, index) => Padding(
- padding: const EdgeInsets.all(4),
- child: AddressCard(
- key: Key("addressCardDesktop_key_${ids[index]}"),
- walletId: widget.walletId,
- addressId: ids[index],
- coin: coin,
- onPressed: () {
- ref.read(desktopSelectedAddressId.state).state = ids[index];
- },
- ),
- ),
+ separatorBuilder:
+ (_, __) => Container(
+ height: 1,
+ color:
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.backgroundAppBar,
+ ),
+ itemBuilder:
+ (_, index) => Padding(
+ padding: const EdgeInsets.all(4),
+ child: AddressCard(
+ key: Key("addressCardDesktop_key_${ids[index]}"),
+ walletId: widget.walletId,
+ addressId: ids[index],
+ coin: coin,
+ onPressed: () {
+ ref.read(desktopSelectedAddressId.state).state =
+ ids[index];
+ },
+ ),
+ ),
),
),
),
diff --git a/lib/pages_desktop_specific/coin_control/desktop_coin_control_use_dialog.dart b/lib/pages_desktop_specific/coin_control/desktop_coin_control_use_dialog.dart
index a5e0ba9..d095935 100644
--- a/lib/pages_desktop_specific/coin_control/desktop_coin_control_use_dialog.dart
+++ b/lib/pages_desktop_specific/coin_control/desktop_coin_control_use_dialog.dart
@@ -13,7 +13,7 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../db/isar/main_db.dart';
import '../../models/input.dart';
diff --git a/lib/pages_desktop_specific/coin_control/desktop_coin_control_view.dart b/lib/pages_desktop_specific/coin_control/desktop_coin_control_view.dart
index 653da8a..3489f6c 100644
--- a/lib/pages_desktop_specific/coin_control/desktop_coin_control_view.dart
+++ b/lib/pages_desktop_specific/coin_control/desktop_coin_control_view.dart
@@ -13,7 +13,7 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../db/isar/main_db.dart';
import '../../models/isar/models/blockchain_data/utxo.dart';
@@ -39,10 +39,7 @@ import 'freeze_button.dart';
import 'utxo_row.dart';
class DesktopCoinControlView extends ConsumerStatefulWidget {
- const DesktopCoinControlView({
- super.key,
- required this.walletId,
- });
+ const DesktopCoinControlView({super.key, required this.walletId});
static const String routeName = "/desktopCoinControl";
@@ -114,28 +111,26 @@ class _DesktopCoinControlViewState
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
- const SizedBox(
- width: 32,
- ),
+ const SizedBox(width: 32),
AppBarIconButton(
size: 32,
- color: Theme.of(context)
- .extension<StackColors>()!
- .textFieldDefaultBG,
+ color:
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.textFieldDefaultBG,
shadows: const [],
icon: SvgPicture.asset(
Assets.svg.arrowLeft,
width: 18,
height: 18,
- color: Theme.of(context)
- .extension<StackColors>()!
- .topNavIconPrimary,
+ color:
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.topNavIconPrimary,
),
onPressed: Navigator.of(context).pop,
),
- const SizedBox(
- width: 18,
- ),
+ const SizedBox(width: 18),
SvgPicture.asset(
Assets.svg.coinControl.gamePad,
width: 32,
@@ -143,13 +138,8 @@ class _DesktopCoinControlViewState
color:
Theme.of(context).extension<StackColors>()!.textSubtitle1,
),
- const SizedBox(
- width: 12,
- ),
- Text(
- "Coin control",
- style: STextStyles.desktopH3(context),
- ),
+ const SizedBox(width: 12),
+ Text("Coin control", style: STextStyles.desktopH3(context)),
],
),
),
@@ -177,11 +167,13 @@ class _DesktopCoinControlViewState
_searchString = value;
});
},
- style:
- STextStyles.desktopTextExtraSmall(context).copyWith(
- color: Theme.of(context)
- .extension<StackColors>()!
- .textFieldActiveText,
+ style: STextStyles.desktopTextExtraSmall(
+ context,
+ ).copyWith(
+ color:
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.textFieldActiveText,
height: 1.8,
),
decoration: standardInputDecoration(
@@ -201,33 +193,32 @@ class _DesktopCoinControlViewState
height: 20,
),
),
- suffixIcon: _searchController.text.isNotEmpty
- ? Padding(
- padding: const EdgeInsets.only(right: 0),
- child: UnconstrainedBox(
- child: Row(
- children: [
- TextFieldIconButton(
- child: const XIcon(),
- onTap: () async {
- setState(() {
- _searchController.text = "";
- _searchString = "";
- });
- },
- ),
- ],
+ suffixIcon:
+ _searchController.text.isNotEmpty
+ ? Padding(
+ padding: const EdgeInsets.only(right: 0),
+ child: UnconstrainedBox(
+ child: Row(
+ children: [
+ TextFieldIconButton(
+ child: const XIcon(),
+ onTap: () async {
+ setState(() {
+ _searchController.text = "";
+ _searchString = "";
+ });
+ },
+ ),
+ ],
+ ),
),
- ),
- )
- : null,
+ )
+ : null,
),
),
),
),
- const SizedBox(
- width: 24,
- ),
+ const SizedBox(width: 24),
AnimatedCrossFade(
firstChild: JDropdownButton(
redrawOnScreenSizeChanged: true,
@@ -247,16 +238,13 @@ class _DesktopCoinControlViewState
key: Key("${_selectedUTXOs.length}"),
selectedUTXOs: _selectedUTXOs,
),
- crossFadeState: _selectedUTXOs.isEmpty
- ? CrossFadeState.showFirst
- : CrossFadeState.showSecond,
- duration: const Duration(
- milliseconds: 200,
- ),
- ),
- const SizedBox(
- width: 24,
+ crossFadeState:
+ _selectedUTXOs.isEmpty
+ ? CrossFadeState.showFirst
+ : CrossFadeState.showSecond,
+ duration: const Duration(milliseconds: 200),
),
+ const SizedBox(width: 24),
AnimatedCrossFade(
firstChild: JDropdownButton(
redrawOnScreenSizeChanged: true,
@@ -278,155 +266,152 @@ class _DesktopCoinControlViewState
label: "Clear selection (${_selectedUTXOs.length})",
onPressed: () => setState(() => _selectedUTXOs.clear()),
),
- crossFadeState: _selectedUTXOs.isEmpty
- ? CrossFadeState.showFirst
- : CrossFadeState.showSecond,
- duration: const Duration(
- milliseconds: 200,
- ),
+ crossFadeState:
+ _selectedUTXOs.isEmpty
+ ? CrossFadeState.showFirst
+ : CrossFadeState.showSecond,
+ duration: const Duration(milliseconds: 200),
),
],
),
),
Expanded(
child: Padding(
- padding: const EdgeInsets.symmetric(
- horizontal: 24,
- ),
- child: _list != null
- ? ListView.separated(
- itemCount: _list!.length,
- separatorBuilder: (context, _) => const SizedBox(
- height: 10,
- ),
- itemBuilder: (context, index) {
- final utxo = MainDB.instance.isar.utxos
- .where()
- .idEqualTo(_list![index])
- .findFirstSync()!;
- final data = UtxoRowData(utxo.id, false);
- data.selected = _selectedUTXOs.contains(data);
+ padding: const EdgeInsets.symmetric(horizontal: 24),
+ child:
+ _list != null
+ ? ListView.separated(
+ itemCount: _list!.length,
+ separatorBuilder:
+ (context, _) => const SizedBox(height: 10),
+ itemBuilder: (context, index) {
+ final utxo =
+ MainDB.instance.isar.utxos
+ .where()
+ .idEqualTo(_list![index])
+ .findFirstSync()!;
+ final data = UtxoRowData(utxo.id, false);
+ data.selected = _selectedUTXOs.contains(data);
- return UtxoRow(
- key: Key(
- "${utxo.walletId}_${utxo.id}_${utxo.isBlocked}",
- ),
- data: data,
- walletId: widget.walletId,
- onSelectionChanged: (value) {
- setState(() {
- if (data.selected) {
- _selectedUTXOs.add(value);
+ return UtxoRow(
+ key: Key(
+ "${utxo.walletId}_${utxo.id}_${utxo.isBlocked}",
+ ),
+ data: data,
+ walletId: widget.walletId,
+ onSelectionChanged: (value) {
+ setState(() {
+ if (data.selected) {
+ _selectedUTXOs.add(value);
+ } else {
+ _selectedUTXOs.remove(value);
+ }
+ });
+ },
+ );
+ },
+ )
+ : ListView.separated(
+ itemCount: _map!.entries.length,
+ separatorBuilder:
+ (context, _) => const SizedBox(height: 10),
+ itemBuilder: (context, index) {
+ final entry = _map!.entries.elementAt(index);
+ final _controller = RotateIconController();
+
+ return Expandable2(
+ border:
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.backgroundAppBar,
+ background:
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.popupBG,
+ animationDurationMultiplier:
+ 0.2 * entry.value.length,
+ onExpandWillChange: (state) {
+ if (state == Expandable2State.expanded) {
+ _controller.forward?.call();
} else {
- _selectedUTXOs.remove(value);
+ _controller.reverse?.call();
}
- });
- },
- );
- },
- )
- : ListView.separated(
- itemCount: _map!.entries.length,
- separatorBuilder: (context, _) => const SizedBox(
- height: 10,
- ),
- itemBuilder: (context, index) {
- final entry = _map!.entries.elementAt(index);
- final _controller = RotateIconController();
-
- return Expandable2(
- border: Theme.of(context)
- .extension<StackColors>()!
- .backgroundAppBar,
- background: Theme.of(context)
- .extension<StackColors>()!
- .popupBG,
- animationDurationMultiplier: 0.2 * entry.value.length,
- onExpandWillChange: (state) {
- if (state == Expandable2State.expanded) {
- _controller.forward?.call();
- } else {
- _controller.reverse?.call();
- }
- },
- header: RoundedContainer(
- padding: const EdgeInsets.all(20),
- color: Colors.transparent,
- child: Row(
- children: [
- SvgPicture.file(
- File(
- ref.watch(coinIconProvider(coin)),
+ },
+ header: RoundedContainer(
+ padding: const EdgeInsets.all(20),
+ color: Colors.transparent,
+ child: Row(
+ children: [
+ SvgPicture.file(
+ File(ref.watch(coinIconProvider(coin))),
+ width: 24,
+ height: 24,
),
- width: 24,
- height: 24,
- ),
- const SizedBox(
- width: 12,
- ),
- Expanded(
- child: Text(
- entry.key,
- style: STextStyles.w600_14(context),
+ const SizedBox(width: 12),
+ Expanded(
+ child: Text(
+ entry.key,
+ style: STextStyles.w600_14(context),
+ ),
),
- ),
- Expanded(
- child: Text(
- "${entry.value.length} "
- "output${entry.value.length > 1 ? "s" : ""}",
- style:
- STextStyles.desktopTextExtraExtraSmall(
- context,
+ Expanded(
+ child: Text(
+ "${entry.value.length} "
+ "output${entry.value.length > 1 ? "s" : ""}",
+ style:
+ STextStyles.desktopTextExtraExtraSmall(
+ context,
+ ),
),
),
- ),
- RotateIcon(
- animationDurationMultiplier:
- 0.2 * entry.value.length,
- icon: SvgPicture.asset(
- Assets.svg.chevronDown,
- width: 14,
- color: Theme.of(context)
- .extension<StackColors>()!
- .textSubtitle1,
+ RotateIcon(
+ animationDurationMultiplier:
+ 0.2 * entry.value.length,
+ icon: SvgPicture.asset(
+ Assets.svg.chevronDown,
+ width: 14,
+ color:
+ Theme.of(context)
+ .extension<StackColors>()!
+ .textSubtitle1,
+ ),
+ curve: Curves.easeInOut,
+ controller: _controller,
),
- curve: Curves.easeInOut,
- controller: _controller,
- ),
- ],
+ ],
+ ),
),
- ),
- children: entry.value.map(
- (id) {
- final utxo = MainDB.instance.isar.utxos
- .where()
- .idEqualTo(id)
- .findFirstSync()!;
- final data = UtxoRowData(utxo.id, false);
- data.selected = _selectedUTXOs.contains(data);
+ children:
+ entry.value.map((id) {
+ final utxo =
+ MainDB.instance.isar.utxos
+ .where()
+ .idEqualTo(id)
+ .findFirstSync()!;
+ final data = UtxoRowData(utxo.id, false);
+ data.selected = _selectedUTXOs.contains(data);
- return UtxoRow(
- key: Key(
- "${utxo.walletId}_${utxo.id}_${utxo.isBlocked}",
- ),
- data: data,
- walletId: widget.walletId,
- raiseOnSelected: false,
- onSelectionChanged: (value) {
- setState(() {
- if (data.selected) {
- _selectedUTXOs.add(value);
- } else {
- _selectedUTXOs.remove(value);
- }
- });
- },
- );
- },
- ).toList(),
- );
- },
- ),
+ return UtxoRow(
+ key: Key(
+ "${utxo.walletId}_${utxo.id}_${utxo.isBlocked}",
+ ),
+ data: data,
+ walletId: widget.walletId,
+ raiseOnSelected: false,
+ onSelectionChanged: (value) {
+ setState(() {
+ if (data.selected) {
+ _selectedUTXOs.add(value);
+ } else {
+ _selectedUTXOs.remove(value);
+ }
+ });
+ },
+ );
+ }).toList(),
+ );
+ },
+ ),
),
),
],
diff --git a/lib/pages_desktop_specific/coin_control/freeze_button.dart b/lib/pages_desktop_specific/coin_control/freeze_button.dart
index b012b01..d78df68 100644
--- a/lib/pages_desktop_specific/coin_control/freeze_button.dart
+++ b/lib/pages_desktop_specific/coin_control/freeze_button.dart
@@ -10,7 +10,7 @@
import 'package:async/async.dart';
import 'package:flutter/material.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../db/isar/main_db.dart';
import '../../models/isar/models/blockchain_data/utxo.dart';
@@ -19,10 +19,7 @@ import '../../widgets/desktop/primary_button.dart';
import 'utxo_row.dart';
class FreezeButton extends StatefulWidget {
- const FreezeButton({
- super.key,
- required this.selectedUTXOs,
- });
+ const FreezeButton({super.key, required this.selectedUTXOs});
final Set<UtxoRowData> selectedUTXOs;
@@ -56,10 +53,11 @@ class _FreezeButtonState extends State<FreezeButton> {
switch (_freezeLabelCache) {
case "Freeze":
for (final e in widget.selectedUTXOs) {
- final utxo = MainDB.instance.isar.utxos
- .where()
- .idEqualTo(e.utxoId)
- .findFirstSync()!;
+ final utxo =
+ MainDB.instance.isar.utxos
+ .where()
+ .idEqualTo(e.utxoId)
+ .findFirstSync()!;
if (!utxo.isBlocked) {
utxosToUpdate.add(utxo.copyWith(isBlocked: true));
}
@@ -68,10 +66,11 @@ class _FreezeButtonState extends State<FreezeButton> {
case "Unfreeze":
for (final e in widget.selectedUTXOs) {
- final utxo = MainDB.instance.isar.utxos
- .where()
- .idEqualTo(e.utxoId)
- .findFirstSync()!;
+ final utxo =
+ MainDB.instance.isar.utxos
+ .where()
+ .idEqualTo(e.utxoId)
+ .findFirstSync()!;
if (utxo.isBlocked) {
utxosToUpdate.add(utxo.copyWith(isBlocked: false));
}
diff --git a/lib/pages_desktop_specific/coin_control/utxo_row.dart b/lib/pages_desktop_specific/coin_control/utxo_row.dart
index 548e2c0..e27d970 100644
--- a/lib/pages_desktop_specific/coin_control/utxo_row.dart
+++ b/lib/pages_desktop_specific/coin_control/utxo_row.dart
@@ -10,7 +10,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../db/isar/main_db.dart';
import '../../models/isar/models/isar_models.dart';
@@ -78,19 +78,19 @@ class _UtxoRowState extends ConsumerState<UtxoRow> {
void _details() async {
await showDialog<String?>(
context: context,
- builder: (context) => UtxoDetailsView(
- utxoId: utxo.id,
- walletId: widget.walletId,
- ),
+ builder:
+ (context) =>
+ UtxoDetailsView(utxoId: utxo.id, walletId: widget.walletId),
);
}
@override
void initState() {
- utxo = MainDB.instance.isar.utxos
- .where()
- .idEqualTo(widget.data.utxoId)
- .findFirstSync()!;
+ utxo =
+ MainDB.instance.isar.utxos
+ .where()
+ .idEqualTo(widget.data.utxoId)
+ .findFirstSync()!;
stream = MainDB.instance.watchUTXO(id: utxo.id);
super.initState();
@@ -110,15 +110,21 @@ class _UtxoRowState extends ConsumerState<UtxoRow> {
}
return RoundedContainer(
- borderColor: widget.compact && widget.compactWithBorder
- ? Theme.of(context).extension<StackColors>()!.textFieldDefaultBG
- : null,
+ borderColor:
+ widget.compact && widget.compactWithBorder
+ ? Theme.of(
+ context,
+ ).extension<StackColors>()!.textFieldDefaultBG
+ : null,
color: Theme.of(context).extension<StackColors>()!.popupBG,
- boxShadow: widget.data.selected && widget.raiseOnSelected
- ? [
- Theme.of(context).extension<StackColors>()!.standardBoxShadow,
- ]
- : null,
+ boxShadow:
+ widget.data.selected && widget.raiseOnSelected
+ ? [
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.standardBoxShadow,
+ ]
+ : null,
child: Row(
children: [
if (!(widget.compact && utxo.isBlocked))
@@ -132,36 +138,37 @@ class _UtxoRowState extends ConsumerState<UtxoRow> {
},
),
if (!(widget.compact && utxo.isBlocked))
- const SizedBox(
- width: 10,
- ),
+ const SizedBox(width: 10),
UTXOStatusIcon(
blocked: utxo.isBlocked,
- status: (coin is Namecoin
- ? (ref.watch(pWallets).getWallet(widget.walletId)
- as NamecoinWallet)
- .checkUtxoConfirmed(
- utxo,
- ref.watch(pWalletChainHeight(widget.walletId)),
- )
- : utxo.isConfirmed(
- ref.watch(pWalletChainHeight(widget.walletId)),
- coin.minConfirms,
- coin.minCoinbaseConfirms,
- ))
- ? UTXOStatusIconStatus.confirmed
- : UTXOStatusIconStatus.unconfirmed,
+ status:
+ (coin is Namecoin
+ ? (ref.watch(pWallets).getWallet(widget.walletId)
+ as NamecoinWallet)
+ .checkUtxoConfirmed(
+ utxo,
+ ref.watch(
+ pWalletChainHeight(widget.walletId),
+ ),
+ )
+ : utxo.isConfirmed(
+ ref.watch(pWalletChainHeight(widget.walletId)),
+ coin.minConfirms,
+ coin.minCoinbaseConfirms,
+ ))
+ ? UTXOStatusIconStatus.confirmed
+ : UTXOStatusIconStatus.unconfirmed,
background: Theme.of(context).extension<StackColors>()!.popupBG,
selected: false,
width: 32,
height: 32,
),
- const SizedBox(
- width: 10,
- ),
+ const SizedBox(width: 10),
if (!widget.compact)
Text(
- ref.watch(pAmountFormatter(coin)).format(
+ ref
+ .watch(pAmountFormatter(coin))
+ .format(
Amount(
rawValue: BigInt.from(utxo.value),
fractionDigits: coin.fractionDigits,
@@ -170,10 +177,7 @@ class _UtxoRowState extends ConsumerState<UtxoRow> {
textAlign: TextAlign.right,
style: STextStyles.w600_14(context),
),
- if (!widget.compact)
- const SizedBox(
- width: 10,
- ),
+ if (!widget.compact) const SizedBox(width: 10),
Expanded(
child: ConditionalParent(
condition: widget.compact,
@@ -183,7 +187,9 @@ class _UtxoRowState extends ConsumerState<UtxoRow> {
mainAxisSize: MainAxisSize.min,
children: [
Text(
- ref.watch(pAmountFormatter(coin)).format(
+ ref
+ .watch(pAmountFormatter(coin))
+ .format(
Amount(
rawValue: BigInt.from(utxo.value),
fractionDigits: coin.fractionDigits,
@@ -192,9 +198,7 @@ class _UtxoRowState extends ConsumerState<UtxoRow> {
textAlign: TextAlign.right,
style: STextStyles.w600_14(context),
),
- const SizedBox(
- height: 2,
- ),
+ const SizedBox(height: 2),
child,
],
);
@@ -206,27 +210,23 @@ class _UtxoRowState extends ConsumerState<UtxoRow> {
textAlign:
widget.compact ? TextAlign.left : TextAlign.center,
style: STextStyles.w500_12(context).copyWith(
- color: Theme.of(context)
- .extension<StackColors>()!
- .textSubtitle1,
+ color:
+ Theme.of(
+ context,
+ ).extension<StackColors>()!.textSubtitle1,
),
),
),
),
- const SizedBox(
- width: 10,
- ),
+ const SizedBox(width: 10),
widget.compact
- ? CustomTextButton(
- text: "Details",
- onTap: _details,
- )
+ ? CustomTextButton(text: "Details", onTap: _details)
: SecondaryButton(
- width: 120,
- buttonHeight: ButtonHeight.xs,
- label: "Details",
- onPressed: _details,
- ),
+ width: 120,
+ buttonHeight: ButtonHeight.xs,
+ label: "Details",
+ onPressed: _details,
+ ),
],
),
);
diff --git a/lib/pages_desktop_specific/desktop_exchange/desktop_all_trades_view.dart b/lib/pages_desktop_specific/desktop_exchange/desktop_all_trades_view.dart
index d2a053d..61d763b 100644
--- a/lib/pages_desktop_specific/desktop_exchange/desktop_all_trades_view.dart
+++ b/lib/pages_desktop_specific/desktop_exchange/desktop_all_trades_view.dart
@@ -15,7 +15,7 @@ import 'package:decimal/decimal.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import 'package:tuple/tuple.dart';
import '../../db/isar/main_db.dart';
diff --git a/lib/pages_desktop_specific/desktop_exchange/subwidgets/desktop_trade_history.dart b/lib/pages_desktop_specific/desktop_exchange/subwidgets/desktop_trade_history.dart
index d589e21..0821d24 100644
--- a/lib/pages_desktop_specific/desktop_exchange/subwidgets/desktop_trade_history.dart
+++ b/lib/pages_desktop_specific/desktop_exchange/subwidgets/desktop_trade_history.dart
@@ -12,7 +12,7 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../../db/isar/main_db.dart';
import '../../../models/isar/models/blockchain_data/transaction.dart';
@@ -40,30 +40,23 @@ class DesktopTradeHistory extends ConsumerStatefulWidget {
class _DesktopTradeHistoryState extends ConsumerState<DesktopTradeHistory> {
BorderRadius get _borderRadiusFirst {
return BorderRadius.only(
- topLeft: Radius.circular(
- Constants.size.circularBorderRadius,
- ),
- topRight: Radius.circular(
- Constants.size.circularBorderRadius,
- ),
+ topLeft: Radius.circular(Constants.size.circularBorderRadius),
+ topRight: Radius.circular(Constants.size.circularBorderRadius),
);
}
BorderRadius get _borderRadiusLast {
return BorderRadius.only(
- bottomLeft: Radius.circular(
- Constants.size.circularBorderRadius,
- ),
- bottomRight: Radius.circular(
- Constants.size.circularBorderRadius,
- ),
+ bottomLeft: Radius.circular(Constants.size.circularBorderRadius),
+ bottomRight: Radius.circular(Constants.size.circularBorderRadius),
);
}
@override
Widget build(BuildContext context) {
- final trades =
- ref.watch(tradesServiceProvider.select((value) => value.trades));
+ final trades = ref.watch(
+ tradesServiceProvider.select((value) => value.trades),
+ );
final tradeCount = trades.length;
final hasHistory = tradeCount > 0;
@@ -120,144 +113,150 @@ class _DesktopTradeHistoryState extends ConsumerState<DesktopTradeHistory> {
//todo: check if print needed
// debugPrint("name: ${manager.walletName}");
- final tx = await MainDB.instance
- .getTransactions(walletIds.first)
- .filter()
- .txidEqualTo(txid)
- .findFirst();
+ final tx =
+ await MainDB.instance
+ .getTransactions(walletIds.first)
+ .filter()
+ .txidEqualTo(txid)
+ .findFirst();
if (mounted) {
await showDialog<void>(
context: context,
- builder: (context) => Navigator(
- initialRoute: TradeDetailsView.routeName,
- onGenerateRoute: RouteGenerator.generateRoute,
- onGenerateInitialRoutes: (_, __) {
- return [
- FadePageRoute(
- DesktopDialog(
- maxHeight: null,
- maxWidth: 580,
- child: Column(
- mainAxisSize: MainAxisSize.min,
- children: [
- Padding(
- padding: const EdgeInsets.only(
- left: 32,
- bottom: 16,
- ),
- child: Row(
- mainAxisAlignment:
- MainAxisAlignment
- .spaceBetween,
- children: [
- Text(
- "Trade details",
- style: STextStyles.desktopH3(
- context,
- ),
+ builder:
+ (context) => Navigator(
+ initialRoute: TradeDetailsView.routeName,
+ onGenerateRoute: RouteGenerator.generateRoute,
+ onGenerateInitialRoutes: (_, __) {
+ return [
+ FadePageRoute(
+ DesktopDialog(
+ maxHeight: null,
+ maxWidth: 580,
+ child: Column(
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ Padding(
+ padding: const EdgeInsets.only(
+ left: 32,
+ bottom: 16,
),
- DesktopDialogCloseButton(
- onPressedOverride:
- Navigator.of(
- context,
- rootNavigator: true,
- ).pop,
+ child: Row(
+ mainAxisAlignment:
+ MainAxisAlignment
+ .spaceBetween,
+ children: [
+ Text(
+ "Trade details",
+ style:
+ STextStyles.desktopH3(
+ context,
+ ),
+ ),
+ DesktopDialogCloseButton(
+ onPressedOverride:
+ Navigator.of(
+ context,
+ rootNavigator: true,
+ ).pop,
+ ),
+ ],
),
- ],
- ),
- ),
- Flexible(
- child: SingleChildScrollView(
- primary: false,
- child: TradeDetailsView(
- tradeId: tradeId,
- transactionIfSentFromStack: tx,
- walletName: ref.read(
- pWalletName(
- walletIds.first,
+ ),
+ Flexible(
+ child: SingleChildScrollView(
+ primary: false,
+ child: TradeDetailsView(
+ tradeId: tradeId,
+ transactionIfSentFromStack:
+ tx,
+ walletName: ref.read(
+ pWalletName(
+ walletIds.first,
+ ),
+ ),
+ walletId: walletIds.first,
),
),
- walletId: walletIds.first,
),
- ),
+ ],
),
- ],
+ ),
+ const RouteSettings(
+ name: TradeDetailsView.routeName,
+ ),
),
- ),
- const RouteSettings(
- name: TradeDetailsView.routeName,
- ),
- ),
- ];
- },
- ),
+ ];
+ },
+ ),
);
}
} else {
unawaited(
showDialog<void>(
context: context,
- builder: (context) => Navigator(
- initialRoute: TradeDetailsView.routeName,
- onGenerateRoute: RouteGenerator.generateRoute,
- onGenerateInitialRoutes: (_, __) {
- return [
- FadePageRoute(
- DesktopDialog(
- maxHeight: null,
- maxWidth: 580,
- child: Column(
- mainAxisSize: MainAxisSize.min,
- children: [
- Padding(
- padding: const EdgeInsets.only(
- left: 32,
- bottom: 16,
- ),
- child: Row(
- mainAxisAlignment:
- MainAxisAlignment
- .spaceBetween,
- children: [
- Text(
- "Trade details",
- style: STextStyles.desktopH3(
- context,
- ),
+ builder:
+ (context) => Navigator(
+ initialRoute: TradeDetailsView.routeName,
+ onGenerateRoute: RouteGenerator.generateRoute,
+ onGenerateInitialRoutes: (_, __) {
+ return [
+ FadePageRoute(
+ DesktopDialog(
+ maxHeight: null,
+ maxWidth: 580,
+ child: Column(
+ mainAxisSize: MainAxisSize.min,
+ children: [
+ Padding(
+ padding: const EdgeInsets.only(
+ left: 32,
+ bottom: 16,
),
- DesktopDialogCloseButton(
- onPressedOverride:
- Navigator.of(
- context,
- rootNavigator: true,
- ).pop,
+ child: Row(
+ mainAxisAlignment:
+ MainAxisAlignment
+ .spaceBetween,
+ children: [
+ Text(
+ "Trade details",
+ style:
+ STextStyles.desktopH3(
+ context,
+ ),
+ ),
+ DesktopDialogCloseButton(
+ onPressedOverride:
+ Navigator.of(
+ context,
+ rootNavigator: true,
+ ).pop,
+ ),
+ ],
+ ),
+ ),
+ Flexible(
+ child: SingleChildScrollView(
+ primary: false,
+ child: TradeDetailsView(
+ tradeId: tradeId,
+ transactionIfSentFromStack:
+ null,
+ walletName: null,
+ walletId: walletIds?.first,
+ ),
),
- ],
- ),
- ),
- Flexible(
- child: SingleChildScrollView(
- primary: false,
- child: TradeDetailsView(
- tradeId: tradeId,
- transactionIfSentFromStack:
- null,
- walletName: null,
- walletId: walletIds?.first,
),
- ),
+ ],
),
- ],
+ ),
+ const RouteSettings(
+ name: TradeDetailsView.routeName,
+ ),
),
- ),
- const RouteSettings(
- name: TradeDetailsView.routeName,
- ),
- ),
- ];
- },
- ),
+ ];
+ },
+ ),
),
);
}
diff --git a/lib/pages_desktop_specific/my_stack_view/wallet_view/desktop_wallet_view.dart b/lib/pages_desktop_specific/my_stack_view/wallet_view/desktop_wallet_view.dart
index 96363f1..39e4ad6 100644
--- a/lib/pages_desktop_specific/my_stack_view/wallet_view/desktop_wallet_view.dart
+++ b/lib/pages_desktop_specific/my_stack_view/wallet_view/desktop_wallet_view.dart
@@ -16,7 +16,7 @@ import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../../db/sqlite/firo_cache.dart';
import '../../../models/isar/models/blockchain_data/v2/transaction_v2.dart';
diff --git a/lib/pages_desktop_specific/my_stack_view/wallet_view/sub_widgets/desktop_receive.dart b/lib/pages_desktop_specific/my_stack_view/wallet_view/sub_widgets/desktop_receive.dart
index f926cce..27d9f75 100644
--- a/lib/pages_desktop_specific/my_stack_view/wallet_view/sub_widgets/desktop_receive.dart
+++ b/lib/pages_desktop_specific/my_stack_view/wallet_view/sub_widgets/desktop_receive.dart
@@ -15,7 +15,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/flutter_svg.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import 'package:tuple/tuple.dart';
import '../../../../models/isar/models/isar_models.dart';
diff --git a/lib/pages_desktop_specific/password/delete_password_warning_view.dart b/lib/pages_desktop_specific/password/delete_password_warning_view.dart
index 1699262..984784f 100644
--- a/lib/pages_desktop_specific/password/delete_password_warning_view.dart
+++ b/lib/pages_desktop_specific/password/delete_password_warning_view.dart
@@ -13,7 +13,7 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../app_config.dart';
import '../../db/hive/db.dart';
@@ -30,10 +30,7 @@ import '../../widgets/desktop/primary_button.dart';
import '../../widgets/desktop/secondary_button.dart';
class DeletePasswordWarningView extends ConsumerStatefulWidget {
- const DeletePasswordWarningView({
- super.key,
- required this.shouldCreateNew,
- });
+ const DeletePasswordWarningView({super.key, required this.shouldCreateNew});
static const String routeName = "/deletePasswordWarning";
@@ -63,16 +60,18 @@ class _ForgotPasswordDesktopViewState
await epicDir.delete(recursive: true);
}
- final mimblewimblecoinDir =
- Directory("${appRoot.path}/mimblewimblecoin");
+ final mimblewimblecoinDir = Directory(
+ "${appRoot.path}/mimblewimblecoin",
+ );
if (mimblewimblecoinDir.existsSync()) {
await mimblewimblecoinDir.delete(recursive: true);
}
await Isar.getInstance("desktopStore")?.close(deleteFromDisk: true);
- await (await StackFileSystem.applicationHiveDirectory())
- .delete(recursive: true);
+ await (await StackFileSystem.applicationHiveDirectory()).delete(
+ recursive: true,
+ );
} else if (Platform.isLinux) {
await appRoot.delete(recursive: true);
} else {
@@ -85,21 +84,24 @@ class _ForgotPasswordDesktopViewState
if (epicDir.existsSync()) {
await epicDir.delete(recursive: true);
}
- final mimblewimblecoinDir =
- Directory("${appRoot.path}/mimblewimblecoin");
+ final mimblewimblecoinDir = Directory(
+ "${appRoot.path}/mimblewimblecoin",
+ );
if (mimblewimblecoinDir.existsSync()) {
await mimblewimblecoinDir.delete(recursive: true);
}
- await (await StackFileSystem.applicationHiveDirectory())
- .delete(recursive: true);
- await (await StackFileSystem.applicationIsarDirectory())
- .delete(recursive: true);
+ await (await StackFileSystem.applicationHiveDirectory()).delete(
+ recursive: true,
+ );
+ await (await StackFileSystem.applicationIsarDirectory()).delete(
+ recursive: true,
+ );
}
await DB.instance.init();
} catch (e, s) {
- Logging.instance.f("$e\n$s", error: e, stackTrace: s,);
+ Logging.instance.f("$e\n$s", error: e, stackTrace: s);
return false;
}
@@ -128,19 +130,10 @@ class _ForgotPasswordDesktopViewState
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
- const AppIcon(
- width: 100,
- ),
- const SizedBox(
- height: 42,
- ),
- Text(
- "Warning!",
- style: STextStyles.desktopH1(context),
- ),
- const SizedBox(
- height: 24,
- ),
+ const AppIcon(width: 100),
+ const SizedBox(height: 42),
+ Text("Warning!", style: STextStyles.desktopH1(context)),
+ const SizedBox(height: 24),
SizedBox(
width: 480,
child: RichText(
@@ -152,9 +145,10 @@ class _ForgotPasswordDesktopViewState
style: STextStyles.desktopTextSmall(context),
),
TextSpan(
- text: widget.shouldCreateNew
- ? "create a new ${AppConfig.prefix}"
- : "restore from backup",
+ text:
+ widget.shouldCreateNew
+ ? "create a new ${AppConfig.prefix}"
+ : "restore from backup",
style: STextStyles.desktopTextSmallBold(context),
),
TextSpan(
@@ -174,9 +168,7 @@ class _ForgotPasswordDesktopViewState
),
),
),
- const SizedBox(
- height: 48,
- ),
+ const SizedBox(height: 48),
PrimaryButton(
label: "Delete and continue",
enabled: !_deleteInProgress,
@@ -223,9 +215,7 @@ class _ForgotPasswordDesktopViewState
}
},
),
- const SizedBox(
- height: 24,
- ),
+ const SizedBox(height: 24),
SecondaryButton(
label: "Take me back!",
enabled: !_deleteInProgress,
@@ -233,9 +223,7 @@ class _ForgotPasswordDesktopViewState
Navigator.of(context).pop();
},
),
- const SizedBox(
- height: kDesktopAppBarHeight,
- ),
+ const SizedBox(height: kDesktopAppBarHeight),
],
),
),
diff --git a/lib/providers/wallet/transaction_note_provider.dart b/lib/providers/wallet/transaction_note_provider.dart
index 050dfe8..9069c69 100644
--- a/lib/providers/wallet/transaction_note_provider.dart
+++ b/lib/providers/wallet/transaction_note_provider.dart
@@ -12,7 +12,8 @@ import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
+
import '../../models/isar/models/transaction_note.dart';
import '../db/main_db_provider.dart';
@@ -30,13 +31,13 @@ class _TransactionNoteWatcher extends ChangeNotifier {
.txidWalletIdEqualTo(key.txid, key.walletId)
.watch(fireImmediately: true)
.listen((event) {
- if (event.isEmpty) {
- _value = null;
- } else {
- _value = event.first;
- }
- notifyListeners();
- });
+ if (event.isEmpty) {
+ _value = null;
+ } else {
+ _value = event.first;
+ }
+ notifyListeners();
+ });
}
@override
@@ -46,29 +47,30 @@ class _TransactionNoteWatcher extends ChangeNotifier {
}
}
-final _wiProvider = ChangeNotifierProvider.family<_TransactionNoteWatcher,
- ({String walletId, String txid})>(
- (ref, key) {
- final isar = ref.watch(mainDBProvider).isar;
+final _wiProvider = ChangeNotifierProvider.family<
+ _TransactionNoteWatcher,
+ ({String walletId, String txid})
+>((ref, key) {
+ final isar = ref.watch(mainDBProvider).isar;
- final watcher = _TransactionNoteWatcher(
- isar.transactionNotes
- .where()
- .txidWalletIdEqualTo(key.txid, key.walletId)
- .findFirstSync(),
- key,
- isar,
- );
+ final watcher = _TransactionNoteWatcher(
+ isar.transactionNotes
+ .where()
+ .txidWalletIdEqualTo(key.txid, key.walletId)
+ .findFirstSync(),
+ key,
+ isar,
+ );
- ref.onDispose(() => watcher.dispose());
+ ref.onDispose(() => watcher.dispose());
- return watcher;
- },
-);
+ return watcher;
+});
final pTransactionNote =
- Provider.family<TransactionNote?, ({String walletId, String txid})>(
- (ref, key) {
- return ref.watch(_wiProvider(key).select((value) => value.value));
- },
-);
+ Provider.family<TransactionNote?, ({String walletId, String txid})>((
+ ref,
+ key,
+ ) {
+ return ref.watch(_wiProvider(key).select((value) => value.value));
+ });
diff --git a/lib/route_generator.dart b/lib/route_generator.dart
index 064e54d..79c7ec4 100644
--- a/lib/route_generator.dart
+++ b/lib/route_generator.dart
@@ -10,7 +10,7 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import 'package:tuple/tuple.dart';
import 'db/drift/database.dart';
diff --git a/lib/services/ethereum/cached_eth_token_balance.dart b/lib/services/ethereum/cached_eth_token_balance.dart
index ce6efe1..f21a0ee 100644
--- a/lib/services/ethereum/cached_eth_token_balance.dart
+++ b/lib/services/ethereum/cached_eth_token_balance.dart
@@ -8,7 +8,7 @@
*
*/
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../../db/isar/main_db.dart';
import '../../models/balance.dart';
@@ -33,10 +33,11 @@ class CachedEthTokenBalance {
contractAddress: token.address,
);
- final info = await mainDB.isar.tokenWalletInfo
- .where()
- .walletIdTokenAddressEqualTo(walletId, token.address)
- .findFirst();
+ final info =
+ await mainDB.isar.tokenWalletInfo
+ .where()
+ .walletIdTokenAddressEqualTo(walletId, token.address)
+ .findFirst();
if (response.value != null && info != null) {
await info.updateCachedBalance(
diff --git a/lib/services/exchange/exchange_data_loading_service.dart b/lib/services/exchange/exchange_data_loading_service.dart
index 35a1677..1bf1650 100644
--- a/lib/services/exchange/exchange_data_loading_service.dart
+++ b/lib/services/exchange/exchange_data_loading_service.dart
@@ -11,7 +11,7 @@
import 'dart:async';
import 'package:flutter/foundation.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import 'package:tuple/tuple.dart';
import '../../app_config.dart';
diff --git a/lib/services/price_service.dart b/lib/services/price_service.dart
index 43eb68e..51fa4fa 100644
--- a/lib/services/price_service.dart
+++ b/lib/services/price_service.dart
@@ -12,7 +12,7 @@ import 'dart:async';
import 'package:decimal/decimal.dart';
import 'package:flutter/foundation.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../db/isar/main_db.dart';
import '../models/isar/models/isar_models.dart';
diff --git a/lib/services/wallets.dart b/lib/services/wallets.dart
index 0f478d6..ffdfbdc 100644
--- a/lib/services/wallets.dart
+++ b/lib/services/wallets.dart
@@ -12,7 +12,7 @@ import 'dart:async';
import 'dart:io';
import 'package:compat/compat.dart' as lib_monero_compat;
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../app_config.dart';
import '../db/hive/db.dart';
diff --git a/lib/themes/theme_service.dart b/lib/themes/theme_service.dart
index 3479f7e..47d25a0 100644
--- a/lib/themes/theme_service.dart
+++ b/lib/themes/theme_service.dart
@@ -15,7 +15,7 @@ import 'package:archive/archive_io.dart';
import 'package:crypto/crypto.dart';
import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import '../app_config.dart';
import '../db/isar/main_db.dart';
diff --git a/lib/utilities/flutter_secure_storage_interface.dart b/lib/utilities/flutter_secure_storage_interface.dart
index 1c81119..10f5055 100644
--- a/lib/utilities/flutter_secure_storage_interface.dart
+++ b/lib/utilities/flutter_secure_storage_interface.dart
@@ -9,7 +9,7 @@
*/
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
-import 'package:isar/isar.dart';
+import 'package:isar_community/isar.dart';
import 'package:stack_wallet_backup/secure_storage.dart';
import '../models/isar/models/encrypted_string_value.dart';
@@ -81,9 +81,7 @@ class DesktopSecureStore {
await isar.close();
}
- Future<String?> read({
- required String key,
- }) async {
+ Future<String?> read({required String key}) async {
final value =
await isar.encryptedStringValues.filter().keyEqualTo(key).findFirst();
@@ -95,10 +93,7 @@ class DesktopSecureStore {
return await handler.decryptValue(key, value.value);
}
- Future<void> write({
- required String key,
- required String? value,
- }) async {
+ Future<void> write({required String key, required String? value}) async {
if (value == null) {
// here we assume that a value is to be deleted
await isar.writeTxn(() async {
@@ -117,9 +112,7 @@ class DesktopSecureStore {
}
}
- Future<void> delete({
- required String key,
- }) async {
+ Future<void> delete({required String key}) async {
await isar.writeTxn(() async {
awaitWhy this scored 25/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.