diff --git a/lib/widgets/modular_widgets/token_widgets/token_card.dart b/lib/widgets/modular_widgets/token_widgets/token_card.dart index a54c3a35..a3c7b7b3 100644 --- a/lib/widgets/modular_widgets/token_widgets/token_card.dart +++ b/lib/widgets/modular_widgets/token_widgets/token_card.dart @@ -1,7 +1,7 @@ import 'package:fl_chart/fl_chart.dart'; -import 'package:flip_card/flip_card.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:flutter_flip_card/flutter_flip_card.dart'; import 'package:marquee_widget/marquee_widget.dart'; import 'package:stacked/stacked.dart'; import 'package:zenon_syrius_wallet_flutter/blocs/blocs.dart'; @@ -46,6 +46,7 @@ class _TokenCardState extends State { final GlobalKey _mintAmountKey = GlobalKey(); GlobalKey _newOwnerAddressKey = GlobalKey(); + final FlipCardController _flipCardController = FlipCardController(); final TextEditingController _beneficiaryAddressController = TextEditingController(); final TextEditingController _burnAmountController = TextEditingController(); @@ -71,31 +72,47 @@ class _TokenCardState extends State { @override Widget build(BuildContext context) { return FlipCard( - direction: FlipDirection.HORIZONTAL, - speed: 500, - flipOnTouch: false, key: _cardKey, - front: _getFrontOfCard(), - back: _getBackOfCard(), + rotateSide: RotateSide.right, + animationDuration: const Duration(milliseconds: 500), + axis: FlipAxis.vertical, + disableSplashEffect: false, + onTapFlipping: false, + controller: _flipCardController, + frontWidget: _getFrontOfCard(), + backWidget: _getBackOfCard(), ); } + Future _flipCard() async { + await _flipCardController.flipcard(); + } + Widget _getBackOfCard() { - return StreamBuilder?>( - stream: sl.get().stream, - builder: (_, snapshot) { - if (snapshot.hasError) { - return SyriusErrorWidget(snapshot.error!); - } - if (snapshot.connectionState == ConnectionState.active) { - if (snapshot.hasData) { - return _getBackVersionOfCard(snapshot.data!); - } - return const SyriusLoadingWidget(); - } - return const SyriusLoadingWidget(); - }, - ); + return Container( + padding: const EdgeInsets.symmetric( + horizontal: 20.0, + vertical: 10.0, + ), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10.0), + color: Theme.of(context).colorScheme.primaryContainer, + ), + child: StreamBuilder?>( + stream: sl.get().stream, + builder: (_, snapshot) { + if (snapshot.hasError) { + return SyriusErrorWidget(snapshot.error!); + } + if (snapshot.connectionState == ConnectionState.active) { + if (snapshot.hasData) { + return _getBackVersionOfCard(snapshot.data!); + } + return const SyriusLoadingWidget(); + } + return const SyriusLoadingWidget(); + }, + )); } Container _getFrontOfCard() { @@ -188,7 +205,7 @@ class _TokenCardState extends State { onPressed: kDefaultAddressList .contains(widget.token.owner.toString()) ? () { - _cardKey.currentState!.toggleCard(); + _flipCard(); _backOfCardVersion = TokenCardBackVersion.mint; sl @@ -207,7 +224,7 @@ class _TokenCardState extends State { widget.token.owner.toString(), ) ? () { - _cardKey.currentState!.toggleCard(); + _flipCard(); _backOfCardVersion = TokenCardBackVersion.burn; sl @@ -412,7 +429,7 @@ class _TokenCardState extends State { StepperButton( text: 'Go back', onPressed: () { - _cardKey.currentState!.toggleCard(); + _flipCard(); }, ), ], @@ -450,7 +467,8 @@ class _TokenCardState extends State { ); } - Future _sendBurnSuccessfulNotification(AccountBlockTemplate event) async { + Future _sendBurnSuccessfulNotification( + AccountBlockTemplate event) async { await sl.get().addNotification( WalletNotification( title: 'Successfully burned ${event.amount.addDecimals( @@ -571,7 +589,7 @@ class _TokenCardState extends State { StepperButton( text: 'Go back', onPressed: () { - _cardKey.currentState!.toggleCard(); + _flipCard(); }, ), ], @@ -588,7 +606,6 @@ class _TokenCardState extends State { model.stream.listen((event) { setState(() { _beneficiaryAddressKey.currentState!.reset(); - _beneficiaryAddressController.clear(); _mintAmountKey.currentState!.reset(); _mintAmountController.clear(); }); @@ -608,7 +625,8 @@ class _TokenCardState extends State { ); } - Future _sendMintSuccessfulNotification(AccountBlockTemplate event) async { + Future _sendMintSuccessfulNotification( + AccountBlockTemplate event) async { await sl.get().addNotification( WalletNotification( title: 'Successfully minted ${event.amount.addDecimals( @@ -627,21 +645,24 @@ class _TokenCardState extends State { Widget _getMintButton(MintTokenBloc model) { return LoadingButton.stepper( text: 'Mint', - onPressed: _mintMaxAmount > BigInt.zero && - _mintAmountController.text.isNotEmpty && - InputValidators.correctValue(_mintAmountController.text, - _mintMaxAmount, widget.token.decimals, BigInt.zero) == - null - ? () { - _mintButtonKey.currentState!.animateForward(); - model.mintToken( - widget.token, - _mintAmountController.text - .extractDecimals(widget.token.decimals), - Address.parse(_beneficiaryAddressController.text), - ); - } - : null, + onPressed: + InputValidators.checkAddress(_beneficiaryAddressController.text) == + null && + _mintMaxAmount > BigInt.zero && + _mintAmountController.text.isNotEmpty && + InputValidators.correctValue(_mintAmountController.text, + _mintMaxAmount, widget.token.decimals, BigInt.zero) == + null + ? () { + _mintButtonKey.currentState!.animateForward(); + model.mintToken( + widget.token, + _mintAmountController.text + .extractDecimals(widget.token.decimals), + Address.parse(_beneficiaryAddressController.text), + ); + } + : null, key: _mintButtonKey, ); } @@ -649,7 +670,7 @@ class _TokenCardState extends State { void _onTransferOwnershipIconPressed() { setState(() { _backOfCardVersion = TokenCardBackVersion.transferOwnership; - _cardKey.currentState!.toggleCard(); + _flipCard(); }); } @@ -687,7 +708,7 @@ class _TokenCardState extends State { StepperButton( text: 'Go back', onPressed: () { - _cardKey.currentState!.toggleCard(); + _flipCard(); }, ), ], diff --git a/lib/widgets/reusable_widgets/stepper_utils.dart b/lib/widgets/reusable_widgets/stepper_utils.dart index d3cecca6..928174b4 100644 --- a/lib/widgets/reusable_widgets/stepper_utils.dart +++ b/lib/widgets/reusable_widgets/stepper_utils.dart @@ -68,12 +68,15 @@ class StepperUtils { static Widget getBalanceWidget(Token token, AccountInfo accountInfo) { return Row( children: [ - Padding( - padding: const EdgeInsets.only(left: 20.0, top: 10.0, bottom: 10.0), - child: AvailableBalance( - token, - accountInfo, - ), + Expanded( + child: + Padding( + padding: const EdgeInsets.only(left: 20.0, top: 10.0, bottom: 10.0), + child: AvailableBalance( + token, + accountInfo, + ), + ), ), ], ); diff --git a/pubspec.lock b/pubspec.lock index 8029a8b1..af64c854 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -510,6 +510,14 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_flip_card: + dependency: "direct main" + description: + name: flutter_flip_card + sha256: "1de81921a3bcc40f2eae77db18bddc0ce6bbea6be30274ffa83e8c06fe2b1936" + url: "https://pub.dev" + source: hosted + version: "0.0.5" flutter_lints: dependency: "direct dev" description: diff --git a/pubspec.yaml b/pubspec.yaml index ef05dade..261b45f1 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -18,8 +18,9 @@ dependencies: expandable: ^5.0.1 marquee_widget: ^1.2.0 layout: ^1.0.2 - flutter_staggered_grid_view: ^0.4.0 + flutter_staggered_grid_view: ^0.4.1 flip_card: ^0.7.0 + flutter_flip_card: ^0.0.5 auto_size_text: ^3.0.0 window_manager: ^0.3.5 stacked: ^3.4.1 @@ -31,7 +32,7 @@ dependencies: intl: ^0.18.0 package_info_plus: ^4.1.0 device_info_plus: ^9.0.3 - infinite_scroll_pagination: ^3.1.0 + infinite_scroll_pagination: ^3.2.0 share_plus: ^7.1.0 page_transition: ^2.0.4 file_selector: ^1.0.0