WIP: monkey view + fetching monkey dialog

This commit is contained in:
ryleedavis 2023-07-21 17:56:01 -06:00
parent 269f47d6f4
commit fb39e96308
4 changed files with 303 additions and 0 deletions

View file

@ -0,0 +1,127 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/svg.dart';
import 'package:stackwallet/pages/monkey/sub_widgets/fetch_monkey_dialog.dart';
import 'package:stackwallet/services/coins/manager.dart';
import 'package:stackwallet/themes/coin_icon_provider.dart';
import 'package:stackwallet/themes/stack_colors.dart';
import 'package:stackwallet/utilities/enums/coin_enum.dart';
import 'package:stackwallet/utilities/text_styles.dart';
import 'package:stackwallet/widgets/background.dart';
import 'package:stackwallet/widgets/custom_buttons/app_bar_icon_button.dart';
import 'package:stackwallet/widgets/desktop/primary_button.dart';
class MonkeyView extends ConsumerStatefulWidget {
const MonkeyView({
Key? key,
required this.walletId,
required this.managerProvider,
}) : super(key: key);
static const String routeName = "/monkey";
static const double navBarHeight = 65.0;
final String walletId;
final ChangeNotifierProvider<Manager> managerProvider;
@override
ConsumerState<MonkeyView> createState() => _MonkeyViewState();
}
class _MonkeyViewState extends ConsumerState<MonkeyView> {
late final String walletId;
late final ChangeNotifierProvider<Manager> managerProvider;
@override
void initState() {
walletId = widget.walletId;
managerProvider = widget.managerProvider;
super.initState();
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
final Coin coin = ref.watch(managerProvider.select((value) => value.coin));
return Background(
child: Stack(
children: [
Scaffold(
appBar: AppBar(
leading: AppBarBackButton(
onPressed: () {
Navigator.of(context).pop();
},
),
title: Text(
"MonKey",
style: STextStyles.navBarTitle(context),
),
),
body: Column(
// mainAxisAlignment: MainAxisAlignment.center,
// crossAxisAlignment: CrossAxisAlignment.center,
children: [
const Spacer(),
Center(
child: Column(
children: [
SvgPicture.file(
File(
ref.watch(coinIconProvider(coin)),
),
width: 164,
height: 164,
),
const SizedBox(
height: 40,
),
Text(
"You do not have a MonKey yet. \nFetch yours now!",
style: STextStyles.smallMed14(context).copyWith(
color: Theme.of(context)
.extension<StackColors>()!
.textDark3,
),
textAlign: TextAlign.center,
),
],
),
),
const Spacer(),
Padding(
padding: const EdgeInsets.all(16.0),
child: PrimaryButton(
label: "Fetch MonKey",
onPressed: () {
showDialog<dynamic>(
context: context,
useSafeArea: false,
barrierDismissible: false,
builder: (context) {
return FetchMonkeyDialog(
onCancel: () async {
Navigator.of(context).pop();
},
);
},
);
},
),
),
],
),
),
],
),
);
}
}

View file

