From ee377c107c053c8ae5f6b83ad4c06e849b49a0e3 Mon Sep 17 00:00:00 2001 From: mike doornenbal <59685385+mighttymike@users.noreply.github.com> Date: Tue, 2 Jul 2024 14:31:41 +0200 Subject: [PATCH] feat: shopping interface (#10) Co-authored-by: mike doornenbal --- CHANGELOG.md | 5 ++ .../analysis_options.yaml | 9 ++ .../lib/flutter_shopping_interface.dart | 2 + .../lib/src/model/model.dart | 2 + .../lib/src/model/product.dart | 85 +++++++++++++++++++ .../lib/src/model/shop.dart | 28 ++++++ .../lib/src/service/order_service.dart | 12 +++ .../lib/src/service/product_service.dart | 14 +++ .../lib/src/service/service.dart | 5 ++ .../lib/src/service/shop_service.dart | 9 ++ .../src/service/shopping_cart_service.dart | 20 +++++ .../lib/src/service/shopping_service.dart | 24 ++++++ .../flutter_shopping_interface/pubspec.yaml | 22 +++++ 13 files changed, 237 insertions(+) create mode 100644 packages/flutter_shopping_interface/analysis_options.yaml create mode 100644 packages/flutter_shopping_interface/lib/flutter_shopping_interface.dart create mode 100644 packages/flutter_shopping_interface/lib/src/model/model.dart create mode 100644 packages/flutter_shopping_interface/lib/src/model/product.dart create mode 100644 packages/flutter_shopping_interface/lib/src/model/shop.dart create mode 100644 packages/flutter_shopping_interface/lib/src/service/order_service.dart create mode 100644 packages/flutter_shopping_interface/lib/src/service/product_service.dart create mode 100644 packages/flutter_shopping_interface/lib/src/service/service.dart create mode 100644 packages/flutter_shopping_interface/lib/src/service/shop_service.dart create mode 100644 packages/flutter_shopping_interface/lib/src/service/shopping_cart_service.dart create mode 100644 packages/flutter_shopping_interface/lib/src/service/shopping_service.dart create mode 100644 packages/flutter_shopping_interface/pubspec.yaml diff --git a/CHANGELOG.md b/CHANGELOG.md index 7bc72cc..ef1067e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## 2.0.0 +- Added `flutter_shopping_interface` package +- Implemented default design + + ## 1.0.0 - Initial version of the combined melos variant of the flutter_shopping user-story. diff --git a/packages/flutter_shopping_interface/analysis_options.yaml b/packages/flutter_shopping_interface/analysis_options.yaml new file mode 100644 index 0000000..0736605 --- /dev/null +++ b/packages/flutter_shopping_interface/analysis_options.yaml @@ -0,0 +1,9 @@ +include: package:flutter_iconica_analysis/components_options.yaml + +# Possible to overwrite the rules from the package + +analyzer: + exclude: + +linter: + rules: diff --git a/packages/flutter_shopping_interface/lib/flutter_shopping_interface.dart b/packages/flutter_shopping_interface/lib/flutter_shopping_interface.dart new file mode 100644 index 0000000..712a716 --- /dev/null +++ b/packages/flutter_shopping_interface/lib/flutter_shopping_interface.dart @@ -0,0 +1,2 @@ +export "src/model/model.dart"; +export "src/service/service.dart"; diff --git a/packages/flutter_shopping_interface/lib/src/model/model.dart b/packages/flutter_shopping_interface/lib/src/model/model.dart new file mode 100644 index 0000000..a77eeaa --- /dev/null +++ b/packages/flutter_shopping_interface/lib/src/model/model.dart @@ -0,0 +1,2 @@ +export "product.dart"; +export "shop.dart"; diff --git a/packages/flutter_shopping_interface/lib/src/model/product.dart b/packages/flutter_shopping_interface/lib/src/model/product.dart new file mode 100644 index 0000000..2ba1599 --- /dev/null +++ b/packages/flutter_shopping_interface/lib/src/model/product.dart @@ -0,0 +1,85 @@ +/// Product Interface +abstract class ProductInterface { + /// ProductInterface constructor + ProductInterface({ + required this.id, + required this.name, + required this.imageUrl, + required this.category, + required this.price, + required this.description, + this.hasDiscount = false, + this.discountPrice, + this.quantity = 1, + }); + + /// Product id + final String id; + + /// Product name + final String name; + + /// Product image url + final String imageUrl; + + /// Product category + final String category; + + /// Product price + final double price; + + /// whether the product has a discount + final bool hasDiscount; + + /// Product discount price + final double? discountPrice; + + /// Product quantity + int quantity; + + /// Product description + final String description; +} + +/// Product model +class Product implements ProductInterface { + /// Product constructor + Product({ + required this.id, + required this.name, + required this.imageUrl, + required this.category, + required this.price, + required this.description, + this.hasDiscount = false, + this.discountPrice, + this.quantity = 1, + }); + + @override + final String id; + + @override + final String name; + + @override + final String imageUrl; + + @override + final String category; + + @override + final double price; + + @override + final bool hasDiscount; + + @override + final double? discountPrice; + + @override + int quantity; + + @override + final String description; +} diff --git a/packages/flutter_shopping_interface/lib/src/model/shop.dart b/packages/flutter_shopping_interface/lib/src/model/shop.dart new file mode 100644 index 0000000..2e63671 --- /dev/null +++ b/packages/flutter_shopping_interface/lib/src/model/shop.dart @@ -0,0 +1,28 @@ +/// Shop interface +abstract class ShopInterface { + /// ShopInterface constructor + const ShopInterface({ + required this.id, + required this.name, + }); + + /// Shop id + final int id; + + /// Shop name + final String name; +} + +/// Shop model +class Shop implements ShopInterface { + /// Shop constructor + const Shop({ + required this.id, + required this.name, + }); + @override + final int id; + + @override + final String name; +} diff --git a/packages/flutter_shopping_interface/lib/src/service/order_service.dart b/packages/flutter_shopping_interface/lib/src/service/order_service.dart new file mode 100644 index 0000000..b3a1dab --- /dev/null +++ b/packages/flutter_shopping_interface/lib/src/service/order_service.dart @@ -0,0 +1,12 @@ +import "package:flutter_shopping_interface/src/model/product.dart"; + +/// Order service +// ignore: one_member_abstracts +abstract class OrderService { + /// Create an order + Future createOrder( + int shopId, + List products, + Map clientInformation, + ); +} diff --git a/packages/flutter_shopping_interface/lib/src/service/product_service.dart b/packages/flutter_shopping_interface/lib/src/service/product_service.dart new file mode 100644 index 0000000..073b32d --- /dev/null +++ b/packages/flutter_shopping_interface/lib/src/service/product_service.dart @@ -0,0 +1,14 @@ +import "package:flutter/material.dart"; +import "package:flutter_shopping_interface/src/model/product.dart"; + +/// Product service +abstract class ProductService with ChangeNotifier { + /// Retrieve a list of products + Future> getProducts(int shopId); + + /// Retrieve a product + Future getProduct(int id); + + /// Retrieve a list of categories + List getCategories(); +} diff --git a/packages/flutter_shopping_interface/lib/src/service/service.dart b/packages/flutter_shopping_interface/lib/src/service/service.dart new file mode 100644 index 0000000..6d20b45 --- /dev/null +++ b/packages/flutter_shopping_interface/lib/src/service/service.dart @@ -0,0 +1,5 @@ +export "order_service.dart"; +export "product_service.dart"; +export "shop_service.dart"; +export "shopping_cart_service.dart"; +export "shopping_service.dart"; diff --git a/packages/flutter_shopping_interface/lib/src/service/shop_service.dart b/packages/flutter_shopping_interface/lib/src/service/shop_service.dart new file mode 100644 index 0000000..8b2403d --- /dev/null +++ b/packages/flutter_shopping_interface/lib/src/service/shop_service.dart @@ -0,0 +1,9 @@ +import "package:flutter/material.dart"; +import "package:flutter_shopping_interface/src/model/shop.dart"; + +/// Shop service +// ignore: one_member_abstracts +abstract class ShopService with ChangeNotifier { + /// Retrieve a list of shops + Future> getShops(); +} diff --git a/packages/flutter_shopping_interface/lib/src/service/shopping_cart_service.dart b/packages/flutter_shopping_interface/lib/src/service/shopping_cart_service.dart new file mode 100644 index 0000000..27fabc3 --- /dev/null +++ b/packages/flutter_shopping_interface/lib/src/service/shopping_cart_service.dart @@ -0,0 +1,20 @@ +import "package:flutter/material.dart"; +import "package:flutter_shopping_interface/src/model/product.dart"; + +/// shopping cart service +abstract class ShoppingCartService with ChangeNotifier { + /// Adds a product to the shopping cart. + void addProduct(Product product); + + /// Removes a product from the shopping cart. + void removeProduct(Product product); + + /// Removes one product from the shopping cart. + void removeOneProduct(Product product); + + /// Counts the number of products in the shopping cart. + int countProducts(); + + /// Clears the shopping cart. + void clear(); +} diff --git a/packages/flutter_shopping_interface/lib/src/service/shopping_service.dart b/packages/flutter_shopping_interface/lib/src/service/shopping_service.dart new file mode 100644 index 0000000..e806f62 --- /dev/null +++ b/packages/flutter_shopping_interface/lib/src/service/shopping_service.dart @@ -0,0 +1,24 @@ +import "package:flutter_shopping_interface/src/service/service.dart"; + +/// Shopping service +class ShoppingService { + /// Shopping service constructor + const ShoppingService({ + required this.orderService, + required this.productService, + required this.shopService, + required this.shoppingCartService, + }); + + /// Order service + final OrderService orderService; + + /// Product service + final ProductService productService; + + /// Shop service + final ShopService shopService; + + /// Shopping cart service + final ShoppingCartService shoppingCartService; +} diff --git a/packages/flutter_shopping_interface/pubspec.yaml b/packages/flutter_shopping_interface/pubspec.yaml new file mode 100644 index 0000000..ad4a08c --- /dev/null +++ b/packages/flutter_shopping_interface/pubspec.yaml @@ -0,0 +1,22 @@ +name: flutter_shopping_interface +description: "A Flutter module for a shopping." +version: 2.0.0 +publish_to: 'none' + +environment: + sdk: '>=3.3.0 <4.0.0' + flutter: ">=1.17.0" + +dependencies: + flutter: + sdk: flutter + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_iconica_analysis: + git: + url: https://github.com/Iconica-Development/flutter_iconica_analysis + ref: 7.0.0 + +flutter: \ No newline at end of file