Skip to content

Commit

Permalink
Checkout button scrolls the list to the bottom, showing the bill
Browse files Browse the repository at this point in the history
  • Loading branch information
Chinmay-KB committed Apr 26, 2020
1 parent 991a065 commit ab64612
Show file tree
Hide file tree
Showing 5 changed files with 219 additions and 36 deletions.
1 change: 1 addition & 0 deletions gogrocy/lib/core/services/checkout_button_callback.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
typedef void CheckoutButtonPressed();
131 changes: 115 additions & 16 deletions gogrocy/lib/ui/views/cart/cart.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,39 +2,138 @@ import 'package:flutter/material.dart';
import 'package:gogrocy/core/enums/viewstate.dart';
import 'package:gogrocy/core/viewModels/cart_view_model.dart';
import 'package:gogrocy/ui/views/base_view.dart';
import 'package:gogrocy/ui/views/cart/cart_header.dart';
import 'package:gogrocy/ui/views/cart/cart_bill.dart';
import 'package:gogrocy/ui/views/cart/cart_list.dart';
import 'package:flutter/material.dart';
import 'package:gogrocy/core/enums/viewstate.dart';
import 'package:gogrocy/core/models/cart_list.dart';
import 'package:gogrocy/core/services/checkout_button_callback.dart';
import 'package:gogrocy/core/viewModels/cart_view_model.dart';
import 'package:gogrocy/ui/shared/colors.dart' as colors;
import 'package:gogrocy/ui/shared/constants.dart' as constants;

typedef void CheckoutButtonPressed();

class Cart extends StatelessWidget {
ScrollController scrollController=new ScrollController();

@override
Widget build(BuildContext context) {
return Scaffold(
body: BaseView<CartViewModel>(
onModelReady: (model){
model.getCartList(product_id: null,quantity: null);
onModelReady: (model) {
model.getCartList(product_id: null, quantity: null);
},
builder: (context,model,child){
if(model.state==ViewState.Busy)
builder: (context, model, child) {
if (model.state == ViewState.Busy)
return Center(child: CircularProgressIndicator());
else if(model.state==ViewState.Intermediate){
return ListView(
children: <Widget>[
CartHeader(model.intermediateCartList),
CartList(model,model.intermediateCartList),
],
);
}
else
else if (model.state == ViewState.Intermediate) {
return ListView(
shrinkWrap: true,
reverse: true,
controller: scrollController,
children: <Widget>[
CartHeader(model.cartList),
CartList(model,model.cartList),
SizedBox(height: 50,),
CartBill(model.cartList,),
CartList(model, model.intermediateCartList),
CartHeader(model: model.cartList,checkoutButtonPressed: (){scrollController.animateTo(0, duration: Duration(milliseconds: 600), curve: Curves.easeIn);print("Callback succeeds");},),

],
);
} else
return ListView(
shrinkWrap: true,
reverse: true,
controller: scrollController,
children: <Widget>[
SizedBox(height: 50,),
CartBill(model.cartList),
CartList(model, model.cartList),
CartHeader(model:model.cartList,checkoutButtonPressed:(){scrollController.animateTo(0, duration: Duration(milliseconds: 600), curve: Curves.easeIn);print("Callback succeeds");}),

],
);
},
),
);
}
}

class CartHeader extends StatelessWidget {

cart_list model;
CheckoutButtonPressed checkoutButtonPressed;

CartHeader({this.model,this.checkoutButtonPressed});

@override
Widget build(BuildContext context) {
return Stack(
children: <Widget>[
Image(image: AssetImage('assets/images/cart_background.png')),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
IntrinsicHeight(
child: Padding(
padding: const EdgeInsets.only(top: 8.0),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Container(
width: 20.0,
color: colors.CART_HEADER_COLOR,
),
Padding(
padding: const EdgeInsets.only(left: 8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Text("Your Cart",
style: TextStyle(fontFamily: 'Gilroy',fontSize: 32.0,fontWeight: FontWeight.bold, color: colors.CART_HEADER_COLOR),),
Text("Grand Total Rs"+model.sum.toString(),
style: TextStyle(fontFamily: 'Gilroy',fontSize: 14.0,fontWeight: FontWeight.w600, color: colors.CART_HEADER_COLOR),),

],
),
)
],
),
),
),
Padding(
padding: const EdgeInsets.only(left: 28.0,top: 12),
child: RawMaterialButton(
elevation: 0.0,
focusElevation: 1,
focusColor: colors.CART_BUTTON_BACKGROUND,
onPressed: () {
checkoutButtonPressed();
},
fillColor: colors.CART_BUTTON_BACKGROUND,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(3),
),
child: SizedBox(
width: constants.CartConfig.checkoutButtonWidth,
height: constants.CartConfig.checkoutButtonHeight,
child: Center(
child: Text(
'Checkout Now',
style: TextStyle(
color: colors.CART_BUTTON_TEXT,
fontSize: 13.0,
fontWeight: FontWeight.bold),
),
),
),
),
)
],
)
],
);
}
}

