Initial commit: Penyerahan final Source code Tugas Akhir
This commit is contained in:
325
lib/screens/cart/components/cart_list.dart
Normal file
325
lib/screens/cart/components/cart_list.dart
Normal file
@ -0,0 +1,325 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:flutter_svg/svg.dart';
|
||||
import 'package:initial_folder/helper/validator.dart';
|
||||
import 'package:initial_folder/providers/cart_provider.dart';
|
||||
import 'package:initial_folder/providers/order_provider.dart';
|
||||
import 'package:initial_folder/providers/page_provider.dart';
|
||||
import 'package:initial_folder/providers/whislist_provider.dart';
|
||||
import 'package:initial_folder/providers/wishlist_post_provider.dart';
|
||||
import 'package:initial_folder/screens/home/home_screen.dart';
|
||||
import 'package:initial_folder/size_config.dart';
|
||||
import 'package:initial_folder/theme.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:initial_folder/providers/carts_provider.dart' as cartsProv;
|
||||
|
||||
class CartList extends StatefulWidget {
|
||||
const CartList({
|
||||
Key? key,
|
||||
required this.image,
|
||||
required this.title,
|
||||
required this.instruktur,
|
||||
required this.price,
|
||||
required this.id,
|
||||
required this.idCourse,
|
||||
this.discountPrice,
|
||||
this.isSelected = false,
|
||||
}) : super(key: key);
|
||||
|
||||
final String image, instruktur, title, price, id, idCourse;
|
||||
final String? discountPrice;
|
||||
final bool isSelected;
|
||||
|
||||
@override
|
||||
State<CartList> createState() => _CartListState();
|
||||
}
|
||||
|
||||
class _CartListState extends State<CartList> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final pageProvider = Provider.of<PageProvider>(context);
|
||||
|
||||
Future<void> getCartsLength() async {}
|
||||
|
||||
return SingleChildScrollView(
|
||||
scrollDirection: Axis.horizontal,
|
||||
child: Padding(
|
||||
padding: EdgeInsets.only(bottom: getProportionateScreenHeight(20)),
|
||||
child: Container(
|
||||
width: getProportionateScreenWidth(330 + 108),
|
||||
child: Stack(
|
||||
children: [
|
||||
Container(
|
||||
height: getProportionateScreenHeight(98),
|
||||
width: getProportionateScreenWidth(330),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(5),
|
||||
color: Theme.of(context).brightness == Brightness.dark
|
||||
? seventeenColor
|
||||
: sixteenColor,
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: EdgeInsets.only(
|
||||
top: getProportionateScreenHeight(9),
|
||||
right: getProportionateScreenWidth(15),
|
||||
),
|
||||
child: Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Flexible(
|
||||
flex: 11,
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Container(
|
||||
width: getProportionateScreenWidth(156),
|
||||
height: getProportionateScreenWidth(88),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(2),
|
||||
image: DecorationImage(
|
||||
fit: BoxFit.cover,
|
||||
image: NetworkImage(widget.image),
|
||||
),
|
||||
),
|
||||
),
|
||||
SizedBox(height: getProportionateScreenHeight(8)),
|
||||
],
|
||||
),
|
||||
),
|
||||
SizedBox(width: getProportionateScreenWidth(10)),
|
||||
Flexible(
|
||||
flex: 7,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
widget.title,
|
||||
style: thirdTextStyle.copyWith(
|
||||
fontWeight: semiBold,
|
||||
fontSize: getProportionateScreenWidth(14),
|
||||
),
|
||||
maxLines: 2,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
SizedBox(height: getProportionateScreenHeight(2)),
|
||||
Text(
|
||||
'oleh ${widget.instruktur}',
|
||||
style: primaryTextStyle.copyWith(
|
||||
fontSize: getProportionateScreenWidth(12),
|
||||
fontWeight: light,
|
||||
),
|
||||
),
|
||||
Visibility(
|
||||
visible: widget.discountPrice != "0",
|
||||
child: Text(
|
||||
numberFormat(widget.discountPrice),
|
||||
style: thirdTextStyle.copyWith(
|
||||
fontSize: getProportionateScreenWidth(10),
|
||||
fontWeight: light,
|
||||
),
|
||||
),
|
||||
),
|
||||
Visibility(
|
||||
visible: widget.discountPrice == widget.price,
|
||||
child: SizedBox(
|
||||
height: getProportionateScreenHeight(2)),
|
||||
),
|
||||
Visibility(
|
||||
visible: widget.discountPrice != widget.price,
|
||||
child: Text(
|
||||
numberFormat(widget.price),
|
||||
style: thirdTextStyle.copyWith(
|
||||
decoration: TextDecoration.lineThrough,
|
||||
color: secondaryColor,
|
||||
fontSize: getProportionateScreenWidth(10),
|
||||
fontWeight: light,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
// widget.isSelected
|
||||
// ? Padding(
|
||||
// padding: EdgeInsets.only(
|
||||
// top: getProportionateScreenHeight(13),
|
||||
// left: getProportionateScreenWidth(6),
|
||||
// ),
|
||||
// child:
|
||||
// SvgPicture.asset("assets/icons/cart_checklist.svg"),
|
||||
// )
|
||||
// : Padding(
|
||||
// padding: EdgeInsets.only(
|
||||
// top: getProportionateScreenHeight(13),
|
||||
// left: getProportionateScreenWidth(6),
|
||||
// ),
|
||||
// child:
|
||||
// SvgPicture.asset("assets/icons/cart_unchecklist.svg"),
|
||||
// ),
|
||||
widget.isSelected
|
||||
? Container(
|
||||
height: getProportionateScreenHeight(98),
|
||||
width: getProportionateScreenWidth(330),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(5),
|
||||
color: Theme.of(context).brightness == Brightness.light
|
||||
? baruTexthitam.withOpacity(0.1)
|
||||
: baruTexthitam.withOpacity(0.3),
|
||||
),
|
||||
)
|
||||
: Container(),
|
||||
Consumer<cartsProv.CartsProvider>(
|
||||
builder: (context, state, _) {
|
||||
if (state.state == cartsProv.ResultState.Loading) {
|
||||
return CircularProgressIndicator(
|
||||
color: primaryColor,
|
||||
strokeWidth: 2,
|
||||
);
|
||||
} else {
|
||||
return Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
GestureDetector(
|
||||
onTap: () async {
|
||||
await Provider.of<WishlistPostProvider>(context,
|
||||
listen: false)
|
||||
.addWishlist(int.parse(widget.idCourse));
|
||||
await Provider.of<WishlistProvider>(context,
|
||||
listen: false)
|
||||
.getWishlist();
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
backgroundColor:
|
||||
Theme.of(context).colorScheme.background,
|
||||
elevation: 0.0,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
),
|
||||
contentPadding:
|
||||
EdgeInsets.fromLTRB(12, 26, 22, 15),
|
||||
content: Padding(
|
||||
padding: EdgeInsets.only(
|
||||
bottom: getProportionateScreenHeight(14)),
|
||||
child: Text(
|
||||
textAlign: TextAlign.left,
|
||||
'Berhasil memindahkan kursus ke wishlist',
|
||||
style: thirdTextStyle.copyWith(
|
||||
fontSize: getProportionateScreenWidth(12),
|
||||
),
|
||||
),
|
||||
),
|
||||
actions: [
|
||||
SizedBox(
|
||||
width: getProportionateScreenWidth(10)),
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
child: Text(
|
||||
'Kembali',
|
||||
style: thirdTextStyle.copyWith(
|
||||
fontSize:
|
||||
getProportionateScreenWidth(12),
|
||||
color: primaryColor,
|
||||
),
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: getProportionateScreenWidth(3)),
|
||||
GestureDetector(
|
||||
onTap: () {
|
||||
pageProvider.currentIndex = 3;
|
||||
Navigator.pushAndRemoveUntil(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => HomeScreen(),
|
||||
),
|
||||
(route) => false);
|
||||
},
|
||||
child: Text(
|
||||
'Lihat Wishlist',
|
||||
style: thirdTextStyle.copyWith(
|
||||
fontSize:
|
||||
getProportionateScreenWidth(12),
|
||||
color: primaryColor,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
},
|
||||
child: SvgPicture.asset(
|
||||
"assets/icons/cart_wishlist.svg",
|
||||
height: getProportionateScreenHeight(96),
|
||||
width: getProportionateScreenWidth(45),
|
||||
),
|
||||
),
|
||||
GestureDetector(
|
||||
onTap: () async {
|
||||
await Provider.of<CartProvider>(context,
|
||||
listen: false)
|
||||
.deleteCart(widget.id);
|
||||
Provider.of<OrderProvider>(context, listen: false)
|
||||
.removeOrder(
|
||||
id: widget.idCourse,
|
||||
title: widget.title,
|
||||
price: widget.price,
|
||||
imageUrl: widget.image,
|
||||
discountPrice: widget.discountPrice,
|
||||
instructor: widget.instruktur,
|
||||
);
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
backgroundColor:
|
||||
Theme.of(context).colorScheme.background,
|
||||
elevation: 0.0,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
),
|
||||
contentPadding:
|
||||
EdgeInsets.fromLTRB(12, 26, 22, 15),
|
||||
content: Padding(
|
||||
padding: EdgeInsets.only(
|
||||
bottom: getProportionateScreenHeight(14)),
|
||||
child: Text(
|
||||
textAlign: TextAlign.center,
|
||||
'Berhasil menghapus kursus',
|
||||
style: thirdTextStyle.copyWith(
|
||||
fontSize: getProportionateScreenWidth(12),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
await Provider.of<cartsProv.CartsProvider>(context,
|
||||
listen: false)
|
||||
.getCarts();
|
||||
},
|
||||
child: SvgPicture.asset(
|
||||
"assets/icons/cart_remove.svg",
|
||||
height: getProportionateScreenHeight(96),
|
||||
width: getProportionateScreenWidth(45),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user