From 0e552801165d0fa646fde2a78aae3f1aeeba2cfc Mon Sep 17 00:00:00 2001 From: mike doornenbal Date: Mon, 21 Oct 2024 11:40:25 +0200 Subject: [PATCH] feat: add readme --- README.md | 82 +++++++++++++++++++ .../firebase_shopping_repository/CHANGELOG.md | 1 + .../CONTRIBUTING.md | 1 + packages/firebase_shopping_repository/LICENSE | 1 + .../firebase_shopping_repository/README.md | 1 + .../lib/src/firebase_category_repository.dart | 12 ++- .../lib/src/firebase_product_repository.dart | 10 ++- .../lib/src/firebase_shop_repository.dart | 9 +- .../firebase_shopping_cart_repository.dart | 1 - packages/flutter_shopping/CHANGELOG.md | 1 + packages/flutter_shopping/CONTRIBUTING.md | 1 + packages/flutter_shopping/LICENSE | 1 + packages/flutter_shopping/README.md | 40 +-------- .../flutter_shopping/example/lib/main.dart | 13 +-- .../CHANGELOG.md | 1 + .../CONTRIBUTING.md | 1 + .../shopping_repository_interface/LICENSE | 1 + .../shopping_repository_interface/README.md | 1 + 18 files changed, 122 insertions(+), 56 deletions(-) create mode 100644 README.md create mode 120000 packages/firebase_shopping_repository/CHANGELOG.md create mode 120000 packages/firebase_shopping_repository/CONTRIBUTING.md create mode 120000 packages/firebase_shopping_repository/LICENSE create mode 120000 packages/firebase_shopping_repository/README.md create mode 120000 packages/flutter_shopping/CHANGELOG.md create mode 120000 packages/flutter_shopping/CONTRIBUTING.md create mode 120000 packages/flutter_shopping/LICENSE mode change 100644 => 120000 packages/flutter_shopping/README.md create mode 120000 packages/shopping_repository_interface/CHANGELOG.md create mode 120000 packages/shopping_repository_interface/CONTRIBUTING.md create mode 120000 packages/shopping_repository_interface/LICENSE create mode 120000 packages/shopping_repository_interface/README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..ecfc8fe --- /dev/null +++ b/README.md @@ -0,0 +1,82 @@ +# Flutter Shopping + +Flutter Shopping is a package that allows you to create a shopping experience in your Flutter app. +By default, it uses a `ShoppingService` with a local implementation ,it provides a simple shopping +experience with a list of products and a shopping cart. You can implement your own `ShoppingService` by overriding the `shopRepository`, `cartRepository`, `categoryRepository` and `orderRepository` properties. + +## Setup + +To use this package, add flutter_shopping as a dependency in your pubspec.yaml file: + +``` + flutter_chat: + git: + url: https://github.com/Iconica-Development/flutter_shopping + path: packages/flutter_shopping +``` + +If you are going to use Firebase as the back-end of flutter_shopping, you should also add the following package as a dependency to your pubspec.yaml file: + +``` + firebase_shopping_repository: + git: + url: https://github.com/Iconica-Development/flutter_shopping + path: packages/firebase_shopping_repository +``` + +Create a Firebase project for your application and add firebase firestore and storage. + +make sure you are authenticated using the `Firebase_auth` package or adjust your firebase rules, otherwise you won't be able to retreive data. + +Also make sure you have the corresponding collections in your firebase project as defined in the `FirebaseRepositories`, you can override the +default paths as you wish: + +``` dart + FirebaseCategoryRepository({ + this.collectionName = 'shopping_category', + }); + + FirebaseCartRepository({ + this.collectionName = 'shopping_cart', + }); + + FirebaseOrderRepository({ + this.collectionName = 'shopping_order', + }); +``` + +Also the structure of your data should be equal to our predefined models. + +## How to use + +To use this package, add the following widget `FlutterShoppingNavigatorUserstory` to your widget tree: + +``` dart +class FlutterShopping extends StatelessWidget { + const FlutterShopping({super.key}); + + @override + Widget build(BuildContext context) { + return FlutterShoppingNavigatorUserstory( + options: const FlutterShoppingOptions(), + translations: const ShoppingTranslations(), + shoppingService: ShoppingService(), + initialShopId: "1", + ); + } +} +``` + +All of the properties are optional. + +## Issues + +Please file any issues, bugs or feature request as an issue on our [GitHub](https://github.com/Iconica-Development/flutter_shopping/pulls) page. Commercial support is available if you need help with integration with your app or services. You can contact us at [support@iconica.nl](mailto:support@iconica.nl). + +## Want to contribute + +If you would like to contribute to the plugin (e.g. by improving the documentation, solving a bug or adding a cool new feature), please carefully review our [contribution guide](./CONTRIBUTING.md) and send us your [pull request](https://github.com/Iconica-Development/flutter_shopping/pulls). + +## Author + +This `flutter_shopping` for Flutter is developed by [Iconica](https://iconica.nl). You can contact us at \ No newline at end of file diff --git a/packages/firebase_shopping_repository/CHANGELOG.md b/packages/firebase_shopping_repository/CHANGELOG.md new file mode 120000 index 0000000..699cc9e --- /dev/null +++ b/packages/firebase_shopping_repository/CHANGELOG.md @@ -0,0 +1 @@ +../../CHANGELOG.md \ No newline at end of file diff --git a/packages/firebase_shopping_repository/CONTRIBUTING.md b/packages/firebase_shopping_repository/CONTRIBUTING.md new file mode 120000 index 0000000..f939e75 --- /dev/null +++ b/packages/firebase_shopping_repository/CONTRIBUTING.md @@ -0,0 +1 @@ +../../CONTRIBUTING.md \ No newline at end of file diff --git a/packages/firebase_shopping_repository/LICENSE b/packages/firebase_shopping_repository/LICENSE new file mode 120000 index 0000000..30cff74 --- /dev/null +++ b/packages/firebase_shopping_repository/LICENSE @@ -0,0 +1 @@ +../../LICENSE \ No newline at end of file diff --git a/packages/firebase_shopping_repository/README.md b/packages/firebase_shopping_repository/README.md new file mode 120000 index 0000000..fe84005 --- /dev/null +++ b/packages/firebase_shopping_repository/README.md @@ -0,0 +1 @@ +../../README.md \ No newline at end of file diff --git a/packages/firebase_shopping_repository/lib/src/firebase_category_repository.dart b/packages/firebase_shopping_repository/lib/src/firebase_category_repository.dart index 5d2d440..8325099 100644 --- a/packages/firebase_shopping_repository/lib/src/firebase_category_repository.dart +++ b/packages/firebase_shopping_repository/lib/src/firebase_category_repository.dart @@ -5,15 +5,19 @@ import 'package:shopping_repository_interface/shopping_repository_interface.dart import 'package:cloud_firestore/cloud_firestore.dart'; class FirebaseCategoryRepository implements CategoryRepositoryInterface { + FirebaseCategoryRepository({ + this.collectionName = 'shopping_category', + }); + + final String collectionName; + final StreamController> _categoryController = BehaviorSubject>(); - final StreamController> _selectedCategoriesController = BehaviorSubject>(); - List _selectedCategories = []; - List _categories = []; + @override void deselectCategory(String? categoryId) { _selectedCategories.removeWhere((category) => category.id == categoryId); @@ -23,7 +27,7 @@ class FirebaseCategoryRepository implements CategoryRepositoryInterface { @override Stream> getCategories() { FirebaseFirestore.instance - .collection('shopping_category') + .collection(collectionName) .snapshots() .listen((event) { List categories = []; diff --git a/packages/firebase_shopping_repository/lib/src/firebase_product_repository.dart b/packages/firebase_shopping_repository/lib/src/firebase_product_repository.dart index 4746092..f82aa2d 100644 --- a/packages/firebase_shopping_repository/lib/src/firebase_product_repository.dart +++ b/packages/firebase_shopping_repository/lib/src/firebase_product_repository.dart @@ -6,12 +6,14 @@ import 'package:rxdart/rxdart.dart'; import 'package:shopping_repository_interface/shopping_repository_interface.dart'; class FirebaseProductRepository implements ProductRepositoryInterface { - /// Shop one product + FirebaseProductRepository({ + this.collectionName = 'shopping_products', + }); + + final String collectionName; final List _products = []; - Product? _selectedProduct; - final StreamController> _productStream = BehaviorSubject>(); @@ -22,7 +24,7 @@ class FirebaseProductRepository implements ProductRepositoryInterface { @override Stream> getProducts(List? categories, String shopId) { FirebaseFirestore.instance - .collection('shopping_products') + .collection(collectionName) .doc(shopId) .snapshots() .listen((event) { diff --git a/packages/firebase_shopping_repository/lib/src/firebase_shop_repository.dart b/packages/firebase_shopping_repository/lib/src/firebase_shop_repository.dart index 7478ea0..23f5288 100644 --- a/packages/firebase_shopping_repository/lib/src/firebase_shop_repository.dart +++ b/packages/firebase_shopping_repository/lib/src/firebase_shop_repository.dart @@ -5,11 +5,14 @@ import 'package:shopping_repository_interface/shopping_repository_interface.dart import 'package:cloud_firestore/cloud_firestore.dart'; class FirebaseShopRepository implements ShopRepositoryInterface { + FirebaseShopRepository({ + this.collectionName = 'shopping_shop', + }); + + final String collectionName; final StreamController> _shopController = BehaviorSubject>(); - Shop? _selectedShop; - List _shops = []; @override @@ -25,7 +28,7 @@ class FirebaseShopRepository implements ShopRepositoryInterface { @override Stream> getShops() { FirebaseFirestore.instance - .collection('shopping_shop') + .collection(collectionName) .snapshots() .listen((event) { List shops = []; diff --git a/packages/firebase_shopping_repository/lib/src/firebase_shopping_cart_repository.dart b/packages/firebase_shopping_repository/lib/src/firebase_shopping_cart_repository.dart index 864fdf7..174c0c4 100644 --- a/packages/firebase_shopping_repository/lib/src/firebase_shopping_cart_repository.dart +++ b/packages/firebase_shopping_repository/lib/src/firebase_shopping_cart_repository.dart @@ -6,7 +6,6 @@ import 'package:shopping_repository_interface/shopping_repository_interface.dart class FirebaseShoppingCartRepository implements ShoppingCartRepositoryInterface { var _cart = ShoppingCart(id: "1", products: []); - final StreamController _shoppingCartController = BehaviorSubject(); diff --git a/packages/flutter_shopping/CHANGELOG.md b/packages/flutter_shopping/CHANGELOG.md new file mode 120000 index 0000000..699cc9e --- /dev/null +++ b/packages/flutter_shopping/CHANGELOG.md @@ -0,0 +1 @@ +../../CHANGELOG.md \ No newline at end of file diff --git a/packages/flutter_shopping/CONTRIBUTING.md b/packages/flutter_shopping/CONTRIBUTING.md new file mode 120000 index 0000000..f939e75 --- /dev/null +++ b/packages/flutter_shopping/CONTRIBUTING.md @@ -0,0 +1 @@ +../../CONTRIBUTING.md \ No newline at end of file diff --git a/packages/flutter_shopping/LICENSE b/packages/flutter_shopping/LICENSE new file mode 120000 index 0000000..30cff74 --- /dev/null +++ b/packages/flutter_shopping/LICENSE @@ -0,0 +1 @@ +../../LICENSE \ No newline at end of file diff --git a/packages/flutter_shopping/README.md b/packages/flutter_shopping/README.md deleted file mode 100644 index 4a260d8..0000000 --- a/packages/flutter_shopping/README.md +++ /dev/null @@ -1,39 +0,0 @@ - - -TODO: Put a short description of the package here that helps potential users -know whether this package might be useful for them. - -## Features - -TODO: List what your package can do. Maybe include images, gifs, or videos. - -## Getting started - -TODO: List prerequisites and provide or point to information on how to -start using the package. - -## Usage - -TODO: Include short and useful examples for package users. Add longer examples -to `/example` folder. - -```dart -const like = 'sample'; -``` - -## Additional information - -TODO: Tell users more about the package: where to find more information, how to -contribute to the package, how to file issues, what response they can expect -from the package authors, and more. diff --git a/packages/flutter_shopping/README.md b/packages/flutter_shopping/README.md new file mode 120000 index 0000000..fe84005 --- /dev/null +++ b/packages/flutter_shopping/README.md @@ -0,0 +1 @@ +../../README.md \ No newline at end of file diff --git a/packages/flutter_shopping/example/lib/main.dart b/packages/flutter_shopping/example/lib/main.dart index dd61d4f..702187b 100644 --- a/packages/flutter_shopping/example/lib/main.dart +++ b/packages/flutter_shopping/example/lib/main.dart @@ -13,18 +13,21 @@ class MyApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp( theme: theme, - home: const Home(), + home: const FlutterShopping(), ); } } -class Home extends StatelessWidget { - const Home({super.key}); +class FlutterShopping extends StatelessWidget { + const FlutterShopping({super.key}); @override Widget build(BuildContext context) { - return const FlutterShoppingNavigatorUserstory( - options: FlutterShoppingOptions(), + return FlutterShoppingNavigatorUserstory( + options: const FlutterShoppingOptions(), + translations: const ShoppingTranslations(), + shoppingService: ShoppingService(), + initialShopId: "1", ); } } diff --git a/packages/shopping_repository_interface/CHANGELOG.md b/packages/shopping_repository_interface/CHANGELOG.md new file mode 120000 index 0000000..699cc9e --- /dev/null +++ b/packages/shopping_repository_interface/CHANGELOG.md @@ -0,0 +1 @@ +../../CHANGELOG.md \ No newline at end of file diff --git a/packages/shopping_repository_interface/CONTRIBUTING.md b/packages/shopping_repository_interface/CONTRIBUTING.md new file mode 120000 index 0000000..f939e75 --- /dev/null +++ b/packages/shopping_repository_interface/CONTRIBUTING.md @@ -0,0 +1 @@ +../../CONTRIBUTING.md \ No newline at end of file diff --git a/packages/shopping_repository_interface/LICENSE b/packages/shopping_repository_interface/LICENSE new file mode 120000 index 0000000..30cff74 --- /dev/null +++ b/packages/shopping_repository_interface/LICENSE @@ -0,0 +1 @@ +../../LICENSE \ No newline at end of file diff --git a/packages/shopping_repository_interface/README.md b/packages/shopping_repository_interface/README.md new file mode 120000 index 0000000..fe84005 --- /dev/null +++ b/packages/shopping_repository_interface/README.md @@ -0,0 +1 @@ +../../README.md \ No newline at end of file