From d51800202ab004ae26deac59a98d9d01173ce647 Mon Sep 17 00:00:00 2001
From: Aayush <aap409@usask.ca>
Date: Thu, 10 Mar 2022 22:21:41 -0600
Subject: [PATCH] "Home screen data with firebase"

---
 android/app/build.gradle                      |   2 +-
 ...services (4).json => google-services.json} |   0
 lib/auth/sign_in.dart                         |   2 +-
 lib/main.dart                                 |  19 +-
 lib/models/product_model.dart                 |   6 +
 lib/providers/product_provider.dart           |  82 ++++++++
 lib/screens/home_screens/home_screen.dart     | 177 ++++++------------
 .../product_overview/product_overview.dart    |   5 +-
 lib/screens/home_screens/single_product.dart  |   6 +-
 lib/widgets/single_item.dart                  |   2 +-
 pubspec.lock                                  |  34 +++-
 pubspec.yaml                                  |   9 +-
 12 files changed, 196 insertions(+), 148 deletions(-)
 rename android/app/{google-services (4).json => google-services.json} (100%)
 create mode 100644 lib/models/product_model.dart
 create mode 100644 lib/providers/product_provider.dart

diff --git a/android/app/build.gradle b/android/app/build.gradle
index f37b40c..1d327bd 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -27,7 +27,7 @@ apply plugin: 'kotlin-android'
 apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
 
 android {
-    compileSdkVersion 30
+    compileSdkVersion 31
 
     sourceSets {
         main.java.srcDirs += 'src/main/kotlin'
diff --git a/android/app/google-services (4).json b/android/app/google-services.json
similarity index 100%
rename from android/app/google-services (4).json
rename to android/app/google-services.json
diff --git a/lib/auth/sign_in.dart b/lib/auth/sign_in.dart
index dceab15..cebee09 100644
--- a/lib/auth/sign_in.dart
+++ b/lib/auth/sign_in.dart
@@ -15,7 +15,7 @@ class _SignInState extends State<SignIn> {
   Future<void>_googleSignUp() async {
     try {
       final GoogleSignIn _googleSignIn = GoogleSignIn(
-        scopes: ['email'],
+        scopes: ['email','https://www.googleapis.com/auth/contacts.readonly', ],
       );
       final FirebaseAuth _auth = FirebaseAuth.instance;
 
diff --git a/lib/main.dart b/lib/main.dart
index a943aff..7632266 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -3,11 +3,13 @@ import 'package:flutter/material.dart';
 import 'package:food_app/auth/sign_in.dart';
 import 'package:firebase_core/firebase_core.dart';
 import 'package:food_app/config/colors.dart';
+import 'package:food_app/providers/product_provider.dart';
 import 'package:food_app/screens/home_screens/home_screen.dart';
+import 'package:provider/provider.dart';
 
 void main() async {
   WidgetsFlutterBinding.ensureInitialized();
-  //await Firebase.initializeApp();
+  await Firebase.initializeApp();
   runApp(MyApp());
 }
 
@@ -15,12 +17,15 @@ class MyApp extends StatelessWidget {
   // This widget is the root of your application.
   @override
   Widget build(BuildContext context) {
-    return MaterialApp(
-      theme: ThemeData(
-          primaryColor: primaryColor,
-          scaffoldBackgroundColor: scaffoldBackgroundColor),
-      debugShowCheckedModeBanner: false,
-      home: HomeScreen(),
+    return ChangeNotifierProvider<ProductProvider>(
+      create: (context) => ProductProvider(),
+      child: MaterialApp(
+        theme: ThemeData(
+            primaryColor: primaryColor,
+            scaffoldBackgroundColor: scaffoldBackgroundColor),
+        debugShowCheckedModeBanner: false,
+        home: SignIn(),
+      ),
     );
   }
 }
diff --git a/lib/models/product_model.dart b/lib/models/product_model.dart
new file mode 100644
index 0000000..5307db2
--- /dev/null
+++ b/lib/models/product_model.dart
@@ -0,0 +1,6 @@
+class ProductModel {
+  String productName;
+  String productImage;
+  int productPrice;
+  ProductModel({this.productImage, this.productName, this.productPrice});
+}
diff --git a/lib/providers/product_provider.dart b/lib/providers/product_provider.dart
new file mode 100644
index 0000000..dcc35f1
--- /dev/null
+++ b/lib/providers/product_provider.dart
@@ -0,0 +1,82 @@
+import 'package:cloud_firestore/cloud_firestore.dart';
+import 'package:flutter/foundation.dart';
+import 'package:food_app/models/product_model.dart';
+
+class ProductProvider with ChangeNotifier {
+  List<ProductModel> herbsProductList = [];
+  List<ProductModel> freshProductList = [];
+  List<ProductModel> rootProductList = [];
+  ProductModel productModel;
+
+  fetchHerbsProductData() async {
+    List<ProductModel> newList = [];
+    QuerySnapshot value =
+        await FirebaseFirestore.instance.collection("HerbsProduct ").get();
+    value.docs.forEach(
+      (element) {
+        productModel = ProductModel(
+          productImage: element.get("productImage"),
+          productName: element.get("productName"),
+          productPrice: element.get("productPrice"),
+        );
+        newList.add(productModel);
+      },
+    );
+    herbsProductList = newList;
+    notifyListeners();
+  }
+
+  List<ProductModel> get getHerbsProductDataList {
+    return herbsProductList;
+  }
+
+  fetchFreshProductData() async {
+    List<ProductModel> newList = [];
+
+    QuerySnapshot value = await FirebaseFirestore.instance
+        .collection("FreshFruitsProduct ")
+        .get();
+
+    value.docs.forEach(
+      (element) {
+        productModel = ProductModel(
+          productImage: element.get("productImage"),
+          productName: element.get("productName"),
+          productPrice: element.get("productPrice"),
+        );
+        newList.add(productModel);
+      },
+    );
+    freshProductList = newList;
+    notifyListeners();
+  }
+
+  List<ProductModel> get getFreshProductDataList {
+    return freshProductList;
+  }
+
+  fetchRootProductData() async {
+    List<ProductModel> newList = [];
+
+    QuerySnapshot value = await FirebaseFirestore.instance
+        .collection("RootVegetablesProduct ")
+        .get();
+
+    value.docs.forEach(
+      (element) {
+        productModel = ProductModel(
+          productImage: element.get("productImage"),
+          productName: element.get("productName"),
+          productPrice: element.get("productPrice"),
+        );
+        newList.add(productModel);
+      },
+    );
+    rootProductList = newList;
+    notifyListeners();
+  }
+
+  List<ProductModel> get getRootProductDataList {
+    return rootProductList;
+  }
+}
diff --git a/lib/screens/home_screens/home_screen.dart b/lib/screens/home_screens/home_screen.dart
index 026a0d5..255d0b0 100644
--- a/lib/screens/home_screens/home_screen.dart
+++ b/lib/screens/home_screens/home_screen.dart
@@ -1,12 +1,22 @@
 import 'package:flutter/cupertino.dart';
+import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
+import 'package:food_app/providers/product_provider.dart';
 import 'package:food_app/screens/home_screens/drawer_side.dart';
 import 'package:food_app/config/colors.dart';
 import 'package:food_app/screens/home_screens/product_overview/product_overview.dart';
 import 'package:food_app/screens/home_screens/single_product.dart';
 import 'package:food_app/screens/search/search.dart';
+import 'package:provider/provider.dart';
+
+class HomeScreen extends StatefulWidget {
+  @override
+  State<HomeScreen> createState() => _HomeScreenState();
+}
+
+class _HomeScreenState extends State<HomeScreen> {
+  ProductProvider productProvider;
 
-class HomeScreen extends StatelessWidget {
   Widget _buildHerbsProduct(context) {
     return Column(
       crossAxisAlignment: CrossAxisAlignment.start,
@@ -27,56 +37,30 @@ class HomeScreen extends StatelessWidget {
         SingleChildScrollView(
           scrollDirection: Axis.horizontal,
           child: Row(
-            children: [
-              SingleProduct(
+            children: productProvider.getHerbsProductDataList.map((herbsProductData) {
+              return SingleProduct(
                 onTap: () {
                   Navigator.of(context).push(
                     MaterialPageRoute(
                       builder: (context) => ProductOverview(
-                        productName: "Fresh Basil",
+                        productPrice: herbsProductData.productPrice,
+                        productName: herbsProductData.productName,
                         productImage:
-                            'https://www.pngitem.com/pimgs/m/490-4903879_fresh-basil-leaf-png-transparent-png.png',
+                            herbsProductData.productImage,
                       ),
                     ),
                   );
                 },
+                productPrice: herbsProductData.productPrice,
                 productImage:
-                    'https://www.pngitem.com/pimgs/m/490-4903879_fresh-basil-leaf-png-transparent-png.png',
-                productName: "Fresh Basil",
-              ),
-              SingleProduct(
-                onTap: () {
-                  Navigator.of(context).push(
-                    MaterialPageRoute(
-                      builder: (context) => ProductOverview(
-                        productName: "Fresh Mint",
-                        productImage:
-                            'https://i.dlpng.com/static/png/5560435-peppermint-transparent-image-png-arts-peppermint-png-1200_900_preview.png',
-                      ),
-                    ),
-                  );
-                },
-                productImage:
-                    'https://i.dlpng.com/static/png/5560435-peppermint-transparent-image-png-arts-peppermint-png-1200_900_preview.png',
-                productName: "Fresh Mint",
-              ),
-              SingleProduct(
-                onTap: () {
-                  Navigator.of(context).push(
-                    MaterialPageRoute(
-                      builder: (context) => ProductOverview(
-                        productName: "Rose Mary",
-                        productImage:
-                            'https://www.pngarts.com/files/5/Rosemary-PNG-Transparent-Image.png',
-                      ),
-                    ),
-                  );
-                },
-                productImage:
-                    'https://www.pngarts.com/files/5/Rosemary-PNG-Transparent-Image.png',
-                productName: "Rose Mary",
-              )
-            ],
+                    herbsProductData.productImage,
+                productName: herbsProductData.productName,
+              );
+            },
+          ).toList(),
+            // children: [
+
+            // ],
           ),
         ),
       ],
@@ -103,56 +87,27 @@ class HomeScreen extends StatelessWidget {
         SingleChildScrollView(
           scrollDirection: Axis.horizontal,
           child: Row(
-            children: [
-              SingleProduct(
-                onTap: () {
-                  Navigator.of(context).push(
-                    MaterialPageRoute(
-                      builder: (context) => ProductOverview(
-                        productName: "Fresh Berries",
-                        productImage:
-                            'https://www.kindpng.com/picc/m/191-1916425_berries-png-file-download-free-mixed-berries-fruit.png',
-                      ),
-                    ),
-                  );
-                },
-                productImage:
-                    'https://www.kindpng.com/picc/m/191-1916425_berries-png-file-download-free-mixed-berries-fruit.png',
-                productName: "Fresh Berries",
-              ),
-              SingleProduct(
+            children: productProvider.getFreshProductDataList.map((freshProductData) {
+              return SingleProduct(
                 onTap: () {
                   Navigator.of(context).push(
                     MaterialPageRoute(
                       builder: (context) => ProductOverview(
-                        productName: "Watermelon",
+                        productPrice: freshProductData.productPrice,
+                        productName: freshProductData.productName,
                         productImage:
-                            'https://e1.pngegg.com/pngimages/832/291/png-clipart-fruit-sliced-watermelon.png',
+                            freshProductData.productImage,
                       ),
                     ),
                   );
                 },
+                productPrice: freshProductData.productPrice,
                 productImage:
-                    'https://e1.pngegg.com/pngimages/832/291/png-clipart-fruit-sliced-watermelon.png',
-                productName: "Watermelon",
-              ),
-              SingleProduct(
-                onTap: () {
-                  Navigator.of(context).push(
-                    MaterialPageRoute(
-                      builder: (context) => ProductOverview(
-                        productName: "Mangoes",
-                        productImage:
-                            'https://www.nicepng.com/png/detail/852-8528360_mango-png-image-mango-clipart-fruit.png',
-                      ),
-                    ),
-                  );
-                },
-                productImage:
-                    'https://www.nicepng.com/png/detail/852-8528360_mango-png-image-mango-clipart-fruit.png',
-                productName: "Mangoes",
-              )
-            ],
+                    freshProductData.productImage,
+                productName: freshProductData.productName,
+              );
+            },
+          ).toList(),
           ),
         ),
       ],
@@ -179,64 +134,44 @@ class HomeScreen extends StatelessWidget {
         SingleChildScrollView(
           scrollDirection: Axis.horizontal,
           child: Row(
-            children: [
-              SingleProduct(
-                onTap: () {
-                  Navigator.of(context).push(
-                    MaterialPageRoute(
-                      builder: (context) => ProductOverview(
-                        productName: "Fennel",
-                        productImage:
-                            'https://www.fondation-louisbonduelle.org/wp-content/uploads/2016/09/fenouil_262755635-e1475226317736.png',
-                      ),
-                    ),
-                  );
-                },
-                productImage:
-                    'https://www.fondation-louisbonduelle.org/wp-content/uploads/2016/09/fenouil_262755635-e1475226317736.png',
-                productName: "Fennel",
-              ),
-              SingleProduct(
-                onTap: () {
-                  Navigator.of(context).push(
-                    MaterialPageRoute(
-                      builder: (context) => ProductOverview(
-                        productName: "Beet Root",
-                        productImage:
-                            'https://www.nicepng.com/png/detail/50-508075_free-png-beet-png-images-transparent-red-beetroot.png',
-                      ),
-                    ),
-                  );
-                },
-                productImage:
-                    'https://www.nicepng.com/png/detail/50-508075_free-png-beet-png-images-transparent-red-beetroot.png',
-                productName: "Beet Root",
-              ),
-              SingleProduct(
+            children: productProvider.getRootProductDataList.map((rootProductData) {
+              return SingleProduct(
                 onTap: () {
                   Navigator.of(context).push(
                     MaterialPageRoute(
                       builder: (context) => ProductOverview(
-                        productName: "Turnip",
+                        productPrice: rootProductData.productPrice,
+                        productName: rootProductData.productName,
                         productImage:
-                            'https://purepng.com/public/uploads/large/purepng.com-turnipvegetables-root-vegetable-rutabaga-swede-turnip-neep-941524702928b62ft.png',
+                            rootProductData.productImage,
                       ),
                     ),
                   );
                 },
+                productPrice: rootProductData.productPrice,
                 productImage:
-                    'https://purepng.com/public/uploads/large/purepng.com-turnipvegetables-root-vegetable-rutabaga-swede-turnip-neep-941524702928b62ft.png',
-                productName: "Turnip",
-              )
-            ],
+                    rootProductData.productImage,
+                productName: rootProductData.productName,
+              );
+            },
+          ).toList(),
           ),
         ),
       ],
     );
   }
 
+  @override
+  void initState() {
+    ProductProvider productProvider = Provider.of(context, listen: false);
+    productProvider.fetchHerbsProductData();
+    super.initState();
+  }
+
   @override
   Widget build(BuildContext context) {
+    productProvider = Provider.of(context);
+
     return Scaffold(
       drawer: DrawerSide(),
       appBar: AppBar(
diff --git a/lib/screens/home_screens/product_overview/product_overview.dart b/lib/screens/home_screens/product_overview/product_overview.dart
index 76b96b7..5ce4984 100644
--- a/lib/screens/home_screens/product_overview/product_overview.dart
+++ b/lib/screens/home_screens/product_overview/product_overview.dart
@@ -6,7 +6,8 @@ enum SigninCharacter { fill, outline }
 class ProductOverview extends StatefulWidget {
   final String productName;
   final String productImage;
-  ProductOverview({this.productImage, this.productName});
+  final int productPrice;
+  ProductOverview({this.productImage, this.productName, this.productPrice});
 
   @override
   _ProductOverviewState createState() => _ProductOverviewState();
@@ -123,7 +124,7 @@ class _ProductOverviewState extends State<ProductOverview> {
                                   )
                                 ],
                               ),
-                              Text("\$50"),
+                              Text("\$${widget.productPrice}"),
                               Container(
                                 padding: EdgeInsets.symmetric(
                                   horizontal: 30,
diff --git a/lib/screens/home_screens/single_product.dart b/lib/screens/home_screens/single_product.dart
index d88c747..cd7604a 100644
--- a/lib/screens/home_screens/single_product.dart
+++ b/lib/screens/home_screens/single_product.dart
@@ -4,8 +4,10 @@ import 'package:food_app/config/colors.dart';
 class SingleProduct extends StatelessWidget {
   final String productImage;
   final String productName;
+  final int productPrice;
   final Function onTap;
-  SingleProduct({this.productImage, this.productName, this.onTap});
+  SingleProduct(
+      {this.productImage, this.productName, this.onTap, this.productPrice});
   @override
   Widget build(BuildContext context) {
     return SingleChildScrollView(
@@ -48,7 +50,7 @@ class SingleProduct extends StatelessWidget {
                                     fontWeight: FontWeight.bold,
                                   ),
                                 ),
-                                Text('50\$/50 Gram',
+                                Text('$productPrice\$/50 Gram',
                                     style: TextStyle(
                                       color: Colors.grey,
                                     )),
diff --git a/lib/widgets/single_item.dart b/lib/widgets/single_item.dart
index 648770f..b2dd454 100644
--- a/lib/widgets/single_item.dart
+++ b/lib/widgets/single_item.dart
@@ -18,7 +18,7 @@ class SingleItem extends StatelessWidget {
                   height: 100,
                   child: Center(
                     child: Image.network(
-                        "https://www.pngitem.com/pimgs/m/490-4903879_fresh-basil-leaf-png-transparent-png.png"),
+                        "https://purepng.com/public/uploads/large/purepng.com-pepermintpeperminthybrid-mintperennial-plantmint-14115270742872fda0.png"),
                   ),
                 ),
               ),
diff --git a/pubspec.lock b/pubspec.lock
index 83f220b..c5ea06f 100644
--- a/pubspec.lock
+++ b/pubspec.lock
@@ -42,7 +42,7 @@ packages:
       name: cloud_firestore
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.5.4"
+    version: "3.1.10"
   cloud_firestore_platform_interface:
     dependency: transitive
     description:
@@ -56,7 +56,7 @@ packages:
       name: cloud_firestore_web
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "2.6.9"
+    version: "2.6.10"
   collection:
     dependency: transitive
     description:
@@ -84,42 +84,42 @@ packages:
       name: firebase_auth
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.4.1"
+    version: "3.3.10"
   firebase_auth_platform_interface:
     dependency: transitive
     description:
       name: firebase_auth_platform_interface
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "4.3.1"
+    version: "6.2.1"
   firebase_auth_web:
     dependency: transitive
     description:
       name: firebase_auth_web
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.3.1"
+    version: "3.3.9"
   firebase_core:
     dependency: transitive
     description:
       name: firebase_core
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.13.0"
+    version: "1.13.1"
   firebase_core_platform_interface:
     dependency: transitive
     description:
       name: firebase_core_platform_interface
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "4.2.4"
+    version: "4.2.5"
   firebase_core_web:
     dependency: transitive
     description:
       name: firebase_core_web
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.6.0"
+    version: "1.6.1"
   flutter:
     dependency: "direct main"
     description: flutter
@@ -131,7 +131,7 @@ packages:
       name: flutter_signin_button
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "1.1.0"
+    version: "2.0.0"
   flutter_test:
     dependency: "direct dev"
     description: flutter
@@ -148,7 +148,7 @@ packages:
       name: font_awesome_flutter
       url: "https://pub.dartlang.org"
     source: hosted
-    version: "8.12.0"
+    version: "9.2.0"
   google_sign_in:
     dependency: "direct main"
     description:
@@ -212,6 +212,13 @@ packages:
       url: "https://pub.dartlang.org"
     source: hosted
     version: "1.7.0"
+  nested:
+    dependency: transitive
+    description:
+      name: nested
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "1.0.0"
   path:
     dependency: transitive
     description:
@@ -226,6 +233,13 @@ packages:
       url: "https://pub.dartlang.org"
     source: hosted
     version: "2.1.2"
+  provider:
+    dependency: "direct main"
+    description:
+      name: provider
+      url: "https://pub.dartlang.org"
+    source: hosted
+    version: "6.0.2"
   quiver:
     dependency: transitive
     description:
diff --git a/pubspec.yaml b/pubspec.yaml
index b562c1d..765ac16 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -34,10 +34,13 @@ dependencies:
   # The following adds the Cupertino Icons font to your application.
   # Use with the CupertinoIcons class for iOS style icons.
   cupertino_icons: ^1.0.2
-  flutter_signin_button: ^1.1.0
+  flutter_signin_button: ^2.0.0
   google_sign_in: ^5.0.2
-  firebase_auth: ^1.1.0
-  cloud_firestore: ^2.2.0
+  firebase_auth: ^3.3.10
+  cloud_firestore: ^3.1.10
+  provider: ^6.0.2
+
+
 dev_dependencies:
   flutter_test:
     sdk: flutter
-- 
GitLab