Polyseed design changes (#1211)

* Add icons to Language- and Seedtype-picker to indicate it's clickability

* Add Seed Type Selector to New Wallet Page

* Rename "Advanced Privacy Settings" to "Advanced Settings"
This commit is contained in:
Konstantin Ullrich
2023-11-30 17:38:28 +02:00
committed by GitHub
parent 4d245b7ff1
commit 2bddeb6ac2
31 changed files with 183 additions and 137 deletions
+37 -14
View File
@@ -1,4 +1,6 @@
import 'package:cake_wallet/entities/generate_name.dart';
import 'package:cake_wallet/src/screens/new_wallet/widgets/select_button.dart';
import 'package:cake_wallet/src/widgets/picker.dart';
import 'package:cake_wallet/themes/extensions/cake_text_theme.dart';
import 'package:cake_wallet/main.dart';
import 'package:cake_wallet/routes.dart';
@@ -88,6 +90,8 @@ class _WalletNameFormState extends State<WalletNameForm> {
});
}
});
_setSeedType(SeedType.defaultSeedType);
super.initState();
}
@@ -183,25 +187,38 @@ class _WalletNameFormState extends State<WalletNameForm> {
),
),
),
if (_walletNewVM.hasLanguageSelector) ...[
Padding(
padding: EdgeInsets.only(top: 40),
child: Text(
S.of(context).seed_language_choose,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: 16.0,
fontWeight: FontWeight.w500,
color: Theme.of(context).extension<CakeTextTheme>()!.titleColor),
if (_walletNewVM.hasSeedType) ...[
Observer(
builder: (BuildContext build) => Padding(
padding: EdgeInsets.only(top: 24),
child: SelectButton(
text: widget._settingsStore.moneroSeedType.title,
onTap: () async {
await showPopUp<void>(
context: context,
builder: (_) => Picker(
items: SeedType.all,
selectedAtIndex: isPolyseed ? 1 : 0,
onItemSelected: _setSeedType,
isSeparated: false,
),
);
},
),
),
),
),
],
Observer(
builder: (BuildContext build) => Padding(
padding: EdgeInsets.only(top: 24),
padding: EdgeInsets.only(top: 10),
child: SeedLanguageSelector(
key: _languageSelectorKey,
initialSelected: defaultSeedLanguage,
seedType: widget._settingsStore.moneroSeedType,
seedType: _walletNewVM.hasSeedType
? widget._settingsStore.moneroSeedType
: SeedType.legacy,
),
),
)
@@ -231,7 +248,7 @@ class _WalletNameFormState extends State<WalletNameForm> {
Navigator.of(context)
.pushNamed(Routes.advancedPrivacySettings, arguments: _walletNewVM.type);
},
child: Text(S.of(context).advanced_privacy_settings),
child: Text(S.of(context).advanced_settings),
),
],
)),
@@ -253,11 +270,17 @@ class _WalletNameFormState extends State<WalletNameForm> {
buttonAction: () => Navigator.of(context).pop());
});
} else {
final isPolyseed = widget._settingsStore.moneroSeedType == SeedType.polyseed;
_walletNewVM.create(
options: _walletNewVM.hasLanguageSelector
? [_languageSelectorKey.currentState!.selected, isPolyseed]
: null);
}
}
bool get isPolyseed => widget._settingsStore.moneroSeedType == SeedType.polyseed;
void _setSeedType(SeedType item) {
widget._settingsStore.moneroSeedType = item;
_languageSelectorKey.currentState?.selected = defaultSeedLanguage; // Reset Seed language
}
}
@@ -124,25 +124,30 @@ class WalletRestoreFromSeedFormState extends State<WalletRestoreFromSeedForm> {
onSeedChange: onSeedChange),
if (widget.type == WalletType.monero)
GestureDetector(
onTap: () async {
await showPopUp<void>(
context: context,
builder: (_) => Picker(
items: SeedType.all,
selectedAtIndex: isPolyseed ? 1 : 0,
mainAxisAlignment: MainAxisAlignment.start,
onItemSelected: _changeSeedType,
isSeparated: false,
));
},
child: Container(
color: Colors.transparent,
padding: EdgeInsets.only(top: 20.0),
child: IgnorePointer(
child: BaseTextFormField(
controller: seedTypeController,
enableInteractiveSelection: false,
readOnly: true)))),
onTap: () async {
await showPopUp<void>(
context: context,
builder: (_) => Picker(
items: SeedType.all,
selectedAtIndex: isPolyseed ? 1 : 0,
mainAxisAlignment: MainAxisAlignment.start,
onItemSelected: _changeSeedType,
isSeparated: false,
));
},
child: Container(
color: Colors.transparent,
padding: EdgeInsets.only(top: 20.0),
child: IgnorePointer(
child: BaseTextFormField(
controller: seedTypeController,
enableInteractiveSelection: false,
readOnly: true,
suffixIcon: expandIcon,
),
),
),
),
if (widget.displayLanguageSelector)
GestureDetector(
onTap: () async {
@@ -154,14 +159,19 @@ class WalletRestoreFromSeedFormState extends State<WalletRestoreFromSeedForm> {
seedType: isPolyseed ? SeedType.polyseed : SeedType.legacy,
));
},
child: Container(
color: Colors.transparent,
padding: EdgeInsets.only(top: 20.0),
child: IgnorePointer(
child: BaseTextFormField(
controller: languageController,
enableInteractiveSelection: false,
readOnly: true)))),
child: Container(
color: Colors.transparent,
padding: EdgeInsets.only(top: 20.0),
child: IgnorePointer(
child: BaseTextFormField(
controller: languageController,
enableInteractiveSelection: false,
readOnly: true,
suffixIcon: expandIcon,
),
),
),
),
if (!isPolyseed && widget.displayBlockHeightSelector)
BlockchainHeightWidget(
focusNode: widget.blockHeightFocusNode,
@@ -171,6 +181,17 @@ class WalletRestoreFromSeedFormState extends State<WalletRestoreFromSeedForm> {
]));
}
Widget get expandIcon => Container(
padding: EdgeInsets.all(18),
width: 24,
height: 24,
child: Image.asset(
'assets/images/arrow_bottom_purple_icon.png',
height: 8,
color: Theme.of(context).hintColor,
),
);
void _changeLanguage(String language) {
final setLang = isPolyseed ? "POLYSEED_$language" : language;
setState(() {
@@ -210,7 +210,7 @@ class WalletRestorePage extends BasePage {
Navigator.of(context).pushNamed(Routes.advancedPrivacySettings,
arguments: walletRestoreViewModel.type);
},
child: Text(S.of(context).advanced_privacy_settings),
child: Text(S.of(context).advanced_settings),
),
],
),
+13 -10
View File
@@ -1,19 +1,20 @@
import 'package:cake_wallet/entities/seed_type.dart';
import 'package:cake_wallet/generated/i18n.dart';
import 'package:cake_wallet/src/screens/new_wallet/widgets/select_button.dart';
import 'package:cake_wallet/src/widgets/seed_language_picker.dart';
import 'package:cake_wallet/utils/show_pop_up.dart';
import 'package:flutter/material.dart';
class SeedLanguageSelector extends StatefulWidget {
SeedLanguageSelector({Key? key, required this.initialSelected, this.seedType = SeedType.defaultSeedType})
SeedLanguageSelector(
{Key? key, required this.initialSelected, this.seedType = SeedType.defaultSeedType})
: super(key: key);
final String initialSelected;
final SeedType seedType;
@override
SeedLanguageSelectorState createState() =>
SeedLanguageSelectorState(selected: initialSelected);
SeedLanguageSelectorState createState() => SeedLanguageSelectorState(selected: initialSelected);
}
class SeedLanguageSelectorState extends State<SeedLanguageSelector> {
@@ -25,15 +26,17 @@ class SeedLanguageSelectorState extends State<SeedLanguageSelector> {
Widget build(BuildContext context) {
return SelectButton(
image: null,
text: seedLanguages.firstWhere((e) => e.name == selected).nameLocalized,
text:
"${seedLanguages.firstWhere((e) => e.name == selected).nameLocalized} (${S.of(context).seed_language})",
onTap: () async {
await showPopUp<String>(
context: context,
builder: (_) => SeedLanguagePicker(
selected: this.selected,
seedType: widget.seedType,
onItemSelected: (String selected) =>
setState(() => this.selected = selected)));
context: context,
builder: (_) => SeedLanguagePicker(
selected: this.selected,
seedType: widget.seedType,
onItemSelected: (String selected) => setState(() => this.selected = selected),
),
);
},
);
}
+2
View File
@@ -30,6 +30,8 @@ abstract class WalletNewVMBase extends WalletCreationVM with Store {
bool get hasLanguageSelector => type == WalletType.monero || type == WalletType.haven;
bool get hasSeedType => type == WalletType.monero;
@override
WalletCredentials getCredentials(dynamic _options) {
final options = _options as List<dynamic>?;