Skip to content

Commit

Permalink
Change quantity of items from cart itself
Browse files Browse the repository at this point in the history
  • Loading branch information
Chinmay-KB committed Apr 26, 2020
1 parent b5cdc73 commit 991a065
Show file tree
Hide file tree
Showing 8 changed files with 233 additions and 107 deletions.
2 changes: 1 addition & 1 deletion gogrocy/lib/core/enums/viewstate.dart
Original file line number Diff line number Diff line change
@@ -1 +1 @@
enum ViewState { Idle, Busy }
enum ViewState { Idle, Busy, Intermediate }
20 changes: 20 additions & 0 deletions gogrocy/lib/core/models/cart_edit.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
class CartEdit {
String message;
bool success;

CartEdit({this.message, this.success});

factory CartEdit.fromJson(Map<String, dynamic> json) {
return CartEdit(
message: json['message'],
success: json['success'],
);
}

Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['message'] = this.message;
data['success'] = this.success;
return data;
}
}
30 changes: 26 additions & 4 deletions gogrocy/lib/core/services/api.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:gogrocy/core/models/cart_edit.dart';
import 'package:gogrocy/core/models/cart_list.dart';
import 'package:gogrocy/core/models/product.dart';
import 'package:gogrocy/core/models/signup_model.dart';
Expand All @@ -11,7 +12,8 @@ import 'package:gogrocy/service_locator.dart';
import 'package:http/http.dart' as http;

const String baseUrl = "https://gogrocy.in/api/";
const String TOKEN='eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE1ODY5NzYxMjEsImlzcyI6Imh0dHBzOlwvXC9nb2dyb2N5LmluXC8iLCJuYmYiOjE1ODY5NzYxMzEsImRhdGEiOnsidXNlcl9pZCI6Ijg1IiwidXNlcl9yb2xlIjoiMSJ9fQ.3jwji_K1l07ttdUUjn4UJbJfuAbrC0msqk7jeftpSzDR7u2d8RCiGWz3ritX3hQIa0MGUe2fIaidErX-xtTQdA';
const String TOKEN =
'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE1ODY5NzYxMjEsImlzcyI6Imh0dHBzOlwvXC9nb2dyb2N5LmluXC8iLCJuYmYiOjE1ODY5NzYxMzEsImRhdGEiOnsidXNlcl9pZCI6Ijg1IiwidXNlcl9yb2xlIjoiMSJ9fQ.3jwji_K1l07ttdUUjn4UJbJfuAbrC0msqk7jeftpSzDR7u2d8RCiGWz3ritX3hQIa0MGUe2fIaidErX-xtTQdA';

const String allProducts = baseUrl + "getProducts";
const String singleProduct = baseUrl + "getProduct";
Expand All @@ -20,7 +22,8 @@ const String login = baseUrl + "login";
const String signUp = baseUrl + "signup";
const String verifyUser = baseUrl + "verifyUser";
const String addAddress = baseUrl + "add_address";
const String cartList=baseUrl+'getCartItems';
const String cartList = baseUrl + 'getCartItems';
const String editCart=baseUrl+ "add_to_cart";

class Apis {
final SharedPrefsService _sharedPrefsService = locator<SharedPrefsService>();
Expand Down Expand Up @@ -121,6 +124,25 @@ class Apis {
return user;
}
}

Future<CartEdit> editCartList(
{@required String product_id, @required String quantity}) async {
Map<String,String>body={
"product_id":product_id,
"quantity":quantity
};
var client = new http.Client();
bool connectionState = await checkStatus();
if (connectionState) //TODO: Add a proper else return
{
var response = await client.post(editCart, headers: {
'Authorization': 'Bearer $TOKEN',
},body: body);
return CartEdit.fromJson(json.decode(response.body));
} else
(print("Network failure"));
}

Future<List<Product>> getAllProducts() async {
var client = new http.Client();
bool connectionState = await checkStatus();
Expand All @@ -143,8 +165,8 @@ class Apis {
var client = new http.Client();
bool connectionState = await checkStatus();
if (connectionState) //TODO: Add a proper else return
{
var response = await client.post(cartList,headers: {
{
var response = await client.post(cartList, headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer $TOKEN',
Expand Down
29 changes: 27 additions & 2 deletions gogrocy/lib/core/viewModels/cart_view_model.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import 'package:gogrocy/core/enums/viewstate.dart';
import 'package:gogrocy/core/models/cart_edit.dart';
import 'package:gogrocy/core/models/cart_list.dart';
import 'package:gogrocy/core/services/api.dart';
import 'package:gogrocy/core/viewModels/base_model.dart';
Expand All @@ -8,11 +9,35 @@ class CartViewModel extends BaseModel{
Apis _apis=locator<Apis>();

cart_list cartList;
cart_list intermediateCartList;
CartEdit cartEditResponse;

Future getCartList() async{
Future getCartList({String product_id, String quantity}) async{

if(product_id==null){
print("First time API called");
setState(ViewState.Busy);
cartList=await _apis.getCartList();
setState(ViewState.Idle);
}
if(product_id!=null){
print("Updating API calledUpdating API calledUpdating API calledUpdating API calledUpdating API called");
intermediateCartList=cartList;
setState(ViewState.Intermediate);
print("Updating API calledUpdating API calledUpdating API calledUpdating API calledUpdating API called");
cartEditResponse=await _apis.editCartList(product_id: product_id, quantity: quantity);
cartList=await _apis.getCartList();
setState(ViewState.Idle);

}

}

Future editCartList(String product_id, String quantity) async{
setState(ViewState.Busy);
cartList=await _apis.getCartList();
await _apis.editCartList(product_id: product_id, quantity: quantity);
setState(ViewState.Idle);

}

}
33 changes: 28 additions & 5 deletions gogrocy/lib/ui/views/cart/cart.dart
Original file line number Diff line number Diff line change
@@ -1,16 +1,39 @@
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_list.dart';

class Cart extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: ListView(
children: <Widget>[
CartHeader(),
CartList()
],
body: BaseView<CartViewModel>(
onModelReady: (model){
model.getCartList(product_id: null,quantity: null);
},
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
return ListView(
shrinkWrap: true,
children: <Widget>[
CartHeader(model.cartList),
CartList(model,model.cartList),
],
);

},
),
);
}
Expand Down
13 changes: 12 additions & 1 deletion gogrocy/lib/ui/views/cart/cart_header.dart
Original file line number Diff line number Diff line change
@@ -1,8 +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/viewModels/cart_view_model.dart';
import 'package:gogrocy/ui/shared/colors.dart' as colors;
import 'package:gogrocy/ui/shared/constants.dart' as constants;

class CartHeader extends StatelessWidget {

cart_list model;

CartHeader(cart_list m){
model=m;
}


@override
Widget build(BuildContext context) {
return Stack(
Expand All @@ -29,7 +40,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",
Text("Grand Total- Rs"+model.sum.toString(),
style: TextStyle(fontFamily: 'Gilroy',fontSize: 14.0,fontWeight: FontWeight.w600, color: colors.CART_HEADER_COLOR),),

],
Expand Down
Loading

0 comments on commit 991a065

Please sign in to comment.