WIP startup privacy options page layout

This commit is contained in:
julian 2022-10-11 08:15:51 -06:00
parent 625144fd7f
commit bf27f38bb5
2 changed files with 236 additions and 49 deletions

View file

@ -2,15 +2,15 @@ import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart'; import 'package:flutter_svg/svg.dart';
import 'package:stackwallet/pages/pinpad_views/create_pin_view.dart'; import 'package:stackwallet/pages/pinpad_views/create_pin_view.dart';
import 'package:stackwallet/providers/global/prefs_provider.dart';
import 'package:stackwallet/utilities/assets.dart';
import 'package:stackwallet/utilities/constants.dart';
import 'package:stackwallet/utilities/text_styles.dart'; import 'package:stackwallet/utilities/text_styles.dart';
import 'package:stackwallet/utilities/theme/stack_colors.dart'; import 'package:stackwallet/utilities/theme/stack_colors.dart';
import 'package:stackwallet/utilities/util.dart';
import 'package:stackwallet/widgets/custom_buttons/app_bar_icon_button.dart'; import 'package:stackwallet/widgets/custom_buttons/app_bar_icon_button.dart';
import 'package:stackwallet/widgets/rounded_white_container.dart'; import 'package:stackwallet/widgets/rounded_white_container.dart';
import 'package:stackwallet/hive/db.dart';
import 'package:stackwallet/utilities/assets.dart';
import 'package:stackwallet/utilities/util.dart';
class StackPrivacyCalls extends ConsumerStatefulWidget { class StackPrivacyCalls extends ConsumerStatefulWidget {
const StackPrivacyCalls({ const StackPrivacyCalls({
Key? key, Key? key,
@ -73,28 +73,38 @@ class _StackPrivacyCalls extends ConsumerState<StackPrivacyCalls> {
const SizedBox( const SizedBox(
height: 36, height: 36,
), ),
Center( const Padding(
child: CustomRadio((bool isEasy) { padding: EdgeInsets.symmetric(
setState(() { horizontal: 16,
this.isEasy = isEasy;
DB.instance.put<dynamic>(
boxName: DB.boxNamePrefs,
key: "externalCalls",
value: isEasy);
});
}),
), ),
child: PrivacyToggle(),
),
// Center(
// child: CustomRadio((bool isEasy) {
// setState(() {
// this.isEasy = isEasy;
//
// DB.instance.put<dynamic>(
// boxName: DB.boxNamePrefs,
// key: "externalCalls",
// value: isEasy);
// });
// }),
// ),
const SizedBox( const SizedBox(
height: 36, height: 36,
), ),
RoundedWhiteContainer( Padding(
padding: const EdgeInsets.symmetric(
horizontal: 16,
),
child: RoundedWhiteContainer(
child: Center( child: Center(
child: RichText( child: RichText(
textAlign: TextAlign.left, textAlign: TextAlign.left,
text: TextSpan( text: TextSpan(
style: style: STextStyles.label(context)
STextStyles.label(context).copyWith(fontSize: 12.0), .copyWith(fontSize: 12.0),
children: isEasy children: isEasy
? const [ ? const [
TextSpan( TextSpan(
@ -106,8 +116,8 @@ class _StackPrivacyCalls extends ConsumerState<StackPrivacyCalls> {
TextSpan( TextSpan(
text: text:
"\n\nRecommended for most crypto users.", "\n\nRecommended for most crypto users.",
style: style: TextStyle(
TextStyle(fontWeight: FontWeight.bold)), fontWeight: FontWeight.bold)),
] ]
: const [ : const [
TextSpan( TextSpan(
@ -119,13 +129,14 @@ class _StackPrivacyCalls extends ConsumerState<StackPrivacyCalls> {
TextSpan( TextSpan(
text: text:
"\n\nRecommended for the privacy conscious.", "\n\nRecommended for the privacy conscious.",
style: style: TextStyle(
TextStyle(fontWeight: FontWeight.bold)), fontWeight: FontWeight.bold)),
], ],
), ),
), ),
), ),
), ),
),
const Spacer( const Spacer(
flex: 4, flex: 4,
), ),
@ -153,6 +164,157 @@ class _StackPrivacyCalls extends ConsumerState<StackPrivacyCalls> {
} }
} }
class PrivacyToggle extends ConsumerStatefulWidget {
const PrivacyToggle({Key? key}) : super(key: key);
@override
ConsumerState<PrivacyToggle> createState() => _PrivacyToggleState();
}
class _PrivacyToggleState extends ConsumerState<PrivacyToggle> {
@override
Widget build(BuildContext context) {
return Row(
children: [
Expanded(
child: RawMaterialButton(
fillColor: Theme.of(context).extension<StackColors>()!.popupBG,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(
Constants.size.circularBorderRadius * 2,
),
),
onPressed: () {
ref.read(prefsChangeNotifierProvider).externalCalls = true;
},
child: Padding(
padding: const EdgeInsets.all(
12,
),
child: Column(
children: [
SvgPicture.asset(
Assets.svg.personaEasy,
// color: Theme.of(context).extension<StackColors>()!.textWhite,
width: 96,
height: 96,
),
const Text(
"Easy Crypto",
style: TextStyle(
fontWeight: FontWeight.bold,
),
),
const Text(
"Recommended",
),
],
),
),
),
),
const SizedBox(
width: 16,
),
Expanded(
child: RawMaterialButton(
elevation: 0,
fillColor: Theme.of(context).extension<StackColors>()!.popupBG,
shape: RoundedRectangleBorder(
side: ref.watch(
prefsChangeNotifierProvider.select(
(value) => value.externalCalls,
),
)
? BorderSide.none
: BorderSide(
color: Theme.of(context)
.extension<StackColors>()!
.infoItemIcons,
width: 2,
),
borderRadius: BorderRadius.circular(
Constants.size.circularBorderRadius * 2,
),
),
onPressed: () {
ref.read(prefsChangeNotifierProvider).externalCalls = false;
},
child: Padding(
padding: const EdgeInsets.all(
12,
),
child: Stack(
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
SvgPicture.asset(
Assets.svg.personaIncognito,
width: 96,
height: 96,
),
const Center(
child: Text(
"Incognito",
style: TextStyle(
fontWeight: FontWeight.bold,
),
),
),
const Center(
child: Text(
"Privacy conscious",
),
),
],
),
if (!ref.watch(
prefsChangeNotifierProvider.select(
(value) => value.externalCalls,
),
))
Positioned(
top: 4,
right: 4,
child: SvgPicture.asset(
Assets.svg.checkCircle,
width: 20,
height: 20,
color: Theme.of(context)
.extension<StackColors>()!
.infoItemIcons,
),
),
if (ref.watch(
prefsChangeNotifierProvider.select(
(value) => value.externalCalls,
),
))
Positioned(
top: 4,
right: 4,
child: Container(
width: 20,
height: 20,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(1000),
color: Theme.of(context)
.extension<StackColors>()!
.textFieldDefaultBG,
),
),
),
],
),
),
),
),
],
);
}
}
class ContinueButton extends StatelessWidget { class ContinueButton extends StatelessWidget {
const ContinueButton({Key? key, required this.isDesktop}) : super(key: key); const ContinueButton({Key? key, required this.isDesktop}) : super(key: key);

View file

@ -36,6 +36,7 @@ class Prefs extends ChangeNotifier {
_hideBlockExplorerWarning = await _getHideBlockExplorerWarning(); _hideBlockExplorerWarning = await _getHideBlockExplorerWarning();
_gotoWalletOnStartup = await _getGotoWalletOnStartup(); _gotoWalletOnStartup = await _getGotoWalletOnStartup();
_startupWalletId = await _getStartupWalletId(); _startupWalletId = await _getStartupWalletId();
_externalCalls = await _getHasExternalCalls();
_initialized = true; _initialized = true;
} }
@ -544,4 +545,28 @@ class Prefs extends ChangeNotifier {
return await DB.instance.get<dynamic>( return await DB.instance.get<dynamic>(
boxName: DB.boxNamePrefs, key: "startupWalletId") as String?; boxName: DB.boxNamePrefs, key: "startupWalletId") as String?;
} }
bool _externalCalls = false;
bool get externalCalls => _externalCalls;
set externalCalls(bool externalCalls) {
if (_externalCalls != externalCalls) {
DB.instance
.put<dynamic>(
boxName: DB.boxNamePrefs,
key: "externalCalls",
value: externalCalls)
.then((_) {
_externalCalls = externalCalls;
notifyListeners();
});
}
}
Future<bool> _getHasExternalCalls() async {
return await DB.instance.get<dynamic>(
boxName: DB.boxNamePrefs, key: "externalCalls") as bool? ??
false;
}
} }