Skip to content

Commit

Permalink
Merge remote-tracking branch 'smarak/development' into products_v5
Browse files Browse the repository at this point in the history
  • Loading branch information
Chinmay-KB committed Apr 28, 2020
2 parents 002f2d0 + f3c74f2 commit f8af2d4
Show file tree
Hide file tree
Showing 11 changed files with 300 additions and 150 deletions.
1 change: 1 addition & 0 deletions gogrocy/lib/core/enums/connectivity_status.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
enum ConnectivityStatus { WiFi, Cellular, Offline }
63 changes: 33 additions & 30 deletions gogrocy/lib/core/services/api.dart
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@ 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 orderRequest=baseUrl+"placeOrder";
const String getOrders=baseUrl+"getorders";
const String editCart = baseUrl + "add_to_cart";
const String getAddress = baseUrl + "getAddress";
const String orderRequest = baseUrl + "placeOrder";
const String getOrders = baseUrl + "getorders";

class Apis {
final SharedPrefsService _sharedPrefsService = locator<SharedPrefsService>();
Expand Down Expand Up @@ -111,14 +111,19 @@ class Apis {
print("login via sign up success");
if (user.jwt != null) {
print("LOGIN " + user.jwt);
await verifyUserApi(user.jwt);
await addAddressApi(
name: name,
locality: locality,
city: city,
contact: mobile,
pinCode: zip,
jwt: user.jwt,
Future.delayed(
Duration(milliseconds: 10),
() async {
await verifyUserApi(user.jwt);
await addAddressApi(
name: name,
locality: locality,
city: city,
contact: mobile,
pinCode: zip,
jwt: user.jwt,
);
},
);
} else {
print("JWT FAIL: ACCOUNT NOT VALIDATED");
Expand Down Expand Up @@ -168,19 +173,20 @@ class Apis {
(print("Network failure"));
}

Future<bool> placeOrder(
{@required String address_id}) async {
Map<String,String>body={
"address_id":address_id,
Future<bool> placeOrder({@required String address_id}) async {
Map<String, String> body = {
"address_id": address_id,
};
String jwt=await _sharedPrefsService.getJWT();
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(orderRequest, headers: {
'Authorization': 'Bearer $jwt',
},body: body);
{
var response = await client.post(orderRequest,
headers: {
'Authorization': 'Bearer $jwt',
},
body: body);
return true;
} else
return false;
Expand Down Expand Up @@ -225,24 +231,22 @@ class Apis {
(print("Network failure"));
}

Future<Orders> getOrders() async{
Future<Orders> getOrders() 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(getAddress, headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': 'Bearer $jwt',
});
return json.decode(response.body);
} else
(print("Network failure"));
print("Network failure");
}



Future<cart_list> getCartList() async {
var client = new http.Client();
bool connectionState = await checkStatus();
Expand All @@ -256,7 +260,7 @@ class Apis {
});
return cart_list.fromJson(json.decode(response.body));
} else
(print("Network failure"));
print("Network failure");
}

Future<bool> checkStatus() async {
Expand All @@ -279,8 +283,7 @@ class Apis {
if ((json.decode(result.body))["success"]) {
print("VERIFIED USER");
return true;
}
else
} else
return false;
}
}
37 changes: 37 additions & 0 deletions gogrocy/lib/core/services/connectivity_service.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import 'dart:async';

import 'package:connectivity/connectivity.dart';
import 'package:gogrocy/core/enums/connectivity_status.dart';

class ConnectivityService {
StreamController<ConnectivityStatus> _connectionStatusController;

ConnectivityService() {
_connectionStatusController = StreamController<ConnectivityStatus>();
_initNetworkStatusListener();
}

StreamController<ConnectivityStatus> get connectionStatusController =>
_connectionStatusController;

void _initNetworkStatusListener() {
Connectivity().onConnectivityChanged.listen((ConnectivityResult result) {
_connectionStatusController.add(_getStatusFromResult(result));
});
}

ConnectivityStatus _getStatusFromResult(ConnectivityResult result) {
switch (result) {
case ConnectivityResult.wifi:
return ConnectivityStatus.WiFi;
case ConnectivityResult.mobile:
return ConnectivityStatus.Cellular;
case ConnectivityResult.none:
return ConnectivityStatus.Offline;
}
}

void disposeStream(){
_connectionStatusController.close();
}
}
47 changes: 34 additions & 13 deletions gogrocy/lib/core/viewModels/base_model.dart
Original file line number Diff line number Diff line change
@@ -1,29 +1,50 @@
import 'dart:io';
import 'dart:async';

import 'package:flutter/widgets.dart';
import 'package:gogrocy/core/enums/connectivity_status.dart';
import 'package:gogrocy/core/enums/viewstate.dart';
import 'package:gogrocy/core/services/connectivity_service.dart';

class BaseModel extends ChangeNotifier {
ViewState _state = ViewState.Idle;

ViewState get state => _state;

StreamController<ConnectivityStatus> _connectivityStatusController =
ConnectivityService().connectionStatusController;
Stream<ConnectivityStatus> connectivityStatus =
ConnectivityService().connectionStatusController.stream;
bool hasConnection = true;

BaseModel() {
connectivityStatus.listen((ConnectivityStatus status) {
switch (status) {
case ConnectivityStatus.WiFi:
this.hasConnection = true;
print(hasConnection);
notifyListeners();
break;
case ConnectivityStatus.Cellular:
this.hasConnection = true;
notifyListeners();
break;
case ConnectivityStatus.Offline:
this.hasConnection = false;
notifyListeners();
break;
}
});
}

void setState(ViewState viewState) {
_state = viewState;
notifyListeners();
}

Future<bool> checkInternetStatus() async {
try {
final result = await InternetAddress.lookup('google.com');
if (result.isNotEmpty && result[0].rawAddress.isNotEmpty) {
print('connected');
return true;
}
} on SocketException catch (_) {
print('not connected');
return false;
}
return false;
@override
void dispose() {
// TODO: implement dispose
_connectivityStatusController.close();
super.dispose();
}
}
4 changes: 4 additions & 0 deletions gogrocy/lib/core/viewModels/login_model.dart
Original file line number Diff line number Diff line change
Expand Up @@ -114,4 +114,8 @@ class LoginModel extends BaseModel {
}
return user;
}

checkInternetStatus() {
return true;
}
}
2 changes: 2 additions & 0 deletions gogrocy/lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:gogrocy/core/services/connectivity_service.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/router.dart';
import 'package:gogrocy/ui/views/startup_view.dart';
import 'package:gogrocy/ui/widgets/navbar/bottom_navbar.dart';
import 'package:provider/provider.dart';

void main() {
setupLocator();
Expand Down
45 changes: 39 additions & 6 deletions gogrocy/lib/ui/views/base_view.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
import 'dart:async';

import 'package:flushbar/flushbar.dart';
import 'package:flutter/material.dart';
import 'package:gogrocy/core/enums/connectivity_status.dart';
import 'package:gogrocy/core/services/connectivity_service.dart';
import 'package:gogrocy/core/viewModels/base_model.dart';
import 'package:gogrocy/ui/widgets/snackbars/no_internet_snackbar.dart';
import 'package:provider/provider.dart';

import '../../service_locator.dart';
import 'package:gogrocy/service_locator.dart';

class BaseView<T extends BaseModel> extends StatefulWidget {
final Widget Function(BuildContext context, T model, Widget child) builder;
Expand All @@ -19,18 +25,42 @@ class _BaseViewState<T extends BaseModel> extends State<BaseView<T>> {

bool isDisposed = false;

StreamController<ConnectivityStatus> _connectivityStatusController =
ConnectivityService().connectionStatusController;

Flushbar _onlineFlush = onlineSnackBar();
Flushbar _offlineFlush = offlineSnackBar();

@override
void initState() {
super.initState();
if(!isDisposed)
if (widget.onModelReady != null) {
_connectivityStatusController.stream.listen((ConnectivityStatus status) {
switch (status) {
case ConnectivityStatus.WiFi:
if (_offlineFlush.isShowing()) {
_offlineFlush.dismiss();
_onlineFlush.show(context);
}
break;
case ConnectivityStatus.Cellular:
if (_offlineFlush.isShowing()) {
_offlineFlush.dismiss();
_onlineFlush.show(context);
}
break;
case ConnectivityStatus.Offline:
_offlineFlush.show(context);
break;
}
});
if (!isDisposed) if (widget.onModelReady != null) {
widget.onModelReady(model);
}
}


@override
void dispose() {
_connectivityStatusController.close();
model.dispose();
isDisposed = true;
super.dispose();
Expand All @@ -39,7 +69,10 @@ class _BaseViewState<T extends BaseModel> extends State<BaseView<T>> {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<T>(
create: (context) => model,
child: Consumer<T>(builder: widget.builder));
create: (context) => model,
child: Consumer<T>(
builder: widget.builder,
),
);
}
}
Loading

0 comments on commit f8af2d4

Please sign in to comment.