79 changes: 79 additions & 0 deletions gogrocy/lib/ui/views/cart/cart_bill.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
import 'package:flutter/material.dart';
import 'package:gogrocy/core/models/cart_list.dart';
import 'package:gogrocy/ui/shared/colors.dart' as colors;

class CartBill extends StatelessWidget {

cart_list cartList;
CartBill(this.cartList);

@override
Widget build(BuildContext context) {
int delivery=cartList.sum>499?0:20;
return Padding(
padding: const EdgeInsets.all(8.0),
child: ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(8)),
child: Container(
color: colors.CART_COUNTER_BACKGROUND,
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 22,vertical: 22,),
child: Column(
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Text("Particulars",style: TextStyle(fontSize: 16.0,fontWeight: FontWeight.bold),),
Text("Price",style: TextStyle(fontSize: 16.0,fontWeight: FontWeight.bold)),
],
),
SizedBox(height: 10,),
ListView.builder(
shrinkWrap: true,
itemCount: cartList.cart.length,
itemBuilder: (context,index){
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Text(cartList.cart[index].name),
Text("Rs "+(int.parse(cartList.cart[index].quantity_ordered)*int.parse(cartList.cart[index].price)).toString(),style: TextStyle(fontWeight: FontWeight.bold),),
],
);
}),
SizedBox(height: 10,),
Column(
children: <Widget>[
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Text("Sum total"),
Text("Rs "+ cartList.sum.toString(),style: TextStyle(fontWeight: FontWeight.bold),)
],

),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Text("Delivery charges"),
Text("Rs $delivery",style: TextStyle(fontWeight: FontWeight.bold),)
],

),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Text("Grand Total", ),
Text("Rs "+(cartList.sum+delivery).toString(),style:TextStyle(fontWeight: FontWeight.bold),)
],

)
],
)
],
),
),
),
),
);
}
}
17 changes: 11 additions & 6 deletions gogrocy/lib/ui/views/cart/cart_header.dart
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
import 'package:flutter/material.dart';
import 'package:gogrocy/core/enums/viewstate.dart';
import 'package:gogrocy/core/models/cart_list.dart';
import 'package:gogrocy/core/services/checkout_button_callback.dart';
import 'package:gogrocy/core/viewModels/cart_view_model.dart';
import 'package:gogrocy/ui/shared/colors.dart' as colors;
import 'package:gogrocy/ui/shared/constants.dart' as constants;
import 'package:gogrocy/core/services/checkout_button_callback.dart' as checkout_callback;


