import 'package:cached_network_image/cached_network_image.dart'; import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:flutter/material.dart'; import 'package:initial_folder/base_service.dart'; import 'package:initial_folder/helper/user_info.dart'; import 'package:initial_folder/models/detail_course_model.dart'; import 'package:initial_folder/providers/cart_provider.dart'; import 'package:initial_folder/providers/carts_provider.dart'; import 'package:initial_folder/providers/detail_course_provider.dart' as detailCourseProv; import 'package:initial_folder/providers/radeem_voucher_provider.dart'; import 'package:initial_folder/providers/whislist_provider.dart' as wishlistProvider; import 'package:initial_folder/providers/whislist_provider.dart'; import 'package:initial_folder/providers/wishlist_post_provider.dart'; import 'package:initial_folder/screens/cart/cart_page.dart'; import 'package:initial_folder/screens/checkout/components/field_kupon.dart'; import 'package:initial_folder/screens/detail_course/components/murid_and_rating.dart'; import 'package:initial_folder/screens/login/login_screen.dart'; import 'package:initial_folder/screens/login/login_with_email/login_email_screen.dart'; import 'package:initial_folder/screens/splash/splash_screen_login.dart'; import 'package:initial_folder/size_config.dart'; import 'package:initial_folder/theme.dart'; import 'package:initial_folder/widgets/login_regist/default_button.dart'; import 'package:initial_folder/widgets/login_regist/loading_button.dart'; import 'package:provider/provider.dart'; import 'package:shimmer/shimmer.dart'; class HeaderCoupon extends StatelessWidget { const HeaderCoupon({ Key? key, required this.dataDetailCourseModel, }) : super(key: key); final DataDetailCourseModel dataDetailCourseModel; @override Widget build(BuildContext context) { WishlistPostProvider wishlistPostProvider = Provider.of(context); // var finalRating = // double.parse((course.specificRating![0] / 20).toStringAsFixed(2)); final kuponController = TextEditingController(); bool isLoading = false; Future _showDialogNotLogin() { return showDialog( context: context, builder: (context) => AlertDialog( contentPadding: EdgeInsets.fromLTRB(12, 20, 12, 1), content: Text( 'Mohon login terlebih dahulu sebelum menambahkan ke wishlist', style: primaryTextStyle.copyWith( fontSize: getProportionateScreenWidth(12), letterSpacing: 1), ), actions: [ GestureDetector( onTap: () { Navigator.of(context).pop(); }, child: Text('Batal', style: primaryTextStyle.copyWith( fontSize: getProportionateScreenWidth(12), letterSpacing: 1, color: primaryColor)), ), SizedBox( width: getProportionateScreenWidth(5), ), GestureDetector( onTap: () => Navigator.of(context).pushNamedAndRemoveUntil( LoginEmail.routeName, (Route route) => false), child: Text('Login', style: primaryTextStyle.copyWith( fontSize: getProportionateScreenWidth(12), letterSpacing: 1, color: primaryColor)), ), ], ), ); } Future _showDialogNotLoginKupon() { return showDialog( context: context, builder: (context) => AlertDialog( contentPadding: EdgeInsets.fromLTRB(12, 20, 12, 1), content: Text( 'Mohon login terlebih dahulu sebelum tukar kupon', style: primaryTextStyle.copyWith( fontSize: getProportionateScreenWidth(12), letterSpacing: 1), ), actions: [ GestureDetector( onTap: () { Navigator.of(context).pop(); }, child: Text('Batal', style: primaryTextStyle.copyWith( fontSize: getProportionateScreenWidth(12), letterSpacing: 1, color: primaryColor)), ), SizedBox( width: getProportionateScreenWidth(5), ), GestureDetector( onTap: () => Navigator.of(context).pushNamedAndRemoveUntil( LoginEmail.routeName, (Route route) => false), child: Text('Login', style: primaryTextStyle.copyWith( fontSize: getProportionateScreenWidth(12), letterSpacing: 1, color: primaryColor)), ), ], ), ); } addWishlist() async { var connectivityResult = await (Connectivity().checkConnectivity()); if (connectivityResult == ConnectivityResult.none) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( duration: Duration(seconds: 1), backgroundColor: Colors.red[600], content: Text( 'No Internet Connections', textAlign: TextAlign.center, style: primaryTextStyle.copyWith(color: Colors.white), ), behavior: SnackBarBehavior.floating, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(5), ), ), ); } else { await wishlistPostProvider .addWishlist(int.parse(dataDetailCourseModel.id)); await Provider.of(context, listen: false) .getWishlist(); await Provider.of(context, listen: false) .addCart(dataDetailCourseModel.id); await Provider.of(context, listen: false).getCarts(); } } addWishlistNotExist() async { var connectivityResult = await (Connectivity().checkConnectivity()); if (connectivityResult == ConnectivityResult.none) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( duration: Duration(seconds: 1), backgroundColor: Colors.red[600], content: Text( 'No Internet Connections', textAlign: TextAlign.center, style: primaryTextStyle.copyWith(color: Colors.white), ), behavior: SnackBarBehavior.floating, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(5), ), ), ); } else { await wishlistPostProvider .addWishlist(int.parse(dataDetailCourseModel.id)); await Provider.of(context, listen: false) .getWishlist(); } } checkUser() async { var token = await UsersInfo().getToken(); if (token != null || Condition.loginFirebase == true) { addWishlist(); } else { return _showDialogNotLogin(); } } wishlistExist() async { var token = await UsersInfo().getToken(); if (token != null || Condition.loginFirebase == true) { addWishlistNotExist(); } else { return _showDialogNotLogin(); } } Future _showKupon() { return showDialog( context: context, builder: (context) => AlertDialog( contentPadding: EdgeInsets.fromLTRB(3, 1, 6, 30), content: SingleChildScrollView( child: Container( width: getProportionateScreenWidth(400), height: getProportionateScreenHeight(400), child: Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.end, children: [ IconButton( icon: Icon(Icons.cancel_rounded), onPressed: () { Navigator.pop(context); }, ), ], ), Center( child: Column( children: [ SizedBox( height: getProportionateScreenHeight(30), ), Image.asset('assets/images/discount_coupon.png'), SizedBox( height: getProportionateScreenHeight(26), ), Text( 'Tukarkan Voucher', style: thirdTextStyle.copyWith( letterSpacing: 1, fontWeight: semiBold, fontSize: getProportionateScreenWidth(14)), ), SizedBox( height: getProportionateScreenHeight(16), ), Text( 'Masukkan kode kupon untuk klaim\npromo menarik Vocasia', textAlign: TextAlign.center, style: primaryTextStyle.copyWith( fontWeight: reguler, fontSize: getProportionateScreenWidth(12)), ), SizedBox( height: getProportionateScreenHeight(30), ), Padding( padding: EdgeInsets.symmetric( horizontal: getProportionateScreenWidth(16)), child: FieldKupon( controler: kuponController, ), ), SizedBox( height: getProportionateScreenHeight(7), ), Padding( padding: EdgeInsets.symmetric( horizontal: getProportionateScreenWidth(15)), child: isLoading ? LoadingButton( backgroundButtonColor: primaryColor, textButtonColor: Color(0xff050505), ) : DefaultButton( text: 'Tukarkan', press: () async { final voucher = kuponController.text; if (await Provider.of< RadeemVoucherProvider>(context, listen: false) .radeemVoucher( int.parse(dataDetailCourseModel.id), voucher)) { await Provider.of(context, listen: false) .getCarts(); Navigator.of(context).push( MaterialPageRoute( builder: (context) => CartPage( idcourse: dataDetailCourseModel.id, isiVoucher: voucher, ), ), ); kuponController.clear(); // _showMessage('Voucher Berhasil Digunakan'); } else { ScaffoldMessenger.of(context) .showSnackBar(SnackBar( content: Text( "Kursus sudah di keranjang\natau kupon tidak valid"), duration: Duration(seconds: 4), )); } }, ), ), ], ), ), ], ), ), ), ), ); } Widget imageCourse() { return Container( margin: EdgeInsets.only( left: getProportionateScreenWidth(2), right: getProportionateScreenWidth(2)), width: double.infinity, height: getProportionateScreenWidth(178), child: Column( children: [ Container( width: double.infinity, height: getProportionateScreenWidth(178), child: CachedNetworkImage( imageUrl: dataDetailCourseModel.thumbnail ?? '$baseUrl/uploads/courses_thumbnail/course_thumbnail_default_57.jpg', imageBuilder: (context, imageProvider) => Container( decoration: BoxDecoration( borderRadius: BorderRadius.vertical( top: Radius.circular(5), bottom: Radius.circular(5)), image: DecorationImage( image: imageProvider, fit: BoxFit.fill, ), ), ), placeholder: (context, url) => Shimmer( child: Container( color: thirdColor, ), gradient: LinearGradient( stops: [0.4, 0.5, 0.6], colors: [secondaryColor, thirdColor, secondaryColor])), errorWidget: (context, url, error) => Icon(Icons.error), ), ), ], ), ); } Widget buttonKuponWishlist() { return Row( children: [ // Consumer( // builder: (context, state, _) { // if (state.state == detailCourseProv.ResultState.HasData) { // var detailCourse = state.result!.data[0][0]; // if (detailCourse.isFreeCourse == '1') { // return SizedBox(width: 60); // } else { // return Container( // margin: // EdgeInsets.only(left: getProportionateScreenWidth(2)), // child: ElevatedButton( // style: ElevatedButton.styleFrom( // primary: Color(0xFF2D2D2D), // shape: RoundedRectangleBorder( // borderRadius: BorderRadius.circular(6))), // onPressed: () { // (Condition.loginEmail || Condition.loginFirebase) // ? _showKupon() // : _showDialogNotLoginKupon(); // }, // child: Padding( // padding: EdgeInsets.symmetric( // horizontal: getProportionateScreenWidth(3), // vertical: getProportionateScreenHeight(6)), // child: Row( // crossAxisAlignment: CrossAxisAlignment.center, // mainAxisAlignment: MainAxisAlignment.start, // children: [ // Image.asset( // "assets/images/home_coupon.png", // color: Colors.white, // ), // SizedBox( // width: getProportionateScreenWidth(10), // ), // Text( // 'Tukar Kupon', // textAlign: TextAlign.start, // style: thirdTextStyle.copyWith( // color: Colors.white, // fontSize: getProportionateScreenWidth(12), // fontWeight: reguler), // ), // ], // ), // ), // ), // ); // } // } else { // return Container(); // } // }, // ), SizedBox(width: 60), SizedBox( width: getProportionateScreenWidth(16), ), // Consumer(builder: (context, state, _) { // return Text(state.data.contains(dataDetailCourseModel.id) // ? 'ada di wishlist' // : 'ga ada'); // }), Container( width: getProportionateScreenWidth(173), height: getProportionateScreenHeight(28), padding: EdgeInsets.symmetric( horizontal: getProportionateScreenWidth(12), vertical: getProportionateScreenHeight(6)), // color: Color(0xFF2D2D2D), decoration: BoxDecoration( borderRadius: BorderRadius.circular(6), color: Color(0xFF2D2D2D)), child: GestureDetector( onTap: Provider.of(context) .data .contains(dataDetailCourseModel.id) ? checkUser : wishlistExist, child: !Condition.loginEmail && !Condition.loginFirebase ? Row( children: [ Icon( Icons.favorite_border, color: Colors.white, size: getProportionateScreenWidth(18), ), SizedBox( width: getProportionateScreenWidth(6), ), Text( 'Tambah ke Wishlist', style: primaryTextStyle.copyWith( fontSize: getProportionateScreenWidth(12), letterSpacing: 0.2), ), ], ) : Row( children: [ Consumer( builder: (context, state, _) { if (state.state == wishlistProvider.ResultState.Loading) { return Center( child: CircularProgressIndicator( color: secondaryColor, strokeWidth: 1, ), ); } return Icon( state.data.contains(dataDetailCourseModel.id) ? Icons.favorite_outlined : Icons.favorite_border, color: state.data.contains(dataDetailCourseModel.id) ? Color(0xffCD2228) : Colors.white, size: getProportionateScreenWidth(18), ); }, ), SizedBox( width: getProportionateScreenWidth(6), ), Consumer( builder: (contex, state, _) { if (state.state == wishlistProvider.ResultState.Loading) { return Text(''); } return Text( state.data.contains(dataDetailCourseModel.id) ? 'Sudah dalam wihslist' : 'Tambah ke Wishlist', style: primaryTextStyle.copyWith( fontSize: getProportionateScreenWidth(12), letterSpacing: 0.2), ); }, ), ], ), ), ), ], ); } return Container( margin: EdgeInsets.only( left: getProportionateScreenWidth(15), right: getProportionateScreenWidth(15)), width: SizeConfig.screenWidth, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( width: getProportionateScreenWidth(232), child: Text(dataDetailCourseModel.title ?? ' ', style: primaryTextStyle.copyWith( letterSpacing: 0.1, fontSize: getProportionateScreenHeight(14)), maxLines: 3, overflow: TextOverflow.ellipsis), ), SizedBox( height: getProportionateScreenHeight(13), ), // Row( // // crossAxisAlignment: CrossAxisAlignment.start, // children: [ // RatingBarIndicator( // itemSize: getProportionateScreenWidth(10), // rating: double.parse( // dataDetailCourseModel.rating[0].avgRating != null // ? '${dataDetailCourseModel.rating[0].avgRating}' // : '5.0'), // direction: Axis.horizontal, // itemCount: 5, // //itemPadding: EdgeInsets.symmetric(horizontal: 4.0), // itemBuilder: (context, _) => // FaIcon(FontAwesomeIcons.solidStar, color: primaryColor)), // SizedBox( // width: getProportionateScreenWidth(4), // ), // Text( // double.parse(dataDetailCourseModel.rating[0].avgRating != null // ? '${dataDetailCourseModel.rating[0].avgRating}' // : '5.0') // .toString(), // style: primaryTextStyle.copyWith( // fontSize: getProportionateScreenWidth(10), // color: secondaryColor, // fontWeight: reguler), // ), // SizedBox( // width: getProportionateScreenWidth(4), // ), // Text( // // '(${course.numberOfRatings.toString()})', // '(${dataDetailCourseModel.rating[0].totalReview})', // style: primaryTextStyle.copyWith( // fontSize: getProportionateScreenWidth(10), // color: secondaryColor, // fontWeight: reguler), // ), // ], // ), SizedBox( height: getProportionateScreenHeight(9), ), MuridAndRating( dataDetailCourseModel: dataDetailCourseModel, ), SizedBox( height: getProportionateScreenHeight(16), ), imageCourse(), SizedBox( height: getProportionateScreenHeight(11), ), // Consumer( // builder: (context, state, _) { // if (state.state == detailCourseProv.ResultState.HasData) { // var detailCourse = state.result!.data[0][0]; // if (detailCourse.isMine == 1) { // return Container(); // } else { // return buttonKuponWishlist(); // } // } else { // return Container(); // } // }, // ), buttonKuponWishlist(), SizedBox( height: getProportionateScreenHeight(11), ), ], ), ); } }