Files
Vocasia-LMS-Mobile-apps--TA…/lib/screens/detail_course/components/header_coupon.dart

605 lines
24 KiB
Dart

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<WishlistPostProvider>(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<dynamic> 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<dynamic> 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<wishlistProvider.WishlistProvider>(context,
listen: false)
.getWishlist();
await Provider.of<CartProvider>(context, listen: false)
.addCart(dataDetailCourseModel.id);
await Provider.of<CartsProvider>(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<wishlistProvider.WishlistProvider>(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<CartsProvider>(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<detailCourseProv.DetailCourseProvider>(
// 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<WishlistProvider>(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<CartsProvider>(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<wishlistProvider.WishlistProvider>(
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<wishlistProvider.WishlistProvider>(
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<detailCourseProv.DetailCourseProvider>(
// 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),
),
],
),
);
}
}