From 78c372a1870f6ded0ff58dfe640946f24bd3153a Mon Sep 17 00:00:00 2001 From: AhsanAli13503 Date: Tue, 28 May 2024 14:46:34 +0500 Subject: [PATCH] feat: qr view for excuting recipe --- wallet/lib/model/event.dart | 29 +++++++ .../lib/pages/events/event_purchase_view.dart | 1 + .../pages/events/event_qr_code_screen.dart | 85 ++++++++++++++++++- .../lib/pages/events/events_owner_view.dart | 20 ++++- 4 files changed, 128 insertions(+), 7 deletions(-) diff --git a/wallet/lib/model/event.dart b/wallet/lib/model/event.dart index ad9d0414c6..07a5d56668 100644 --- a/wallet/lib/model/event.dart +++ b/wallet/lib/model/event.dart @@ -67,6 +67,35 @@ class Events extends Equatable { this.owner = '', }); + Map toJson() { + final Map map = {}; + + final perks = []; + + listOfPerks?.map((e) => perks.add(e.toJson())).toList(); + + map['id'] = id; + map['recipeID'] = recipeID; + map['eventName'] = eventName; + map['hostName'] = hostName; + map['thumbnail'] = thumbnail; + map['startDate'] = startDate; + map['endDate'] = endDate; + map['startTime'] = startTime; + map['endTime'] = endTime; + map['location'] = location; + map['description'] = description; + map['numberOfTickets'] = numberOfTickets; + map['price'] = price; + map['isFreeDrops'] = isFreeDrops; + map['cookbookID'] = cookbookID; + map['step'] = step; + map['denom'] = denom.toString(); + map['listOfPerks'] = perks; + + return map; + } + Future getOwnerAddress() async { if (ownerAddress.isEmpty) { final walletsStore = GetIt.I.get(); diff --git a/wallet/lib/pages/events/event_purchase_view.dart b/wallet/lib/pages/events/event_purchase_view.dart index 6e8c2b4b98..c5f3edc8b7 100644 --- a/wallet/lib/pages/events/event_purchase_view.dart +++ b/wallet/lib/pages/events/event_purchase_view.dart @@ -205,6 +205,7 @@ class EventPassViewContent extends StatelessWidget { Container( margin: EdgeInsets.symmetric(horizontal: 20.w), child: CachedNetworkImage( + width: double.infinity, fit: BoxFit.fill, imageUrl: events.thumbnail, errorWidget: (a, b, c) => const Center( diff --git a/wallet/lib/pages/events/event_qr_code_screen.dart b/wallet/lib/pages/events/event_qr_code_screen.dart index 74bf610501..78381bfdd7 100644 --- a/wallet/lib/pages/events/event_qr_code_screen.dart +++ b/wallet/lib/pages/events/event_qr_code_screen.dart @@ -1,6 +1,16 @@ import 'dart:convert'; +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:pylons_wallet/components/buttons/custom_paint_button.dart'; +import 'package:pylons_wallet/gen/assets.gen.dart'; +import 'package:pylons_wallet/generated/locale_keys.g.dart'; +import 'package:pylons_wallet/model/event.dart'; +import 'package:pylons_wallet/pages/detailed_asset_view/widgets/nft_image_asset.dart'; +import 'package:pylons_wallet/utils/constants.dart'; +import 'package:qr_flutter/qr_flutter.dart'; const jsonExecuteRecipe = ''' { @@ -15,11 +25,80 @@ const jsonExecuteRecipe = ''' '''; final jsonMap = jsonDecode(jsonExecuteRecipe) as Map; -class EventQrCodeScreen extends StatelessWidget { - const EventQrCodeScreen({super.key}); +class EventQrCodeScreen extends StatefulWidget { + const EventQrCodeScreen({ + super.key, + required this.events, + }); + + final Events events; + + @override + State createState() => _EventQrCodeScreenState(); +} + +class _EventQrCodeScreenState extends State { + GlobalKey renderObjectKey = GlobalKey(); @override Widget build(BuildContext context) { - return const Placeholder(); + return Material( + color: AppColors.kBlack, + child: Stack( + children: [ + NftImageWidget( + url: widget.events.thumbnail, + opacity: 0.5, + ), + Padding( + padding: EdgeInsets.only(left: 23.w, top: MediaQuery.of(context).viewPadding.top + 13.h), + child: GestureDetector( + onTap: () async { + Navigator.pop(context); + }, + child: SvgPicture.asset( + Assets.images.icons.back, + height: 25.h, + ), + ), + ), + ColoredBox( + color: AppColors.kBlack.withOpacity(0.5), + child: Align( + child: RepaintBoundary( + key: renderObjectKey, + child: QrImageView( + padding: EdgeInsets.zero, + data: jsonEncode(widget.events), + size: 200, + dataModuleStyle: const QrDataModuleStyle(color: AppColors.kWhite), + eyeStyle: const QrEyeStyle(eyeShape: QrEyeShape.square, color: AppColors.kWhite), + ), + ), + ), + ), + Align( + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 20.w), + child: SvgPicture.asset(Assets.images.svg.qrSideBorder), + ), + ), + Align( + alignment: Alignment.bottomCenter, + child: Padding( + padding: EdgeInsets.only(bottom: 30.h), + child: CustomPaintButton( + title: LocaleKeys.done.tr(), + bgColor: AppColors.kWhite.withOpacity(0.3), + width: 280.w, + onPressed: () { + Navigator.pop(context); + }, + ), + ), + ) + ], + ), + ); } } diff --git a/wallet/lib/pages/events/events_owner_view.dart b/wallet/lib/pages/events/events_owner_view.dart index 0fc4986b3c..337c9cd810 100644 --- a/wallet/lib/pages/events/events_owner_view.dart +++ b/wallet/lib/pages/events/events_owner_view.dart @@ -5,8 +5,10 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:get_it/get_it.dart'; import 'package:provider/provider.dart'; import 'package:pylons_wallet/components/space_widgets.dart'; +import 'package:pylons_wallet/gen/assets.gen.dart'; import 'package:pylons_wallet/model/event.dart'; import 'package:pylons_wallet/pages/detailed_asset_view/owner_view_view_model.dart'; +import 'package:pylons_wallet/pages/events/event_qr_code_screen.dart'; import 'package:pylons_wallet/pages/home/currency_screen/model/ibc_coins.dart'; import 'package:pylons_wallet/utils/constants.dart'; @@ -205,10 +207,20 @@ class EventPassViewContent extends StatelessWidget { // placeholder: (context, url) => Shimmer(color: AppColors.kLightGray, child: const SizedBox.expand()), ), ), - - - - + GestureDetector( + onTap: () { + showDialog( + context: context, + builder: (_) => EventQrCodeScreen( + events: viewModel.events, + ), + ); + }, + child: SvgPicture.asset( + Assets.images.icons.qr, + height: 20.h, + ), + ), ], ), ),