Initial commit: Penyerahan final Source code Tugas Akhir
This commit is contained in:
770
lib/screens/detail_course/detail_course_coupon_screen.dart
Normal file
770
lib/screens/detail_course/detail_course_coupon_screen.dart
Normal file
@ -0,0 +1,770 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_feather_icons/flutter_feather_icons.dart';
|
||||
import 'package:initial_folder/base_service.dart';
|
||||
import 'package:initial_folder/helper/user_info.dart';
|
||||
import 'package:initial_folder/helper/validator.dart';
|
||||
|
||||
import 'package:initial_folder/providers/cart_provider.dart' as cartProvider;
|
||||
import 'package:initial_folder/providers/carts_provider.dart' as cartsProvider;
|
||||
import 'package:initial_folder/providers/detail_course_coupon_provider.dart';
|
||||
|
||||
import 'package:initial_folder/providers/detail_rating_course_provider.dart'
|
||||
as detailRatingCourseProvider;
|
||||
import 'package:initial_folder/providers/instructor_provider.dart'
|
||||
as instructorProvider;
|
||||
import 'package:initial_folder/providers/lesson_course_provider.dart'
|
||||
as lessonCourseProvider;
|
||||
import 'package:initial_folder/providers/my_course_provider.dart'
|
||||
as myCourseProvider;
|
||||
import 'package:initial_folder/providers/order_provider.dart' as orderProvider;
|
||||
import 'package:initial_folder/providers/payments_provider.dart'
|
||||
as paymentsProvider;
|
||||
import 'package:initial_folder/providers/section_lesson_course_provider.dart'
|
||||
as sectionLessonCourseProvider;
|
||||
import 'package:initial_folder/providers/tab_provider.dart';
|
||||
import 'package:initial_folder/providers/total_price_provider.dart';
|
||||
import 'package:initial_folder/providers/whislist_provider.dart'
|
||||
as wishlistProvider;
|
||||
import 'package:initial_folder/providers/wishlist_post_provider.dart';
|
||||
import 'package:initial_folder/screens/cart/cart_page.dart';
|
||||
import 'package:initial_folder/screens/checkout/checkout_coupon_page.dart';
|
||||
import 'package:initial_folder/screens/checkout/checkout_page.dart';
|
||||
import 'package:initial_folder/screens/course/play_course_page.dart';
|
||||
import 'package:initial_folder/screens/detail_course/components/header_coupon.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/my_course/success_free_course.dart';
|
||||
import 'package:initial_folder/screens/splash/splash_screen_login.dart';
|
||||
import 'package:initial_folder/screens/detail_course/components/app_bar.dart';
|
||||
import 'package:initial_folder/screens/detail_course/components/custom_tab_bar.dart';
|
||||
import 'package:initial_folder/screens/detail_course/components/header.dart';
|
||||
import 'package:initial_folder/services/course_service.dart';
|
||||
import 'package:initial_folder/services/instructor_service.dart';
|
||||
import 'package:initial_folder/services/lesson_course_service.dart';
|
||||
import 'package:initial_folder/services/section_lesson_service.dart';
|
||||
import 'package:initial_folder/size_config.dart';
|
||||
import 'package:initial_folder/theme.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class DetailCourseCouponScreen extends StatelessWidget {
|
||||
const DetailCourseCouponScreen(
|
||||
{Key? key, required this.idcourse, required this.coupon})
|
||||
: super(key: key);
|
||||
final String idcourse;
|
||||
final String coupon;
|
||||
|
||||
static String routeName = "/course_detail";
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final typeCoupon = Provider.of<TotalPriceProvider>(context).typeCoupon;
|
||||
final selected = Provider.of<TotalPriceProvider>(context);
|
||||
// Provider.of<orderProvider.OrderProvider>(context).clearOrder();
|
||||
// Provider.of<orderProvider.OrderProvider>(context).clearInvoice();
|
||||
paymentsProvider.PaymentsProvider pay =
|
||||
Provider.of<paymentsProvider.PaymentsProvider>(context);
|
||||
SizeConfig().init(context);
|
||||
showNotifDialog(BuildContext context) {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) {
|
||||
return AlertDialog(
|
||||
content: Consumer<paymentsProvider.PaymentsProvider>(
|
||||
builder: (context, state, child) {
|
||||
if (state.state == paymentsProvider.ResultState.gagal) {
|
||||
return Container(
|
||||
height: getProportionateScreenHeight(40),
|
||||
width: getProportionateScreenWidth(15),
|
||||
child: Center(
|
||||
child: Text(
|
||||
'Anda sudah memiliki kursus ini',
|
||||
style: primaryTextStyle.copyWith(fontSize: 12),
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
),
|
||||
);
|
||||
} else {
|
||||
return Text(
|
||||
'Erorr lain',
|
||||
style: thirdTextStyle,
|
||||
);
|
||||
}
|
||||
},
|
||||
),
|
||||
);
|
||||
},
|
||||
// barrierDismissible: false,
|
||||
);
|
||||
}
|
||||
|
||||
Future _showDialogNotLogin(String teks) {
|
||||
return showDialog(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
contentPadding: EdgeInsets.fromLTRB(12, 20, 12, 1),
|
||||
content: Text(
|
||||
'Mohon login terlebih dahulu sebelum $teks',
|
||||
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<void> _showMessage() {
|
||||
return showModalBottomSheet<void>(
|
||||
context: context,
|
||||
builder: (BuildContext context) {
|
||||
return Consumer<cartProvider.CartProvider>(
|
||||
builder: (context, state, _) {
|
||||
if (state.state == cartProvider.ResultState.loading) {
|
||||
return Container(
|
||||
decoration: BoxDecoration(
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
blurRadius: 10,
|
||||
offset: Offset(0, -1),
|
||||
)
|
||||
],
|
||||
borderRadius: BorderRadius.vertical(
|
||||
top: Radius.circular(10),
|
||||
),
|
||||
color: Color(0xff242424),
|
||||
),
|
||||
height: getProportionateScreenHeight(200),
|
||||
child: Center(
|
||||
child: CircularProgressIndicator(
|
||||
strokeWidth: 1,
|
||||
color: primaryColor,
|
||||
),
|
||||
));
|
||||
} else if (state.state == cartProvider.ResultState.succes) {
|
||||
return Container(
|
||||
decoration: BoxDecoration(
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
blurRadius: 10,
|
||||
offset: Offset(0, -1),
|
||||
)
|
||||
],
|
||||
borderRadius: BorderRadius.vertical(
|
||||
top: Radius.circular(10),
|
||||
),
|
||||
color: Color(0xff242424),
|
||||
),
|
||||
height: getProportionateScreenHeight(200),
|
||||
child: Column(
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
IconButton(
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
icon: Icon(
|
||||
Icons.close,
|
||||
color: secondaryColor,
|
||||
size: 15,
|
||||
)),
|
||||
],
|
||||
),
|
||||
Icon(
|
||||
Icons.check_rounded,
|
||||
size: 40,
|
||||
color: eightColor,
|
||||
),
|
||||
SizedBox(
|
||||
height: getProportionateScreenWidth(15),
|
||||
),
|
||||
Text(
|
||||
'Berhasil menambahkan kursus ke keranjang',
|
||||
textAlign: TextAlign.center,
|
||||
style: primaryTextStyle.copyWith(
|
||||
fontSize: SizeConfig.blockHorizontal! * 4,
|
||||
letterSpacing: 0.5),
|
||||
),
|
||||
SizedBox(
|
||||
height: getProportionateScreenWidth(4),
|
||||
),
|
||||
TextButton(
|
||||
style: ButtonStyle(
|
||||
overlayColor: MaterialStateProperty.all(sixColor),
|
||||
padding: MaterialStateProperty.all(
|
||||
EdgeInsets.symmetric(vertical: 1, horizontal: 1),
|
||||
),
|
||||
),
|
||||
onPressed: () {
|
||||
Navigator.of(context).push(MaterialPageRoute(
|
||||
builder: (context) => CartPage(
|
||||
idcourse: idcourse,
|
||||
)));
|
||||
},
|
||||
child: Text(
|
||||
'Lihat keranjang',
|
||||
style: thirdTextStyle.copyWith(
|
||||
fontSize: getProportionateScreenWidth(13),
|
||||
letterSpacing: 0.5,
|
||||
color: primaryColor),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
} else if (state.state == cartProvider.ResultState.failed) {
|
||||
return Container(
|
||||
decoration: BoxDecoration(
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
blurRadius: 10,
|
||||
offset: Offset(0, -1),
|
||||
)
|
||||
],
|
||||
borderRadius: BorderRadius.vertical(
|
||||
top: Radius.circular(10),
|
||||
),
|
||||
color: Color(0xff242424),
|
||||
),
|
||||
height: getProportionateScreenHeight(200),
|
||||
child: Column(
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
IconButton(
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
icon: Icon(
|
||||
Icons.close,
|
||||
color: secondaryColor,
|
||||
size: 15,
|
||||
)),
|
||||
],
|
||||
),
|
||||
Icon(
|
||||
Icons.check_rounded,
|
||||
size: 40,
|
||||
color: eightColor,
|
||||
),
|
||||
SizedBox(
|
||||
height: getProportionateScreenWidth(15),
|
||||
),
|
||||
Text(
|
||||
'Berhasil menghapus kursus dari keranjang',
|
||||
textAlign: TextAlign.center,
|
||||
style: primaryTextStyle.copyWith(
|
||||
fontSize: SizeConfig.blockHorizontal! * 4,
|
||||
letterSpacing: 0.5),
|
||||
),
|
||||
SizedBox(
|
||||
height: getProportionateScreenWidth(4),
|
||||
),
|
||||
TextButton(
|
||||
style: ButtonStyle(
|
||||
overlayColor: MaterialStateProperty.all(sixColor),
|
||||
padding: MaterialStateProperty.all(
|
||||
EdgeInsets.symmetric(vertical: 1, horizontal: 1),
|
||||
),
|
||||
),
|
||||
onPressed: () {
|
||||
Navigator.of(context).push(MaterialPageRoute(
|
||||
builder: (context) => CartPage(
|
||||
idcourse: idcourse,
|
||||
)));
|
||||
},
|
||||
child: Text(
|
||||
'Lihat keranjang',
|
||||
style: thirdTextStyle.copyWith(
|
||||
fontSize: getProportionateScreenWidth(13),
|
||||
letterSpacing: 0.5,
|
||||
color: primaryColor),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
} else {
|
||||
return Container(
|
||||
decoration: BoxDecoration(
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
blurRadius: 10,
|
||||
offset: Offset(0, -1),
|
||||
)
|
||||
],
|
||||
borderRadius: BorderRadius.vertical(
|
||||
top: Radius.circular(10),
|
||||
),
|
||||
color: Color(0xff242424),
|
||||
),
|
||||
height: getProportionateScreenHeight(200),
|
||||
child: Center(
|
||||
child: Text('Terjadi Kesalahan'),
|
||||
));
|
||||
}
|
||||
});
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
handleNotLogin() async {
|
||||
var token = await UsersInfo().getToken();
|
||||
if (token != null || Condition.loginFirebase == true) {
|
||||
_showMessage();
|
||||
await Provider.of<cartProvider.CartProvider>(context, listen: false)
|
||||
.addCart(int.parse(idcourse));
|
||||
await Provider.of<cartsProvider.CartsProvider>(context, listen: false)
|
||||
.getCarts();
|
||||
await Provider.of<WishlistPostProvider>(context, listen: false)
|
||||
.addWishlist(int.parse(idcourse));
|
||||
await Provider.of<wishlistProvider.WishlistProvider>(context,
|
||||
listen: false)
|
||||
.getWishlist();
|
||||
// cartsDatabaseProvider.setCarts(id);
|
||||
} else {
|
||||
String teks = 'menambahkan ke keranjang';
|
||||
return _showDialogNotLogin(teks);
|
||||
}
|
||||
}
|
||||
|
||||
handleNotLoginWishlistNotExist() async {
|
||||
var token = await UsersInfo().getToken();
|
||||
if (token != null || Condition.loginFirebase == true) {
|
||||
_showMessage();
|
||||
await Provider.of<cartProvider.CartProvider>(context, listen: false)
|
||||
.addCart(int.parse(idcourse));
|
||||
await Provider.of<cartsProvider.CartsProvider>(context, listen: false)
|
||||
.getCarts();
|
||||
} else {
|
||||
String teks = 'menambahkan ke keranjang';
|
||||
return _showDialogNotLogin(teks);
|
||||
}
|
||||
}
|
||||
|
||||
handleNotLoginBuy(
|
||||
{required String title,
|
||||
required String price,
|
||||
required String discountPrice,
|
||||
required String instructor,
|
||||
required String imageUrl}) async {
|
||||
var token = await UsersInfo().getToken();
|
||||
if (token != null || Condition.loginFirebase == true) {
|
||||
Provider.of<orderProvider.OrderProvider>(context, listen: false)
|
||||
.clear();
|
||||
Provider.of<orderProvider.OrderProvider>(context, listen: false)
|
||||
.addOrder(
|
||||
id: idcourse,
|
||||
title: title,
|
||||
price: price,
|
||||
discountPrice: discountPrice,
|
||||
imageUrl: imageUrl,
|
||||
instructor: instructor,
|
||||
);
|
||||
Provider.of<orderProvider.OrderProvider>(context, listen: false)
|
||||
.getTotalPrice(discountPrice);
|
||||
Navigator.of(context).push(MaterialPageRoute(
|
||||
builder: (context) => CheckoutCouponPage(
|
||||
discountPrice: discountPrice,
|
||||
idCourse: idcourse,
|
||||
instructor: instructor,
|
||||
title: title,
|
||||
price: price,
|
||||
coupon: coupon,
|
||||
)));
|
||||
} else {
|
||||
String teks = 'membeli kursus';
|
||||
return _showDialogNotLogin(teks);
|
||||
}
|
||||
}
|
||||
|
||||
handleNotLoginFree(
|
||||
String? id,
|
||||
String? title,
|
||||
String? thumb,
|
||||
String? instr,
|
||||
) async {
|
||||
var token = await UsersInfo().getToken();
|
||||
if (token != null || Condition.loginFirebase == true) {
|
||||
if (await pay.freeCourse(int.parse(idcourse))) {
|
||||
await Provider.of<myCourseProvider.MyCourseProvider>(context,
|
||||
listen: false)
|
||||
.getMyCourse();
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => SuccessFreeCourse(
|
||||
id: id,
|
||||
thumbnail: thumb,
|
||||
title: title,
|
||||
instructor: instr,
|
||||
)));
|
||||
} else {
|
||||
showNotifDialog(context);
|
||||
}
|
||||
} else {
|
||||
String teks = 'memiliki kursus ini';
|
||||
return _showDialogNotLogin(teks);
|
||||
}
|
||||
}
|
||||
|
||||
Widget freeBottomNav(String? courseId, String? instructor,
|
||||
String? thumbnail, String? title) {
|
||||
return Container(
|
||||
width: double.infinity,
|
||||
height: getProportionateScreenHeight(60),
|
||||
decoration: BoxDecoration(
|
||||
border:
|
||||
Border.symmetric(horizontal: BorderSide(color: fourthColor)),
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
offset: Offset(0, -2),
|
||||
blurRadius: 50,
|
||||
color: fourthColor.withOpacity(0.15))
|
||||
]),
|
||||
child: Row(
|
||||
children: [
|
||||
SizedBox(
|
||||
width: 13,
|
||||
),
|
||||
Text(
|
||||
'Gratis',
|
||||
style: primaryTextStyle.copyWith(
|
||||
fontSize: getProportionateScreenHeight(20),
|
||||
letterSpacing: 0.23),
|
||||
),
|
||||
Spacer(),
|
||||
GestureDetector(
|
||||
onTap: () =>
|
||||
handleNotLoginFree(courseId, title, thumbnail, instructor),
|
||||
child: Container(
|
||||
margin: EdgeInsets.only(right: getProportionateScreenWidth(15)),
|
||||
width: getProportionateScreenWidth(123),
|
||||
height: getProportionateScreenHeight(33),
|
||||
decoration: BoxDecoration(
|
||||
color: primaryColor,
|
||||
borderRadius: BorderRadius.circular(5)),
|
||||
child: Center(
|
||||
child: Consumer<paymentsProvider.PaymentsProvider>(
|
||||
builder: (context, state, _) {
|
||||
if (state.stateProcess ==
|
||||
paymentsProvider.Process.uninitialized) {
|
||||
return Text(
|
||||
'Miliki sekarang',
|
||||
style: thirdTextStyle.copyWith(
|
||||
fontSize: SizeConfig.blockHorizontal! * 3.5,
|
||||
letterSpacing: 0.085,
|
||||
color: Color(0xff181818),
|
||||
),
|
||||
);
|
||||
} else if (state.stateProcess ==
|
||||
paymentsProvider.Process.loading) {
|
||||
return Container(
|
||||
width: 20,
|
||||
height: 20,
|
||||
child: CircularProgressIndicator(
|
||||
color: eightColor,
|
||||
strokeWidth: 2,
|
||||
),
|
||||
);
|
||||
}
|
||||
return Text(
|
||||
'Miliki sekarang',
|
||||
style: thirdTextStyle.copyWith(
|
||||
fontSize: SizeConfig.blockHorizontal! * 3.5,
|
||||
letterSpacing: 0.085,
|
||||
color: Color(0xff181818),
|
||||
),
|
||||
);
|
||||
}),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget playCourseNav(String? courseId, String? instructor,
|
||||
String? thumbnail, String? title) {
|
||||
return Container(
|
||||
width: double.infinity,
|
||||
height: getProportionateScreenHeight(60),
|
||||
decoration: BoxDecoration(
|
||||
border:
|
||||
Border.symmetric(horizontal: BorderSide(color: fourthColor)),
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
offset: Offset(0, -2),
|
||||
blurRadius: 50,
|
||||
color: fourthColor.withOpacity(0.15))
|
||||
]),
|
||||
child: Center(
|
||||
child: ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
minimumSize: Size(getProportionateScreenWidth(90),
|
||||
getProportionateScreenHeight(33)),
|
||||
backgroundColor: primaryColor,
|
||||
),
|
||||
onPressed: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => MultiProvider(
|
||||
providers: [
|
||||
ChangeNotifierProvider(
|
||||
create: (context) =>
|
||||
lessonCourseProvider.LessonCourseProvider(
|
||||
lessonCourseService: LessonCourseService(),
|
||||
id: int.parse(courseId ?? '0'),
|
||||
),
|
||||
),
|
||||
ChangeNotifierProvider(
|
||||
create: (context) => DetailCourseCouponProvider(
|
||||
courseService: CourseService(),
|
||||
id: courseId ?? '1',
|
||||
coupon: coupon))
|
||||
],
|
||||
child: PlayCourse(
|
||||
judul: title ?? '',
|
||||
instruktur: instructor ?? '',
|
||||
thumbnail: thumbnail ??
|
||||
'$baseUrl/uploads/courses_thumbnail/course_thumbnail_default_57.jpg',
|
||||
courseeid: idcourse,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
child: Text(
|
||||
'Lanjutkan Belajar',
|
||||
style: thirdTextStyle.copyWith(color: Colors.black),
|
||||
),
|
||||
),
|
||||
));
|
||||
}
|
||||
|
||||
Widget bottomNav(
|
||||
{required String discountPrice,
|
||||
required String idCourse,
|
||||
required String title,
|
||||
required String price,
|
||||
required String instructor,
|
||||
required String imageUrl}) {
|
||||
return Container(
|
||||
width: double.infinity,
|
||||
height: getProportionateScreenHeight(60),
|
||||
decoration: BoxDecoration(
|
||||
border:
|
||||
Border.symmetric(horizontal: BorderSide(color: fourthColor)),
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
offset: Offset(0, -2),
|
||||
blurRadius: 50,
|
||||
color: fourthColor.withOpacity(0.15))
|
||||
]),
|
||||
child: Row(
|
||||
children: [
|
||||
SizedBox(
|
||||
width: 13,
|
||||
),
|
||||
Text(
|
||||
numberFormat(discountPrice.toString().replaceAll('.', '')),
|
||||
style: primaryTextStyle.copyWith(
|
||||
fontSize: getProportionateScreenHeight(20),
|
||||
letterSpacing: 0.23),
|
||||
),
|
||||
Spacer(),
|
||||
Container(
|
||||
width: getProportionateScreenWidth(39),
|
||||
height: getProportionateScreenHeight(34),
|
||||
decoration: BoxDecoration(
|
||||
border: Border.all(color: primaryColor),
|
||||
borderRadius: BorderRadius.circular(5),
|
||||
),
|
||||
child: Consumer<wishlistProvider.WishlistProvider>(
|
||||
builder: (context, state, _) {
|
||||
return IconButton(
|
||||
padding: EdgeInsets.zero,
|
||||
splashRadius: 17,
|
||||
onPressed: () => state.data.contains(idcourse)
|
||||
? handleNotLogin()
|
||||
: handleNotLoginWishlistNotExist(),
|
||||
icon: Icon(FeatherIcons.shoppingCart,
|
||||
color: primaryColor, size: 20),
|
||||
);
|
||||
}),
|
||||
),
|
||||
// ),
|
||||
SizedBox(
|
||||
width: getProportionateScreenWidth(12),
|
||||
),
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
int total = int.parse(discountPrice);
|
||||
selected.selectedTotalPrice =
|
||||
total <= 50000 ? total + 5000 : total;
|
||||
print("Ini total price buat ke va ${selected.totalPrice}");
|
||||
handleNotLoginBuy(
|
||||
title: title,
|
||||
discountPrice: discountPrice,
|
||||
imageUrl: imageUrl,
|
||||
price: price,
|
||||
instructor: instructor);
|
||||
},
|
||||
child: Container(
|
||||
margin: EdgeInsets.only(right: getProportionateScreenWidth(15)),
|
||||
width: getProportionateScreenWidth(113),
|
||||
height: getProportionateScreenHeight(33),
|
||||
decoration: BoxDecoration(
|
||||
color: primaryColor,
|
||||
borderRadius: BorderRadius.circular(5)),
|
||||
child: Center(
|
||||
child: Text(
|
||||
'Beli sekarang',
|
||||
style: thirdTextStyle.copyWith(
|
||||
fontSize: SizeConfig.blockHorizontal! * 3.5,
|
||||
letterSpacing: 0.085,
|
||||
color: Color(0xff181818),
|
||||
),
|
||||
)),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
return SafeArea(
|
||||
child: MultiProvider(
|
||||
providers: [
|
||||
ChangeNotifierProvider(
|
||||
create: (context) => DetailCourseCouponProvider(
|
||||
courseService: CourseService(), id: idcourse, coupon: coupon),
|
||||
),
|
||||
ChangeNotifierProvider(
|
||||
create: (context) =>
|
||||
detailRatingCourseProvider.DetailRatingCourseProvider(
|
||||
courseService: CourseService(), id: idcourse),
|
||||
),
|
||||
ChangeNotifierProvider(
|
||||
create: (context) =>
|
||||
sectionLessonCourseProvider.SectionLessonCourseProvider(
|
||||
id: idcourse, sectionLessonService: SectionLessonService()),
|
||||
),
|
||||
],
|
||||
child: Consumer<DetailCourseCouponProvider>(
|
||||
builder: (context, state, _) {
|
||||
if (state.state == ResultState.Loading) {
|
||||
return Center(
|
||||
child: CircularProgressIndicator(
|
||||
color: secondaryColor,
|
||||
strokeWidth: 2,
|
||||
),
|
||||
);
|
||||
} else if (state.state == ResultState.HasData) {
|
||||
var detailCourse = state.result!;
|
||||
|
||||
return Scaffold(
|
||||
body: ListView(
|
||||
physics: ScrollPhysics(),
|
||||
shrinkWrap: true,
|
||||
children: [
|
||||
AppBarHeader(
|
||||
idcourse: idcourse,
|
||||
),
|
||||
HeaderCoupon(
|
||||
dataDetailCourseModel: detailCourse,
|
||||
),
|
||||
MultiProvider(
|
||||
providers: [
|
||||
ChangeNotifierProvider(
|
||||
create: (context) =>
|
||||
instructorProvider.InstructorProvider(
|
||||
instructorService: InstructorService(),
|
||||
id: int.parse(detailCourse.instructorId!)),
|
||||
),
|
||||
ChangeNotifierProvider(
|
||||
create: (context) => TabProvider()),
|
||||
],
|
||||
child: CustomTabBar(
|
||||
dataDetailCourseModel: detailCourse,
|
||||
totalDuration: detailCourse.totalDuration,
|
||||
bio: detailCourse.bio,
|
||||
instructor: detailCourse.instructor,
|
||||
rating: detailCourse.rating[0].avgRating.toString(),
|
||||
review: detailCourse.rating[0].totalReview,
|
||||
totalLesson: detailCourse.totalLesson,
|
||||
totalStudent: detailCourse.totalStudents,
|
||||
),
|
||||
),
|
||||
]
|
||||
// var finalRating = double.parse(
|
||||
|
||||
),
|
||||
bottomNavigationBar: (detailCourse.isMine == 1)
|
||||
? playCourseNav(
|
||||
detailCourse.id,
|
||||
detailCourse.instructor,
|
||||
detailCourse.thumbnail,
|
||||
detailCourse.title,
|
||||
)
|
||||
: (detailCourse.isFreeCourse == '1' || typeCoupon == '1')
|
||||
? freeBottomNav(
|
||||
detailCourse.id,
|
||||
detailCourse.instructor,
|
||||
detailCourse.thumbnail,
|
||||
detailCourse.title,
|
||||
)
|
||||
: bottomNav(
|
||||
discountPrice: detailCourse.discountPrice ?? ' ',
|
||||
idCourse: detailCourse.id,
|
||||
instructor: detailCourse.instructor ?? '',
|
||||
price: detailCourse.price ?? '',
|
||||
title: detailCourse.title ?? '',
|
||||
imageUrl: detailCourse.thumbnail ??
|
||||
'$baseUrl/uploads/courses_thumbnail/course_thumbnail_default_57.jpg'),
|
||||
);
|
||||
} else if (state.state == ResultState.NoData) {
|
||||
return Center(child: Text(state.message));
|
||||
} else if (state.state == ResultState.Error) {
|
||||
return Center(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
Text('Server internal Error'),
|
||||
],
|
||||
),
|
||||
);
|
||||
} else {
|
||||
return Center(child: Text(''));
|
||||
}
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user