Skip to content

Commit

Permalink
Product Details Basic View
Browse files Browse the repository at this point in the history
  • Loading branch information
Thesmader committed Apr 26, 2020
1 parent c78766b commit c9cbce2
Show file tree
Hide file tree
Showing 9 changed files with 234 additions and 89 deletions.
46 changes: 30 additions & 16 deletions gogrocy/lib/core/services/api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ const String signUp = baseUrl + "signup";
const String verifyUser = baseUrl + "verifyUser";
const String addAddress = baseUrl + "add_address";
const String cartList = baseUrl + 'getCartItems';
const String editCart=baseUrl+ "add_to_cart";
const String getAddress=baseUrl+"getAddress";
const String editCart = baseUrl + "add_to_cart";
const String getAddress = baseUrl + "getAddress";

class Apis {
final SharedPrefsService _sharedPrefsService = locator<SharedPrefsService>();
Expand All @@ -37,6 +37,23 @@ class Apis {
json.decode((await http.post(userStatus, body: body)).body));
}

Future<bool> addToCart({
@required String quantity,
@required String productId,
}) async {
Map<String, String> body = {"quantity": quantity, "product_id": productId};
String jwt = await _sharedPrefsService.getJWT();
var result = json.decode((await http.post(
editCart,
body: body,
headers: {
'Authorization': 'Bearer $jwt',
},
))
.body);
return result["success"];
}

Future<bool> addAddressApi(
{@required String name,
@required String locality,
Expand Down Expand Up @@ -130,21 +147,19 @@ class Apis {
}
}


Future<CartEdit> editCartList(
{@required String product_id, @required String quantity}) async {
Map<String,String>body={
"product_id":product_id,
"quantity":quantity
};
String jwt=await _sharedPrefsService.getJWT();
Map<String, String> body = {"product_id": product_id, "quantity": quantity};
String jwt = await _sharedPrefsService.getJWT();
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 $jwt',
},body: body);
var response = await client.post(editCart,
headers: {
'Authorization': 'Bearer $jwt',
},
body: body);
return CartEdit.fromJson(json.decode(response.body));
} else
(print("Network failure"));
Expand All @@ -168,12 +183,12 @@ class Apis {
}
}

