import 'package:aitrainer_app/bloc/sales/sales_bloc.dart'; import 'package:aitrainer_app/library/button_animations.dart'; import 'package:aitrainer_app/service/logging.dart'; import 'package:aitrainer_app/util/trans.dart'; import 'package:aitrainer_app/widgets/app_bar_min.dart'; import 'package:aitrainer_app/widgets/dialog_common.dart'; import 'package:aitrainer_app/widgets/sales_button.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_html/flutter_html.dart'; import 'package:flutter_html/style.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:modal_progress_hud_nsn/modal_progress_hud_nsn.dart'; // ignore: must_be_immutable class SalesPage extends StatelessWidget with Trans, Logging { @override Widget build(BuildContext context) { setContext(context); return Scaffold( appBar: AppBarMin( back: true, ), body: BlocProvider( create: (context) => SalesBloc()..add(SalesLoad()), child: BlocConsumer(listener: (context, state) { if (state is SalesError) { ScaffoldMessenger.of(context).showSnackBar( SnackBar(backgroundColor: Colors.orange, content: Text(t(state.message), style: TextStyle(color: Colors.white)))); } else if (state is SalesSuccessful) { showDialog( context: context, builder: (BuildContext context) { return DialogCommon( title: t("Successful Purchase"), descriptions: t("Now you can use the premium features of WorkoutTest!"), text: "OK", onTap: () => { Navigator.of(context).pop(), Navigator.of(context).pushNamed("home"), }, onCancel: () => { Navigator.of(context).pop(), Navigator.of(context).pushNamed("home"), }, ); }); } }, builder: (context, state) { final salesBloc = BlocProvider.of(context); return ModalProgressHUD( child: salesWidget(salesBloc), inAsyncCall: state is SalesLoading, opacity: 0.5, color: Colors.black54, progressIndicator: CircularProgressIndicator(), ); }))); } Widget salesWidget(SalesBloc bloc) { final salesText = bloc.salesText != null ? bloc.salesText! : ""; final String html = salesText; log("start SalesPageBuild"); return Container( decoration: BoxDecoration( image: DecorationImage( image: AssetImage('asset/image/WT_black_background.jpg'), fit: BoxFit.cover, alignment: Alignment.center, ), ), child: CustomScrollView(scrollDirection: Axis.vertical, slivers: [ SliverList( delegate: SliverChildListDelegate([ Html( data: html, //Optional parameters: style: { "p": Style( color: Colors.white, fontSize: FontSize(16), padding: const EdgeInsets.only(left: 10, right: 8, bottom: 4), textShadow: [ Shadow( offset: Offset(3.0, 3.0), blurRadius: 12.0, color: Colors.black54, ), Shadow( offset: Offset(-3.0, 3.0), blurRadius: 6.0, color: Colors.black54, ), ], ), "strong": Style( color: Colors.orange[600], fontSize: FontSize(16), ), "h3": Style( color: Colors.orange[600], fontSize: FontSize(16), textAlign: TextAlign.center, padding: const EdgeInsets.all(12), ), "li": Style( color: Colors.white, fontSize: FontSize(16), padding: const EdgeInsets.only(left: 10, bottom: 10, right: 8), //before: "*", textShadow: [ Shadow( offset: Offset(3.0, 3.0), blurRadius: 12.0, color: Colors.black54, ), Shadow( offset: Offset(-3.0, 3.0), blurRadius: 6.0, color: Colors.black54, ), ], //display: Display.LIST_ITEM, ), "h2": Style( color: Colors.orange[600], fontWeight: FontWeight.bold, fontSize: FontSize(24), textAlign: TextAlign.center, textShadow: [ Shadow( offset: Offset(5.0, 5.0), blurRadius: 12.0, color: Colors.black54, ), Shadow( offset: Offset(-3.0, 3.0), blurRadius: 12.0, color: Colors.black54, ), ], //padding: const EdgeInsets.all(4), ), "h1": Style( color: Colors.orange[400], fontWeight: FontWeight.bold, fontSize: FontSize.larger, alignment: Alignment.center, padding: const EdgeInsets.all(4), ), }, ), // final Color bgrColor = Color(0xffb4f500); //final Color bgrColorEnd = Colors.blue; Container( padding: EdgeInsets.only(left: 55, right: 55), child: Text( t("Tap on the button below the reach all premium content!"), textAlign: TextAlign.center, style: GoogleFonts.inter(color: Colors.white, fontSize: 13), )), Divider(), Row( children: [0, 1].map((idx) { return Expanded( flex: 1, child: Container( margin: EdgeInsets.symmetric(horizontal: 10), child: AnimatedButton( duration: 600, darkShadow: true, blurRadius: 12, animationCurve: Curves.easeIn, height: 180, width: 160, onTap: () => bloc.add(SalesPurchase(productId: bloc.product2Display[idx].productId)), isMultiColor: true, colors: [ //Colors.blue, //Color(0xffb4f500), //Color(0xffb4f500), Colors.white, Colors.yellow[50]!, Colors.yellow[300]!, ], child: Html( data: bloc.productText2Display[idx], //Optional parameters: style: { "p": Style( color: Colors.blue, fontSize: FontSize(14), padding: const EdgeInsets.only(left: 5, right: 8, bottom: 5), textAlign: TextAlign.center, ), "strong": Style( color: Colors.red[800], fontWeight: FontWeight.bold, fontSize: FontSize(14), ), "h3": Style( color: Colors.yellow[600], fontSize: FontSize(16), textAlign: TextAlign.center, padding: const EdgeInsets.all(12), ), "li": Style( color: Colors.white, fontSize: FontSize(14), padding: const EdgeInsets.only(left: 5, bottom: 10, right: 5), //before: "*", display: Display.LIST_ITEM), "h2": Style( color: Colors.blue[600], fontWeight: FontWeight.bold, fontSize: FontSize(16), textAlign: TextAlign.center, ), "h1": Style( color: Colors.blue[400], fontWeight: FontWeight.bold, fontSize: FontSize.larger, alignment: Alignment.center, padding: const EdgeInsets.all(4), ), }, ), // final Color bgr )), ); }).toList(), ), getTrialDescription(bloc), Html( data: bloc.premiumFunctions, //Optional parameters: style: { "p": Style( color: Colors.white, fontSize: FontSize(14), padding: const EdgeInsets.only(left: 10, right: 8, bottom: 4), ), "strong": Style( color: Colors.orange[600], fontSize: FontSize(14), textShadow: [ Shadow( offset: Offset(2.0, 2.0), blurRadius: 4.0, color: Colors.black54, ), ], ), "li": Style( color: Colors.white, fontSize: FontSize(14), padding: const EdgeInsets.only(left: 10, bottom: 3, right: 10), ), "h2": Style( color: Colors.yellow[600], fontWeight: FontWeight.bold, fontSize: FontSize(16), textAlign: TextAlign.center, textShadow: [ Shadow( offset: Offset(5.0, 5.0), blurRadius: 12.0, color: Colors.black54, ), Shadow( offset: Offset(-3.0, 3.0), blurRadius: 12.0, color: Colors.black54, ), ], //padding: const EdgeInsets.all(4), ), }, ), SizedBox( height: 30, ), Container( padding: EdgeInsets.only(left: 55, right: 55), child: Text( t("Subscription Conditions"), style: GoogleFonts.inter(fontSize: 14, fontWeight: FontWeight.bold, color: Colors.white), )), Divider(), Container( padding: EdgeInsets.only(left: 55, right: 55), child: Text( t("Payment will be charged to your account. Subscription automatically renews unless auto-renew is turned off at least 24 hours before the end of the current period"), style: GoogleFonts.inter(fontSize: 12, color: Colors.white), )), Divider(), ])), ])); } Widget getTrialDescription(SalesBloc bloc) { return Container( padding: EdgeInsets.only(left: 55, right: 55), child: Html( data: bloc.trial, //Optional parameters: style: { "p": Style( color: Colors.white, fontSize: FontSize(13), padding: const EdgeInsets.all(4), textAlign: TextAlign.center, textShadow: [ Shadow( offset: Offset(2.0, 2.0), blurRadius: 6.0, color: Colors.black54, ) ], ), "strong": Style( color: Colors.orange[600], fontSize: FontSize(13), ), "h2": Style( color: Colors.orange[600], fontWeight: FontWeight.bold, fontSize: FontSize(18), textAlign: TextAlign.center, textShadow: [ Shadow( offset: Offset(5.0, 5.0), blurRadius: 12.0, color: Colors.black54, ), Shadow( offset: Offset(-3.0, 3.0), blurRadius: 12.0, color: Colors.black54, ), ], //padding: const EdgeInsets.all(4), ), }, )); } }