Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart';

import '../../app_config.dart';
import '../../models/isar/models/blockchain_data/address.dart';
import '../../models/isar/models/contact_entry.dart';
import '../../pages/address_book_views/subviews/add_address_book_entry_view.dart';
import '../../pages/address_book_views/subviews/address_book_filter_view.dart';
import '../../providers/global/address_book_service_provider.dart';
Expand All @@ -26,7 +24,6 @@ import '../../utilities/constants.dart';
import '../../utilities/text_styles.dart';
import '../../utilities/util.dart';
import '../../wallets/crypto_currency/crypto_currency.dart';
import '../../wallets/wallet/wallet_mixin_interfaces/spark_interface.dart';
import '../../widgets/address_book_card.dart';
import '../../widgets/desktop/desktop_app_bar.dart';
import '../../widgets/desktop/desktop_dialog.dart';
Expand Down Expand Up @@ -119,35 +116,9 @@ class _DesktopAddressBook extends ConsumerState<DesktopAddressBook> {
// }

WidgetsBinding.instance.addPostFrameCallback((_) async {
final List<ContactAddressEntry> addresses = [];
final wallets = ref.read(pWallets).wallets;
for (final wallet in wallets) {
final String addressString;
if (wallet is SparkInterface &&
!(wallet.isViewOnly && wallet.viewOnlyType != .spark)) {
Address? address = await wallet.getCurrentReceivingSparkAddress();
address ??= await wallet.generateNextSparkAddress(saveToDB: true);
addressString = address.value;
} else {
final address = await wallet.getCurrentReceivingAddress();
addressString = address?.value ?? wallet.info.cachedReceivingAddress;
}

addresses.add(
ContactAddressEntry()
..coinName = wallet.info.coin.identifier
..address = addressString
..label = "Current Receiving"
..other = wallet.info.name,
);
}
final self = ContactEntry(
name: "My ${AppConfig.prefix}",
addresses: addresses,
isFavorite: true,
customId: "default",
);
await ref.read(addressBookServiceProvider).editContact(self);
await ref
.read(addressBookServiceProvider)
.updateMyStackContact(ref.read(pWallets).wallets);
});

super.initState();
Expand Down Expand Up @@ -286,9 +257,9 @@ class _DesktopAddressBook extends ConsumerState<DesktopAddressBook> {
buttonHeight: ButtonHeight.l,
icon: SvgPicture.asset(
Assets.svg.filter,
color: Theme.of(
context,
).extension<StackColors>()!.buttonTextSecondary,
color: Theme.of(context)
.extension<StackColors>()!
.buttonTextSecondary,
),
onPressed: selectCryptocurrency,
),
Expand All @@ -299,9 +270,9 @@ class _DesktopAddressBook extends ConsumerState<DesktopAddressBook> {
buttonHeight: ButtonHeight.l,
icon: SvgPicture.asset(
Assets.svg.circlePlus,
color: Theme.of(
context,
).extension<StackColors>()!.buttonTextPrimary,
color: Theme.of(context)
.extension<StackColors>()!
.buttonTextPrimary,
),
onPressed: newContact,
),
Expand Down Expand Up @@ -343,9 +314,9 @@ class _DesktopAddressBook extends ConsumerState<DesktopAddressBook> {
children: [
if (i > 0)
Container(
color: Theme.of(
context,
).extension<StackColors>()!.background,
color: Theme.of(context)
.extension<StackColors>()!
.background,
height: 1,
),
Padding(
Expand Down Expand Up @@ -414,9 +385,9 @@ class _DesktopAddressBook extends ConsumerState<DesktopAddressBook> {
children: [
if (i > 0)
Container(
color: Theme.of(
context,
).extension<StackColors>()!.background,
color: Theme.of(context)
.extension<StackColors>()!
.background,
height: 1,
),
Padding(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import 'package:flutter_svg/flutter_svg.dart';

import '../../../../../models/isar/models/contact_entry.dart';
import '../../../../../providers/global/address_book_service_provider.dart';
import '../../../../../providers/providers.dart';
import '../../../../../themes/stack_colors.dart';
import '../../../../../utilities/assets.dart';
import '../../../../../utilities/constants.dart';
Expand All @@ -25,20 +26,18 @@ import '../../../../../widgets/stack_text_field.dart';
import '../../../../../widgets/textfield_icon_button.dart';
import 'sub_widgets/contact_list_item.dart';

class AddressBookAddressChooser extends StatefulWidget {
const AddressBookAddressChooser({
super.key,
this.coin,
});
class AddressBookAddressChooser extends ConsumerStatefulWidget {
const AddressBookAddressChooser({super.key, this.coin});

final CryptoCurrency? coin;

@override
State<AddressBookAddressChooser> createState() =>
ConsumerState<AddressBookAddressChooser> createState() =>
_AddressBookAddressChooserState();
}

class _AddressBookAddressChooserState extends State<AddressBookAddressChooser> {
class _AddressBookAddressChooserState
extends ConsumerState<AddressBookAddressChooser> {
late final bool isDesktop;
late final TextEditingController _searchController;
late final FocusNode searchFieldFocusNode;
Expand Down Expand Up @@ -109,6 +108,16 @@ class _AddressBookAddressChooserState extends State<AddressBookAddressChooser> {
isDesktop = Util.isDesktop;
searchFieldFocusNode = FocusNode();
_searchController = TextEditingController();

// the "My Stack" contact is otherwise only created by the address book
// view, so make sure it exists and is current before choosing from it
WidgetsBinding.instance.addPostFrameCallback((_) async {
if (!mounted) return;
await ref
.read(addressBookServiceProvider)
.updateMyStackContact(ref.read(pWallets).wallets);
});

super.initState();
}

Expand All @@ -125,9 +134,7 @@ class _AddressBookAddressChooserState extends State<AddressBookAddressChooser> {
children: [
// search field
Padding(
padding: const EdgeInsets.symmetric(
horizontal: 32,
),
padding: const EdgeInsets.symmetric(horizontal: 32),
child: ClipRRect(
borderRadius: BorderRadius.circular(
Constants.size.circularBorderRadius,
Expand All @@ -150,71 +157,68 @@ class _AddressBookAddressChooserState extends State<AddressBookAddressChooser> {
height: 1.8,
)
: STextStyles.field(context),
decoration: standardInputDecoration(
"Search",
searchFieldFocusNode,
context,
desktopMed: isDesktop,
).copyWith(
prefixIcon: Padding(
padding: EdgeInsets.symmetric(
horizontal: isDesktop ? 12 : 10,
vertical: isDesktop ? 18 : 16,
),
child: SvgPicture.asset(
Assets.svg.search,
width: isDesktop ? 20 : 16,
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 = "";
_searchTerm = "";
});
},
decoration:
standardInputDecoration(
"Search",
searchFieldFocusNode,
context,
desktopMed: isDesktop,
).copyWith(
prefixIcon: Padding(
padding: EdgeInsets.symmetric(
horizontal: isDesktop ? 12 : 10,
vertical: isDesktop ? 18 : 16,
),
child: SvgPicture.asset(
Assets.svg.search,
width: isDesktop ? 20 : 16,
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 = "";
_searchTerm = "";
});
},
),
],
),
],
),
),
)
: null,
),
),
)
: null,
),
),
),
),
const SizedBox(
height: 16,
),
const SizedBox(height: 16),
Expanded(
child: Padding(
padding: const EdgeInsets.only(
left: 32,
right: 32,
bottom: 32,
),
padding: const EdgeInsets.only(left: 32, right: 32, bottom: 32),
child: Consumer(
builder: (context, ref, _) {
List<ContactEntry> contacts = ref
.watch(
addressBookServiceProvider
.select((value) => value.contacts),
addressBookServiceProvider.select(
(value) => value.contacts,
),
)
.toList();

contacts = filter(contacts, _searchTerm);

final favorites = pullOutFavorites(contacts);

final totalLength = favorites.length +
final totalLength =
favorites.length +
contacts.length +
2; // +2 for "fav" and "all" headers

Expand All @@ -223,23 +227,20 @@ class _AddressBookAddressChooserState extends State<AddressBookAddressChooser> {
shrinkWrap: true,
itemCount: totalLength,
separatorBuilder: (context, index) {
return const SizedBox(
height: 10,
);
return const SizedBox(height: 10);
},
itemBuilder: (context, index) {
if (index == 0) {
return Padding(
key: const Key(
"addressBookCAddressChooserFavoritesHeaderItemKey",
),
padding: const EdgeInsets.only(
bottom: 10,
),
padding: const EdgeInsets.only(bottom: 10),
child: Text(
"Favorites",
style:
STextStyles.desktopTextExtraExtraSmall(context),
style: STextStyles.desktopTextExtraExtraSmall(
context,
),
),
);
} else if (index < favorites.length + 1) {
Expand All @@ -254,13 +255,12 @@ class _AddressBookAddressChooserState extends State<AddressBookAddressChooser> {
key: const Key(
"addressBookCAddressChooserAllContactsHeaderItemKey",
),
padding: const EdgeInsets.symmetric(
vertical: 10,
),
padding: const EdgeInsets.symmetric(vertical: 10),
child: Text(
"All contacts",
style:
STextStyles.desktopTextExtraExtraSmall(context),
style: STextStyles.desktopTextExtraExtraSmall(
context,
),
),
);
} else {
Expand Down
Loading
Loading