@ -0,0 +1,135 @@
/*
* 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 'package:flutter/material.dart';
import 'package:stackwallet/themes/stack_colors.dart';
import 'package:stackwallet/utilities/text_styles.dart';
import 'package:stackwallet/utilities/util.dart';
import 'package:stackwallet/widgets/animated_widgets/rotating_arrows.dart';
import 'package:stackwallet/widgets/desktop/desktop_dialog.dart';
import 'package:stackwallet/widgets/desktop/desktop_dialog_close_button.dart';
import 'package:stackwallet/widgets/desktop/secondary_button.dart';
import 'package:stackwallet/widgets/stack_dialog.dart';
class FetchMonkeyDialog extends StatefulWidget {
const FetchMonkeyDialog({
Key? key,
required this.onCancel,
}) : super(key: key);
final Future<void> Function() onCancel;
@override
State<FetchMonkeyDialog> createState() => _FetchMonkeyDialogState();
}
class _FetchMonkeyDialogState extends State<FetchMonkeyDialog> {
late final Future<void> Function() onCancel;
@override
void initState() {
onCancel = widget.onCancel;
super.initState();
}
@override
Widget build(BuildContext context) {
if (Util.isDesktop) {
return DesktopDialog(
child: Column(
children: [
DesktopDialogCloseButton(
onPressedOverride: () async {
await onCancel.call();
if (mounted) {
Navigator.of(context).pop();
}
},
),
const Spacer(
flex: 1,
),
const RotatingArrows(
width: 40,
height: 40,
),
const Spacer(
flex: 2,
),
Text(
"Fetching MonKey",
style: STextStyles.desktopH2(context),
textAlign: TextAlign.center,
),
const SizedBox(
height: 16,
),
Text(
"We are fetching your MonKey",
style: STextStyles.desktopTextMedium(context).copyWith(
color: Theme.of(context).extension<StackColors>()!.textDark3,
),
textAlign: TextAlign.center,
),
const Spacer(
flex: 2,
),
Padding(
padding: const EdgeInsets.only(
left: 32,
right: 32,
bottom: 32,
),
child: SecondaryButton(
label: "Cancel",
width: 272.5,
onPressed: () async {
await onCancel.call();
if (mounted) {
Navigator.of(context).pop();
}
},
),
),
],
),
);
} else {
return WillPopScope(
onWillPop: () async {
return false;
},
child: StackDialog(
title: "Fetching MonKey",
message: "We are fetching your MonKey",
icon: const RotatingArrows(
width: 24,
height: 24,
),
rightButton: TextButton(
style: Theme.of(context)
.extension<StackColors>()!
.getSecondaryEnabledButtonStyle(context),
child: Text(
"Cancel",
style: STextStyles.itemSubtitle12(context),
),
onPressed: () async {
await onCancel.call();
if (mounted) {
Navigator.of(context).pop();
}
},
),
),
);
}
}
}

View file

@ -22,6 +22,7 @@ import 'package:stackwallet/pages/buy_view/buy_in_wallet_view.dart';
import 'package:stackwallet/pages/coin_control/coin_control_view.dart'; import 'package:stackwallet/pages/coin_control/coin_control_view.dart';
import 'package:stackwallet/pages/exchange_view/wallet_initiated_exchange_view.dart'; import 'package:stackwallet/pages/exchange_view/wallet_initiated_exchange_view.dart';
import 'package:stackwallet/pages/home_view/home_view.dart'; import 'package:stackwallet/pages/home_view/home_view.dart';
import 'package:stackwallet/pages/monkey/monkey_view.dart';
import 'package:stackwallet/pages/notification_views/notifications_view.dart'; import 'package:stackwallet/pages/notification_views/notifications_view.dart';
import 'package:stackwallet/pages/paynym/paynym_claim_view.dart'; import 'package:stackwallet/pages/paynym/paynym_claim_view.dart';
import 'package:stackwallet/pages/paynym/paynym_home_view.dart'; import 'package:stackwallet/pages/paynym/paynym_home_view.dart';
@ -924,6 +925,30 @@ class _WalletViewState extends ConsumerState<WalletView> {
); );
}, },
), ),
if (ref.watch(
walletsChangeNotifierProvider.select(
(value) => value
.getManager(widget.walletId)
.hasCoinControlSupport,
),
) &&
ref.watch(
prefsChangeNotifierProvider.select(
(value) => value.enableCoinControl,
),
))
WalletNavigationBarItemData(
icon: SvgPicture.asset(Assets.svg.circlePlus),
label: "MonKey",
onTap: () {
Navigator.of(context).pushNamed(
MonkeyView.routeName,
arguments: Tuple2(
widget.walletId,
widget.managerProvider,
),
);
}),
if (ref.watch( if (ref.watch(
walletsChangeNotifierProvider.select( walletsChangeNotifierProvider.select(
(value) => value (value) => value

View file

@ -56,6 +56,7 @@ import 'package:stackwallet/pages/generic/single_field_edit_view.dart';
import 'package:stackwallet/pages/home_view/home_view.dart'; import 'package:stackwallet/pages/home_view/home_view.dart';
import 'package:stackwallet/pages/intro_view.dart'; import 'package:stackwallet/pages/intro_view.dart';
import 'package:stackwallet/pages/manage_favorites_view/manage_favorites_view.dart'; import 'package:stackwallet/pages/manage_favorites_view/manage_favorites_view.dart';
import 'package:stackwallet/pages/monkey/monkey_view.dart';
import 'package:stackwallet/pages/notification_views/notifications_view.dart'; import 'package:stackwallet/pages/notification_views/notifications_view.dart';
import 'package:stackwallet/pages/paynym/add_new_paynym_follow_view.dart'; import 'package:stackwallet/pages/paynym/add_new_paynym_follow_view.dart';
import 'package:stackwallet/pages/paynym/paynym_claim_view.dart'; import 'package:stackwallet/pages/paynym/paynym_claim_view.dart';
@ -375,6 +376,21 @@ class RouteGenerator {
} }
return _routeError("${settings.name} invalid args: ${args.toString()}"); return _routeError("${settings.name} invalid args: ${args.toString()}");
case MonkeyView.routeName:
if (args is Tuple2<String, ChangeNotifierProvider<Manager>>) {
return getRoute(
shouldUseMaterialRoute: useMaterialPageRoute,
builder: (_) => MonkeyView(
walletId: args.item1,
managerProvider: args.item2,
),
settings: RouteSettings(
name: settings.name,
),
);
}
return _routeError("${settings.name} invalid args: ${args.toString()}");
case CoinControlView.routeName: case CoinControlView.routeName:
if (args is Tuple2<String, CoinControlViewType>) { if (args is Tuple2<String, CoinControlViewType>) {
return getRoute( return getRoute(