Skip to content

Commit

Permalink
Merge branch 'products_v5' into development
Browse files Browse the repository at this point in the history
# Conflicts:
#	gogrocy/lib/core/services/api.dart
  • Loading branch information
Chinmay-KB committed Apr 29, 2020
2 parents d27145c + 8f95fe5 commit 18f548c
Show file tree
Hide file tree
Showing 10 changed files with 225 additions and 13 deletions.
27 changes: 25 additions & 2 deletions gogrocy/lib/core/services/api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ const String getOrders = baseUrl + "getorders";
const String getProductsByCityRequest=baseUrl+ "getProductsByCity";
const String getCategoriesByCityRequest=baseUrl+"getProductsByCategory";
const String getOrderRequest=baseUrl+"getorders";
const String searchByCity=baseUrl+"searchProductsByCity";

class Apis {
final SharedPrefsService _sharedPrefsService = locator<SharedPrefsService>();
Expand Down Expand Up @@ -214,7 +215,7 @@ class Apis {

Future<ProductsByCity> getProductsByCityCategory(String cat_id) async {
Map<String, String> body = {
"city": await _sharedPrefsService.getCity(), // TODO: Add city here from SharedPrefs
"city":await _sharedPrefsService.getCity(), // TODO: Add city here from SharedPrefs
"cat_id": cat_id
};
String jwt = await _sharedPrefsService.getJWT();
Expand All @@ -232,6 +233,26 @@ class Apis {
return null;
}

Future<ProductsByCity> searchProductByCity(String query) async {
Map<String, String> body = {
"city":await _sharedPrefsService.getCity(), // TODO: Add city here from SharedPrefs
"query": query
};
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(searchByCity,
headers: {
'Authorization': 'Bearer $jwt',
},
body: body);
return ProductsByCity.fromJson(json.decode(response.body));
} else
return null;
}



Future<List<Product>> getAllProducts() async {
Expand All @@ -257,7 +278,7 @@ class Apis {
bool connectionState = await checkStatus();
String jwt = await _sharedPrefsService.getJWT();
Map<String, String> body = {
"city": await _sharedPrefsService.getCity(), // TODO: Add city here from SharedPrefs
"city":await _sharedPrefsService.getCity(), // TODO: Add city here from SharedPrefs
};
if (connectionState) //TODO: Add a proper else return
{
Expand All @@ -275,6 +296,8 @@ class Apis {
return null;
}
}


Future<List<Address>> getAddresses() async {
var client = new http.Client();
bool connectionState = await checkStatus();
Expand Down
27 changes: 27 additions & 0 deletions gogrocy/lib/core/viewModels/search_view_model.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import 'package:gogrocy/core/enums/viewstate.dart';
import 'package:gogrocy/core/models/ProductsByCity.dart';
import 'package:gogrocy/core/models/product.dart';
import 'package:gogrocy/core/services/api.dart';
import 'package:gogrocy/core/viewModels/base_model.dart';
import 'package:gogrocy/service_locator.dart';

class SearchViewModel extends BaseModel{
Apis _apis=locator<Apis>();

ProductsByCity searchResults;
bool isSearchNull;

Future getAllProducts(String query) async{

if(query!="") {
setState(ViewState.Busy);
searchResults = await _apis.searchProductByCity(query);
//allProducts.result.shuffle();
setState(ViewState.Idle);
isSearchNull=false;
}
else isSearchNull=true;
}


}
2 changes: 2 additions & 0 deletions gogrocy/lib/service_locator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import 'package:gogrocy/core/viewModels/categoty_product_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/orderLis_model.dart';
import 'package:gogrocy/core/viewModels/search_view_model.dart';
import 'package:gogrocy/core/viewModels/signup_view_model.dart';
import 'package:gogrocy/core/viewModels/startup_view_model.dart';
import 'package:gogrocy/ui/views/category/category_product_view.dart';
Expand All @@ -34,5 +35,6 @@ void setupLocator() {
locator.registerFactory(()=>OrderViewModel());
locator.registerFactory<ProductDetailModel>(() => ProductDetailModel());
locator.registerFactory(() => CartViewModel());
locator.registerFactory(()=>SearchViewModel());
locator.registerFactory(() => BottomNavBarProvider());
}
3 changes: 3 additions & 0 deletions gogrocy/lib/ui/router.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import 'package:gogrocy/ui/views/category/category_product_view.dart';
import 'package:gogrocy/ui/views/orders/order_details_view.dart';
import 'package:gogrocy/ui/views/city_selection.dart';
import 'package:gogrocy/ui/views/product_detail_view.dart';
import 'package:gogrocy/ui/views/search_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 @@ -62,6 +63,8 @@ Route<dynamic> generateRoute(RouteSettings settings) {
case 'orderDetails':
OrderDetailsArguments orderDetailsArguments=settings.arguments;
return MaterialPageRoute(builder: (context)=>OrderDetailsView(orders: orderDetailsArguments.orders,index: orderDetailsArguments.index,));
case 'search':
return MaterialPageRoute(builder: (context)=>SearchView());
default:
return MaterialPageRoute(
builder: (context) => Scaffold(
Expand Down
3 changes: 3 additions & 0 deletions gogrocy/lib/ui/shared/constants.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ double scaleRatio = mediaQueryData.devicePixelRatio/2.002;
double screenHeight = mediaQueryData.size.height;
double screenWidth = mediaQueryData.size.width;

final String imageBaseUrl="https://res.cloudinary.com/gogrocy/image/upload/c_scale,w_120/v1";


class LoginConfig {
static double loginTextFieldWidth = 280 * scaleRatio;
static double titleTextSize = 22 * scaleRatio;
Expand Down
2 changes: 1 addition & 1 deletion gogrocy/lib/ui/views/cart/cart_list.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import 'package:gogrocy/ui/widgets/cart_counter.dart';

class CartList extends StatelessWidget {
final String baseImgUrl =
"https://res.cloudinary.com/gogrocy/image/upload/v1/";
constants.imageBaseUrl;
CartViewModel model;
cart_list cartList;

Expand Down
4 changes: 2 additions & 2 deletions gogrocy/lib/ui/views/home/grid_list.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ class GridList extends StatelessWidget {

GridList(this.resultList);
final ScrollController _scrollController = ScrollController();
final String baseImgUrl =
"https://res.cloudinary.com/gogrocy/image/upload/v1/";
final String baseImgUrl =constants.imageBaseUrl;

final NavigationService _navigationService = locator<NavigationService>();

@override
Expand Down
144 changes: 144 additions & 0 deletions gogrocy/lib/ui/views/search_view.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
import 'package:flappy_search_bar/flappy_search_bar.dart';
import 'package:flutter/material.dart';
import 'package:gogrocy/core/enums/viewstate.dart';
import 'package:gogrocy/core/models/ProductsByCity.dart';
import 'package:gogrocy/core/services/navigation_service.dart';
import 'package:gogrocy/core/viewModels/search_view_model.dart';
import 'package:gogrocy/service_locator.dart';
import 'package:gogrocy/ui/views/base_view.dart';
import 'package:gogrocy/ui/views/category/product_list.dart';
import 'package:gogrocy/ui/views/home/category_list.dart';
import 'package:gogrocy/ui/views/home/grid_list.dart';
import 'package:simple_search_bar/simple_search_bar.dart';
import 'package:gogrocy/ui/shared/colors.dart' as colors;
import 'package:gogrocy/ui/shared/constants.dart' as constants;

class SearchView extends StatelessWidget {
final AppBarController appBarController = AppBarController();
var focusNode = FocusNode();
final SearchBarController<Result> _searchBarController =
SearchBarController();
final TextEditingController _textEditingController =
new TextEditingController();

@override
Widget build(BuildContext context) {
return BaseView<SearchViewModel>(
onModelReady: (model) {
model.getAllProducts("");
},
builder: (context, model, child) {
return SafeArea(
child: Scaffold(
resizeToAvoidBottomPadding: false,
body: Stack(
children: <Widget>[
(model.state == ViewState.Idle)
? ((!model.isSearchNull)
? (!model.searchResults.empty)
? (Center(
child: Column(
children: <Widget>[
Container(
height: constants.screenHeight * 0.13,
),
CategoryProductList(
model.searchResults.result),
],
),
))
: Center(
child: (Column(
children: <Widget>[
Container(
height: 80,
child: Image(
image: AssetImage(
'assets/images/no_products.png'),
)),
Text(
"We don't have that product right now",
style: TextStyle(
fontSize: 18.0,
fontFamily: 'Gilroy',
fontWeight: FontWeight.bold),
)
],
mainAxisAlignment: MainAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
)),
)
: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Icon(
Icons.search,
size: 60,
color: Colors.black12,
),
Text(
"Search for your favourite products",
style: TextStyle(
fontSize: 18.0,
fontFamily: 'Gilroy',
fontWeight: FontWeight.bold),
),
],
)))
: Center(child: CircularProgressIndicator()),
Align(
alignment: Alignment(0, -0.95),
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
color: Colors.transparent,
child: Material(
elevation: 8,
child: Theme(
data: ThemeData(
primaryColor: Colors.white,
primaryColorDark: Colors.white),
child: TextField(
autofocus: true,
textInputAction: TextInputAction.search,
focusNode: focusNode,
controller: _textEditingController,
cursorColor: colors.PRIMARY_COLOR,
decoration: new InputDecoration(
border: InputBorder.none,
focusedBorder: InputBorder.none,
enabledBorder: InputBorder.none,
errorBorder: InputBorder.none,
disabledBorder: InputBorder.none,
suffixIcon: (_textEditingController
.text.length !=
0)
? GestureDetector(
onTap: () {
_textEditingController.clear();
FocusScope.of(context)
.requestFocus(focusNode);
},
child: Icon(Icons.cancel))
: Container(
width: 0,
height: 0,
),
contentPadding: EdgeInsets.all(15),
hintText: "Search"),
onSubmitted: (value) {
model.getAllProducts(value);
},
),
),
),
),
),
),
],
)));
},
);
}
}
22 changes: 14 additions & 8 deletions gogrocy/lib/ui/widgets/appbar.dart
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:gogrocy/core/services/navigation_service.dart';
import 'package:gogrocy/core/services/shared_prefs.dart';
import 'package:gogrocy/service_locator.dart';
import 'package:gogrocy/ui/shared/constants.dart' as constants;

class TopAppBar extends StatelessWidget implements PreferredSizeWidget {
final SharedPrefsService sharedPrefsService = locator<SharedPrefsService>();
final NavigationService _navigationService = locator<NavigationService>();

@override
Widget build(BuildContext context) {
constants.mediaQueryData = MediaQuery.of(context);
Expand Down Expand Up @@ -70,14 +73,17 @@ class TopAppBar extends StatelessWidget implements PreferredSizeWidget {
),
),
),
Container(
width: constants.screenWidth/3,
child: Align(
alignment: Alignment.centerRight,
child: Padding(
padding: EdgeInsets.only(
right: constants.AppBarConfig.searchIconPaddingRight),
child: Icon(Icons.search),
GestureDetector(
onTap: ()=>_navigationService.navigateTo("search"),
child: Container(
width: constants.screenWidth/3,
child: Align(
alignment: Alignment.centerRight,
child: Padding(
padding: EdgeInsets.only(
right: constants.AppBarConfig.searchIconPaddingRight),
child: Icon(Icons.search),
),
),
),
),
Expand Down
4 changes: 4 additions & 0 deletions gogrocy/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@ dependencies:
shared_preferences: ^0.5.6+3
smooth_page_indicator: ^0.1.5
flushbar: 1.9.1
simple_search_bar: ^0.1.7
flappy_search_bar: ^1.7.2




# The following adds the Cupertino Icons font to your application.
Expand Down

0 comments on commit 18f548c

Please sign in to comment.