diff --git a/packages/flutter_order_details/lib/src/models/order_input.dart b/packages/flutter_order_details/lib/src/models/order_input.dart deleted file mode 100644 index d3ac019..0000000 --- a/packages/flutter_order_details/lib/src/models/order_input.dart +++ /dev/null @@ -1,173 +0,0 @@ -import "package:flutter/material.dart"; -import "package:flutter_order_details/src/configuration/order_detail_title_style.dart"; - -/// Abstract class for order detail input. -/// Each input field must extend from this class. -abstract class OrderDetailInput { - /// Constructor for the order detail input. - OrderDetailInput({ - required this.title, - required this.outputKey, - this.titleStyle = OrderDetailTitleStyle.text, - this.titleAlignment = Alignment.centerLeft, - this.titlePadding = const EdgeInsets.symmetric(vertical: 4), - this.subtitle, - this.isRequired = true, - this.isReadOnly = false, - this.initialValue, - this.validators = const [], - this.onValueChanged, - this.hint, - this.errorIsRequired = "This field is required", - this.paddingBetweenFields = const EdgeInsets.symmetric(vertical: 4), - }); - - /// Title of the input field. - final String title; - - /// Subtitle of the input field. - final String? subtitle; - - /// The styling for the title. - final OrderDetailTitleStyle titleStyle; - - /// The alignment of the titl - final Alignment titleAlignment; - - /// Padding around the title. - final EdgeInsets titlePadding; - - /// The output key of the input field. - final String outputKey; - - /// Hint message of the input field. - final String? hint; - - /// Determines if the input field is required. - final bool isRequired; - - /// Error message for when an user does not insert something in the field - /// even though it is required. - final String errorIsRequired; - - /// A read-only field that users cannot change. - final bool isReadOnly; - - /// An initial value for the input field. This is ideal incombination - /// with the [isReadOnly] field. - final T? initialValue; - - /// Internal current value. Do not use. - T? currentValue; - - /// List of validators that should be executed when the input field - /// is validated. - List validators; - - /// Function that is called when the value of the input field changes. - final Function(T)? onValueChanged; - - /// Padding between the fields. - final EdgeInsets paddingBetweenFields; - - /// Allows you to update the current value. - @protected - set updateValue(T value) { - currentValue = value; - } - - /// Function that validates the input field. Automatically keeps track - /// of the [isRequired] keys and all the custom validators. - @protected - String? validate(T? value) { - if (isRequired && (value == null || value.toString().isEmpty)) { - return errorIsRequired; - } - - for (var validator in validators) { - var error = validator(value); - if (error != null) { - return error; - } - } - - return null; - } - - /// Builds the basic outline of an input field. - @protected - Widget buildOutline( - BuildContext context, - // ignore: avoid_annotating_with_dynamic - dynamic child, - Function({bool needsBlur}) onBlurBackground, - ) { - var theme = Theme.of(context); - - return Column( - children: [ - if (titleStyle == OrderDetailTitleStyle.text) ...[ - Align( - alignment: titleAlignment, - child: Padding( - padding: titlePadding, - child: Text( - title, - style: theme.textTheme.titleMedium, - ), - ), - ), - if (subtitle != null) ...[ - Padding( - padding: titlePadding, - child: Align( - alignment: titleAlignment, - child: Text( - subtitle!, - style: theme.textTheme.titleSmall, - ), - ), - ), - ], - ], - if (child is FormField || child is Widget) ...[ - child, - ] else if (child is List) ...[ - Column( - children: child - .map( - (FormField field) => Padding( - padding: paddingBetweenFields, - child: field, - ), - ) - .toList(), - ), - ] else if (child is List) ...[ - Column( - children: child - .map( - (OrderDetailInput input) => Padding( - padding: paddingBetweenFields, - child: input.build( - context, - input.initialValue, - onBlurBackground, - ), - ), - ) - .toList(), - ), - ], - ], - ); - } - - /// Abstract build function that each orderinput class must implement - /// themsleves. For a basic layout, they can use the [buildOutline] function. - Widget build( - BuildContext context, - T? buildInitialValue, - Function({bool needsBlur}) onBlurBackground, - ); -} diff --git a/packages/flutter_order_details/pubspec.yaml b/packages/flutter_order_details/pubspec.yaml index 7d37a9f..20721cb 100644 --- a/packages/flutter_order_details/pubspec.yaml +++ b/packages/flutter_order_details/pubspec.yaml @@ -1,6 +1,7 @@ name: flutter_order_details description: "A Flutter module for order details." -version: 1.0.0 +version: 2.0.0 +publish_to: 'none' environment: sdk: '>=3.3.0 <4.0.0' @@ -8,6 +9,14 @@ environment: dependencies: flutter: sdk: flutter + animated_toggle: + git: + url: https://github.com/Iconica-Development/flutter_animated_toggle + ref: 0.0.3 + flutter_form_wizard: + git: + url: https://github.com/Iconica-Development/flutter_form_wizard + ref: 6.5.0 dev_dependencies: flutter_test: @@ -18,13 +27,4 @@ dev_dependencies: ref: 7.0.0 flutter: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic diff --git a/packages/flutter_product_page/lib/src/models/product.dart b/packages/flutter_product_page/lib/src/models/product.dart deleted file mode 100644 index 56ea5f7..0000000 --- a/packages/flutter_product_page/lib/src/models/product.dart +++ /dev/null @@ -1,38 +0,0 @@ -/// The product page shop class contains all the required information -class Product { - /// Constructor for the product. - Product({ - required this.id, - required this.name, - required this.imageUrl, - required this.category, - required this.price, - required this.hasDiscount, - this.discountPrice, - this.quantity = 1, - }); - - /// The unique identifier for the product. - final String id; - - /// The name of the product. - final String name; - - /// The image URL of the product. - final String imageUrl; - - /// The category of the product. - final String category; - - /// The price of the product. - final double price; - - /// Whether the product has a discount or not. - final bool hasDiscount; - - /// The discounted price of the product. Only used if [hasDiscount] is true. - final double? discountPrice; - - /// Quantity for the product. - final int quantity; -} diff --git a/packages/flutter_product_page/pubspec.yaml b/packages/flutter_product_page/pubspec.yaml index 6ffcb50..2207ff0 100644 --- a/packages/flutter_product_page/pubspec.yaml +++ b/packages/flutter_product_page/pubspec.yaml @@ -1,7 +1,7 @@ name: flutter_product_page description: "A Flutter module for the product page" publish_to: 'none' -version: 1.0.0 +version: 2.0.0 environment: sdk: '>=3.3.4 <4.0.0' @@ -15,6 +15,11 @@ dependencies: git: url: https://github.com/Iconica-Development/flutter_nested_categories ref: 0.0.1 + flutter_shopping: + git: + url: https://github.com/Iconica-Development/flutter_shopping + path: packages/flutter_shopping + ref: 2.0.0 dev_dependencies: flutter_test: @@ -26,13 +31,3 @@ dev_dependencies: flutter: uses-material-design: true - - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic diff --git a/packages/flutter_shopping/example/lib/src/configuration/configuration.dart b/packages/flutter_shopping/example/lib/src/configuration/configuration.dart index 3ab711c..bb3454e 100644 --- a/packages/flutter_shopping/example/lib/src/configuration/configuration.dart +++ b/packages/flutter_shopping/example/lib/src/configuration/configuration.dart @@ -1,4 +1,3 @@ -import "package:example/src/models/my_product.dart"; import "package:example/src/routes.dart"; import "package:example/src/services/order_service.dart"; import "package:example/src/services/shop_service.dart"; @@ -7,7 +6,7 @@ import "package:flutter_shopping/flutter_shopping.dart"; import "package:go_router/go_router.dart"; // (REQUIRED): Create your own instance of the ProductService. -final ProductService productService = ProductService([]); +final ProductService productService = ProductService([]); FlutterShoppingConfiguration getFlutterShoppingConfiguration() => FlutterShoppingConfiguration( @@ -24,8 +23,7 @@ FlutterShoppingConfiguration getFlutterShoppingConfiguration() => shops: Future.value(getShops()), // (REQUIRED): Function to add a product to the cart - onAddToCart: (ProductPageProduct product) => - productService.addProduct(product as MyProduct), + onAddToCart: productService.addProduct, // (REQUIRED): Function to get the products for a shop getProducts: (ProductPageShop shop) => @@ -43,7 +41,7 @@ FlutterShoppingConfiguration getFlutterShoppingConfiguration() => // (RECOMMENDED) Function that returns the description for a // product that is on sale. - getDiscountDescription: (ProductPageProduct product) => + getDiscountDescription: (product) => """${product.name} for just \$${product.discountPrice?.toStringAsFixed(2)}""", // (RECOMMENDED) Function that is fired when the shop selection @@ -60,7 +58,7 @@ FlutterShoppingConfiguration getFlutterShoppingConfiguration() => localizations: const ProductPageLocalization(), // (OPTIONAL) Appbar - appBar: AppBar( + appBar: (context) => AppBar( title: const Text("Shop"), leading: IconButton( icon: const Icon( @@ -85,7 +83,8 @@ FlutterShoppingConfiguration getFlutterShoppingConfiguration() => productService: productService, // (REQUIRED) product item builder: - productItemBuilder: (context, locale, product) => ListTile( + productItemBuilder: (context, locale, product, service, config) => + ListTile( title: Text(product.name), subtitle: Text(product.price.toStringAsFixed(2)), leading: Image.network( @@ -121,9 +120,6 @@ FlutterShoppingConfiguration getFlutterShoppingConfiguration() => // (RECOMMENDED) localizations: localizations: const ShoppingCartLocalizations(), - // (OPTIONAL) title above product list: - title: "Products", - /// (OPTIONAL) no content builder for when there are no products /// in the shopping cart. noContentBuilder: (context) => const Center( diff --git a/packages/flutter_shopping/example/lib/src/models/my_product.dart b/packages/flutter_shopping/example/lib/src/models/my_product.dart deleted file mode 100644 index f5f2f49..0000000 --- a/packages/flutter_shopping/example/lib/src/models/my_product.dart +++ /dev/null @@ -1,25 +0,0 @@ -import "package:flutter_shopping/flutter_shopping.dart"; - -class MyProduct extends ShoppingCartProduct with ProductPageProduct { - MyProduct({ - required super.id, - required super.name, - required super.price, - required this.category, - required this.imageUrl, - this.discountPrice, - this.hasDiscount = false, - }); - - @override - final String category; - - @override - final String imageUrl; - - @override - final double? discountPrice; - - @override - final bool hasDiscount; -} diff --git a/packages/flutter_shopping/example/lib/src/services/order_service.dart b/packages/flutter_shopping/example/lib/src/services/order_service.dart index fe3ca31..6078e6a 100644 --- a/packages/flutter_shopping/example/lib/src/services/order_service.dart +++ b/packages/flutter_shopping/example/lib/src/services/order_service.dart @@ -1,7 +1,6 @@ -import "package:example/src/models/my_product.dart"; import "package:flutter_shopping/flutter_shopping.dart"; /// Example implementation of storing an order in a database. -void storeOrderInDatabase(List products, OrderResult result) { +void storeOrderInDatabase(List products, OrderResult result) { return; } diff --git a/packages/flutter_shopping/example/lib/src/services/shop_service.dart b/packages/flutter_shopping/example/lib/src/services/shop_service.dart index ced2144..a8e8f65 100644 --- a/packages/flutter_shopping/example/lib/src/services/shop_service.dart +++ b/packages/flutter_shopping/example/lib/src/services/shop_service.dart @@ -1,4 +1,3 @@ -import "package:example/src/models/my_product.dart"; import "package:example/src/models/my_shop.dart"; import "package:flutter_shopping/flutter_shopping.dart"; @@ -20,8 +19,8 @@ ProductPageContent getShopContent(String shopId) { /// This function should have your own implementation. Generally this would /// contain some API call to fetch the list of products for a shop. -List getProducts(String shopId) => [ - MyProduct( +List getProducts(String shopId) => [ + Product( id: "1", name: "White bread", price: 2.99, @@ -29,19 +28,22 @@ List getProducts(String shopId) => [ imageUrl: "https://via.placeholder.com/150", hasDiscount: true, discountPrice: 1.99, + description: "", ), - MyProduct( + Product( id: "2", name: "Brown bread", price: 2.99, category: "Loaves", imageUrl: "https://via.placeholder.com/150", + description: "", ), - MyProduct( + Product( id: "3", name: "Cheese sandwich", price: 1.99, category: "Sandwiches", imageUrl: "https://via.placeholder.com/150", + description: "", ), ]; diff --git a/packages/flutter_shopping/example/pubspec.yaml b/packages/flutter_shopping/example/pubspec.yaml index d4a84ed..d9bf03b 100644 --- a/packages/flutter_shopping/example/pubspec.yaml +++ b/packages/flutter_shopping/example/pubspec.yaml @@ -12,12 +12,11 @@ dependencies: flutter_hooks: ^0.20.0 hooks_riverpod: ^2.1.1 go_router: 12.1.3 - - # Iconica packages - - ## Userstories flutter_shopping: - path: ../ + git: + url: https://github.com/Iconica-Development/flutter_shopping + path: packages/flutter_shopping + ref: 2.0.0 dev_dependencies: flutter_test: diff --git a/packages/flutter_shopping/example_amazon/lib/src/configuration/shopping_configuration.dart b/packages/flutter_shopping/example_amazon/lib/src/configuration/shopping_configuration.dart index 1ab239c..3bcce30 100644 --- a/packages/flutter_shopping/example_amazon/lib/src/configuration/shopping_configuration.dart +++ b/packages/flutter_shopping/example_amazon/lib/src/configuration/shopping_configuration.dart @@ -1,4 +1,3 @@ -import "package:amazon/src/models/my_product.dart"; import "package:amazon/src/routes.dart"; import "package:amazon/src/services/category_service.dart"; import "package:flutter/material.dart"; @@ -6,7 +5,7 @@ import "package:flutter_shopping/flutter_shopping.dart"; import "package:go_router/go_router.dart"; // (REQUIRED): Create your own instance of the ProductService. -final ProductService productService = ProductService([]); +final ProductService productService = ProductService([]); FlutterShoppingConfiguration getFlutterShoppingConfiguration() => FlutterShoppingConfiguration( @@ -27,8 +26,9 @@ FlutterShoppingConfiguration getFlutterShoppingConfiguration() => pagePadding: const EdgeInsets.symmetric(horizontal: 0, vertical: 4), // (REQUIRED): Function to add a product to the cart - onAddToCart: (ProductPageProduct product) => - productService.addProduct(product as MyProduct), + onAddToCart: (product) { + return productService.addProduct(product); + }, // (REQUIRED): Function to get the products for a shop getProducts: (ProductPageShop shop) => @@ -41,7 +41,9 @@ FlutterShoppingConfiguration getFlutterShoppingConfiguration() => shopSelectorStyle: ShopSelectorStyle.row, - navigateToShoppingCartBuilder: (context) => const SizedBox.shrink(), + navigateToShoppingCartBuilder: (context, productpageinfo, shop) { + return const SizedBox.shrink(); + }, bottomNavigationBar: BottomNavigationBar( fixedColor: theme.primaryColor, @@ -164,7 +166,7 @@ FlutterShoppingConfiguration getFlutterShoppingConfiguration() => const SizedBox(height: 12), FilledButton( onPressed: () { - productService.addProduct(product as MyProduct); + productService.addProduct(product); }, child: const Text("In winkelwagen"), ), @@ -206,7 +208,7 @@ FlutterShoppingConfiguration getFlutterShoppingConfiguration() => ), // (OPTIONAL) Appbar - appBar: AppBar( + appBar: (context) => AppBar( title: const SizedBox( height: 40, child: SearchBar( @@ -262,7 +264,8 @@ FlutterShoppingConfiguration getFlutterShoppingConfiguration() => productService: productService, // (REQUIRED) product item builder: - productItemBuilder: (context, locale, product) => ListTile( + productItemBuilder: (context, locale, product, service, config) => + ListTile( title: Text(product.name), subtitle: Text(product.price.toStringAsFixed(2)), leading: Image.network( diff --git a/packages/flutter_shopping/example_amazon/lib/src/models/my_product.dart b/packages/flutter_shopping/example_amazon/lib/src/models/my_product.dart deleted file mode 100644 index 89f8bd1..0000000 --- a/packages/flutter_shopping/example_amazon/lib/src/models/my_product.dart +++ /dev/null @@ -1,23 +0,0 @@ -import 'package:flutter_shopping/flutter_shopping.dart'; - -class MyProduct extends ShoppingCartProduct with ProductPageProduct { - MyProduct({ - required super.id, - required super.name, - required super.price, - required this.category, - required this.imageUrl, - }); - - @override - final String category; - - @override - final String imageUrl; - - @override - final double? discountPrice = 0.0; - - @override - final bool hasDiscount = false; -} diff --git a/packages/flutter_shopping/example_amazon/lib/src/services/category_service.dart b/packages/flutter_shopping/example_amazon/lib/src/services/category_service.dart index d4aa2f6..69af668 100644 --- a/packages/flutter_shopping/example_amazon/lib/src/services/category_service.dart +++ b/packages/flutter_shopping/example_amazon/lib/src/services/category_service.dart @@ -1,5 +1,4 @@ import "package:amazon/src/models/my_category.dart"; -import "package:amazon/src/models/my_product.dart"; import "package:flutter_shopping/flutter_shopping.dart"; Map categories = { @@ -8,8 +7,8 @@ Map categories = { "TV's": "TV's", }; -List allProducts() => [ - MyProduct( +List allProducts() => [ + Product( id: "1", name: "Skar Audio Single 8\" Complete 1,200 Watt EVL Series Subwoofer Bass Package - Includes Loaded Enclosure with...", @@ -17,8 +16,9 @@ List allProducts() => [ category: categories["Electronics"]!, imageUrl: "https://m.media-amazon.com/images/I/710n3hnbfXL._AC_UY218_.jpg", + description: "", ), - MyProduct( + Product( id: "2", name: "Frameo 10.1 Inch WiFi Digital Picture Frame, 1280x800 HD IPS Touch Screen Photo Frame Electronic, 32GB Memory, Auto...", @@ -26,8 +26,9 @@ List allProducts() => [ category: categories["Electronics"]!, imageUrl: "https://m.media-amazon.com/images/I/61O+aorCp0L._AC_UY218_.jpg", + description: "", ), - MyProduct( + Product( id: "3", name: "STREBITO Electronics Precision Screwdriver Sets 142-Piece with 120 Bits Magnetic Repair Tool Kit for iPhone, MacBook,...", @@ -35,8 +36,9 @@ List allProducts() => [ category: categories["Electronics"]!, imageUrl: "https://m.media-amazon.com/images/I/81-C7lGtQsL._AC_UY218_.jpg", + description: "", ), - MyProduct( + Product( id: "4", name: "Samsung Galaxy A15 (SM-155M/DSN), 128GB 6GB RAM, Dual SIM, Factory Unlocked GSM, International Version (Wall...", @@ -44,8 +46,9 @@ List allProducts() => [ category: categories["Smart phones"]!, imageUrl: "https://m.media-amazon.com/images/I/51rp0nqaPoL._AC_UY218_.jpg", + description: "", ), - MyProduct( + Product( id: "5", name: "SAMSUNG Galaxy S24 Ultra Cell Phone, 512GB AI Smartphone, Unlocked Android, 50MP Zoom Camera, Long...", @@ -53,6 +56,7 @@ List allProducts() => [ category: categories["Smart phones"]!, imageUrl: "https://m.media-amazon.com/images/I/71ZoDT7a2wL._AC_UY218_.jpg", + description: "", ), ]; @@ -72,7 +76,7 @@ ProductPageContent getShopContent(String shopId) { ); } -List getProducts(String categoryId) { +List getProducts(String categoryId) { if (categoryId == "1") { return allProducts(); } else if (categoryId == "2") { diff --git a/packages/flutter_shopping/example_amazon/pubspec.yaml b/packages/flutter_shopping/example_amazon/pubspec.yaml index 7c5ac3c..fb6267b 100644 --- a/packages/flutter_shopping/example_amazon/pubspec.yaml +++ b/packages/flutter_shopping/example_amazon/pubspec.yaml @@ -17,7 +17,10 @@ dependencies: url: https://github.com/Iconica-Development/flutter_nested_categories ref: 0.0.1 flutter_shopping: - path: ../ + git: + url: https://github.com/Iconica-Development/flutter_shopping + path: packages/flutter_shopping + ref: 2.0.0 dev_dependencies: flutter_test: diff --git a/packages/flutter_shopping/pubspec.yaml b/packages/flutter_shopping/pubspec.yaml index 762301a..ffbd981 100644 --- a/packages/flutter_shopping/pubspec.yaml +++ b/packages/flutter_shopping/pubspec.yaml @@ -1,7 +1,7 @@ name: flutter_shopping description: "A new Flutter project." -publish_to: 'none' # Remove this line if you wish to publish to pub.dev -version: 1.0.0 +publish_to: 'none' +version: 2.0.0 environment: sdk: '>=3.3.4 <4.0.0' @@ -13,17 +13,17 @@ dependencies: flutter_product_page: git: url: https://github.com/Iconica-Development/flutter_shopping - ref: 1.0.0 + ref: 2.0.0 path: packages/flutter_product_page flutter_shopping_cart: git: url: https://github.com/Iconica-Development/flutter_shopping - ref: 1.0.0 + ref: 2.0.0 path: packages/flutter_shopping_cart flutter_order_details: git: url: https://github.com/Iconica-Development/flutter_shopping - ref: 1.0.0 + ref: 2.0.0 path: packages/flutter_order_details dev_dependencies: @@ -35,13 +35,4 @@ dev_dependencies: ref: 7.0.0 flutter: - # assets: - # - images/a_dot_burr.jpeg - # - images/a_dot_ham.jpeg - # fonts: - # - family: Schyler - # fonts: - # - asset: fonts/Schyler-Regular.ttf - # - asset: fonts/Schyler-Italic.ttf - # style: italic diff --git a/packages/flutter_shopping_cart/pubspec.yaml b/packages/flutter_shopping_cart/pubspec.yaml index 119d182..1a4ad49 100644 --- a/packages/flutter_shopping_cart/pubspec.yaml +++ b/packages/flutter_shopping_cart/pubspec.yaml @@ -1,6 +1,7 @@ name: flutter_shopping_cart description: "A Flutter module for a shopping cart." -version: 1.0.0 +version: 2.0.0 +publish_to: 'none' environment: sdk: '>=3.3.0 <4.0.0' @@ -9,6 +10,12 @@ environment: dependencies: flutter: sdk: flutter + flutter_shopping: + git: + url: https://github.com/Iconica-Development/flutter_shopping + path: packages/flutter_shopping + ref: 2.0.0 + dev_dependencies: flutter_test: