Lelantus settings mobile UI

and cleanup
This commit is contained in:
sneurlax 2024-05-29 19:42:14 -05:00
parent 32561b5694
commit 8374d30035
5 changed files with 199 additions and 6 deletions

View file

@ -336,8 +336,6 @@ class _RestoreWalletViewState extends ConsumerState<RestoreWalletView> {
mnemonic: mnemonic,
);
// TODO [prio=high]: Update wallet with widget.enableLelantusScanning.
// TODO: extract interface with isRestore param
switch (wallet.runtimeType) {
case const (EpiccashWallet):

View file

@ -0,0 +1,146 @@
/*
* This file is part of Stack Wallet.
*
* Copyright (c) 2023 Cypher Stack
* All Rights Reserved.
* The code is distributed under GPLv3 license, see LICENSE file for details.
* Generated by Cypher Stack on 2023-05-26
*
*/
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../../../providers/db/main_db_provider.dart';
import '../../../../providers/global/wallets_provider.dart';
import '../../../../themes/stack_colors.dart';
import '../../../../utilities/text_styles.dart';
import '../../../../wallets/crypto_currency/crypto_currency.dart';
import '../../../../wallets/isar/models/wallet_info.dart';
import '../../../../wallets/wallet/wallet.dart';
import '../../../../widgets/background.dart';
import '../../../../widgets/custom_buttons/app_bar_icon_button.dart';
import '../../../../widgets/custom_buttons/draggable_switch_button.dart';
class LelantusSettingsView extends ConsumerStatefulWidget {
const LelantusSettingsView({
super.key,
required this.walletId,
});
static const String routeName = "/lelantusSettings";
final String walletId;
@override
ConsumerState<LelantusSettingsView> createState() =>
_LelantusSettingsViewState();
}
class _LelantusSettingsViewState extends ConsumerState<LelantusSettingsView> {
late final TextEditingController _controller;
late final String walletId;
final _focusNode = FocusNode();
bool _isInitialized = false;
Wallet<CryptoCurrency>? wallet;
bool? enableLelantusScanning = false;
@override
void didChangeDependencies() {
super.didChangeDependencies();
if (!_isInitialized) {
// Get the wallet.
wallet = ref.watch(
pWallets.select(
(value) => value.getWallet(widget.walletId),
),
);
// Parse otherDataJsonString to get the enableLelantusScanning value.
if (wallet?.info.otherDataJsonString != null) {
final otherDataJson = json.decode(wallet!.info.otherDataJsonString!);
enableLelantusScanning =
otherDataJson["enableLelantusScanning"] as bool? ?? false;
}
_isInitialized = true; // Ensure this logic runs only once
}
}
@override
void dispose() {
_controller.dispose();
_focusNode.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Background(
child: Scaffold(
backgroundColor: Theme.of(context).extension<StackColors>()!.background,
appBar: AppBar(
leading: AppBarBackButton(
onPressed: () {
Navigator.of(context).pop();
},
),
title: Text(
"Lelantus settings",
style: STextStyles.navBarTitle(context),
),
),
body: Padding(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Row(
children: [
SizedBox(
height: 20,
width: 40,
child: DraggableSwitchButton(
isOn: enableLelantusScanning ?? false,
onValueChanged: (newValue) {
// Toggle enableLelantusScanning in wallet info.
wallet?.info.updateOtherData(newEntries: {
WalletInfoKeys.enableLelantusScanning:
!(enableLelantusScanning ?? false)
}, isar: ref.read(mainDBProvider).isar).then((value) {
// Should setState be used here?
enableLelantusScanning =
!(enableLelantusScanning ?? false);
});
},
),
),
const SizedBox(
width: 16,
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Scan for Lelantus transactions",
style: STextStyles.smallMed12(context),
),
// Text(
// detail,
// style: STextStyles.desktopTextExtraExtraSmall(context),
// ),
],
),
],
),
],
),
),
),
);
}
}

View file

@ -10,9 +10,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../../pinpad_views/lock_screen_view.dart';
import 'delete_wallet_warning_view.dart';
import 'rename_wallet_view.dart';
import '../../../../route_generator.dart';
import '../../../../themes/stack_colors.dart';
import '../../../../utilities/constants.dart';
@ -22,6 +20,10 @@ import '../../../../widgets/background.dart';
import '../../../../widgets/custom_buttons/app_bar_icon_button.dart';
import '../../../../widgets/rounded_white_container.dart';
import '../../../../widgets/stack_dialog.dart';
import '../../../pinpad_views/lock_screen_view.dart';
import 'delete_wallet_warning_view.dart';
import 'lelantus_settings_view.dart';
import 'rename_wallet_view.dart';
class WalletSettingsWalletSettingsView extends ConsumerWidget {
const WalletSettingsWalletSettingsView({
@ -180,6 +182,40 @@ class WalletSettingsWalletSettingsView extends ConsumerWidget {
),
),
),
const SizedBox(
height: 8,
),
RoundedWhiteContainer(
padding: const EdgeInsets.all(0),
child: RawMaterialButton(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(
Constants.size.circularBorderRadius,
),
),
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
onPressed: () {
Navigator.of(context).pushNamed(
LelantusSettingsView.routeName,
arguments: walletId,
);
},
child: Padding(
padding: const EdgeInsets.symmetric(
horizontal: 12.0,
vertical: 20,
),
child: Row(
children: [
Text(
"Lelantus settings",
style: STextStyles.titleBold12(context),
),
],
),
),
),
),
],
),
),

View file

@ -129,6 +129,7 @@ import 'pages/settings_views/wallet_settings_view/wallet_settings_view.dart';
import 'pages/settings_views/wallet_settings_view/wallet_settings_wallet_settings/change_representative_view.dart';
import 'pages/settings_views/wallet_settings_view/wallet_settings_wallet_settings/delete_wallet_recovery_phrase_view.dart';
import 'pages/settings_views/wallet_settings_view/wallet_settings_wallet_settings/delete_wallet_warning_view.dart';
import 'pages/settings_views/wallet_settings_view/wallet_settings_wallet_settings/lelantus_settings_view.dart';
import 'pages/settings_views/wallet_settings_view/wallet_settings_wallet_settings/rename_wallet_view.dart';
import 'pages/settings_views/wallet_settings_view/wallet_settings_wallet_settings/wallet_settings_wallet_settings_view.dart';
import 'pages/settings_views/wallet_settings_view/wallet_settings_wallet_settings/xpub_view.dart';
@ -1953,6 +1954,18 @@ class RouteGenerator {
}
return _routeError("${settings.name} invalid args: ${args.toString()}");
case LelantusSettingsView.routeName:
if (args is String) {
return getRoute(
shouldUseMaterialRoute: useMaterialPageRoute,
builder: (_) => LelantusSettingsView(walletId: args),
settings: RouteSettings(
name: settings.name,
),
);
}
return _routeError("${settings.name} invalid args: ${args.toString()}");
// == Desktop specific routes ============================================
case CreatePasswordView.routeName:
if (args is bool) {

View file

@ -1194,7 +1194,7 @@ packages:
source: hosted
version: "0.2.0"
monero:
dependency: "direct main"
dependency: transitive
description:
path: "."
ref: "6a17a405a1a260fa228b2f4fc94044088a4335ac"