Future<List<Address>> getAddresses() async{
Future<List<Address>> getAddresses() async {
var client = new http.Client();
bool connectionState = await checkStatus();
String jwt=await _sharedPrefsService.getJWT();
String jwt = await _sharedPrefsService.getJWT();
if (connectionState) //TODO: Add a proper else return
{
{
var address = List<Address>();
var response = await client.post(getAddress, headers: {
'Content-Type': 'application/json',
Expand All @@ -189,11 +204,10 @@ class Apis {
(print("Network failure"));
}


Future<cart_list> getCartList() async {
var client = new http.Client();
bool connectionState = await checkStatus();
String jwt=await _sharedPrefsService.getJWT();
String jwt = await _sharedPrefsService.getJWT();
if (connectionState) //TODO: Add a proper else return
{
var response = await client.post(cartList, headers: {
Expand Down
4 changes: 3 additions & 1 deletion gogrocy/lib/core/services/bottom_appbar_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@ import 'package:flutter/material.dart';
class BottomNavBarProvider with ChangeNotifier{
int _currentIndex=1;

PageController controller = PageController(initialPage: 1,/*keepPage: true*/);

get currentIndex=> _currentIndex;

set currentIndex(int index){
print("Changed index to $index");
_currentIndex=index;
controller.animateToPage(currentIndex, duration: Duration(milliseconds: 300), curve: Curves.easeOut);
notifyListeners();
}

}
13 changes: 13 additions & 0 deletions gogrocy/lib/core/viewModels/product_detail_model.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import 'package:gogrocy/core/services/api.dart';
import 'package:gogrocy/core/viewModels/base_model.dart';
import 'package:gogrocy/service_locator.dart';

class ProductDetailModel extends BaseModel {
final Apis _apiService = locator<Apis>();

String message;

Future<bool> addToCart(String productId) async {
return await _apiService.addToCart(quantity: "1", productId: productId);
}
}
12 changes: 7 additions & 5 deletions gogrocy/lib/service_locator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import 'package:gogrocy/core/services/navigation_service.dart';
import 'package:gogrocy/core/services/shared_prefs.dart';
import 'package:gogrocy/core/viewModels/cart_view_model.dart';
import 'package:gogrocy/core/viewModels/login_model.dart';
import 'package:gogrocy/core/viewModels/product_detail_model.dart';
import 'package:gogrocy/core/viewModels/startup_view_model.dart';
import 'package:gogrocy/ui/views/signup_view.dart';
import 'package:gogrocy/core/services/api.dart';
Expand All @@ -14,14 +15,15 @@ import 'package:gogrocy/core/viewModels/allProducts_model.dart';
GetIt locator = GetIt.instance;

void setupLocator() {
locator.registerFactory<SharedPrefsService>(()=>SharedPrefsService());
locator.registerFactory<SharedPrefsService>(() => SharedPrefsService());
locator.registerFactory<StartupViewModel>(() => StartupViewModel());
locator.registerFactory<NavigationService>(() => NavigationService());
locator.registerFactory<AuthenticationService>(() => AuthenticationService());
locator.registerLazySingleton(() => SignUpView());
locator.registerFactory<LoginModel>(() => LoginModel());
locator.registerLazySingleton(()=>Apis());
locator.registerFactory(()=>AllProductsModel());
locator.registerFactory(()=>CartViewModel());
locator.registerFactory(()=>BottomNavBarProvider());
locator.registerLazySingleton(() => Apis());
locator.registerFactory(() => AllProductsModel());
locator.registerFactory<ProductDetailModel>(() => ProductDetailModel());
locator.registerFactory(() => CartViewModel());
locator.registerFactory(() => BottomNavBarProvider());
}
5 changes: 5 additions & 0 deletions gogrocy/lib/ui/router.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import 'package:flutter/material.dart';
import 'package:gogrocy/core/models/product.dart';
import 'package:gogrocy/core/models/sign_up_arguments.dart';
import 'package:gogrocy/ui/views/product_detail_view.dart';
import 'package:gogrocy/ui/views/signup_view.dart';
import 'package:gogrocy/ui/views/landing_page.dart';
import 'package:gogrocy/ui/views/login_view.dart';
Expand Down Expand Up @@ -40,6 +42,9 @@ Route<dynamic> generateRoute(RouteSettings settings) {
child: child,
),
);
case 'product':
Product product = settings.arguments;
return MaterialPageRoute(builder: (context) => ProductDetailView(product));
default:
return MaterialPageRoute(
builder: (context) => Scaffold(
Expand Down
13 changes: 12 additions & 1 deletion gogrocy/lib/ui/views/base_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,23 @@ class BaseView<T extends BaseModel> extends StatefulWidget {
class _BaseViewState<T extends BaseModel> extends State<BaseView<T>> {
T model = locator<T>();

bool isDisposed = false;

@override
void initState() {
super.initState();
if(!isDisposed)
if (widget.onModelReady != null) {
widget.onModelReady(model);
}
super.initState();
}


@override
void dispose() {
model.dispose();
isDisposed = true;
super.dispose();
}

@override
Expand Down
111 changes: 60 additions & 51 deletions gogrocy/lib/ui/views/home/grid_list.dart
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
import 'package:flutter/material.dart';
import 'package:gogrocy/core/enums/viewstate.dart';
import 'package:gogrocy/core/services/navigation_service.dart';
import 'package:gogrocy/core/viewModels/allProducts_model.dart';
import 'package:gogrocy/service_locator.dart';
import 'package:gogrocy/ui/views/base_view.dart';
import 'package:gogrocy/ui/shared/constants.dart' as constants;

class GridList extends StatelessWidget {
final ScrollController _scrollController = new ScrollController();
final ScrollController _scrollController = ScrollController();
final String baseImgUrl =
"https://res.cloudinary.com/gogrocy/image/upload/v1/";
final NavigationService _navigationService = locator<NavigationService>();

@override
Widget build(BuildContext context) {
Expand All @@ -25,66 +28,72 @@ class GridList extends StatelessWidget {
// ignore: missing_return
if (model.state == ViewState.Busy)
return SizedBox(width:20.0,height: 20.0,child: Center(child: CircularProgressIndicator()));
else
return Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
decoration: BoxDecoration(
border: Border.all(color: Colors.black26),
borderRadius: BorderRadius.all(Radius.circular(10.0))),
child: Column(
children: <Widget>[
Flexible(
flex: 4,
child: SizedBox(
height: constants.HomePageConfig.productGridHeight*4/6,
child: Image(
image: NetworkImage(
'https://res.cloudinary.com/gogrocy/image/upload/v1/' +
model.allProducts[index].image),
fit: BoxFit.fitWidth,
),
)),
Flexible(
flex: 2,
child: Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[
Flexible(
flex: 8,
else {
return InkWell(
onTap: (){
_navigationService.navigateTo('product', arguments: model.allProducts[index]);
},
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
decoration: BoxDecoration(
border: Border.all(color: Colors.black26),
borderRadius: BorderRadius.all(Radius.circular(10.0))),
child: Column(
children: <Widget>[
Flexible(
flex: 4,
child: SizedBox(
height: constants.HomePageConfig.productGridHeight*4/6,
child: Image(
image: NetworkImage(
'https://res.cloudinary.com/gogrocy/image/upload/v1/' +
model.allProducts[index].image),
fit: BoxFit.fitWidth,
),
)),
Flexible(
flex: 2,
child: Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.end,
children: <Widget>[
Flexible(
flex: 8,
child: Padding(
padding: const EdgeInsets.only(left: 4,top: 4,bottom: 4),
child: Text(
model.allProducts[index].name,
style: TextStyle(
fontSize: 14.0,
fontWeight: FontWeight.w500),
maxLines: 2,
),
)),
Flexible(
child: Padding(
padding: const EdgeInsets.only(left: 4,top: 4,bottom: 4),
padding: const EdgeInsets.only(right: 4,top: 4,bottom: 4),
child: Text(
model.allProducts[index].name,
'₹' + model.allProducts[index].price,
style: TextStyle(
fontSize: 14.0,
fontSize: 18.0,
color: Color(0xff5FD900),
fontWeight: FontWeight.w500),
maxLines: 2,
),
)),
Flexible(
child: Padding(
padding: const EdgeInsets.only(right: 4,top: 4,bottom: 4),
child: Text(
'₹' + model.allProducts[index].price,
style: TextStyle(
fontSize: 18.0,
color: Color(0xff5FD900),
fontWeight: FontWeight.w500),
),
),
flex: 7,
)
],
flex: 7,
)
],
),
),
),
)
],
)
],
),
),
),
);
}
}),
);
}
Expand Down
Loading

0 comments on commit c9cbce2

Please sign in to comment.