class CartHeader extends StatelessWidget {

cart_list model;
CheckoutButtonPressed checkoutButtonPressed;

CartHeader(cart_list m){
model=m;
}

CartHeader({this.model,this.checkoutButtonPressed});

@override
Widget build(BuildContext context) {
Expand Down Expand Up @@ -40,7 +41,7 @@ class CartHeader extends StatelessWidget {
children: <Widget>[
Text("Your Cart",
style: TextStyle(fontFamily: 'Gilroy',fontSize: 32.0,fontWeight: FontWeight.bold, color: colors.CART_HEADER_COLOR),),
Text("Grand Total- Rs"+model.sum.toString(),
Text("Grand Total Rs"+model.sum.toString(),
style: TextStyle(fontFamily: 'Gilroy',fontSize: 14.0,fontWeight: FontWeight.w600, color: colors.CART_HEADER_COLOR),),

],
Expand All @@ -54,7 +55,11 @@ class CartHeader extends StatelessWidget {
padding: const EdgeInsets.only(left: 28.0,top: 12),
child: RawMaterialButton(
elevation: 0.0,
onPressed: () {},
focusElevation: 1,
focusColor: colors.CART_BUTTON_BACKGROUND,
onPressed: () {
checkoutButtonPressed;
},
fillColor: colors.CART_BUTTON_BACKGROUND,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(3),
Expand Down
27 changes: 13 additions & 14 deletions gogrocy/lib/ui/views/cart/cart_list.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,28 +13,26 @@ class CartList extends StatelessWidget {
CartViewModel model;
cart_list cartList;

CartList(CartViewModel m, cart_list c){
model=m;
cartList=c;
CartList(CartViewModel m, cart_list c) {
model = m;
cartList = c;
}


@override
Widget build(BuildContext context) {
// TODO: implement build
cart_list usableCartList;
usableCartList=cartList;
usableCartList = cartList;
return Padding(
padding: const EdgeInsets.all(8.0),
child: ListView.builder(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
itemCount: usableCartList.cart.length,
itemBuilder: (context, index) {
int eachItemCost =
int.parse(usableCartList.cart[index].price);
int eachItemCost = int.parse(usableCartList.cart[index].price);
int quantityOrdered =
int.parse(usableCartList.cart[index].quantity_ordered);
int.parse(usableCartList.cart[index].quantity_ordered);
int totalCost = eachItemCost * quantityOrdered;
return Padding(
padding: const EdgeInsets.all(8.0),
Expand All @@ -47,7 +45,7 @@ class CartList extends StatelessWidget {
decoration: BoxDecoration(
border: Border.all(color: Colors.black26),
borderRadius:
BorderRadius.all(Radius.circular(10.0))),
BorderRadius.all(Radius.circular(10.0))),
width: constants.CartConfig.imageWidth,
height: constants.CartConfig.imageHeight,
child: Padding(
Expand All @@ -70,8 +68,7 @@ class CartList extends StatelessWidget {
children: <Widget>[
Text(usableCartList.cart[index].name,
style: TextStyle(
fontWeight: FontWeight.w500,
fontSize: 14.0)),
fontWeight: FontWeight.w500, fontSize: 14.0)),
Text('₹' + usableCartList.cart[index].price,
style: TextStyle(
fontWeight: FontWeight.w500,
Expand All @@ -80,8 +77,10 @@ class CartList extends StatelessWidget {
Padding(
padding: const EdgeInsets.only(top: 20.0),
child: CartCounter(
maxQuantity:int.parse(usableCartList.cart[index].quantity) ,
orderedQuantity: int.parse(usableCartList.cart[index].quantity_ordered),
maxQuantity: int.parse(
usableCartList.cart[index].quantity),
orderedQuantity: int.parse(
usableCartList.cart[index].quantity_ordered),
model: model,
index: index,
),
Expand All @@ -102,7 +101,7 @@ class CartList extends StatelessWidget {
color: colors.PRIMARY_COLOR),
textAlign: TextAlign.right,
)),
)
),
],
),
);
Expand Down

0 comments on commit ab64612

Please sign in to comment.