Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions ios/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,10 @@ EXTERNAL SOURCES:

SPEC CHECKSUMS:
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
flutter_secure_storage: 23fc622d89d073675f2eaa109381aefbcf5a49be
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
sqflite_darwin: 5a7236e3b501866c1c9befc6771dfd73ffb8702d
flutter_secure_storage: 2c2ff13db9e0a5647389bff88b0ecac56e3f3418
path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564
shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7
sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0

PODFILE CHECKSUM: 819463e6a0290f5a72f145ba7cde16e8b6ef0796

Expand Down
4 changes: 2 additions & 2 deletions lib/core/constant/strings.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
const String appTitle = 'EShop';

// Networking and APIs
// const String baseUrl = 'https://e-commerce-mock-api-webservice.onrender.com';
const String baseUrl = 'http://192.168.1.43:4000';
const String baseUrl = 'https://e-commerce-mock-api-d8zv.onrender.com';
// const String baseUrl = 'http://192.168.1.43:4000';
const String defaultApiKey = '';
const String defaultSources = '';

Expand Down
27 changes: 27 additions & 0 deletions lib/core/constant/validators.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
class Validators {
static String? validateField(String? value, String fieldName) {
if (value == null || value.isEmpty) {
return "$fieldName can't be empty";
}
return null;
}

static String? validateEmail(String? value) {
if (value == null || value.isEmpty) {
return "Email can't be empty";
}
final emailRegex = RegExp(r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$');
if (!emailRegex.hasMatch(value)) {
return "Invalid email format";
}
return null;
}

static String? validatePasswordMatch(String? value, String otherValue) {
if (value != otherValue) {
return "Passwords do not match";
}
return null;
}

}
38 changes: 19 additions & 19 deletions lib/core/services/services_locator.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import 'package:eshop/domain/usecases/delivery_info/clear_local_delivery_info_usecase.dart';
import 'package:eshop/domain/usecases/delivery_info/delete_local_delivery_info_usecase.dart';
import 'package:eshop/domain/usecases/delivery_info/edit_delivery_info_usecase.dart';
import 'package:eshop/domain/usecases/delivery_info/get_selected_delivery_info_usecase.dart';
import 'package:eshop/domain/usecases/delivery_info/select_delivery_info_usecase.dart';
import 'package:eshop/domain/usecases/order/clear_local_order_usecase.dart';
import 'package:eshop/domain/usecases/order/delete_local_order_usecase.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:get_it/get_it.dart';
import 'package:http/http.dart' as http;
Expand Down Expand Up @@ -34,20 +34,20 @@ import '../../domain/repositories/order_repository.dart';
import '../../domain/repositories/product_repository.dart';
import '../../domain/repositories/user_repository.dart';
import '../../domain/usecases/cart/add_cart_item_usecase.dart';
import '../../domain/usecases/cart/clear_cart_usecase.dart';
import '../../domain/usecases/cart/get_cached_cart_usecase.dart';
import '../../domain/usecases/cart/sync_cart_usecase.dart';
import '../../domain/usecases/cart/delete_cart_usecase.dart';
import '../../domain/usecases/cart/get_local_cart_items_usecase.dart';
import '../../domain/usecases/cart/get_remote_cart_items_usecase.dart';
import '../../domain/usecases/category/filter_category_usecase.dart';
import '../../domain/usecases/category/get_cached_category_usecase.dart';
import '../../domain/usecases/category/get_local_category_usecase.dart';
import '../../domain/usecases/category/get_remote_category_usecase.dart';
import '../../domain/usecases/delivery_info/add_dilivey_info_usecase.dart';
import '../../domain/usecases/delivery_info/get_cached_delivery_info_usecase.dart';
import '../../domain/usecases/delivery_info/get_local_delivery_info_usecase.dart';
import '../../domain/usecases/delivery_info/get_remote_delivery_info_usecase.dart';
import '../../domain/usecases/order/add_order_usecase.dart';
import '../../domain/usecases/order/get_cached_orders_usecase.dart';
import '../../domain/usecases/order/get_local_orders_usecase.dart';
import '../../domain/usecases/order/get_remote_orders_usecase.dart';
import '../../domain/usecases/product/get_product_usecase.dart';
import '../../domain/usecases/user/get_cached_user_usecase.dart';
import '../../domain/usecases/user/get_local_user_usecase.dart';
import '../../domain/usecases/user/sign_in_usecase.dart';
import '../../domain/usecases/user/sign_out_usecase.dart';
import '../../domain/usecases/user/sign_up_usecase.dart';
Expand Down Expand Up @@ -94,7 +94,7 @@ Future<void> init() async {
);
// Use cases
sl.registerLazySingleton(() => GetRemoteCategoryUseCase(sl()));
sl.registerLazySingleton(() => GetCachedCategoryUseCase(sl()));
sl.registerLazySingleton(() => GetLocalCategoryUseCase(sl()));
sl.registerLazySingleton(() => FilterCategoryUseCase(sl()));
// Repository
sl.registerLazySingleton<CategoryRepository>(
Expand All @@ -118,10 +118,10 @@ Future<void> init() async {
() => CartBloc(sl(), sl(), sl(), sl()),
);
// Use cases
sl.registerLazySingleton(() => GetCachedCartUseCase(sl()));
sl.registerLazySingleton(() => GetLocalCartItemsUseCase(sl()));
sl.registerLazySingleton(() => AddCartUseCase(sl()));
sl.registerLazySingleton(() => SyncCartUseCase(sl()));
sl.registerLazySingleton(() => ClearCartUseCase(sl()));
sl.registerLazySingleton(() => GetRemoteCardItemsUseCase(sl()));
sl.registerLazySingleton(() => DeleteCartUseCase(sl()));
// Repository
sl.registerLazySingleton<CartRepository>(
() => CartRepositoryImpl(
Expand Down Expand Up @@ -149,12 +149,12 @@ Future<void> init() async {
);
// Use cases
sl.registerLazySingleton(() => GetRemoteDeliveryInfoUseCase(sl()));
sl.registerLazySingleton(() => GetCachedDeliveryInfoUseCase(sl()));
sl.registerLazySingleton(() => GetLocalDeliveryInfoUseCase(sl()));
sl.registerLazySingleton(() => AddDeliveryInfoUseCase(sl()));
sl.registerLazySingleton(() => EditDeliveryInfoUseCase(sl()));
sl.registerLazySingleton(() => SelectDeliveryInfoUseCase(sl()));
sl.registerLazySingleton(() => GetSelectedDeliveryInfoInfoUseCase(sl()));
sl.registerLazySingleton(() => ClearLocalDeliveryInfoUseCase(sl()));
sl.registerLazySingleton(() => DeleteLocalDeliveryInfoUseCase(sl()));
// Repository
sl.registerLazySingleton<DeliveryInfoRepository>(
() => DeliveryInfoRepositoryImpl(
Expand Down Expand Up @@ -183,8 +183,8 @@ Future<void> init() async {
// Use cases
sl.registerLazySingleton(() => AddOrderUseCase(sl()));
sl.registerLazySingleton(() => GetRemoteOrdersUseCase(sl()));
sl.registerLazySingleton(() => GetCachedOrdersUseCase(sl()));
sl.registerLazySingleton(() => ClearLocalOrdersUseCase(sl()));
sl.registerLazySingleton(() => GetLocalOrdersUseCase(sl()));
sl.registerLazySingleton(() => DeleteLocalOrdersUseCase(sl()));
// Repository
sl.registerLazySingleton<OrderRepository>(
() => OrderRepositoryImpl(
Expand All @@ -208,7 +208,7 @@ Future<void> init() async {
() => UserBloc(sl(), sl(), sl(), sl()),
);
// Use cases
sl.registerLazySingleton(() => GetCachedUserUseCase(sl()));
sl.registerLazySingleton(() => GetLocalUserUseCase(sl()));
sl.registerLazySingleton(() => SignInUseCase(sl()));
sl.registerLazySingleton(() => SignUpUseCase(sl()));
sl.registerLazySingleton(() => SignOutUseCase(sl()));
Expand Down Expand Up @@ -240,4 +240,4 @@ Future<void> init() async {
sl.registerLazySingleton(() => secureStorage);
sl.registerLazySingleton(() => http.Client());
sl.registerLazySingleton(() => InternetConnectionChecker());
}
}
6 changes: 3 additions & 3 deletions lib/core/theme/app_theme.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ class AppTheme {
visualDensity: VisualDensity.adaptivePlatformDensity,
scaffoldBackgroundColor: kBackgroundColor,
appBarTheme: AppBarTheme(
backgroundColor: Colors.white,
foregroundColor: kLightSecondaryColor,
elevation: 0,
backgroundColor: kLightPrimaryColor,
foregroundColor: kBackgroundColor,
// elevation: 0,
),
textButtonTheme: TextButtonThemeData(
style: TextButton.styleFrom(foregroundColor: kLightSecondaryColor)),
Expand Down
23 changes: 21 additions & 2 deletions lib/data/data_sources/local/cart_local_data_source.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ abstract class CartLocalDataSource {
Future<List<CartItemModel>> getCart();
Future<void> saveCart(List<CartItemModel> cart);
Future<void> saveCartItem(CartItemModel cartItem);
Future<bool> clearCart();
Future<bool> deleteCartItem(CartItemModel cartItem);
Future<bool> deleteCart();
}

const cachedCart = 'CACHED_CART';
Expand Down Expand Up @@ -53,7 +54,25 @@ class CartLocalDataSourceImpl implements CartLocalDataSource {
}

@override
Future<bool> clearCart()async {
Future<bool> deleteCart() async {
return sharedPreferences.remove(cachedCart);
}

@override
Future<bool> deleteCartItem(CartItemModel cartItem) async {
final jsonString = sharedPreferences.getString(cachedCart);
if (jsonString != null) {
final List<CartItemModel> cart =
cartItemModelListFromLocalJson(jsonString);
cart.removeWhere((element) =>
element.product.id == cartItem.product.id &&
element.priceTag.id == cartItem.priceTag.id);
return sharedPreferences.setString(
cachedCart,
cartItemModelToJson(cart),
);
} else {
throw CacheFailure();
}
}
}
15 changes: 15 additions & 0 deletions lib/data/data_sources/remote/cart_remote_data_source.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import 'dart:convert';

import 'package:eshop/core/usecases/usecase.dart';
import 'package:http/http.dart' as http;

import '../../../../core/error/exceptions.dart';
Expand All @@ -9,6 +10,8 @@ import '../../models/cart/cart_item_model.dart';
abstract class CartRemoteDataSource {
Future<CartItemModel> addToCart(CartItemModel cartItem, String token);
Future<List<CartItemModel>> syncCart(List<CartItemModel> cart, String token);
Future<CartItemModel> deleteCartItem(CartItemModel cart, String token);
Future<NoParams> deleteCart(String token);
}

class CartRemoteDataSourceSourceImpl implements CartRemoteDataSource {
Expand Down Expand Up @@ -54,4 +57,16 @@ class CartRemoteDataSourceSourceImpl implements CartRemoteDataSource {
throw ServerException();
}
}

@override
Future<CartItemModel> deleteCartItem(CartItemModel cart, String token) async {
// TODO: implement deleteCartItem
throw UnimplementedError();
}

@override
Future<NoParams> deleteCart(String token) async {
// TODO: implement deleteCart
throw UnimplementedError();
}
}
13 changes: 7 additions & 6 deletions lib/data/models/order/order_details_model.dart
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,11 @@ class OrderDetailsModel extends OrderDetails {

factory OrderDetailsModel.fromEntity(OrderDetails entity) =>
OrderDetailsModel(
id: entity.id,
orderItems: entity.orderItems
.map((orderItem) => OrderItemModel.fromEntity(orderItem))
.toList(),
deliveryInfo: DeliveryInfoModel.fromEntity(entity.deliveryInfo),
discount: entity.discount);
id: entity.id,
orderItems: entity.orderItems
.map((orderItem) => OrderItemModel.fromEntity(orderItem))
.toList(),
deliveryInfo: DeliveryInfoModel.fromEntity(entity.deliveryInfo),
discount: entity.discount,
);
}
Loading