From c403b23789171d90797b23efe75bf97c90f11c7d Mon Sep 17 00:00:00 2001 From: I-am-the-coder-Tusharbola <149319221+I-am-the-coder-Tusharbola@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:25:31 +0530 Subject: [PATCH 01/22] Update README.md --- README.md | 105 ++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 83 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 877fb545..68fbb48f 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,93 @@ -# Code-with-Google-Maps-2023 - Hack2skill +![image](https://github.com/I-am-the-coder-Tusharbola/lone-tech-wolf/assets/149319221/de962714-bca5-46e2-82a9-eb3f377098f2)#### Team Name - Lone Tech Wolf +#### Problem Statement - “Individuals seeking to adopt a sustainable lifestyle often struggle due to the lack of a centralized platform for discovering eco-friendly resources and businesses. This, coupled with a general lack of awareness about sustainable choices, hinders their transition towards a greener lifestyle.” -Welcome to the official repository for the Code-with-Google-Maps-2023 organized by Hack2skill! +#### Team Leader Email - Tushar2010@outlook.com + +### A Brief of the Prototype: +The Sustainable Living Guide is a mobile application that uses Google Maps Platform to guide users towards a more sustainable lifestyle. It helps users discover sustainable businesses and resources in their city, such as recycling centers. It also has a community forum where people can talk about sustainability .It also has a feature named AI Support where user’s can discuss about sustainability with AI - the future of technology . The main goal of the app is to promote sustainability by increasing awareness about sustainable businesses and resources. By providing a platform for users to learn about sustainability and make more eco-friendly choices, the app contributes to environmental conservation and promotes a healthier lifestyle. + + + +### Tech Stack: +Programming Language: Dart +Framework: Flutter +IDE: Visual Studio Code +APIs and Libraries: + Google Maps API: Used to display maps and place markers on it. + Google Places API: Used to find nearby recycling centers. + Geolocation API: Used to get the current location of the user. + NewsAPI: Used to fetch news articles related to sustainability and eco-friendliness. + OpenAI API: Used to interact with an AI model for chat support. + supabase API : To interact with the global database . + + +### Step-by-Step Code Execution Instructions: ## Getting Started -To get started with the Code-with-Google-Maps-2023 repository, follow these steps: -### Submission Instruction: - 1. Fork this repository - 2. Create a folder with your Team Name - 3. Upload all the code and necessary files in the created folder - 4. Upload a **README.md** file in your folder with the below mentioned informations. - 5. Generate a Pull Request with your Team Name. (Example: submission-XYZ_team) +1. **Clone the Repository**: Start by cloning the repository to your local machine. To do this, open your terminal or command prompt, navigate to the directory where you want to clone the repository and run: + + ```bash + git clone + ``` + + +2. **Navigate to the Project Directory**: Once cloning is complete, navigate into the project directory: + + ```bash + cd + ``` + + +3. **Get Flutter Packages**: The project depends on a set of Flutter packages defined in `pubspec.yaml`. To download these packages, run: + + ```bash + flutter pub get + ``` + +4. **Check Flutter Setup**: Before running the app, ensure that your Flutter setup is complete and there are no issues. Run this command to check: + + ```bash + flutter doctor + ``` + + This command checks your environment and displays a report to the terminal window. + +5. **Run the App in Debug Mode**: Now you're ready to run the app in debug mode. Start a debug session by running: + + ```bash + flutter run + ``` + + This command runs your application and attaches a debugger to it. + +6. **Build the App**: If you want to build a release version of your app, use the `flutter build apk` command: + + ```bash + flutter build apk + ``` + + This command generates an APK file in the `build/app/outputs/flutter-apk/` directory in your project. + + + -### README.md must consist of the following information: -#### Team Name - -#### Problem Statement - -#### Team Leader Email - -### A Brief of the Prototype: - This section must include UML Diagrams and prototype description - -### Tech Stack: - List Down all technologies used to Build the prototype - -### Step-by-Step Code Execution Instructions: - This Section must contain a set of instructions required to clone and run the prototype so that it can be tested and deeply analyzed ### Future Scope: - Write about the scalability and futuristic aspects of the prototype developed +The Sustainable Living Guide app has a promising future scope given its focus on promoting sustainability and eco-friendly choices. Here are some potential scalability and futuristic aspects of the prototype: + +Expansion to More Cities: The app currently helps users discover recycling centres in user's city city. In the future, it could be expanded to include more cities, even globally and also display all the sustainable businesses. This would make the app useful to a larger audience and promote sustainability on a larger scale. + +Integration with Other Platforms: The app could be integrated with other platforms such as social media, e-commerce sites, and more. This would allow users to share their sustainable choices and inspire others to do the same. + +Advanced AI Support: The AI Support feature could be enhanced to provide more personalized recommendations and tips based on the user’s lifestyle and preferences. It could also be trained to answer more complex questions about sustainability. + +Gamification: To make the app more engaging, gamification elements could be introduced. For example, users could earn points for making sustainable choices, which could be redeemed for rewards. + +Partnerships: The app could partner with sustainable businesses to offer discounts or special offers to users. This would encourage users to make more sustainable choices and support businesses that are doing their part for the environment. + +Augmented Reality (AR) Features: In the future, AR technology could be incorporated into the app to provide users with an immersive experience. For example, users could see how a product is made or how much carbon footprint it has through AR. + From a1b38d89ab887345887b3011425ce0b5813a1b74 Mon Sep 17 00:00:00 2001 From: I-am-the-coder-Tusharbola <149319221+I-am-the-coder-Tusharbola@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:26:48 +0530 Subject: [PATCH 02/22] Update README.md --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 68fbb48f..602e581b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![image](https://github.com/I-am-the-coder-Tusharbola/lone-tech-wolf/assets/149319221/de962714-bca5-46e2-82a9-eb3f377098f2)#### Team Name - Lone Tech Wolf +#### Team Name - Lone Tech Wolf #### Problem Statement - “Individuals seeking to adopt a sustainable lifestyle often struggle due to the lack of a centralized platform for discovering eco-friendly resources and businesses. This, coupled with a general lack of awareness about sustainable choices, hinders their transition towards a greener lifestyle.” #### Team Leader Email - Tushar2010@outlook.com @@ -10,9 +10,13 @@ The Sustainable Living Guide is a mobile application that uses Google Maps Platf ### Tech Stack: Programming Language: Dart + Framework: Flutter + IDE: Visual Studio Code + APIs and Libraries: + Google Maps API: Used to display maps and place markers on it. Google Places API: Used to find nearby recycling centers. Geolocation API: Used to get the current location of the user. From f014a747e6c8f98621f3d52a3b82e678449c52c4 Mon Sep 17 00:00:00 2001 From: I-am-the-coder-Tusharbola <149319221+I-am-the-coder-Tusharbola@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:27:13 +0530 Subject: [PATCH 03/22] Update README.md --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 602e581b..2b247315 100644 --- a/README.md +++ b/README.md @@ -18,10 +18,15 @@ IDE: Visual Studio Code APIs and Libraries: Google Maps API: Used to display maps and place markers on it. + Google Places API: Used to find nearby recycling centers. + Geolocation API: Used to get the current location of the user. + NewsAPI: Used to fetch news articles related to sustainability and eco-friendliness. + OpenAI API: Used to interact with an AI model for chat support. + supabase API : To interact with the global database . From 1813be7aa1136a30e39e737e5cb87a807b4479e8 Mon Sep 17 00:00:00 2001 From: I-am-the-coder-Tusharbola <149319221+I-am-the-coder-Tusharbola@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:27:30 +0530 Subject: [PATCH 04/22] Update README.md --- README.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 2b247315..d72cee79 100644 --- a/README.md +++ b/README.md @@ -17,17 +17,17 @@ IDE: Visual Studio Code APIs and Libraries: - Google Maps API: Used to display maps and place markers on it. - - Google Places API: Used to find nearby recycling centers. - - Geolocation API: Used to get the current location of the user. - - NewsAPI: Used to fetch news articles related to sustainability and eco-friendliness. - - OpenAI API: Used to interact with an AI model for chat support. - - supabase API : To interact with the global database . + Google Maps API: Used to display maps and place markers on it. + + Google Places API: Used to find nearby recycling centers. + + Geolocation API: Used to get the current location of the user. + + NewsAPI: Used to fetch news articles related to sustainability and eco-friendliness. + + OpenAI API: Used to interact with an AI model for chat support. + + supabase API : To interact with the global database . ### Step-by-Step Code Execution Instructions: From 6b6960425a878513a5f53235c44fa749d7ab2494 Mon Sep 17 00:00:00 2001 From: I-am-the-coder-Tusharbola <149319221+I-am-the-coder-Tusharbola@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:27:54 +0530 Subject: [PATCH 05/22] Update README.md --- README.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index d72cee79..a1212a05 100644 --- a/README.md +++ b/README.md @@ -17,17 +17,17 @@ IDE: Visual Studio Code APIs and Libraries: - Google Maps API: Used to display maps and place markers on it. - - Google Places API: Used to find nearby recycling centers. - - Geolocation API: Used to get the current location of the user. - - NewsAPI: Used to fetch news articles related to sustainability and eco-friendliness. - - OpenAI API: Used to interact with an AI model for chat support. - - supabase API : To interact with the global database . + Google Maps API: Used to display maps and place markers on it. + + Google Places API: Used to find nearby recycling centers. + + Geolocation API: Used to get the current location of the user. + + NewsAPI: Used to fetch news articles related to sustainability and eco-friendliness. + + OpenAI API: Used to interact with an AI model for chat support. + + supabase API : To interact with the global database . ### Step-by-Step Code Execution Instructions: From 67670329955252bd0b28ce446ed0fae78ad8cd41 Mon Sep 17 00:00:00 2001 From: I-am-the-coder-Tusharbola <149319221+I-am-the-coder-Tusharbola@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:28:28 +0530 Subject: [PATCH 06/22] Update README.md --- README.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index a1212a05..e7dce1bd 100644 --- a/README.md +++ b/README.md @@ -15,19 +15,19 @@ Framework: Flutter IDE: Visual Studio Code -APIs and Libraries: - - Google Maps API: Used to display maps and place markers on it. - - Google Places API: Used to find nearby recycling centers. - - Geolocation API: Used to get the current location of the user. - - NewsAPI: Used to fetch news articles related to sustainability and eco-friendliness. - - OpenAI API: Used to interact with an AI model for chat support. - - supabase API : To interact with the global database . +### APIs and Libraries: + + Google Maps API: Used to display maps and place markers on it. + + Google Places API: Used to find nearby recycling centers. + + Geolocation API: Used to get the current location of the user. + + NewsAPI: Used to fetch news articles related to sustainability and eco-friendliness. + + OpenAI API: Used to interact with an AI model for chat support. + + supabase API : To interact with the global database . ### Step-by-Step Code Execution Instructions: From ba05dab9a562686b4fa3fbc96280167593fc191f Mon Sep 17 00:00:00 2001 From: I-am-the-coder-Tusharbola <149319221+I-am-the-coder-Tusharbola@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:28:48 +0530 Subject: [PATCH 07/22] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e7dce1bd..30fc6d90 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Framework: Flutter IDE: Visual Studio Code -### APIs and Libraries: +# APIs and Libraries: Google Maps API: Used to display maps and place markers on it. From a3b8c4e0b81f8266512bcdf4f416fe4319e3dc96 Mon Sep 17 00:00:00 2001 From: I-am-the-coder-Tusharbola <149319221+I-am-the-coder-Tusharbola@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:29:15 +0530 Subject: [PATCH 08/22] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 30fc6d90..e32ac9c5 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Framework: Flutter IDE: Visual Studio Code -# APIs and Libraries: +###### APIs and Libraries: Google Maps API: Used to display maps and place markers on it. From 8d96545ac3ad38cd40138ab68dda822f847dd4db Mon Sep 17 00:00:00 2001 From: I-am-the-coder-Tusharbola <149319221+I-am-the-coder-Tusharbola@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:29:33 +0530 Subject: [PATCH 09/22] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e32ac9c5..c97faaa1 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Framework: Flutter IDE: Visual Studio Code -###### APIs and Libraries: + APIs and Libraries: Google Maps API: Used to display maps and place markers on it. From a479ee87135b341397ee0f83bc1bd39133a0c5c2 Mon Sep 17 00:00:00 2001 From: I-am-the-coder-Tusharbola <149319221+I-am-the-coder-Tusharbola@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:31:41 +0530 Subject: [PATCH 10/22] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c97faaa1..dc844152 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ IDE: Visual Studio Code 1. **Clone the Repository**: Start by cloning the repository to your local machine. To do this, open your terminal or command prompt, navigate to the directory where you want to clone the repository and run: ```bash - git clone + git clone https://github.com/I-am-the-coder-Tusharbola/lone-tech-wolf.git ``` From f697b96e597d96e3839f1e36ab25e833a96a49ff Mon Sep 17 00:00:00 2001 From: I-am-the-coder-Tusharbola <149319221+I-am-the-coder-Tusharbola@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:32:30 +0530 Subject: [PATCH 11/22] Update README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index dc844152..3463f8c1 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,6 @@ IDE: Visual Studio Code ### Step-by-Step Code Execution Instructions: -## Getting Started 1. **Clone the Repository**: Start by cloning the repository to your local machine. To do this, open your terminal or command prompt, navigate to the directory where you want to clone the repository and run: From 4b8ba64794b49c64f85203ada8f98787694b804a Mon Sep 17 00:00:00 2001 From: I-am-the-coder-Tusharbola <149319221+I-am-the-coder-Tusharbola@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:34:56 +0530 Subject: [PATCH 12/22] Add files via upload --- sustainable-living-guide-app/README.md | 16 +++++++ sustainable-living-guide-app/pubspec.yaml | 46 +++++++++++++++++++ .../sustainable_living_guide_app.iml | 17 +++++++ 3 files changed, 79 insertions(+) create mode 100644 sustainable-living-guide-app/README.md create mode 100644 sustainable-living-guide-app/pubspec.yaml create mode 100644 sustainable-living-guide-app/sustainable_living_guide_app.iml diff --git a/sustainable-living-guide-app/README.md b/sustainable-living-guide-app/README.md new file mode 100644 index 00000000..a7679a30 --- /dev/null +++ b/sustainable-living-guide-app/README.md @@ -0,0 +1,16 @@ +# sustainable_living_guide_app + +A new Flutter project. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) + +For help getting started with Flutter development, view the +[online documentation](https://docs.flutter.dev/), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/sustainable-living-guide-app/pubspec.yaml b/sustainable-living-guide-app/pubspec.yaml new file mode 100644 index 00000000..e14df788 --- /dev/null +++ b/sustainable-living-guide-app/pubspec.yaml @@ -0,0 +1,46 @@ +name: sustainable_living_guide +description: "A new Flutter project." +publish_to: 'none' + +version: 1.0.0+1 + +environment: + sdk: '>=3.2.0-210.3.beta <4.0.0' + +dependencies: + flutter: + sdk: flutter + google_maps_flutter: ^2.5.0 + geolocator: ^10.1.0 + permission_handler: ^11.0.1 + http: ^1.1.0 + shared_preferences: ^2.2.2 + url_launcher: ^6.1.14 + path_provider: ^2.1.1 + + google_maps_webservice: ^0.0.19 + google_api_headers: ^2.0.3 + dart_openai: ^4.0.0 + supabase: ^1.11.10 + + + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^2.0.0 + +flutter: + uses-material-design: true + assets: + - assets/images/logo.jpeg + - assets/quotes.txt + +dependency_overrides: + http: ^0.13.1 + google_api_headers: ^2.0.3 + rxdart: ^0.27.4 + + + + diff --git a/sustainable-living-guide-app/sustainable_living_guide_app.iml b/sustainable-living-guide-app/sustainable_living_guide_app.iml new file mode 100644 index 00000000..4a179b7d --- /dev/null +++ b/sustainable-living-guide-app/sustainable_living_guide_app.iml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + From 62377f2f4bcec68ea87d37216d893c2a0609fe47 Mon Sep 17 00:00:00 2001 From: I-am-the-coder-Tusharbola <149319221+I-am-the-coder-Tusharbola@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:35:59 +0530 Subject: [PATCH 13/22] Delete sustainable-living-guide-app/README.md --- sustainable-living-guide-app/README.md | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 sustainable-living-guide-app/README.md diff --git a/sustainable-living-guide-app/README.md b/sustainable-living-guide-app/README.md deleted file mode 100644 index a7679a30..00000000 --- a/sustainable-living-guide-app/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# sustainable_living_guide_app - -A new Flutter project. - -## Getting Started - -This project is a starting point for a Flutter application. - -A few resources to get you started if this is your first Flutter project: - -- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) -- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) - -For help getting started with Flutter development, view the -[online documentation](https://docs.flutter.dev/), which offers tutorials, -samples, guidance on mobile development, and a full API reference. From fe25566e7772128b776471cbe86d4b6c720af736 Mon Sep 17 00:00:00 2001 From: I-am-the-coder-Tusharbola <149319221+I-am-the-coder-Tusharbola@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:37:30 +0530 Subject: [PATCH 14/22] Add files via upload --- .../android/app/build.gradle | 71 ++++++++ .../android/app/google-services.json | 30 ++++ .../android/app/src/debug/AndroidManifest.xml | 7 + .../android/app/src/main/AndroidManifest.xml | 50 ++++++ .../plugins/GeneratedPluginRegistrant.java | 64 +++++++ .../MainActivity.kt | 6 + .../res/drawable-v21/launch_background.xml | 12 ++ .../main/res/drawable/launch_background.xml | 12 ++ .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 544 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 442 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 721 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 1031 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 1443 bytes .../app/src/main/res/values-night/styles.xml | 18 ++ .../app/src/main/res/values/styles.xml | 18 ++ .../app/src/profile/AndroidManifest.xml | 7 + .../android/build.gradle | 30 ++++ .../android/gradle.properties | 4 + .../android/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 53636 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 + sustainable-living-guide-app/android/gradlew | 160 ++++++++++++++++++ .../android/gradlew.bat | 90 ++++++++++ .../android/local.properties | 5 + .../android/settings.gradle | 29 ++++ .../sustainable_living_guide_app_android.iml | 29 ++++ .../assets/images/logo.jpeg | Bin 0 -> 97911 bytes .../assets/quotes.txt | 23 +++ 27 files changed, 670 insertions(+) create mode 100644 sustainable-living-guide-app/android/app/build.gradle create mode 100644 sustainable-living-guide-app/android/app/google-services.json create mode 100644 sustainable-living-guide-app/android/app/src/debug/AndroidManifest.xml create mode 100644 sustainable-living-guide-app/android/app/src/main/AndroidManifest.xml create mode 100644 sustainable-living-guide-app/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java create mode 100644 sustainable-living-guide-app/android/app/src/main/kotlin/com/example/sustainable_living_guide_app/MainActivity.kt create mode 100644 sustainable-living-guide-app/android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 sustainable-living-guide-app/android/app/src/main/res/drawable/launch_background.xml create mode 100644 sustainable-living-guide-app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 sustainable-living-guide-app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 sustainable-living-guide-app/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 sustainable-living-guide-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 sustainable-living-guide-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 sustainable-living-guide-app/android/app/src/main/res/values-night/styles.xml create mode 100644 sustainable-living-guide-app/android/app/src/main/res/values/styles.xml create mode 100644 sustainable-living-guide-app/android/app/src/profile/AndroidManifest.xml create mode 100644 sustainable-living-guide-app/android/build.gradle create mode 100644 sustainable-living-guide-app/android/gradle.properties create mode 100644 sustainable-living-guide-app/android/gradle/wrapper/gradle-wrapper.jar create mode 100644 sustainable-living-guide-app/android/gradle/wrapper/gradle-wrapper.properties create mode 100644 sustainable-living-guide-app/android/gradlew create mode 100644 sustainable-living-guide-app/android/gradlew.bat create mode 100644 sustainable-living-guide-app/android/local.properties create mode 100644 sustainable-living-guide-app/android/settings.gradle create mode 100644 sustainable-living-guide-app/android/sustainable_living_guide_app_android.iml create mode 100644 sustainable-living-guide-app/assets/images/logo.jpeg create mode 100644 sustainable-living-guide-app/assets/quotes.txt diff --git a/sustainable-living-guide-app/android/app/build.gradle b/sustainable-living-guide-app/android/app/build.gradle new file mode 100644 index 00000000..2fde79b4 --- /dev/null +++ b/sustainable-living-guide-app/android/app/build.gradle @@ -0,0 +1,71 @@ +plugins { + id "com.android.application" + id "kotlin-android" + id "dev.flutter.flutter-gradle-plugin" +} + +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +android { + namespace "com.example.sustainable_living_guide_app" + compileSdkVersion 33 + ndkVersion flutter.ndkVersion + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.example.sustainable_living_guide_app" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. + minSdkVersion 21 + targetSdkVersion 31 + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies {} + + + + diff --git a/sustainable-living-guide-app/android/app/google-services.json b/sustainable-living-guide-app/android/app/google-services.json new file mode 100644 index 00000000..d5be1a8f --- /dev/null +++ b/sustainable-living-guide-app/android/app/google-services.json @@ -0,0 +1,30 @@ +{ + "project_info": { + "project_number": "827053880336", + "firebase_url": "https://community-forum-db-default-rtdb.firebaseio.com", + "project_id": "community-forum-db", + "storage_bucket": "community-forum-db.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:827053880336:android:9ce1e0bd7b71c486acc695", + "android_client_info": { + "package_name": "com.example.sustainable_living_guide_app" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyCwjbs-n9EUOvKRpBi0-aDKAlyU3_2UEW0" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/sustainable-living-guide-app/android/app/src/debug/AndroidManifest.xml b/sustainable-living-guide-app/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 00000000..8ffe0246 --- /dev/null +++ b/sustainable-living-guide-app/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/sustainable-living-guide-app/android/app/src/main/AndroidManifest.xml b/sustainable-living-guide-app/android/app/src/main/AndroidManifest.xml new file mode 100644 index 00000000..ad561db4 --- /dev/null +++ b/sustainable-living-guide-app/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sustainable-living-guide-app/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java b/sustainable-living-guide-app/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java new file mode 100644 index 00000000..e8286a67 --- /dev/null +++ b/sustainable-living-guide-app/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java @@ -0,0 +1,64 @@ +package io.flutter.plugins; + +import androidx.annotation.Keep; +import androidx.annotation.NonNull; +import io.flutter.Log; + +import io.flutter.embedding.engine.FlutterEngine; + +/** + * Generated file. Do not edit. + * This file is generated by the Flutter tool based on the + * plugins that support the Android platform. + */ +@Keep +public final class GeneratedPluginRegistrant { + private static final String TAG = "GeneratedPluginRegistrant"; + public static void registerWith(@NonNull FlutterEngine flutterEngine) { + try { + flutterEngine.getPlugins().add(new io.flutter.plugins.flutter_plugin_android_lifecycle.FlutterAndroidLifecyclePlugin()); + } catch (Exception e) { + Log.e(TAG, "Error registering plugin flutter_plugin_android_lifecycle, io.flutter.plugins.flutter_plugin_android_lifecycle.FlutterAndroidLifecyclePlugin", e); + } + try { + flutterEngine.getPlugins().add(new com.baseflow.geolocator.GeolocatorPlugin()); + } catch (Exception e) { + Log.e(TAG, "Error registering plugin geolocator_android, com.baseflow.geolocator.GeolocatorPlugin", e); + } + try { + flutterEngine.getPlugins().add(new io.github.zeshuaro.google_api_headers.GoogleApiHeadersPlugin()); + } catch (Exception e) { + Log.e(TAG, "Error registering plugin google_api_headers, io.github.zeshuaro.google_api_headers.GoogleApiHeadersPlugin", e); + } + try { + flutterEngine.getPlugins().add(new io.flutter.plugins.googlemaps.GoogleMapsPlugin()); + } catch (Exception e) { + Log.e(TAG, "Error registering plugin google_maps_flutter_android, io.flutter.plugins.googlemaps.GoogleMapsPlugin", e); + } + try { + flutterEngine.getPlugins().add(new dev.fluttercommunity.plus.packageinfo.PackageInfoPlugin()); + } catch (Exception e) { + Log.e(TAG, "Error registering plugin package_info_plus, dev.fluttercommunity.plus.packageinfo.PackageInfoPlugin", e); + } + try { + flutterEngine.getPlugins().add(new io.flutter.plugins.pathprovider.PathProviderPlugin()); + } catch (Exception e) { + Log.e(TAG, "Error registering plugin path_provider_android, io.flutter.plugins.pathprovider.PathProviderPlugin", e); + } + try { + flutterEngine.getPlugins().add(new com.baseflow.permissionhandler.PermissionHandlerPlugin()); + } catch (Exception e) { + Log.e(TAG, "Error registering plugin permission_handler_android, com.baseflow.permissionhandler.PermissionHandlerPlugin", e); + } + try { + flutterEngine.getPlugins().add(new io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin()); + } catch (Exception e) { + Log.e(TAG, "Error registering plugin shared_preferences_android, io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin", e); + } + try { + flutterEngine.getPlugins().add(new io.flutter.plugins.urllauncher.UrlLauncherPlugin()); + } catch (Exception e) { + Log.e(TAG, "Error registering plugin url_launcher_android, io.flutter.plugins.urllauncher.UrlLauncherPlugin", e); + } + } +} diff --git a/sustainable-living-guide-app/android/app/src/main/kotlin/com/example/sustainable_living_guide_app/MainActivity.kt b/sustainable-living-guide-app/android/app/src/main/kotlin/com/example/sustainable_living_guide_app/MainActivity.kt new file mode 100644 index 00000000..93fa0023 --- /dev/null +++ b/sustainable-living-guide-app/android/app/src/main/kotlin/com/example/sustainable_living_guide_app/MainActivity.kt @@ -0,0 +1,6 @@ +package com.example.sustainable_living_guide_app + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/sustainable-living-guide-app/android/app/src/main/res/drawable-v21/launch_background.xml b/sustainable-living-guide-app/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 00000000..1cb7aa2f --- /dev/null +++ b/sustainable-living-guide-app/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/sustainable-living-guide-app/android/app/src/main/res/drawable/launch_background.xml b/sustainable-living-guide-app/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 00000000..84037589 --- /dev/null +++ b/sustainable-living-guide-app/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/sustainable-living-guide-app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/sustainable-living-guide-app/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..db77bb4b7b0906d62b1847e87f15cdcacf6a4f29 GIT binary patch literal 544 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAj~WQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2!h8bpbvhu0Wd6uZuB!w&u2PAxD2eNXD>P5D~Wn-+_Wa#27Xc zC?Zj|6r#X(-D3u$NCt}(Ms06KgJ4FxJVv{GM)!I~&n8Bnc94O7-Hd)cjDZswgC;Qs zO=b+9!WcT8F?0rF7!Uys2bs@gozCP?z~o%U|N3vA*22NaGQG zlg@K`O_XuxvZ&Ks^m&R!`&1=spLvfx7oGDKDwpwW`#iqdw@AL`7MR}m`rwr|mZgU`8P7SBkL78fFf!WnuYWm$5Z0 zNXhDbCv&49sM544K|?c)WrFfiZvCi9h0O)B3Pgg&ebxsLQ05GG~ AQ2+n{ literal 0 HcmV?d00001 diff --git a/sustainable-living-guide-app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/sustainable-living-guide-app/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..17987b79bb8a35cc66c3c1fd44f5a5526c1b78be GIT binary patch literal 442 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sk|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*D5Xx&nMcT!A!W`0S9QKQy;}1Cl^CgaH=;G9cpY;r$Q>i*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@Uy!y&wkt5C($~2D>~)O*cj@FGjOCM)M>_ixfudOh)?xMu#Fs z#}Y=@YDTwOM)x{K_j*Q;dPdJ?Mz0n|pLRx{4n|)f>SXlmV)XB04CrSJn#dS5nK2lM zrZ9#~WelCp7&e13Y$jvaEXHskn$2V!!DN-nWS__6T*l;H&Fopn?A6HZ-6WRLFP=R` zqG+CE#d4|IbyAI+rJJ`&x9*T`+a=p|0O(+s{UBcyZdkhj=yS1>AirP+0R;mf2uMgM zC}@~JfByORAh4SyRgi&!(cja>F(l*O+nd+@4m$|6K6KDn_&uvCpV23&>G9HJp{xgg zoq1^2_p9@|WEo z*X_Uko@K)qYYv~>43eQGMdbiGbo>E~Q& zrYBH{QP^@Sti!`2)uG{irBBq@y*$B zi#&(U-*=fp74j)RyIw49+0MRPMRU)+a2r*PJ$L5roHt2$UjExCTZSbq%V!HeS7J$N zdG@vOZB4v_lF7Plrx+hxo7(fCV&}fHq)$ literal 0 HcmV?d00001 diff --git a/sustainable-living-guide-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/sustainable-living-guide-app/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..d5f1c8d34e7a88e3f88bea192c3a370d44689c3c GIT binary patch literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof literal 0 HcmV?d00001 diff --git a/sustainable-living-guide-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/sustainable-living-guide-app/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..4d6372eebdb28e45604e46eeda8dd24651419bc0 GIT binary patch literal 1443 zcmb`G{WsKk6vsdJTdFg%tJav9_E4vzrOaqkWF|A724Nly!y+?N9`YV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` literal 0 HcmV?d00001 diff --git a/sustainable-living-guide-app/android/app/src/main/res/values-night/styles.xml b/sustainable-living-guide-app/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 00000000..360a1605 --- /dev/null +++ b/sustainable-living-guide-app/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/sustainable-living-guide-app/android/app/src/main/res/values/styles.xml b/sustainable-living-guide-app/android/app/src/main/res/values/styles.xml new file mode 100644 index 00000000..5fac6796 --- /dev/null +++ b/sustainable-living-guide-app/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/sustainable-living-guide-app/android/app/src/profile/AndroidManifest.xml b/sustainable-living-guide-app/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 00000000..8ffe0246 --- /dev/null +++ b/sustainable-living-guide-app/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,7 @@ + + + + diff --git a/sustainable-living-guide-app/android/build.gradle b/sustainable-living-guide-app/android/build.gradle new file mode 100644 index 00000000..7ff1933a --- /dev/null +++ b/sustainable-living-guide-app/android/build.gradle @@ -0,0 +1,30 @@ +buildscript { + ext.kotlin_version = '1.7.10' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +tasks.register("clean", Delete) { + delete rootProject.buildDir +} diff --git a/sustainable-living-guide-app/android/gradle.properties b/sustainable-living-guide-app/android/gradle.properties new file mode 100644 index 00000000..13b12d1c --- /dev/null +++ b/sustainable-living-guide-app/android/gradle.properties @@ -0,0 +1,4 @@ +org.gradle.jvmargs=-Xmx4G +android.useAndroidX=true +android.enableJetifier=true + diff --git a/sustainable-living-guide-app/android/gradle/wrapper/gradle-wrapper.jar b/sustainable-living-guide-app/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..13372aef5e24af05341d49695ee84e5f9b594659 GIT binary patch literal 53636 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ⅅ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 H-+%o-(+5aQ literal 0 HcmV?d00001 diff --git a/sustainable-living-guide-app/android/gradle/wrapper/gradle-wrapper.properties b/sustainable-living-guide-app/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..eabb85f5 --- /dev/null +++ b/sustainable-living-guide-app/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/sustainable-living-guide-app/android/gradlew b/sustainable-living-guide-app/android/gradlew new file mode 100644 index 00000000..9d82f789 --- /dev/null +++ b/sustainable-living-guide-app/android/gradlew @@ -0,0 +1,160 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/sustainable-living-guide-app/android/gradlew.bat b/sustainable-living-guide-app/android/gradlew.bat new file mode 100644 index 00000000..aec99730 --- /dev/null +++ b/sustainable-living-guide-app/android/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/sustainable-living-guide-app/android/local.properties b/sustainable-living-guide-app/android/local.properties new file mode 100644 index 00000000..99241b19 --- /dev/null +++ b/sustainable-living-guide-app/android/local.properties @@ -0,0 +1,5 @@ +sdk.dir=C:\\Users\\Tushar\\AppData\\Local\\Android\\sdk +flutter.sdk=C:\\flutter +flutter.buildMode=release +flutter.versionName=1.0.0 +flutter.versionCode=1 \ No newline at end of file diff --git a/sustainable-living-guide-app/android/settings.gradle b/sustainable-living-guide-app/android/settings.gradle new file mode 100644 index 00000000..e646870a --- /dev/null +++ b/sustainable-living-guide-app/android/settings.gradle @@ -0,0 +1,29 @@ +pluginManagement { + def flutterSdkPath = { + def properties = new Properties() + file("local.properties").withInputStream { properties.load(it) } + def flutterSdkPath = properties.getProperty("flutter.sdk") + assert flutterSdkPath != null, "flutter.sdk not set in local.properties" + return flutterSdkPath + } + settings.ext.flutterSdkPath = flutterSdkPath() + + includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle") + + repositories { + google() + mavenCentral() + gradlePluginPortal() + } + + plugins { + id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false + } +} + +plugins { + id "dev.flutter.flutter-plugin-loader" version "1.0.0" + id "com.android.application" version "7.3.0" apply false +} + +include ":app" diff --git a/sustainable-living-guide-app/android/sustainable_living_guide_app_android.iml b/sustainable-living-guide-app/android/sustainable_living_guide_app_android.iml new file mode 100644 index 00000000..5e74ee6a --- /dev/null +++ b/sustainable-living-guide-app/android/sustainable_living_guide_app_android.iml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/sustainable-living-guide-app/assets/images/logo.jpeg b/sustainable-living-guide-app/assets/images/logo.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..0b0c6f6d4f736c8249a8eb94d95367d7b03acbdb GIT binary patch literal 97911 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 literal 0 HcmV?d00001 diff --git a/sustainable-living-guide-app/assets/quotes.txt b/sustainable-living-guide-app/assets/quotes.txt new file mode 100644 index 00000000..c6a310a9 --- /dev/null +++ b/sustainable-living-guide-app/assets/quotes.txt @@ -0,0 +1,23 @@ +"We do not inherit the earth from our ancestors, we borrow it from our children." - Native American Proverb +"What is the use of a house if you haven’t got a tolerable planet to put it on?" - Henry David Thoreau +"The greatest threat to our planet is the belief that someone else will save it." - Robert Swan +"Sustainability is no longer about doing less harm. It's about doing more good." - Jochen Zeitz +"The environment is where we all meet; where we all have a mutual interest; it is the one thing all of us share." - Lady Bird Johnson +"We are living on this planet as if we had another one to go to." - Terri Swearingen +"Sustainability takes forever. And that’s the point." - William McDonough +"Nature is not a place to visit. It is home." - Gary Snyder +"Conservation is a state of harmony between men and land." - Aldo Leopold +"Earth provides enough to satisfy every man's needs, but not every man's greed." - Mahatma Gandhi +"The future will either be green or not at all." - Bob Brown +"Sustainable development is the pathway to the future we want for all." - Ban Ki-moon +"We won't have a society if we destroy the environment." - Margaret Mead +"Planetary health and human health are one and the same." - Dr. Samuel Myers +"The Earth is what we all have in common." - Wendell Berry +"Buy less, choose well, make it last." - Vivienne Westwood +"Sustainability is about ecology, economy and equity." - Ralph Bicknese +"Man must feel the earth to know himself and recognize his values." - Charles Lindbergh +"We abuse land because we regard it as a commodity belonging to us. When we see land as a community to which we belong, we may begin to use it with love and respect." - Aldo Leopold +"Sustainability requires maintaining life-supporting natural capital in order for our socioeconomic goals to be met." - Warren Flint +"The more clearly we can focus our attention on the wonders and realities of the universe about us, the less taste we shall have for destruction." - Rachel Carson +"There is no such thing as 'away'. When we throw anything away it must go somewhere." - Annie Leonard +"Trees are the earth's endless effort to speak to the listening heaven." - Rabindranath Tagore From d51348ab742d89908baf4c6356ff6a1002c6635d Mon Sep 17 00:00:00 2001 From: I-am-the-coder-Tusharbola <149319221+I-am-the-coder-Tusharbola@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:38:45 +0530 Subject: [PATCH 15/22] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3463f8c1..e8172ac2 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ IDE: Visual Studio Code 2. **Navigate to the Project Directory**: Once cloning is complete, navigate into the project directory: ```bash - cd + cd sustainable-living-guide-app ``` From ad8659280c4a0589990e1f4f86a85a9b2a26ae0e Mon Sep 17 00:00:00 2001 From: I-am-the-coder-Tusharbola <149319221+I-am-the-coder-Tusharbola@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:40:33 +0530 Subject: [PATCH 16/22] Add files via upload --- .../analysis_options.yaml | 28 + .../lib/AI_support.dart | 115 +++ .../lib/community_forum_screen.dart | 170 ++++ .../lib/loading_screen.dart | 67 ++ sustainable-living-guide-app/lib/main.dart | 23 + .../lib/profile_screen.dart | 53 ++ .../lib/sustainable_news_screen.dart | 57 ++ .../lib/user_name.txt | 0 .../lib/welcome_screen.dart | 252 ++++++ sustainable-living-guide-app/pubspec.lock | 794 ++++++++++++++++++ .../test/widget_test.dart | 30 + 11 files changed, 1589 insertions(+) create mode 100644 sustainable-living-guide-app/analysis_options.yaml create mode 100644 sustainable-living-guide-app/lib/AI_support.dart create mode 100644 sustainable-living-guide-app/lib/community_forum_screen.dart create mode 100644 sustainable-living-guide-app/lib/loading_screen.dart create mode 100644 sustainable-living-guide-app/lib/main.dart create mode 100644 sustainable-living-guide-app/lib/profile_screen.dart create mode 100644 sustainable-living-guide-app/lib/sustainable_news_screen.dart create mode 100644 sustainable-living-guide-app/lib/user_name.txt create mode 100644 sustainable-living-guide-app/lib/welcome_screen.dart create mode 100644 sustainable-living-guide-app/pubspec.lock create mode 100644 sustainable-living-guide-app/test/widget_test.dart diff --git a/sustainable-living-guide-app/analysis_options.yaml b/sustainable-living-guide-app/analysis_options.yaml new file mode 100644 index 00000000..d4e0f0c8 --- /dev/null +++ b/sustainable-living-guide-app/analysis_options.yaml @@ -0,0 +1,28 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at https://dart.dev/lints. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/sustainable-living-guide-app/lib/AI_support.dart b/sustainable-living-guide-app/lib/AI_support.dart new file mode 100644 index 00000000..53d015ce --- /dev/null +++ b/sustainable-living-guide-app/lib/AI_support.dart @@ -0,0 +1,115 @@ +// Importing necessary packages +import 'package:flutter/material.dart'; +import 'package:dart_openai/dart_openai.dart'; + +// Defining a stateful widget for the AI chat screen +class AIChatScreen extends StatefulWidget { + const AIChatScreen({Key? key}) : super(key: key); + + @override + _AIChatScreenState createState() => _AIChatScreenState(); +} + +// Defining the state for the AI chat screen +class _AIChatScreenState extends State { + // Initializing a text editing controller for the input field + final TextEditingController _controller = TextEditingController(); + + // Initializing a list to store the messages + final List _messages = []; + + // Function to handle the submission of a query + Future _submitQuery(String text) async { + // Setting the API key for OpenAI + OpenAI.apiKey = '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'; + + // Creating a completion with the OpenAI API + final completion = await OpenAI.instance.completion.create( + model: "text-davinci-003", + prompt: text, + maxTokens: 200, + stop: '/n', + ); + + // Updating the state with the new messages + setState(() { + _messages.insert( + 0, Message(text: 'AI: ${completion.choices[0].text}', type: 'ai')); + _messages.insert(0, Message(text: 'User: $text', type: 'user')); + }); + + // Clearing the input field + _controller.clear(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.white, + appBar: AppBar( + title: const Text('AI Support'), + centerTitle: true, + ), + body: Column( + children: [ + Flexible( + child: ListView.builder( + padding: const EdgeInsets.all(8.0), + reverse: false, + itemBuilder: (_, int index) => _messages[index], + itemCount: _messages.length, + ), + ), + const Divider(height: 1.0), + Container( + decoration: BoxDecoration(color: Theme.of(context).cardColor), + child: IconTheme( + data: + IconThemeData(color: Theme.of(context).colorScheme.secondary), + child: Container( + margin: const EdgeInsets.symmetric(horizontal: 8.0), + child: Row( + children: [ + Flexible( + child: TextField( + controller: _controller, + onSubmitted: _submitQuery, + decoration: const InputDecoration.collapsed( + hintText: "Send a message"), + ), + ), + Container( + margin: const EdgeInsets.symmetric(horizontal: 4.0), + child: IconButton( + icon: const Icon(Icons.send), + onPressed: () => _submitQuery(_controller.text)), + ), + ], + ), + ), + ), + ), + ], + ), + ); + } +} + +// Defining a stateless widget for a message +class Message extends StatelessWidget { + const Message({this.text, this.type}); + + final String? text; + final String? type; + + @override + Widget build(BuildContext context) { + return Container( + margin: const EdgeInsets.symmetric(vertical: 10.0, horizontal: 10.0), + child: type == 'ai' + ? Text(text!, + style: const TextStyle(color: Colors.blue, fontSize: 14)) + : Text(text!, style: const TextStyle(fontSize: 14)), + ); + } +} diff --git a/sustainable-living-guide-app/lib/community_forum_screen.dart b/sustainable-living-guide-app/lib/community_forum_screen.dart new file mode 100644 index 00000000..28c65175 --- /dev/null +++ b/sustainable-living-guide-app/lib/community_forum_screen.dart @@ -0,0 +1,170 @@ +// Importing necessary packages +import 'dart:async'; +import 'dart:io'; +import 'package:flutter/material.dart'; +import 'package:supabase/supabase.dart'; +import 'package:path_provider/path_provider.dart'; +import 'package:permission_handler/permission_handler.dart'; + +// Defining a stateful widget for the community forum screen +class CommunityForumScreen extends StatefulWidget { + @override + _CommunityForumScreenState createState() => _CommunityForumScreenState(); +} + +// Defining the state for the community forum screen +class _CommunityForumScreenState extends State { + // Initializing a Supabase client with the URL and API key + final client = SupabaseClient('https://poqhuqdfdnygffdamvhv.supabase.co', + 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InBvcWh1cWRmZG55Z2ZmZGFtdmh2Iiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTY5ODU2MzE2OCwiZXhwIjoyMDE0MTM5MTY4fQ.mLsveckdJ7eAlWz3UTXjBLj2zr87BhbmW5sYwWDccpU'); + String? userName; + + @override + void initState() { + super.initState(); + getUserName(); // Fetching the username when the widget is initialized + } + + // Function to get the username from a local file + Future getUserName() async { + final status = await Permission.storage.request(); + if (status.isGranted) { + final directory = await getApplicationDocumentsDirectory(); + final file = File('${directory.path}/user_name.txt'); + userName = await file.readAsString(); // Reading the file here + setState(() {}); // Then updating the state here + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('Community Forum'), + ), + body: userName == null + ? Center( + child: + CircularProgressIndicator()) // Showing a progress indicator while fetching the username + : Column( + children: [ + Expanded( + child: MessagesView(client, + userName!)), // Displaying the messages view here + MessageInput(client, + userName!), // Displaying the message input field here + ], + ), + ); + } +} + +// Defining a stateful widget for the messages view +class MessagesView extends StatefulWidget { + final SupabaseClient client; + final String userName; + + MessagesView(this.client, this.userName); + + @override + _MessagesViewState createState() => _MessagesViewState(); +} + +// Defining the state for the messages view +class _MessagesViewState extends State { + final messages = + >[]; // Initializing a list to store the messages + Timer? _timer; // Initializing a timer to fetch messages periodically + + @override + void initState() { + super.initState(); + _timer = Timer.periodic( + Duration(seconds: 2), + (timer) => + fetchMessages()); // Fetching messages every 2 seconds when the widget is initialized + } + + @override + void dispose() { + _timer?.cancel(); // Canceling the timer when disposing of the widget + super.dispose(); + } + + // Function to fetch messages from a Supabase table named 'messages' + fetchMessages() async { + final response = await widget.client.from('messages').select().execute(); + if (response.status == 200 && response.data != null) { + setState(() { + messages.clear(); // Clearing old messages here + for (var item in response.data) { + if (item is Map) { + messages.insert(0, + item); // Inserting new messages at the beginning of the list here + } + } + }); + } else { + // Removed print statement. You can handle the error here by showing it in the UI. + } + } + + @override + Widget build(BuildContext context) { + return ListView.builder( + itemCount: messages.length, + itemBuilder: (context, index) { + final message = messages[index]; + return ListTile( + title: Text('${message['text']}'), + subtitle: Text('${message['timestamp']}'), + ); + }, + ); + } +} + +// Defining a stateful widget for message input field +class MessageInput extends StatefulWidget { + final SupabaseClient client; + final String userName; + + MessageInput(this.client, this.userName); + + @override + _MessageInputState createState() => _MessageInputState(); +} + +// Defining the state for the message input field +class _MessageInputState extends State { + final controller = + TextEditingController(); // Initializing a text editing controller for the input field + + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.all(8), + child: Row( + children: [ + Expanded( + child: TextField( + controller: controller, + decoration: InputDecoration(hintText: 'Enter message'), + ), + ), + IconButton( + icon: Icon(Icons.send), + onPressed: () async { + await widget.client.from('messages').insert({ + 'text': '${widget.userName}: ${controller.text}', + 'timestamp': DateTime.now().toIso8601String() + }); + controller + .clear(); // Clearing the input field after sending a message + }, + ), + ], + ), + ); + } +} diff --git a/sustainable-living-guide-app/lib/loading_screen.dart b/sustainable-living-guide-app/lib/loading_screen.dart new file mode 100644 index 00000000..4722e698 --- /dev/null +++ b/sustainable-living-guide-app/lib/loading_screen.dart @@ -0,0 +1,67 @@ +// Importing necessary packages +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart' show rootBundle; +import 'dart:math'; +import 'welcome_screen.dart'; + +// Defining a stateful widget for the loading screen +class LoadingScreen extends StatefulWidget { + @override + _LoadingScreenState createState() => _LoadingScreenState(); +} + +// Defining the state for the loading screen +class _LoadingScreenState extends State { + String _quote = ''; // Initializing a string to store the quote + + @override + void initState() { + super.initState(); + loadQuote().then((value) { + // Loading a quote when the widget is initialized + setState(() { + _quote = value; // Then updating the state with the loaded quote here + }); + }); + Future.delayed(Duration(seconds: 10), () { + // Navigating to the welcome screen after 10 seconds + Navigator.pushReplacement( + context, MaterialPageRoute(builder: (context) => WelcomeScreen())); + }); + } + + // Function to load a random quote from a text file + Future loadQuote() async { + String text = await rootBundle.loadString( + 'assets/quotes.txt'); // Loading the quotes from a text file here + List quotes = + text.split('\n'); // Splitting the text into individual quotes here + return quotes[ + Random().nextInt(quotes.length)]; // Returning a random quote here + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Expanded( + child: Center( + child: Container( + height: 200.0, + child: Image.asset( + 'assets/images/logo.jpeg'), // Displaying the logo here + ), + ), + ), + Text(_quote), // Displaying the quote here + + CircularProgressIndicator(), // Displaying a progress indicator here + + SizedBox(height: 20.0), + ], + ), + ); + } +} diff --git a/sustainable-living-guide-app/lib/main.dart b/sustainable-living-guide-app/lib/main.dart new file mode 100644 index 00000000..c49bbe2f --- /dev/null +++ b/sustainable-living-guide-app/lib/main.dart @@ -0,0 +1,23 @@ +// Importing necessary packages +import 'package:flutter/material.dart'; +import 'loading_screen.dart'; + +void main() { + runApp(MyApp()); // Running the app here +} + +// Defining a stateless widget for the app +class MyApp extends StatelessWidget { + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Sustainable Living Guide', // Setting the title of the app here + theme: ThemeData( + primarySwatch: + Colors.green, // Setting the primary color of the app theme here + ), + home: + LoadingScreen(), // Setting the loading screen as the home screen of the app here + ); + } +} diff --git a/sustainable-living-guide-app/lib/profile_screen.dart b/sustainable-living-guide-app/lib/profile_screen.dart new file mode 100644 index 00000000..72ebf836 --- /dev/null +++ b/sustainable-living-guide-app/lib/profile_screen.dart @@ -0,0 +1,53 @@ +// Importing necessary packages +import 'package:flutter/material.dart'; +import 'package:path_provider/path_provider.dart'; +import 'dart:io'; + +// Defining a stateful widget for the profile screen +class ProfileScreen extends StatefulWidget { + @override + _ProfileScreenState createState() => _ProfileScreenState(); +} + +// Defining the state for the profile screen +class _ProfileScreenState extends State { + String userName = ''; // Initializing a string to store the username + + @override + void initState() { + super.initState(); + _getUserName(); // Fetching the username when the widget is initialized + } + + // Function to get the username from a local file + Future _getUserName() async { + final directory = await getApplicationDocumentsDirectory(); + final file = File('${directory.path}/user_name.txt'); + bool fileExists = await file.exists(); + + if (fileExists) { + String name = await file.readAsString(); // Reading the file here + setState(() { + userName = name; // Then updating the state with the read username here + }); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar(title: Text('Profile')), + body: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Spacer(flex: 2), + Center( + child: Text('Welcome, $userName!', + style: TextStyle( + fontSize: 24))), // Displaying the user's name here + Spacer(flex: 3), + ], + ), + ); + } +} diff --git a/sustainable-living-guide-app/lib/sustainable_news_screen.dart b/sustainable-living-guide-app/lib/sustainable_news_screen.dart new file mode 100644 index 00000000..2d502704 --- /dev/null +++ b/sustainable-living-guide-app/lib/sustainable_news_screen.dart @@ -0,0 +1,57 @@ +// Importing necessary packages +import 'package:flutter/material.dart'; +import 'package:http/http.dart' as http; +import 'dart:convert'; +import 'package:url_launcher/url_launcher.dart'; + +// Defining a stateless widget for the sustainable news screen +class SustainableNewsScreen extends StatelessWidget { + // Function to fetch news titles from NewsAPI + Future>> fetchNewsTitles() async { + final response = await http.get(Uri.parse( + 'https://newsapi.org/v2/everything?q=sustainability and eco-friendly&pageSize=20&apiKey=10b5286403674703a25c480489227484')); + + if (response.statusCode == 200) { + var jsonResponse = jsonDecode(response.body); + return List>.from(jsonResponse['articles']); + } else { + throw Exception('Failed to load news'); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: Text('Sustainable News'), + leading: IconButton( + icon: Icon(Icons.arrow_back), + onPressed: () => Navigator.pop(context), + ), + ), + body: FutureBuilder>>( + future: fetchNewsTitles(), + builder: (BuildContext context, + AsyncSnapshot>> snapshot) { + if (snapshot.hasData) { + return Scrollbar( + child: ListView.builder( + itemCount: snapshot.data?.length ?? 0, + itemBuilder: (BuildContext context, int index) { + return ListTile( + title: Text(snapshot.data?[index]['title'] ?? ''), + onTap: () => launch(snapshot.data?[index]['url'] ?? ''), + ); + }, + ), + ); + } else if (snapshot.hasError) { + return Text('Error: ${snapshot.error}'); + } else { + return CircularProgressIndicator(); + } + }, + ), + ); + } +} diff --git a/sustainable-living-guide-app/lib/user_name.txt b/sustainable-living-guide-app/lib/user_name.txt new file mode 100644 index 00000000..e69de29b diff --git a/sustainable-living-guide-app/lib/welcome_screen.dart b/sustainable-living-guide-app/lib/welcome_screen.dart new file mode 100644 index 00000000..80a789d6 --- /dev/null +++ b/sustainable-living-guide-app/lib/welcome_screen.dart @@ -0,0 +1,252 @@ +// Importing necessary packages +import 'package:flutter/material.dart'; +import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:geolocator/geolocator.dart'; +import 'package:permission_handler/permission_handler.dart'; +import 'package:http/http.dart' as http; +import 'dart:convert'; +import 'package:path_provider/path_provider.dart'; +import 'dart:io'; +import 'AI_support.dart'; +import 'community_forum_screen.dart'; +import 'sustainable_news_screen.dart'; +import 'profile_screen.dart'; + +// Defining a stateful widget for the welcome screen +class WelcomeScreen extends StatefulWidget { + const WelcomeScreen({super.key}); + + @override + _WelcomeScreenState createState() => _WelcomeScreenState(); +} + +// Defining the state for the welcome screen +class _WelcomeScreenState extends State { + // Initializing variables for current position, Google Map controller, username and markers set. + late Position _currentPosition; + late GoogleMapController mapController; + String userName = ''; + final Set _markers = {}; + + @override + void initState() { + super.initState(); + // Requesting permission, getting current location and asking user name when widget is initialized + _requestPermission().then((_) { + _getCurrentLocation(); + }); + _askUserName(); + } + + // Function to request location permission from the user + _requestPermission() async { + PermissionStatus status = await Permission.location.request(); + if (status.isDenied) {} + } + + // Function to get the current location of the user + _getCurrentLocation() async { + Position position = await Geolocator.getCurrentPosition( + desiredAccuracy: LocationAccuracy.best); + + final response = await http.post( + Uri.parse( + 'https://www.googleapis.com/geolocation/v1/geolocate?key=AIzaSyCFRmmWXEvFZSTsIt9j398LXuO5LSOiOnA'), + body: jsonEncode({ + 'considerIp': true, + }), + headers: {'Content-Type': 'application/json'}, + ); + + if (response.statusCode == 200) { + Map responseBody = jsonDecode(response.body); + position = Position( + latitude: responseBody['location']['lat'], + longitude: responseBody['location']['lng'], + timestamp: DateTime.now(), + accuracy: position.accuracy, + altitude: position.altitude, + heading: position.heading, + speed: position.speed, + speedAccuracy: position.speedAccuracy, + altitudeAccuracy: position.altitudeAccuracy, + headingAccuracy: position.headingAccuracy, + ); + } + + setState(() { + _currentPosition = position; + _markers.add(Marker( + markerId: const MarkerId('userLocation'), + position: LatLng(_currentPosition.latitude, _currentPosition.longitude), + infoWindow: const InfoWindow(title: "Your Location"), + )); + }); + + // Call the method to get nearby recycling centres + _getNearbyRecyclingCentres(); + } + + // Function to get nearby recycling centres from Google Places API + void _getNearbyRecyclingCentres() async { + final response = await http.get( + Uri.parse( + 'https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=${_currentPosition.latitude},${_currentPosition.longitude}&radius=5000&type=recycling&key=AIzaSyD6otfJJukGu2r5lC38F4FQCyAU2rp5s5s', + ), + ); + + if (response.statusCode == 200) { + Map responseBody = jsonDecode(response.body); + List results = responseBody['results']; + + for (var result in results) { + double lat = result['geometry']['location']['lat']; + double lng = result['geometry']['location']['lng']; + + setState(() { + _markers.add(Marker( + markerId: MarkerId(result['id']), + position: LatLng(lat, lng), + icon: + BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueBlue), + infoWindow: InfoWindow(title: result['name']), + )); + }); + } + } + } + + // Function to handle map creation + void _onMapCreated(GoogleMapController controller) { + mapController = controller; + } + + // Function to animate camera to go to current location of the user + void _goToCurrentLocation() async { + mapController.animateCamera(CameraUpdate.newCameraPosition(CameraPosition( + target: LatLng(_currentPosition.latitude, _currentPosition.longitude), + zoom: 14.0, + ))); + } + + // Function to ask user name from a dialog box and save it in a local file + void _askUserName() async { + final directory = await getApplicationDocumentsDirectory(); + final file = File('${directory.path}/user_name.txt'); + bool fileExists = await file.exists(); + + if (fileExists && await file.readAsString() != '') { + userName = await file.readAsString(); + } else { + await showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + title: const Text('Enter your name'), + content: TextField( + onChanged: (value) { + userName = value; + }, + decoration: + const InputDecoration(hintText: "Enter your name here"), + ), + actions: [ + TextButton( + onPressed: () async { + Navigator.pop(context, 'OK'); + await file.writeAsString(userName); + }, + child: const Text('OK'), + ), + ], + ); + }, + ); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + leading: Builder( + builder: (BuildContext context) { + return IconButton( + icon: const Icon(Icons.menu), + onPressed: () { + Scaffold.of(context).openDrawer(); + }, + ); + }, + ), + ), + drawer: Drawer( + child: ListView( + padding: EdgeInsets.zero, + children: [ + const DrawerHeader( + decoration: BoxDecoration( + color: Colors.green, + ), + child: Text('Sustainable Living Guide'), + ), + ListTile( + leading: const Icon(Icons.assignment), + title: const Text('Community Forum'), + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => CommunityForumScreen())); + }, + ), + ListTile( + leading: const Icon(Icons.person), + title: const Text('Profile'), + onTap: () { + Navigator.push(context, + MaterialPageRoute(builder: (context) => ProfileScreen())); + }, + ), + ListTile( + leading: const Icon(Icons.article), + title: const Text('Sustainable News'), + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => SustainableNewsScreen())); + }, + ), + ListTile( + leading: const Icon(Icons.computer), + title: const Text('AI Support'), + onTap: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => const AIChatScreen())); + }, + ), + ], + ), + ), + body: Stack(children: [ + GoogleMap( + initialCameraPosition: CameraPosition( + target: + LatLng(_currentPosition.latitude, _currentPosition.longitude), + zoom: 10), + markers: _markers, + onMapCreated: _onMapCreated, + ), + Positioned( + bottom: 10.0, + right: 10.0, + child: FloatingActionButton( + onPressed: _goToCurrentLocation, + child: const Icon(Icons.my_location))) + ]), + ); + } +} diff --git a/sustainable-living-guide-app/pubspec.lock b/sustainable-living-guide-app/pubspec.lock new file mode 100644 index 00000000..7e3852d8 --- /dev/null +++ b/sustainable-living-guide-app/pubspec.lock @@ -0,0 +1,794 @@ +# Generated by pub +# See https://dart.dev/tools/pub/glossary#lockfile +packages: + async: + dependency: transitive + description: + name: async + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" + source: hosted + version: "2.11.0" + boolean_selector: + dependency: transitive + description: + name: boolean_selector + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + characters: + dependency: transitive + description: + name: characters + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://pub.dev" + source: hosted + version: "1.3.0" + clock: + dependency: transitive + description: + name: clock + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" + source: hosted + version: "1.1.1" + collection: + dependency: transitive + description: + name: collection + sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a + url: "https://pub.dev" + source: hosted + version: "1.18.0" + crypto: + dependency: transitive + description: + name: crypto + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + url: "https://pub.dev" + source: hosted + version: "3.0.3" + csslib: + dependency: transitive + description: + name: csslib + sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb" + url: "https://pub.dev" + source: hosted + version: "1.0.0" + dart_openai: + dependency: "direct main" + description: + name: dart_openai + sha256: "707f6975454513f4a6197125b5a0fbe92ab7cbe4b8ea9111e529a09d7a3ce0c3" + url: "https://pub.dev" + source: hosted + version: "4.0.0" + fake_async: + dependency: transitive + description: + name: fake_async + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" + source: hosted + version: "1.3.1" + fetch_api: + dependency: transitive + description: + name: fetch_api + sha256: b88977a8f369344cbaa13a53752629185ecae0d56c6683f0a2060b652a0cf437 + url: "https://pub.dev" + source: hosted + version: "1.0.2" + fetch_client: + dependency: transitive + description: + name: fetch_client + sha256: "83c07b07a63526a43630572c72715707ca113a8aa3459efbc7b2d366b79402af" + url: "https://pub.dev" + source: hosted + version: "1.0.2" + ffi: + dependency: transitive + description: + name: ffi + sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + file: + dependency: transitive + description: + name: file + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" + url: "https://pub.dev" + source: hosted + version: "7.0.0" + flutter: + dependency: "direct main" + description: flutter + source: sdk + version: "0.0.0" + flutter_lints: + dependency: "direct dev" + description: + name: flutter_lints + sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04 + url: "https://pub.dev" + source: hosted + version: "2.0.3" + flutter_plugin_android_lifecycle: + dependency: transitive + description: + name: flutter_plugin_android_lifecycle + sha256: f185ac890306b5779ecbd611f52502d8d4d63d27703ef73161ca0407e815f02c + url: "https://pub.dev" + source: hosted + version: "2.0.16" + flutter_test: + dependency: "direct dev" + description: flutter + source: sdk + version: "0.0.0" + flutter_web_plugins: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" + functions_client: + dependency: transitive + description: + name: functions_client + sha256: "3b157b4d3ae9e38614fd80fab76d1ef1e0e39ff3412a45de2651f27cecb9d2d2" + url: "https://pub.dev" + source: hosted + version: "1.3.2" + geolocator: + dependency: "direct main" + description: + name: geolocator + sha256: e946395fc608842bb2f6c914807e9183f86f3cb787f6b8f832753e5251036f02 + url: "https://pub.dev" + source: hosted + version: "10.1.0" + geolocator_android: + dependency: transitive + description: + name: geolocator_android + sha256: "93906636752ea4d4e778afa981fdfe7409f545b3147046300df194330044d349" + url: "https://pub.dev" + source: hosted + version: "4.3.1" + geolocator_apple: + dependency: transitive + description: + name: geolocator_apple + sha256: ab90ae811c42ec2f6021e01eca71df00dee6ff1e69d2c2dafd4daeb0b793f73d + url: "https://pub.dev" + source: hosted + version: "2.3.2" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + sha256: b7aca62aa05d7e610c396a53a1936ff87fce2f735d76e93fde9269c341c46a25 + url: "https://pub.dev" + source: hosted + version: "4.1.1" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + sha256: "59083f7e0871b78299918d92bf930a14377f711d2d1156c558cd5ebae6c20d58" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + geolocator_windows: + dependency: transitive + description: + name: geolocator_windows + sha256: "8725beaa00db2b52f53d9811584cb4488240b250b04a09763e80945017f65c9c" + url: "https://pub.dev" + source: hosted + version: "0.2.1" + google_api_headers: + dependency: "direct main" + description: + name: google_api_headers + sha256: "59ebb30d12fea5a77525b8e66cf3cec9593a9433dc0f0168497ebca1d3142311" + url: "https://pub.dev" + source: hosted + version: "2.0.3" + google_maps: + dependency: transitive + description: + name: google_maps + sha256: "555d5d736339b0478e821167ac521c810d7b51c3b2734e6802a9f046b64ea37a" + url: "https://pub.dev" + source: hosted + version: "6.3.0" + google_maps_flutter: + dependency: "direct main" + description: + name: google_maps_flutter + sha256: d4914cb38b3dcb62c39c085d968d434de0f8050f00f4d9f5ba4a7c7e004934cb + url: "https://pub.dev" + source: hosted + version: "2.5.0" + google_maps_flutter_android: + dependency: transitive + description: + name: google_maps_flutter_android + sha256: e6cb018169e49332f88d23b1d2119b09e8ab4e7d3a1b889a1b7b3fd113e034ba + url: "https://pub.dev" + source: hosted + version: "2.5.1" + google_maps_flutter_ios: + dependency: transitive + description: + name: google_maps_flutter_ios + sha256: "2aa28eb9b9d5dfdce6932a7b7f096430bf83a1a09b4e21e81939351f407c787f" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + google_maps_flutter_platform_interface: + dependency: transitive + description: + name: google_maps_flutter_platform_interface + sha256: a3e9e6896501e566d902c6c69f010834d410ef4b7b5c18b90c77e871c86b7907 + url: "https://pub.dev" + source: hosted + version: "2.4.1" + google_maps_flutter_web: + dependency: transitive + description: + name: google_maps_flutter_web + sha256: f893d1542c6562bc8299ef768fbbe92ade83c220ab3209b9477ec9f81ad585e4 + url: "https://pub.dev" + source: hosted + version: "0.5.4+2" + google_maps_webservice: + dependency: "direct main" + description: + name: google_maps_webservice + sha256: d0ae4e4508afd74a3f051565261a3cdbae59db29448f9b6e6beb5674545e1eb7 + url: "https://pub.dev" + source: hosted + version: "0.0.20-nullsafety.5" + gotrue: + dependency: transitive + description: + name: gotrue + sha256: c0ceef26726c6a280e835c073af50f1bea9cf1d5f57fdf309c1921ce6b6bee54 + url: "https://pub.dev" + source: hosted + version: "1.12.5" + html: + dependency: transitive + description: + name: html + sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" + url: "https://pub.dev" + source: hosted + version: "0.15.4" + http: + dependency: "direct main" + description: + name: http + sha256: "5895291c13fa8a3bd82e76d5627f69e0d85ca6a30dcac95c4ea19a5d555879c2" + url: "https://pub.dev" + source: hosted + version: "0.13.6" + http_parser: + dependency: transitive + description: + name: http_parser + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" + source: hosted + version: "4.0.2" + js: + dependency: transitive + description: + name: js + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 + url: "https://pub.dev" + source: hosted + version: "0.6.7" + js_wrapping: + dependency: transitive + description: + name: js_wrapping + sha256: e385980f7c76a8c1c9a560dfb623b890975841542471eade630b2871d243851c + url: "https://pub.dev" + source: hosted + version: "0.7.4" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: b10a7b2ff83d83c777edba3c6a0f97045ddadd56c944e1a23a3fdf43a1bf4467 + url: "https://pub.dev" + source: hosted + version: "4.8.1" + jwt_decode: + dependency: transitive + description: + name: jwt_decode + sha256: d2e9f68c052b2225130977429d30f187aa1981d789c76ad104a32243cfdebfbb + url: "https://pub.dev" + source: hosted + version: "0.3.1" + lints: + dependency: transitive + description: + name: lints + sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + matcher: + dependency: transitive + description: + name: matcher + sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" + url: "https://pub.dev" + source: hosted + version: "0.12.16" + material_color_utilities: + dependency: transitive + description: + name: material_color_utilities + sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41" + url: "https://pub.dev" + source: hosted + version: "0.5.0" + meta: + dependency: transitive + description: + name: meta + sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e + url: "https://pub.dev" + source: hosted + version: "1.10.0" + mime: + dependency: transitive + description: + name: mime + sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + url: "https://pub.dev" + source: hosted + version: "1.0.4" + package_info_plus: + dependency: transitive + description: + name: package_info_plus + sha256: "7e76fad405b3e4016cd39d08f455a4eb5199723cf594cd1b8916d47140d93017" + url: "https://pub.dev" + source: hosted + version: "4.2.0" + package_info_plus_platform_interface: + dependency: transitive + description: + name: package_info_plus_platform_interface + sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + url: "https://pub.dev" + source: hosted + version: "2.0.1" + path: + dependency: transitive + description: + name: path + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + url: "https://pub.dev" + source: hosted + version: "1.8.3" + path_provider: + dependency: "direct main" + description: + name: path_provider + sha256: a1aa8aaa2542a6bc57e381f132af822420216c80d4781f7aa085ca3229208aaa + url: "https://pub.dev" + source: hosted + version: "2.1.1" + path_provider_android: + dependency: transitive + description: + name: path_provider_android + sha256: e595b98692943b4881b219f0a9e3945118d3c16bd7e2813f98ec6e532d905f72 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + path_provider_foundation: + dependency: transitive + description: + name: path_provider_foundation + sha256: "19314d595120f82aca0ba62787d58dde2cc6b5df7d2f0daf72489e38d1b57f2d" + url: "https://pub.dev" + source: hosted + version: "2.3.1" + path_provider_linux: + dependency: transitive + description: + name: path_provider_linux + sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279 + url: "https://pub.dev" + source: hosted + version: "2.2.1" + path_provider_platform_interface: + dependency: transitive + description: + name: path_provider_platform_interface + sha256: "94b1e0dd80970c1ce43d5d4e050a9918fce4f4a775e6142424c30a29a363265c" + url: "https://pub.dev" + source: hosted + version: "2.1.1" + path_provider_windows: + dependency: transitive + description: + name: path_provider_windows + sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + permission_handler: + dependency: "direct main" + description: + name: permission_handler + sha256: "284a66179cabdf942f838543e10413246f06424d960c92ba95c84439154fcac8" + url: "https://pub.dev" + source: hosted + version: "11.0.1" + permission_handler_android: + dependency: transitive + description: + name: permission_handler_android + sha256: f9fddd3b46109bd69ff3f9efa5006d2d309b7aec0f3c1c5637a60a2d5659e76e + url: "https://pub.dev" + source: hosted + version: "11.1.0" + permission_handler_apple: + dependency: transitive + description: + name: permission_handler_apple + sha256: "99e220bce3f8877c78e4ace901082fb29fa1b4ebde529ad0932d8d664b34f3f5" + url: "https://pub.dev" + source: hosted + version: "9.1.4" + permission_handler_platform_interface: + dependency: transitive + description: + name: permission_handler_platform_interface + sha256: "6760eb5ef34589224771010805bea6054ad28453906936f843a8cc4d3a55c4a4" + url: "https://pub.dev" + source: hosted + version: "3.12.0" + permission_handler_windows: + dependency: transitive + description: + name: permission_handler_windows + sha256: cc074aace208760f1eee6aa4fae766b45d947df85bc831cde77009cdb4720098 + url: "https://pub.dev" + source: hosted + version: "0.1.3" + platform: + dependency: transitive + description: + name: platform + sha256: "0a279f0707af40c890e80b1e9df8bb761694c074ba7e1d4ab1bc4b728e200b59" + url: "https://pub.dev" + source: hosted + version: "3.1.3" + plugin_platform_interface: + dependency: transitive + description: + name: plugin_platform_interface + sha256: da3fdfeccc4d4ff2da8f8c556704c08f912542c5fb3cf2233ed75372384a034d + url: "https://pub.dev" + source: hosted + version: "2.1.6" + postgrest: + dependency: transitive + description: + name: postgrest + sha256: f190eddc5779842dfa529fa239ec4b1025f6f968c18052ba6fffc0aecac93e6b + url: "https://pub.dev" + source: hosted + version: "1.5.2" + realtime_client: + dependency: transitive + description: + name: realtime_client + sha256: "2027358cdbe65d5f1770c3f768aa9adecd394de486c5dbbd2cfe19d5c6dbbc4a" + url: "https://pub.dev" + source: hosted + version: "1.4.0" + retry: + dependency: transitive + description: + name: retry + sha256: "822e118d5b3aafed083109c72d5f484c6dc66707885e07c0fbcb8b986bba7efc" + url: "https://pub.dev" + source: hosted + version: "3.1.2" + rxdart: + dependency: "direct overridden" + description: + name: rxdart + sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" + url: "https://pub.dev" + source: hosted + version: "0.27.7" + sanitize_html: + dependency: transitive + description: + name: sanitize_html + sha256: "12669c4a913688a26555323fb9cec373d8f9fbe091f2d01c40c723b33caa8989" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + shared_preferences: + dependency: "direct main" + description: + name: shared_preferences + sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02" + url: "https://pub.dev" + source: hosted + version: "2.2.2" + shared_preferences_android: + dependency: transitive + description: + name: shared_preferences_android + sha256: "8568a389334b6e83415b6aae55378e158fbc2314e074983362d20c562780fb06" + url: "https://pub.dev" + source: hosted + version: "2.2.1" + shared_preferences_foundation: + dependency: transitive + description: + name: shared_preferences_foundation + sha256: "7bf53a9f2d007329ee6f3df7268fd498f8373602f943c975598bbb34649b62a7" + url: "https://pub.dev" + source: hosted + version: "2.3.4" + shared_preferences_linux: + dependency: transitive + description: + name: shared_preferences_linux + sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + shared_preferences_platform_interface: + dependency: transitive + description: + name: shared_preferences_platform_interface + sha256: d4ec5fc9ebb2f2e056c617112aa75dcf92fc2e4faaf2ae999caa297473f75d8a + url: "https://pub.dev" + source: hosted + version: "2.3.1" + shared_preferences_web: + dependency: transitive + description: + name: shared_preferences_web + sha256: d762709c2bbe80626ecc819143013cc820fa49ca5e363620ee20a8b15a3e3daf + url: "https://pub.dev" + source: hosted + version: "2.2.1" + shared_preferences_windows: + dependency: transitive + description: + name: shared_preferences_windows + sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + sky_engine: + dependency: transitive + description: flutter + source: sdk + version: "0.0.99" + source_span: + dependency: transitive + description: + name: source_span + sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + url: "https://pub.dev" + source: hosted + version: "1.10.0" + stack_trace: + dependency: transitive + description: + name: stack_trace + sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" + url: "https://pub.dev" + source: hosted + version: "1.11.1" + storage_client: + dependency: transitive + description: + name: storage_client + sha256: f02d4d8967bec77767dcaf9daf24ca5b8d5a9f1cc093f14dffb77930b52589a3 + url: "https://pub.dev" + source: hosted + version: "1.5.4" + stream_channel: + dependency: transitive + description: + name: stream_channel + sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + url: "https://pub.dev" + source: hosted + version: "2.1.2" + stream_transform: + dependency: transitive + description: + name: stream_transform + sha256: "14a00e794c7c11aa145a170587321aedce29769c08d7f58b1d141da75e3b1c6f" + url: "https://pub.dev" + source: hosted + version: "2.1.0" + string_scanner: + dependency: transitive + description: + name: string_scanner + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" + source: hosted + version: "1.2.0" + supabase: + dependency: "direct main" + description: + name: supabase + sha256: "4484c436cc14f78ef64bab1fe9fdaa672a02dd73c0c5f8fe66691c3fd0aa6d58" + url: "https://pub.dev" + source: hosted + version: "1.11.10" + term_glyph: + dependency: transitive + description: + name: term_glyph + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" + source: hosted + version: "1.2.1" + test_api: + dependency: transitive + description: + name: test_api + sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b" + url: "https://pub.dev" + source: hosted + version: "0.6.1" + typed_data: + dependency: transitive + description: + name: typed_data + sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c + url: "https://pub.dev" + source: hosted + version: "1.3.2" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + sha256: "47e208a6711459d813ba18af120d9663c20bdf6985d6ad39fe165d2538378d27" + url: "https://pub.dev" + source: hosted + version: "6.1.14" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: "31222ffb0063171b526d3e569079cf1f8b294075ba323443fdc690842bfd4def" + url: "https://pub.dev" + source: hosted + version: "6.2.0" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "4ac97281cf60e2e8c5cc703b2b28528f9b50c8f7cebc71df6bdf0845f647268a" + url: "https://pub.dev" + source: hosted + version: "6.2.0" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: "9f2d390e096fdbe1e6e6256f97851e51afc2d9c423d3432f1d6a02a8a9a8b9fd" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: b7244901ea3cf489c5335bdacda07264a6e960b1c1b1a9f91e4bc371d9e68234 + url: "https://pub.dev" + source: hosted + version: "3.1.0" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "980e8d9af422f477be6948bdfb68df8433be71f5743a188968b0c1b887807e50" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "7fd2f55fe86cea2897b963e864dc01a7eb0719ecc65fcef4c1cc3d686d718bb2" + url: "https://pub.dev" + source: hosted + version: "2.2.0" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: "7754a1ad30ee896b265f8d14078b0513a4dba28d358eabb9d5f339886f4a1adc" + url: "https://pub.dev" + source: hosted + version: "3.1.0" + uuid: + dependency: transitive + description: + name: uuid + sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + url: "https://pub.dev" + source: hosted + version: "3.0.7" + vector_math: + dependency: transitive + description: + name: vector_math + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + web: + dependency: transitive + description: + name: web + sha256: "14f1f70c51119012600c5f1f60ca68efda5a9b6077748163c6af2893ec5df8fc" + url: "https://pub.dev" + source: hosted + version: "0.2.1-beta" + web_socket_channel: + dependency: transitive + description: + name: web_socket_channel + sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b + url: "https://pub.dev" + source: hosted + version: "2.4.0" + win32: + dependency: transitive + description: + name: win32 + sha256: "350a11abd2d1d97e0cc7a28a81b781c08002aa2864d9e3f192ca0ffa18b06ed3" + url: "https://pub.dev" + source: hosted + version: "5.0.9" + xdg_directories: + dependency: transitive + description: + name: xdg_directories + sha256: "589ada45ba9e39405c198fe34eb0f607cddb2108527e658136120892beac46d2" + url: "https://pub.dev" + source: hosted + version: "1.0.3" + yet_another_json_isolate: + dependency: transitive + description: + name: yet_another_json_isolate + sha256: "86fad76026c4241a32831d6c7febd8f9bded5019e2cd36c5b148499808d8307d" + url: "https://pub.dev" + source: hosted + version: "1.1.1" +sdks: + dart: ">=3.2.0-210.3.beta <4.0.0" + flutter: ">=3.13.0" diff --git a/sustainable-living-guide-app/test/widget_test.dart b/sustainable-living-guide-app/test/widget_test.dart new file mode 100644 index 00000000..6b5337eb --- /dev/null +++ b/sustainable-living-guide-app/test/widget_test.dart @@ -0,0 +1,30 @@ +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility in the flutter_test package. For example, you can send tap and scroll +// gestures. You can also use WidgetTester to find child widgets in the widget +// tree, read text, and verify that the values of widget properties are correct. + +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; + +import 'package:sustainable_living_guide_app/main.dart'; + +void main() { + testWidgets('Counter increments smoke test', (WidgetTester tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(const MyApp()); + + // Verify that our counter starts at 0. + expect(find.text('0'), findsOneWidget); + expect(find.text('1'), findsNothing); + + // Tap the '+' icon and trigger a frame. + await tester.tap(find.byIcon(Icons.add)); + await tester.pump(); + + // Verify that our counter has incremented. + expect(find.text('0'), findsNothing); + expect(find.text('1'), findsOneWidget); + }); +} From 89016ef73495f0d4da9a6bba64c839658b93b764 Mon Sep 17 00:00:00 2001 From: I-am-the-coder-Tusharbola <149319221+I-am-the-coder-Tusharbola@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:41:17 +0530 Subject: [PATCH 17/22] Add files via upload From 710640ca44a5e77f42e75422cbb82bf48a87b3b1 Mon Sep 17 00:00:00 2001 From: I-am-the-coder-Tusharbola <149319221+I-am-the-coder-Tusharbola@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:42:25 +0530 Subject: [PATCH 18/22] Add files via upload --- sustainable-living-guide-app/.flutter-plugins | 35 +++++++++++++++ .../.flutter-plugins-dependencies | 1 + sustainable-living-guide-app/.gitignore | 43 ++++++++++++++++++ sustainable-living-guide-app/.metadata | 45 +++++++++++++++++++ 4 files changed, 124 insertions(+) create mode 100644 sustainable-living-guide-app/.flutter-plugins create mode 100644 sustainable-living-guide-app/.flutter-plugins-dependencies create mode 100644 sustainable-living-guide-app/.gitignore create mode 100644 sustainable-living-guide-app/.metadata diff --git a/sustainable-living-guide-app/.flutter-plugins b/sustainable-living-guide-app/.flutter-plugins new file mode 100644 index 00000000..b66f7e6c --- /dev/null +++ b/sustainable-living-guide-app/.flutter-plugins @@ -0,0 +1,35 @@ +# This is a generated file; do not edit or check into version control. +flutter_plugin_android_lifecycle=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\flutter_plugin_android_lifecycle-2.0.16\\ +geolocator=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\geolocator-10.1.0\\ +geolocator_android=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\geolocator_android-4.3.1\\ +geolocator_apple=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\geolocator_apple-2.3.2\\ +geolocator_web=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\geolocator_web-2.2.0\\ +geolocator_windows=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\geolocator_windows-0.2.1\\ +google_api_headers=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\google_api_headers-2.0.3\\ +google_maps_flutter=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\google_maps_flutter-2.5.0\\ +google_maps_flutter_android=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\google_maps_flutter_android-2.5.1\\ +google_maps_flutter_ios=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\google_maps_flutter_ios-2.3.2\\ +google_maps_flutter_web=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\google_maps_flutter_web-0.5.4+2\\ +package_info_plus=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\package_info_plus-4.2.0\\ +path_provider=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\path_provider-2.1.1\\ +path_provider_android=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\path_provider_android-2.2.1\\ +path_provider_foundation=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\path_provider_foundation-2.3.1\\ +path_provider_linux=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\path_provider_linux-2.2.1\\ +path_provider_windows=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\path_provider_windows-2.2.1\\ +permission_handler=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\permission_handler-11.0.1\\ +permission_handler_android=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\permission_handler_android-11.1.0\\ +permission_handler_apple=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\permission_handler_apple-9.1.4\\ +permission_handler_windows=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\permission_handler_windows-0.1.3\\ +shared_preferences=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\shared_preferences-2.2.2\\ +shared_preferences_android=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\shared_preferences_android-2.2.1\\ +shared_preferences_foundation=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\shared_preferences_foundation-2.3.4\\ +shared_preferences_linux=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\shared_preferences_linux-2.3.2\\ +shared_preferences_web=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\shared_preferences_web-2.2.1\\ +shared_preferences_windows=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\shared_preferences_windows-2.3.2\\ +url_launcher=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\url_launcher-6.1.14\\ +url_launcher_android=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\url_launcher_android-6.2.0\\ +url_launcher_ios=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\url_launcher_ios-6.2.0\\ +url_launcher_linux=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\url_launcher_linux-3.1.0\\ +url_launcher_macos=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\url_launcher_macos-3.1.0\\ +url_launcher_web=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\url_launcher_web-2.2.0\\ +url_launcher_windows=C:\\Users\\Tushar\\AppData\\Local\\Pub\\Cache\\hosted\\pub.dev\\url_launcher_windows-3.1.0\\ diff --git a/sustainable-living-guide-app/.flutter-plugins-dependencies b/sustainable-living-guide-app/.flutter-plugins-dependencies new file mode 100644 index 00000000..5c5ca791 --- /dev/null +++ b/sustainable-living-guide-app/.flutter-plugins-dependencies @@ -0,0 +1 @@ +{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"geolocator_apple","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\geolocator_apple-2.3.2\\\\","native_build":true,"dependencies":[]},{"name":"google_maps_flutter_ios","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\google_maps_flutter_ios-2.3.2\\\\","native_build":true,"dependencies":[]},{"name":"package_info_plus","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\package_info_plus-4.2.0\\\\","native_build":true,"dependencies":[]},{"name":"path_provider_foundation","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\path_provider_foundation-2.3.1\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[]},{"name":"permission_handler_apple","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\permission_handler_apple-9.1.4\\\\","native_build":true,"dependencies":[]},{"name":"shared_preferences_foundation","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\shared_preferences_foundation-2.3.4\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[]},{"name":"url_launcher_ios","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\url_launcher_ios-6.2.0\\\\","native_build":true,"dependencies":[]}],"android":[{"name":"flutter_plugin_android_lifecycle","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\flutter_plugin_android_lifecycle-2.0.16\\\\","native_build":true,"dependencies":[]},{"name":"geolocator_android","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\geolocator_android-4.3.1\\\\","native_build":true,"dependencies":[]},{"name":"google_api_headers","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\google_api_headers-2.0.3\\\\","native_build":true,"dependencies":["package_info_plus"]},{"name":"google_maps_flutter_android","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\google_maps_flutter_android-2.5.1\\\\","native_build":true,"dependencies":["flutter_plugin_android_lifecycle"]},{"name":"package_info_plus","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\package_info_plus-4.2.0\\\\","native_build":true,"dependencies":[]},{"name":"path_provider_android","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\path_provider_android-2.2.1\\\\","native_build":true,"dependencies":[]},{"name":"permission_handler_android","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\permission_handler_android-11.1.0\\\\","native_build":true,"dependencies":[]},{"name":"shared_preferences_android","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\shared_preferences_android-2.2.1\\\\","native_build":true,"dependencies":[]},{"name":"url_launcher_android","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\url_launcher_android-6.2.0\\\\","native_build":true,"dependencies":[]}],"macos":[{"name":"geolocator_apple","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\geolocator_apple-2.3.2\\\\","native_build":true,"dependencies":[]},{"name":"package_info_plus","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\package_info_plus-4.2.0\\\\","native_build":true,"dependencies":[]},{"name":"path_provider_foundation","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\path_provider_foundation-2.3.1\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[]},{"name":"shared_preferences_foundation","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\shared_preferences_foundation-2.3.4\\\\","shared_darwin_source":true,"native_build":true,"dependencies":[]},{"name":"url_launcher_macos","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\url_launcher_macos-3.1.0\\\\","native_build":true,"dependencies":[]}],"linux":[{"name":"package_info_plus","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\package_info_plus-4.2.0\\\\","native_build":false,"dependencies":[]},{"name":"path_provider_linux","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\path_provider_linux-2.2.1\\\\","native_build":false,"dependencies":[]},{"name":"shared_preferences_linux","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\shared_preferences_linux-2.3.2\\\\","native_build":false,"dependencies":["path_provider_linux"]},{"name":"url_launcher_linux","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\url_launcher_linux-3.1.0\\\\","native_build":true,"dependencies":[]}],"windows":[{"name":"geolocator_windows","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\geolocator_windows-0.2.1\\\\","native_build":true,"dependencies":[]},{"name":"package_info_plus","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\package_info_plus-4.2.0\\\\","native_build":false,"dependencies":[]},{"name":"path_provider_windows","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\path_provider_windows-2.2.1\\\\","native_build":false,"dependencies":[]},{"name":"permission_handler_windows","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\permission_handler_windows-0.1.3\\\\","native_build":true,"dependencies":[]},{"name":"shared_preferences_windows","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\shared_preferences_windows-2.3.2\\\\","native_build":false,"dependencies":["path_provider_windows"]},{"name":"url_launcher_windows","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\url_launcher_windows-3.1.0\\\\","native_build":true,"dependencies":[]}],"web":[{"name":"geolocator_web","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\geolocator_web-2.2.0\\\\","dependencies":[]},{"name":"google_maps_flutter_web","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\google_maps_flutter_web-0.5.4+2\\\\","dependencies":[]},{"name":"package_info_plus","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\package_info_plus-4.2.0\\\\","dependencies":[]},{"name":"shared_preferences_web","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\shared_preferences_web-2.2.1\\\\","dependencies":[]},{"name":"url_launcher_web","path":"C:\\\\Users\\\\Tushar\\\\AppData\\\\Local\\\\Pub\\\\Cache\\\\hosted\\\\pub.dev\\\\url_launcher_web-2.2.0\\\\","dependencies":[]}]},"dependencyGraph":[{"name":"flutter_plugin_android_lifecycle","dependencies":[]},{"name":"geolocator","dependencies":["geolocator_android","geolocator_apple","geolocator_web","geolocator_windows"]},{"name":"geolocator_android","dependencies":[]},{"name":"geolocator_apple","dependencies":[]},{"name":"geolocator_web","dependencies":[]},{"name":"geolocator_windows","dependencies":[]},{"name":"google_api_headers","dependencies":["package_info_plus"]},{"name":"google_maps_flutter","dependencies":["google_maps_flutter_android","google_maps_flutter_ios","google_maps_flutter_web"]},{"name":"google_maps_flutter_android","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"google_maps_flutter_ios","dependencies":[]},{"name":"google_maps_flutter_web","dependencies":[]},{"name":"package_info_plus","dependencies":[]},{"name":"path_provider","dependencies":["path_provider_android","path_provider_foundation","path_provider_linux","path_provider_windows"]},{"name":"path_provider_android","dependencies":[]},{"name":"path_provider_foundation","dependencies":[]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_windows","dependencies":[]},{"name":"permission_handler","dependencies":["permission_handler_android","permission_handler_apple","permission_handler_windows"]},{"name":"permission_handler_android","dependencies":[]},{"name":"permission_handler_apple","dependencies":[]},{"name":"permission_handler_windows","dependencies":[]},{"name":"shared_preferences","dependencies":["shared_preferences_android","shared_preferences_foundation","shared_preferences_linux","shared_preferences_web","shared_preferences_windows"]},{"name":"shared_preferences_android","dependencies":[]},{"name":"shared_preferences_foundation","dependencies":[]},{"name":"shared_preferences_linux","dependencies":["path_provider_linux"]},{"name":"shared_preferences_web","dependencies":[]},{"name":"shared_preferences_windows","dependencies":["path_provider_windows"]},{"name":"url_launcher","dependencies":["url_launcher_android","url_launcher_ios","url_launcher_linux","url_launcher_macos","url_launcher_web","url_launcher_windows"]},{"name":"url_launcher_android","dependencies":[]},{"name":"url_launcher_ios","dependencies":[]},{"name":"url_launcher_linux","dependencies":[]},{"name":"url_launcher_macos","dependencies":[]},{"name":"url_launcher_web","dependencies":[]},{"name":"url_launcher_windows","dependencies":[]}],"date_created":"2023-10-29 21:45:45.393186","version":"3.16.0-0.3.pre"} \ No newline at end of file diff --git a/sustainable-living-guide-app/.gitignore b/sustainable-living-guide-app/.gitignore new file mode 100644 index 00000000..6503b5e5 --- /dev/null +++ b/sustainable-living-guide-app/.gitignore @@ -0,0 +1,43 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/sustainable-living-guide-app/.metadata b/sustainable-living-guide-app/.metadata new file mode 100644 index 00000000..147fa0b1 --- /dev/null +++ b/sustainable-living-guide-app/.metadata @@ -0,0 +1,45 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled and should not be manually edited. + +version: + revision: "476aa717cd342d11e16439b71f4f4c9209c50712" + channel: "beta" + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 476aa717cd342d11e16439b71f4f4c9209c50712 + base_revision: 476aa717cd342d11e16439b71f4f4c9209c50712 + - platform: android + create_revision: 476aa717cd342d11e16439b71f4f4c9209c50712 + base_revision: 476aa717cd342d11e16439b71f4f4c9209c50712 + - platform: ios + create_revision: 476aa717cd342d11e16439b71f4f4c9209c50712 + base_revision: 476aa717cd342d11e16439b71f4f4c9209c50712 + - platform: linux + create_revision: 476aa717cd342d11e16439b71f4f4c9209c50712 + base_revision: 476aa717cd342d11e16439b71f4f4c9209c50712 + - platform: macos + create_revision: 476aa717cd342d11e16439b71f4f4c9209c50712 + base_revision: 476aa717cd342d11e16439b71f4f4c9209c50712 + - platform: web + create_revision: 476aa717cd342d11e16439b71f4f4c9209c50712 + base_revision: 476aa717cd342d11e16439b71f4f4c9209c50712 + - platform: windows + create_revision: 476aa717cd342d11e16439b71f4f4c9209c50712 + base_revision: 476aa717cd342d11e16439b71f4f4c9209c50712 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' From 35cc4004217fa5c6b5e124c569fea0f388a71a23 Mon Sep 17 00:00:00 2001 From: I-am-the-coder-Tusharbola <149319221+I-am-the-coder-Tusharbola@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:51:47 +0530 Subject: [PATCH 19/22] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e8172ac2..ab5e4835 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ #### Team Name - Lone Tech Wolf -#### Problem Statement - “Individuals seeking to adopt a sustainable lifestyle often struggle due to the lack of a centralized platform for discovering eco-friendly resources and businesses. This, coupled with a general lack of awareness about sustainable choices, hinders their transition towards a greener lifestyle.” +#### Problem Statement #### - “Individuals seeking to adopt a sustainable lifestyle often struggle due to the lack of a centralized platform for discovering eco-friendly resources and businesses. This, coupled with a general lack of awareness about sustainable choices, hinders their transition towards a greener lifestyle.” #### Team Leader Email - Tushar2010@outlook.com From d34c355344b9815155e05aaa119a023f3348eb16 Mon Sep 17 00:00:00 2001 From: I-am-the-coder-Tusharbola <149319221+I-am-the-coder-Tusharbola@users.noreply.github.com> Date: Sun, 29 Oct 2023 22:51:58 +0530 Subject: [PATCH 20/22] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ab5e4835..14e367ce 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ #### Team Name - Lone Tech Wolf -#### Problem Statement #### - “Individuals seeking to adopt a sustainable lifestyle often struggle due to the lack of a centralized platform for discovering eco-friendly resources and businesses. This, coupled with a general lack of awareness about sustainable choices, hinders their transition towards a greener lifestyle.” +#### Problem Statement - “Individuals seeking to adopt a sustainable lifestyle often struggle due to the lack of a centralized platform for discovering eco-friendly resources and businesses. This, coupled with a general lack of awareness about sustainable choices, hinders their transition towards a greener lifestyle.” #### Team Leader Email - Tushar2010@outlook.com From f3f6766eaf727ae3c91f1536a5367cad17dff0dd Mon Sep 17 00:00:00 2001 From: I-am-the-coder-Tusharbola <149319221+I-am-the-coder-Tusharbola@users.noreply.github.com> Date: Sun, 29 Oct 2023 23:50:17 +0530 Subject: [PATCH 21/22] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 14e367ce..7b48dda4 100644 --- a/README.md +++ b/README.md @@ -78,6 +78,8 @@ IDE: Visual Studio Code This command generates an APK file in the `build/app/outputs/flutter-apk/` directory in your project. + note --> You also have to change all the API keys . The google Map SDK for andriod is given in the andriodmainfest.xml file and the geolocation and places api are added in the welcome_screen.dart file present in the ```bash lib folder ``` + From ae38c1b7f11da3eaee5830034850975c31592331 Mon Sep 17 00:00:00 2001 From: I-am-the-coder-Tusharbola <149319221+I-am-the-coder-Tusharbola@users.noreply.github.com> Date: Sun, 29 Oct 2023 23:51:25 +0530 Subject: [PATCH 22/22] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7b48dda4..ec25f8a7 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ IDE: Visual Studio Code This command generates an APK file in the `build/app/outputs/flutter-apk/` directory in your project. - note --> You also have to change all the API keys . The google Map SDK for andriod is given in the andriodmainfest.xml file and the geolocation and places api are added in the welcome_screen.dart file present in the ```bash lib folder ``` + note --> You also have to change all the API keys . The google Map SDK for andriod is given in the ```andriodmainfest.xml``` file and the geolocation and places api are added in the ```welcome_screen.dart``` file present in the ``` lib folder ```