[
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ncustom: ['https://www.paypal.com/paypalme/seller/Hadrio/dashboard']\n"
  },
  {
    "path": "C++ GPT/.github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ncustom: ['https://www.paypal.com/paypalme/seller/Hadrio/dashboard']\n"
  },
  {
    "path": "C++ GPT/Conversation Starters",
    "content": "How do I optimize this C++ code?\nExplain C++ polymorphism.\nWhat's wrong with my C++ function?\nBest practices for memory management in C++?"
  },
  {
    "path": "C++ GPT/Instructions",
    "content": "The GPT is an expert in C++ programming. It can provide detailed and accurate responses on C++ concepts, code optimization, debugging, and best practices. It should guide users in understanding complex C++ topics and offer solutions to coding problems. The GPT should avoid giving incorrect or outdated information and should not engage in topics outside its expertise in C++ programming."
  },
  {
    "path": "C++ GPT/actions",
    "content": "!! In progress. This file is not live yet\n\n{\n  \"openapi\": \"3.1.0\",\n  \"info\": {\n    \"title\": \"GitHub Code Repository Data\",\n    \"description\": \"Accesses code examples from the specified GitHub repository.\",\n    \"version\": \"v1.0.0\"\n  },\n  \"servers\": [\n    {\n      \"url\": \"https://api.github.com\"\n    }\n  ],\n  \"paths\": {\n    \"/repos/{owner}/{repo}/contents/{path}\": {\n      \"get\": {\n        \"description\": \"Retrieve file content from a GitHub repository\",\n        \"operationId\": \"GetRepoContent\",\n        \"parameters\": [\n          {\n            \"name\": \"owner\",\n            \"in\": \"path\",\n            \"description\": \"Owner of the repository\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"repo\",\n            \"in\": \"path\",\n            \"description\": \"Repository name\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"path\",\n            \"in\": \"path\",\n            \"description\": \"File path within the repository\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"deprecated\": false\n      }\n    }\n  },\n  \"components\": {\n    \"schemas\": {}\n  }\n}\n"
  },
  {
    "path": "C++ GPT/knowledge/standards",
    "content": "This guide contains standards for the assistant to adhere to.\nAdhering to standards is suggested but not required if it leads to poor solutions.\nThe specifications of the user override the standards.\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make participation in our\ncommunity a harassment-free experience for everyone, regardless of age, body\nsize, visible or invisible disability, ethnicity, sex characteristics, gender\nidentity and expression, level of experience, education, socio-economic status,\nnationality, personal appearance, race, religion, or sexual identity\nand orientation.\n\nWe pledge to act and interact in ways that contribute to an open, welcoming,\ndiverse, inclusive, and healthy community.\n\n## Our Standards\n\nExamples of behavior that contributes to a positive environment for our\ncommunity include:\n\n* Demonstrating empathy and kindness toward other people\n* Being respectful of differing opinions, viewpoints, and experiences\n* Giving and gracefully accepting constructive feedback\n* Accepting responsibility and apologizing to those affected by our mistakes,\n  and learning from the experience\n* Focusing on what is best not just for us as individuals, but for the\n  overall community\n\nExamples of unacceptable behavior include:\n\n* The use of sexualized language or imagery, and sexual attention or\n  advances of any kind\n* Trolling, insulting or derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or email\n  address, without their explicit permission\n* Other conduct which could reasonably be considered inappropriate in a\n  professional setting\n\n## Enforcement Responsibilities\n\nCommunity leaders are responsible for clarifying and enforcing our standards of\nacceptable behavior and will take appropriate and fair corrective action in\nresponse to any behavior that they deem inappropriate, threatening, offensive,\nor harmful.\n\nCommunity leaders have the right and responsibility to remove, edit, or reject\ncomments, commits, code, wiki edits, issues, and other contributions that are\nnot aligned to this Code of Conduct, and will communicate reasons for moderation\ndecisions when appropriate.\n\n## Scope\n\nThis Code of Conduct applies within all community spaces, and also applies when\nan individual is officially representing the community in public spaces.\nExamples of representing our community include using an official e-mail address,\nposting via an official social media account, or acting as an appointed\nrepresentative at an online or offline event.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be\nreported to the community leaders responsible for enforcement at\nhadriogroup@gmail.com.\nAll complaints will be reviewed and investigated promptly and fairly.\n\nAll community leaders are obligated to respect the privacy and security of the\nreporter of any incident.\n\n## Enforcement Guidelines\n\nCommunity leaders will follow these Community Impact Guidelines in determining\nthe consequences for any action they deem in violation of this Code of Conduct:\n\n### 1. Correction\n\n**Community Impact**: Use of inappropriate language or other behavior deemed\nunprofessional or unwelcome in the community.\n\n**Consequence**: A private, written warning from community leaders, providing\nclarity around the nature of the violation and an explanation of why the\nbehavior was inappropriate. A public apology may be requested.\n\n### 2. Warning\n\n**Community Impact**: A violation through a single incident or series\nof actions.\n\n**Consequence**: A warning with consequences for continued behavior. No\ninteraction with the people involved, including unsolicited interaction with\nthose enforcing the Code of Conduct, for a specified period of time. This\nincludes avoiding interactions in community spaces as well as external channels\nlike social media. Violating these terms may lead to a temporary or\npermanent ban.\n\n### 3. Temporary Ban\n\n**Community Impact**: A serious violation of community standards, including\nsustained inappropriate behavior.\n\n**Consequence**: A temporary ban from any sort of interaction or public\ncommunication with the community for a specified period of time. No public or\nprivate interaction with the people involved, including unsolicited interaction\nwith those enforcing the Code of Conduct, is allowed during this period.\nViolating these terms may lead to a permanent ban.\n\n### 4. Permanent Ban\n\n**Community Impact**: Demonstrating a pattern of violation of community\nstandards, including sustained inappropriate behavior,  harassment of an\nindividual, or aggression toward or disparagement of classes of individuals.\n\n**Consequence**: A permanent ban from any sort of public interaction within\nthe community.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage],\nversion 2.0, available at\nhttps://www.contributor-covenant.org/version/2/0/code_of_conduct.html.\n\nCommunity Impact Guidelines were inspired by [Mozilla's code of conduct\nenforcement ladder](https://github.com/mozilla/diversity).\n\n[homepage]: https://www.contributor-covenant.org\n\nFor answers to common questions about this code of conduct, see the FAQ at\nhttps://www.contributor-covenant.org/faq. Translations are available at\nhttps://www.contributor-covenant.org/translations.\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contribution Guidelines\n\nThank you for considering contributing to our project! We highly value your input and appreciate your help in making this project even better. Before you get started, please take a moment to read through these contribution guidelines.\n\n## How to Contribute\n\n1. **Fork the Repository**: Click the \"Fork\" button at the top right of this repository to create a copy in your own GitHub account.\n\n2. **Clone the Repository**: Clone your forked repository to your local machine:\n\n   ```sh\n   git clone https://github.com/Decron/Whitebox-Code-GPT.git\n\n3. **Suggest new assistant**: If there is an assistant you would like to take ownership of, open an issue requesting custody, or create a pull request which adds the knowledge files of an existing assistant you'd like to include. Include links to conversation history that demostrates effectiveness.\n\n4. Lastly, we'll help build your assistants for you:\n   * If you're requesting somebody help with the creation of a new assistant, open an issue titled \"New GPT request: <title>\"\n   * If you'd like us to add a feature to an existing assistant, open a discussion post with your suggested new features.\n   \n5. If you have a significant issue with an existing assistant, open an issue [here](https://github.com/Decron/Whitebox-Code-GPT/issues) and describe what happened. Include links to conversation history if possible.\n"
  },
  {
    "path": "Firebase GPT/.github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ncustom: ['https://www.paypal.com/paypalme/seller/Hadrio/dashboard']\n"
  },
  {
    "path": "Firebase GPT/Conversation Starters",
    "content": "How do I integrate Firebase Authentication?\nTell me about Firebase Cloud Functions.\nBest practices for Firebase Realtime Database?\nTroubleshooting Firebase Firestore issues?"
  },
  {
    "path": "Firebase GPT/Instructions",
    "content": "This GPT is an expert in Firebase plugins and integration, providing detailed assistance and guidance on implementing and troubleshooting Firebase features in various software projects. It will offer step-by-step instructions, best practices, and troubleshooting tips tailored to specific Firebase-related queries. The GPT will focus on clarifying complex concepts, making Firebase integration more accessible to users with varying levels of experience. It will avoid providing outdated information, focus on Firebase's current capabilities, and ensure to clarify when additional context is needed for a query. The GPT's responses will be technical, accurate, and up-to-date, reflecting a deep understanding of Firebase and its ecosystem."
  },
  {
    "path": "Firebase GPT/actions",
    "content": "!! In progress. This file is not live yet\n\n{\n  \"openapi\": \"3.1.0\",\n  \"info\": {\n    \"title\": \"GitHub Code Repository Data\",\n    \"description\": \"Accesses code examples from the specified GitHub repository.\",\n    \"version\": \"v1.0.0\"\n  },\n  \"servers\": [\n    {\n      \"url\": \"https://api.github.com\"\n    }\n  ],\n  \"paths\": {\n    \"/repos/{owner}/{repo}/contents/{path}\": {\n      \"get\": {\n        \"description\": \"Retrieve file content from a GitHub repository\",\n        \"operationId\": \"GetRepoContent\",\n        \"parameters\": [\n          {\n            \"name\": \"owner\",\n            \"in\": \"path\",\n            \"description\": \"Owner of the repository\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"repo\",\n            \"in\": \"path\",\n            \"description\": \"Repository name\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"path\",\n            \"in\": \"path\",\n            \"description\": \"File path within the repository\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"deprecated\": false\n      }\n    }\n  },\n  \"components\": {\n    \"schemas\": {}\n  }\n}\n"
  },
  {
    "path": "Firebase GPT/knowledge/standards",
    "content": "This guide contains standards for the assistant to adhere to.\nAdhering to standards is suggested but not required if it leads to poor solutions.\nThe specifications of the user override the standards.\n"
  },
  {
    "path": "Flutter GPT/.github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ncustom: ['https://www.paypal.com/paypalme/seller/Hadrio/dashboard']\n"
  },
  {
    "path": "Flutter GPT/Conversation Starters",
    "content": "Create a new page\nHow do I start with Flutter?\nCreate a Stateful widget & constructor\nTips for optimizing Flutter performance?\nCreate an app template \n"
  },
  {
    "path": "Flutter GPT/Instructions",
    "content": "You are Flutter GPT, a specialized assistant for Flutter development queries. Your role is to provide expert advice and solutions for Flutter-related issues. If a user presents a suboptimal solution, you suggest more efficient approaches. Your responses are informative, concise.\n\nIf commanded to create a certain class or widget, do so without commentary if possible\n\nRemember to pay attention to general concepts that users may frequently overlook, such as null safety but don't bring it up unless its relevant.\n\nDespite being specialist, you may assist with any other queries the user has. If you and the user cannot solve an issue together, you may direct them to the Whitebox Inventory Assistant, which catalogues other specialists for various technologies. The inventory assistant is located at https://chat.openai.com/g/g-oBpMxDEHp-inventory-assistant\n"
  },
  {
    "path": "Flutter GPT/actions",
    "content": "!! In progress. This file is not live yet\n\n{\n  \"openapi\": \"3.1.0\",\n  \"info\": {\n    \"title\": \"GitHub Code Repository Data\",\n    \"description\": \"Accesses code examples from the specified GitHub repository.\",\n    \"version\": \"v1.0.0\"\n  },\n  \"servers\": [\n    {\n      \"url\": \"https://api.github.com\"\n    }\n  ],\n  \"paths\": {\n    \"/repos/{owner}/{repo}/contents/{path}\": {\n      \"get\": {\n        \"description\": \"Retrieve file content from a GitHub repository\",\n        \"operationId\": \"GetRepoContent\",\n        \"parameters\": [\n          {\n            \"name\": \"owner\",\n            \"in\": \"path\",\n            \"description\": \"Owner of the repository\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"repo\",\n            \"in\": \"path\",\n            \"description\": \"Repository name\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"path\",\n            \"in\": \"path\",\n            \"description\": \"File path within the repository\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"deprecated\": false\n      }\n    }\n  },\n  \"components\": {\n    \"schemas\": {}\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.github/CODEOWNERS",
    "content": "# Every request must be reviewed and accepted by:\n\n*\t@felangel"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.github/DOCS_ISSUE_TEMPLATE.md",
    "content": "---\ntitle: \"[Translations] Update docs\"\nlabels: documentation, translation\n---\nUpdate Translations to include changes from {{ sha }}.\n\n- [ ] az (@KenanYusubov)\n- [ ] cs\n- [ ] es (@KingDarBoja or @Classy-Bear)\n- [ ] fr (@sachaarbonel or @StefanYYC)\n- [ ] jp (@dshukertjr)\n- [ ] ko-kr (@zoomKoding)\n- [ ] pt-br (@rodrigobastosv or @alisson-suzigan)\n- [ ] ru (@basilex)\n- [ ] zh-cn (@jakecastelli)\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.github/FUNDING.yml",
    "content": "github: [felangel]\npatreon: felangel\nopen_collective: bloc\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.github/ISSUE_TEMPLATE/bug_report.md",
    "content": "---\nname: Bug Report\nabout: Create a report to help us improve\ntitle: \"fix: \"\nlabels: bug\n---\n\n**Description**\nA clear and concise description of what the bug is.\n\n**Steps To Reproduce**\n\n1. Go to '...'\n2. Click on '....'\n3. Scroll down to '....'\n4. See error\n\n**Expected Behavior**\nA clear and concise description of what you expected to happen.\n\n**Screenshots**\nIf applicable, add screenshots to help explain your problem.\n\n**Additional Context**\nAdd any other context about the problem here.\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.github/ISSUE_TEMPLATE/build.md",
    "content": "---\nname: Build System\nabout: Changes that affect the build system or external dependencies\ntitle: \"build: \"\nlabels: build\n---\n\n**Description**\n\nDescribe what changes need to be done to the build system and why\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.github/ISSUE_TEMPLATE/chore.md",
    "content": "---\nname: Chore\nabout: Other changes that don't modify src or test files\ntitle: \"chore: \"\nlabels: chore\n---\n\n**Description**\n\nClearly describe what change is needed and why. If this changes code then please use another issue type.\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.github/ISSUE_TEMPLATE/ci.md",
    "content": "---\nname: Continuous Integration\nabout: Changes to the CI configuration files and scripts\ntitle: \"ci: \"\nlabels: ci\n---\n\n**Description**\n\nDescribe what changes need to be done to the ci/cd system and why\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.github/ISSUE_TEMPLATE/documentation.md",
    "content": "---\nname: Documentation\nabout: Improve the documentation so all collaborators have a common understanding\ntitle: \"docs: \"\nlabels: documentation\n---\n\n**Description**\n\nClearly describe what documentation you are looking to add or improve.\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.github/ISSUE_TEMPLATE/feature_request.md",
    "content": "---\nname: Feature Request\nabout: A new feature to be added to the project\ntitle: \"feat: \"\nlabels: feature\n---\n\n**Description**\n\nA clear and concise description of what the problem is. Ex. I'm always frustrated when [...]\n\n**Desired Solution**\n\nA clear and concise description of what you want to happen.\n\n**Alternatives Considered**\n\nA clear and concise description of any alternative solutions or features you've considered.\n\n**Additional Context**\n\nAdd any other context or screenshots about the feature request go here.\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.github/ISSUE_TEMPLATE/performance.md",
    "content": "---\nname: Performance Update\nabout: A code change that improves performance\ntitle: \"perf: \"\nlabels: performance\n---\n\n**Description**\n\nClearly describe what code needs to be changed and what the performance impact is going to be.\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.github/ISSUE_TEMPLATE/refactor.md",
    "content": "---\nname: Refactor\nabout: A code change that neither fixes a bug nor adds a feature\ntitle: \"refactor: \"\nlabels: refactor\n---\n\n**Description**\n\nClearly describe what needs to be refactored any why. Please provide links to related issues (bugs or upcoming features) in order to help prioritize.\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.github/ISSUE_TEMPLATE/revert.md",
    "content": "---\nname: Revert Commit\nabout: Reverts a previous commit\ntitle: \"revert: \"\nlabels: revert\n---\n\n**Description**\n\nProvide a link to a PR/Commit that you are looking to revert and why.\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.github/ISSUE_TEMPLATE/style.md",
    "content": "---\nname: Style Changes\nabout: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)\ntitle: \"style: \"\nlabels: style\n---\n\n**Description**\n\nClearly describe what you are looking to change and why.\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.github/ISSUE_TEMPLATE/test.md",
    "content": "---\nname: Test\nabout: Adding missing tests or correcting existing tests\ntitle: \"test: \"\nlabels: test\n---\n\n**Description**\n\nList out the tests that need to be added or changed. Please also include any information as to why this was not covered in the past.\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.github/PULL_REQUEST_TEMPLATE.md",
    "content": "<!--\n  Thanks for contributing!\n\n  Provide a description of your changes below and a general summary in the title\n\n  Please look at the following checklist to ensure that your PR can be accepted quickly:\n-->\n\n## Status\n\n**READY/IN DEVELOPMENT/HOLD**\n\n## Breaking Changes\n\nYES | NO\n\n## Description\n\n<!--- Describe your changes in detail -->\n\n## Type of Change\n\n<!--- Put an `x` in all the boxes that apply: -->\n\n- [ ] ✨ New feature (non-breaking change which adds functionality)\n- [ ] 🛠️ Bug fix (non-breaking change which fixes an issue)\n- [ ] ❌ Breaking change (fix or feature that would cause existing functionality to change)\n- [ ] 🧹 Code refactor\n- [ ] ✅ Build configuration change\n- [ ] 📝 Documentation\n- [ ] 🗑️ Chore\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.github/workflows/angular_bloc.yaml",
    "content": "name: angular_bloc\n\non:\n  push:\n    paths:\n      - \"packages/angular_bloc/**\"\n      - \".github/workflows/angular_bloc.yaml\"\n\n  pull_request:\n    paths:\n      - \"packages/angular_bloc/**\"\n      - \".github/workflows/angular_bloc.yaml\"\n\njobs:\n  build:\n    defaults:\n      run:\n        working-directory: packages/angular_bloc\n\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v3\n      - uses: dart-lang/setup-dart@v1\n        with:\n          sdk: 3.0.0\n\n      - name: Install Dependencies\n        run: dart pub get\n\n      - name: Format\n        run: dart format --set-exit-if-changed .\n\n      - name: Analyze\n        run: dart analyze --fatal-infos --fatal-warnings .\n\n      - name: Run Tests\n        run: |\n          dart pub global activate coverage 1.2.0\n          dart test --coverage=coverage && dart pub global run coverage:format_coverage --lcov --in=coverage --out=coverage/lcov.info --packages=.dart_tool/package_config.json --report-on=lib\n\n      - name: Check Code Coverage\n        uses: VeryGoodOpenSource/very_good_coverage@v2\n        with:\n          path: packages/angular_bloc/coverage/lcov.info\n\n      - name: Upload coverage to Codecov\n        uses: codecov/codecov-action@v3\n        with:\n          token: ${{ secrets.CODECOV_TOKEN }}\n\n  pana:\n    defaults:\n      run:\n        working-directory: packages/angular_bloc\n\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v3\n      - uses: subosito/flutter-action@v2.10.0\n\n      - name: Install Dependencies\n        run: |\n          flutter packages get\n          flutter pub global activate pana\n          sudo apt-get install webp\n\n      - name: Verify Pub Score\n        run: ../../tool/verify_pub_score.sh 110\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.github/workflows/angular_dart_examples.yaml",
    "content": "name: angular_dart_examples\n\non:\n  push:\n    paths:\n      - \".github/workflows/angular_dart_examples.yaml\"\n      - \"packages/angular_bloc/**\"\n      - \"examples/angular_counter/**\"\n      - \"examples/github_search/common_github_search/**\"\n      - \"examples/github_search/angular_github_search/**\"\n\n  pull_request:\n    paths:\n      - \".github/workflows/angular_dart_examples.yaml\"\n      - \"packages/angular_bloc/**\"\n      - \"examples/angular_counter/**\"\n      - \"examples/github_search/common_github_search/**\"\n      - \"examples/github_search/angular_github_search/**\"\n\njobs:\n  examples:\n    strategy:\n      matrix:\n        folder:\n          [\n            \"examples/angular_counter\",\n            \"examples/github_search/common_github_search\",\n            \"examples/github_search/angular_github_search\",\n          ]\n      fail-fast: false\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v3\n\n      - uses: dart-lang/setup-dart@v1\n        with:\n          sdk: 3.0.0\n\n      - name: Install Dependencies\n        working-directory: ${{ matrix.folder }}\n        run: dart pub get\n\n      - name: Install webdev\n        if: matrix.folder != 'examples/github_search/common_github_search'\n        working-directory: ${{ matrix.folder }}\n        run: |\n          dart pub global activate webdev\n          webdev build\n\n      - name: Format\n        working-directory: ${{ matrix.folder }}\n        run: dart format --set-exit-if-changed .\n\n      - name: Analyze\n        working-directory: ${{ matrix.folder }}\n        run: dart analyze --fatal-infos --fatal-warnings .\n\n      - name: Run tests\n        working-directory: ${{ matrix.folder }}\n        run: |\n          if [ -d \"test\" ]; then\n            dart run build_runner test --fail-on-severe\n          fi\n\n  build:\n    needs: [examples]\n    runs-on: ubuntu-latest\n    steps:\n      - name: noop\n        run: echo 'noop'\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.github/workflows/bloc.yaml",
    "content": "name: bloc\n\non:\n  push:\n    paths:\n      - \"packages/bloc/**\"\n      - \".github/workflows/bloc.yaml\"\n\n  pull_request:\n    paths:\n      - \"packages/bloc/**\"\n      - \".github/workflows/bloc.yaml\"\n\njobs:\n  build:\n    defaults:\n      run:\n        working-directory: packages/bloc\n\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v3\n      - uses: dart-lang/setup-dart@v1\n\n      - name: Install Dependencies\n        run: dart pub get\n\n      - name: Format\n        run: dart format --set-exit-if-changed .\n\n      - name: Analyze\n        run: dart analyze --fatal-infos --fatal-warnings .\n\n      - name: Run Tests\n        run: |\n          dart pub global activate coverage 1.2.0\n          dart test --coverage=coverage && dart pub global run coverage:format_coverage --lcov --in=coverage --out=coverage/lcov.info --packages=.dart_tool/package_config.json --report-on=lib\n\n      - name: Check Code Coverage\n        uses: VeryGoodOpenSource/very_good_coverage@v2\n        with:\n          path: packages/bloc/coverage/lcov.info\n\n      - name: Upload coverage to Codecov\n        uses: codecov/codecov-action@v3\n        with:\n          token: ${{ secrets.CODECOV_TOKEN }}\n\n  pana:\n    defaults:\n      run:\n        working-directory: packages/bloc\n\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v3\n      - uses: subosito/flutter-action@v2.10.0\n\n      - name: Install Dependencies\n        run: |\n          flutter packages get\n          flutter pub global activate pana\n          sudo apt-get install webp\n\n      - name: Verify Pub Score\n        run: ../../tool/verify_pub_score.sh\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.github/workflows/bloc_concurrency.yaml",
    "content": "name: bloc_concurrency\n\non:\n  push:\n    paths:\n      - \"packages/bloc_concurrency/**\"\n      - \".github/workflows/bloc_concurrency.yaml\"\n\n  pull_request:\n    paths:\n      - \"packages/bloc_concurrency/**\"\n      - \".github/workflows/bloc_concurrency.yaml\"\n\njobs:\n  build:\n    defaults:\n      run:\n        working-directory: packages/bloc_concurrency\n\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v3\n      - uses: dart-lang/setup-dart@v1\n\n      - name: Install Dependencies\n        run: dart pub get\n\n      - name: Format\n        run: dart format --set-exit-if-changed .\n\n      - name: Analyze\n        run: dart analyze --fatal-infos --fatal-warnings .\n\n      - name: Run Tests\n        run: |\n          dart pub global activate coverage 1.2.0\n          dart test --coverage=coverage && dart pub global run coverage:format_coverage --lcov --in=coverage --out=coverage/lcov.info --packages=.dart_tool/package_config.json --report-on=lib\n\n      - name: Check Code Coverage\n        uses: VeryGoodOpenSource/very_good_coverage@v2\n        with:\n          path: packages/bloc_concurrency/coverage/lcov.info\n\n      - name: Upload coverage to Codecov\n        uses: codecov/codecov-action@v3\n        with:\n          token: ${{ secrets.CODECOV_TOKEN }}\n\n  pana:\n    defaults:\n      run:\n        working-directory: packages/bloc_concurrency\n\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v3\n      - uses: subosito/flutter-action@v2.10.0\n\n      - name: Install Dependencies\n        run: |\n          flutter packages get\n          flutter pub global activate pana\n          sudo apt-get install webp\n\n      - name: Verify Pub Score\n        run: ../../tool/verify_pub_score.sh\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.github/workflows/bloc_test.yaml",
    "content": "name: bloc_test\n\non:\n  push:\n    paths:\n      - \"packages/bloc_test/**\"\n      - \".github/workflows/bloc_test.yaml\"\n\n  pull_request:\n    paths:\n      - \"packages/bloc_test/**\"\n      - \".github/workflows/bloc_test.yaml\"\n\njobs:\n  build:\n    defaults:\n      run:\n        working-directory: packages/bloc_test\n\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v3\n      - uses: dart-lang/setup-dart@v1\n\n      - name: Install Dependencies\n        run: dart pub get\n\n      - name: Format\n        run: dart format --set-exit-if-changed .\n\n      - name: Analyze\n        run: dart analyze --fatal-infos --fatal-warnings .\n\n      - name: Run Tests\n        run: |\n          dart pub global activate coverage 1.2.0\n          dart test --coverage=coverage && dart pub global run coverage:format_coverage --lcov --in=coverage --out=coverage/lcov.info --packages=.dart_tool/package_config.json --report-on=lib\n\n      - name: Check Code Coverage\n        uses: VeryGoodOpenSource/very_good_coverage@v2\n        with:\n          path: packages/bloc_test/coverage/lcov.info\n\n      - name: Upload coverage to Codecov\n        uses: codecov/codecov-action@v3\n        with:\n          token: ${{ secrets.CODECOV_TOKEN }}\n\n  pana:\n    defaults:\n      run:\n        working-directory: packages/bloc_test\n\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v3\n      - uses: subosito/flutter-action@v2.10.0\n\n      - name: Install Dependencies\n        run: |\n          flutter packages get\n          flutter pub global activate pana\n          sudo apt-get install webp\n\n      - name: Verify Pub Score\n        run: ../../tool/verify_pub_score.sh\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.github/workflows/bloc_tools.yaml",
    "content": "name: bloc_tools\n\non:\n  pull_request:\n    paths:\n      - \".github/workflows/bloc_tools.yaml\"\n      - \"packages/bloc_tools/**\"\n  push:\n    branches:\n      - master\n    paths:\n      - \".github/workflows/bloc_tools.yaml\"\n      - \"packages/bloc_tools/**\"\n\njobs:\n  build:\n    defaults:\n      run:\n        working-directory: packages/bloc_tools\n\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v3\n      - uses: subosito/flutter-action@v2.10.0\n\n      - name: Install Dependencies\n        run: flutter packages get\n\n      - name: Format\n        run: dart format --set-exit-if-changed .\n\n      - name: Analyze\n        run: flutter analyze .\n\n      - name: Verify Build\n        run: flutter pub run test --run-skipped -t pull-request-only\n\n      - name: Run Tests\n        run: flutter test -x pull-request-only --no-pub --coverage --test-randomize-ordering-seed random\n\n      - name: Check Code Coverage\n        uses: VeryGoodOpenSource/very_good_coverage@v2\n        with:\n          path: packages/bloc_tools/coverage/lcov.info\n\n      - name: Upload coverage to Codecov\n        uses: codecov/codecov-action@v3\n        with:\n          token: ${{ secrets.CODECOV_TOKEN }}\n\n  pana:\n    defaults:\n      run:\n        working-directory: packages/bloc_tools\n\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v3\n      - uses: subosito/flutter-action@v2.10.0\n\n      - name: Install Dependencies\n        run: |\n          flutter packages get\n          flutter pub global activate pana\n\n      - name: Verify Pub Score\n        run: ../../tool/verify_pub_score.sh\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.github/workflows/build.yaml",
    "content": "name: build\n\non:\n  pull_request:\n    branches:\n      - master\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - name: noop\n        run: echo 'noop'\n\n  semantic_pull_request:\n    uses: VeryGoodOpenSource/very_good_workflows/.github/workflows/semantic_pull_request.yml@v1\n\n  pana:\n    runs-on: ubuntu-latest\n    steps:\n      - name: noop\n        run: echo 'noop'\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.github/workflows/docs.yaml",
    "content": "name: docs\n\non:\n  push:\n    branches:\n    - master\n    paths:\n    - '.github/workflows/docs.yaml'\n    - 'README.md'\n    - 'docs/*'\n\njobs:  \n  build:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v3\n      - uses: JasonEtco/create-an-issue@v2\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n        with:\n          filename: .github/DOCS_ISSUE_TEMPLATE.md\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.github/workflows/flutter_bloc.yaml",
    "content": "name: flutter_bloc\n\non:\n  push:\n    paths:\n      - \"packages/flutter_bloc/**\"\n      - \".github/workflows/flutter_bloc.yaml\"\n\n  pull_request:\n    paths:\n      - \"packages/flutter_bloc/**\"\n      - \".github/workflows/flutter_bloc.yaml\"\n\njobs:\n  build:\n    defaults:\n      run:\n        working-directory: packages/flutter_bloc\n\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v3\n      - uses: subosito/flutter-action@v2.10.0\n\n      - name: Install Dependencies\n        run: flutter packages get\n\n      - name: Format\n        run: dart format --set-exit-if-changed .\n\n      - name: Analyze\n        run: flutter analyze lib test example\n\n      - name: Run tests\n        run: flutter test --no-pub --coverage --test-randomize-ordering-seed random\n\n      - name: Check Code Coverage\n        uses: VeryGoodOpenSource/very_good_coverage@v2\n        with:\n          path: packages/flutter_bloc/coverage/lcov.info\n\n      - name: Upload coverage to Codecov\n        uses: codecov/codecov-action@v3\n        with:\n          token: ${{ secrets.CODECOV_TOKEN }}\n\n  pana:\n    defaults:\n      run:\n        working-directory: packages/flutter_bloc\n\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v3\n      - uses: subosito/flutter-action@v2.10.0\n\n      - name: Install Dependencies\n        run: |\n          flutter packages get\n          flutter pub global activate pana\n          sudo apt-get install webp\n\n      - name: Verify Pub Score\n        run: ../../tool/verify_pub_score.sh\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.github/workflows/flutter_examples.yaml",
    "content": "name: flutter_examples\n\non:\n  push:\n    paths:\n      - \".github/workflows/flutter_examples.yaml\"\n      - \"packages/flutter_bloc/**\"\n      - \"examples/flutter_bloc_with_stream/**\"\n      - \"examples/flutter_complex_list/**\"\n      - \"examples/flutter_counter/**\"\n      - \"examples/flutter_dynamic_form/**\"\n      - \"examples/flutter_firebase_login/**\"\n      - \"examples/flutter_form_validation/**\"\n      - \"examples/flutter_infinite_list/**\"\n      - \"examples/flutter_login/**\"\n      - \"examples/flutter_shopping_cart/**\"\n      - \"examples/flutter_timer/**\"\n      - \"examples/flutter_todos/**\"\n      - \"examples/flutter_weather/**\"\n      - \"examples/flutter_wizard/**\"\n      - \"examples/github_search/flutter_github_search/**\"\n\n  pull_request:\n    paths:\n      - \".github/workflows/flutter_examples.yaml\"\n      - \"packages/flutter_bloc/**\"\n      - \"examples/flutter_bloc_with_stream/**\"\n      - \"examples/flutter_complex_list/**\"\n      - \"examples/flutter_counter/**\"\n      - \"examples/flutter_dynamic_form/**\"\n      - \"examples/flutter_firebase_login/**\"\n      - \"examples/flutter_form_validation/**\"\n      - \"examples/flutter_infinite_list/**\"\n      - \"examples/flutter_login/**\"\n      - \"examples/flutter_shopping_cart/**\"\n      - \"examples/flutter_timer/**\"\n      - \"examples/flutter_todos/**\"\n      - \"examples/flutter_weather/**\"\n      - \"examples/flutter_wizard/**\"\n      - \"examples/github_search/flutter_github_search/**\"\n\njobs:\n  examples:\n    strategy:\n      matrix:\n        folder:\n          [\n            \"packages/flutter_bloc/example\",\n            \"examples/flutter_bloc_with_stream\",\n            \"examples/flutter_complex_list\",\n            \"examples/flutter_counter\",\n            \"examples/flutter_dynamic_form\",\n            \"examples/flutter_firebase_login\",\n            \"examples/flutter_form_validation\",\n            \"examples/flutter_infinite_list\",\n            \"examples/flutter_login\",\n            \"examples/flutter_shopping_cart\",\n            \"examples/flutter_timer\",\n            \"examples/flutter_todos\",\n            \"examples/flutter_todos/packages/local_storage_todos_api\",\n            \"examples/flutter_todos/packages/todos_api\",\n            \"examples/flutter_todos/packages/todos_repository\",\n            \"examples/flutter_weather\",\n            \"examples/flutter_wizard\",\n            \"examples/github_search/flutter_github_search\",\n          ]\n      fail-fast: false\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v3\n      - uses: subosito/flutter-action@v2.10.0\n      - name: Install Dependencies\n        working-directory: ${{ matrix.folder }}\n        run: flutter packages get\n      - name: Format\n        working-directory: ${{ matrix.folder }}\n        run: dart format --set-exit-if-changed lib\n      - name: Analyze\n        working-directory: ${{ matrix.folder }}\n        run: flutter analyze lib\n      - name: Run tests\n        working-directory: ${{ matrix.folder }}\n        run: |\n          if [ -d \"test\" ]; then\n            flutter test --no-pub --test-randomize-ordering-seed random\n          fi\n  build:\n    needs: [examples]\n    runs-on: ubuntu-latest\n    steps:\n      - name: noop\n        run: echo 'noop'\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.github/workflows/hydrated_bloc.yaml",
    "content": "name: hydrated_bloc\n\non:\n  push:\n    paths:\n      - \"packages/hydrated_bloc/**\"\n      - \".github/workflows/hydrated_bloc.yaml\"\n\n  pull_request:\n    paths:\n      - \"packages/hydrated_bloc/**\"\n      - \".github/workflows/hydrated_bloc.yaml\"\n\njobs:\n  build:\n    defaults:\n      run:\n        working-directory: packages/hydrated_bloc\n\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v3\n      - uses: subosito/flutter-action@v2.10.0\n\n      - name: Install Dependencies\n        run: flutter pub get\n\n      - name: Format\n        run: dart format --set-exit-if-changed .\n\n      - name: Analyze\n        run: flutter analyze lib test example\n\n      - name: Run tests\n        run: flutter test -j 1 --no-pub --coverage --test-randomize-ordering-seed random\n\n      - name: Check Code Coverage\n        uses: VeryGoodOpenSource/very_good_coverage@v2\n        with:\n          path: packages/hydrated_bloc/coverage/lcov.info\n\n      - name: Upload coverage to Codecov\n        uses: codecov/codecov-action@v3\n        with:\n          token: ${{ secrets.CODECOV_TOKEN }}\n\n  pana:\n    defaults:\n      run:\n        working-directory: packages/hydrated_bloc\n\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v3\n      - uses: subosito/flutter-action@v2.10.0\n\n      - name: Install Dependencies\n        run: |\n          flutter packages get\n          flutter pub global activate pana\n          sudo apt-get install webp\n\n      - name: Verify Pub Score\n        run: ../../tool/verify_pub_score.sh 110\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.github/workflows/replay_bloc.yaml",
    "content": "name: replay_bloc\n\non:\n  push:\n    paths:\n      - \"packages/replay_bloc/**\"\n      - \".github/workflows/replay_bloc.yaml\"\n\n  pull_request:\n    paths:\n      - \"packages/replay_bloc/**\"\n      - \".github/workflows/replay_bloc.yaml\"\n\njobs:\n  build:\n    defaults:\n      run:\n        working-directory: packages/replay_bloc\n\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v3\n      - uses: subosito/flutter-action@v2.10.0\n\n      - name: Install Dependencies\n        run: flutter pub get\n\n      - name: Format\n        run: dart format --set-exit-if-changed .\n\n      - name: Analyze\n        run: flutter analyze lib test example\n\n      - name: Run tests\n        run: flutter test -j 1 --no-pub --coverage --test-randomize-ordering-seed random\n\n      - name: Check Code Coverage\n        uses: VeryGoodOpenSource/very_good_coverage@v2\n        with:\n          path: packages/replay_bloc/coverage/lcov.info\n\n      - name: Upload coverage to Codecov\n        uses: codecov/codecov-action@v3\n        with:\n          token: ${{ secrets.CODECOV_TOKEN }}\n\n  pana:\n    defaults:\n      run:\n        working-directory: packages/replay_bloc\n\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v3\n      - uses: subosito/flutter-action@v2.10.0\n\n      - name: Install Dependencies\n        run: |\n          flutter packages get\n          flutter pub global activate pana\n          sudo apt-get install webp\n\n      - name: Verify Pub Score\n        run: ../../tool/verify_pub_score.sh\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/.gitignore",
    "content": "# Miscellaneous\n*.class\n*.lock\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\n\n# IntelliJ related\n*.iml\n*.ipr\n*.iws\n.idea/\n\n# Visual Studio Code related\n.classpath\n.project\n.settings/\n.vscode/*\n\n# Flutter repo-specific\n/bin/cache/\n/bin/mingit/\n/dev/benchmarks/mega_gallery/\n/dev/bots/.recipe_deps\n/dev/bots/android_tools/\n/dev/docs/doc/\n/dev/docs/flutter.docs.zip\n/dev/docs/lib/\n/dev/docs/pubspec.yaml\n/dev/integration_tests/**/xcuserdata\n/dev/integration_tests/**/Pods\n/packages/flutter/coverage/\nversion\n\n# packages file containing multi-root paths\n.packages.generated\n\n# Flutter/Dart/Pub related\n**/doc/api/\n.dart_tool/\n.flutter-plugins\n.flutter-plugins-dependencies\n.packages\n.pub-cache/\n.pub/\nbuild/\nflutter_*.png\nlinked_*.ds\nunlinked.ds\nunlinked_spec.ds\n\n# Android related\n**/android/**/gradle-wrapper.jar\n**/android/.gradle\n**/android/captures/\n**/android/gradlew\n**/android/gradlew.bat\n**/android/local.properties\n**/android/**/GeneratedPluginRegistrant.java\n**/android/key.properties\n*.jks\n\n# iOS/XCode related\n**/ios/**/*.mode1v3\n**/ios/**/*.mode2v3\n**/ios/**/*.moved-aside\n**/ios/**/*.pbxuser\n**/ios/**/*.perspectivev3\n**/ios/**/*sync/\n**/ios/**/.sconsign.dblite\n**/ios/**/.tags*\n**/ios/**/.vagrant/\n**/ios/**/DerivedData/\n**/ios/**/Icon?\n**/ios/**/Pods/\n**/ios/**/.symlinks/\n**/ios/**/profile\n**/ios/**/xcuserdata\n**/ios/.generated/\n**/ios/Flutter/App.framework\n**/ios/Flutter/Flutter.framework\n**/ios/Flutter/Flutter.podspec\n**/ios/Flutter/Generated.xcconfig\n**/ios/Flutter/app.flx\n**/ios/Flutter/app.zip\n**/ios/Flutter/flutter_assets/\n**/ios/Flutter/flutter_export_environment.sh\n**/ios/ServiceDefinitions.json\n**/ios/Runner/GeneratedPluginRegistrant.*\n\n# Coverage\ncoverage/\ncoverage_badge.svg\n.test_coverage.dart\n*.lcov\nnohup.out\n\n# Mason\nmason-lock.json\n.mason\n\n# Exceptions to above rules.\n!.vscode/launch.json\n!**/ios/**/default.mode1v3\n!**/ios/**/default.mode2v3\n!**/ios/**/default.pbxuser\n!**/ios/**/default.perspectivev3\n!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages\n!/dev/ci/**/Gemfile.lock"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/angular_counter/.gitignore",
    "content": "# Files and directories created by pub\n.dart_tool/\n.packages\n# Remove the following pattern if you wish to check in your lock file\npubspec.lock\n\n# Conventional directory for build outputs\nbuild/\n\n# Directory created by dartdoc\ndoc/api/\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/angular_counter/counter_bloc.dart",
    "content": "import 'package:bloc/bloc.dart';\n\n/// Base counter event.\nsealed class CounterEvent {}\n\n/// Notifies bloc to increment state.\nfinal class CounterIncrementPressed extends CounterEvent {}\n\n/// Notifies bloc to decrement state.\nfinal class CounterDecrementPressed extends CounterEvent {}\n\n/// {@template counter_bloc}\n/// A simple [Bloc] that manages an `int` as its state.\n/// {@endtemplate}\nclass CounterBloc extends Bloc<CounterEvent, int> {\n  /// {@macro counter_bloc}\n  CounterBloc() : super(0) {\n    on<CounterIncrementPressed>((event, emit) => emit(state + 1));\n    on<CounterDecrementPressed>((event, emit) => emit(state - 1));\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_bloc_with_stream/.gitignore",
    "content": "# Miscellaneous\n*.class\n*.lock\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\n\n# IntelliJ related\n*.iml\n*.ipr\n*.iws\n.idea/\n\n# Visual Studio Code related\n.vscode/\n\n# Flutter/Dart/Pub related\n**/doc/api/\n.dart_tool/\n.flutter-plugins\n.packages\n.pub-cache/\n.pub/\nbuild/\n\n# Android related\n**/android/**/gradle-wrapper.jar\n**/android/.gradle\n**/android/captures/\n**/android/gradlew\n**/android/gradlew.bat\n**/android/local.properties\n**/android/**/GeneratedPluginRegistrant.java\n\n# iOS/XCode related\n**/ios/**/*.mode1v3\n**/ios/**/*.mode2v3\n**/ios/**/*.moved-aside\n**/ios/**/*.pbxuser\n**/ios/**/*.perspectivev3\n**/ios/**/*sync/\n**/ios/**/.sconsign.dblite\n**/ios/**/.tags*\n**/ios/**/.vagrant/\n**/ios/**/DerivedData/\n**/ios/**/Icon?\n**/ios/**/Pods/\n**/ios/**/.symlinks/\n**/ios/**/profile\n**/ios/**/xcuserdata\n**/ios/.generated/\n**/ios/Flutter/App.framework\n**/ios/Flutter/Flutter.framework\n**/ios/Flutter/Generated.xcconfig\n**/ios/Flutter/app.flx\n**/ios/Flutter/app.zip\n**/ios/Flutter/flutter_assets/\n**/ios/ServiceDefinitions.json\n**/ios/Runner/GeneratedPluginRegistrant.*\n\n# Exceptions to above rules.\n!**/ios/**/default.mode1v3\n!**/ios/**/default.mode2v3\n!**/ios/**/default.pbxuser\n!**/ios/**/default.perspectivev3\n!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_bloc_with_stream/.metadata",
    "content": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrades etc.\n#\n# This file should be version controlled.\n\nversion:\n  revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n  channel: beta\n\nproject_type: app\n\n# Tracks metadata for the flutter migrate command\nmigration:\n  platforms:\n    - platform: root\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: android\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: ios\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n\n  # User provided section\n\n  # List of Local paths (relative to this file) that should be\n  # ignored by the migrate tool.\n  #\n  # Files that are not part of the templates will be ignored by default.\n  unmanaged_files:\n    - 'lib/main.dart'\n    - 'ios/Runner.xcodeproj/project.pbxproj'\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_bloc_with_stream/bloc/ticker_bloc.dart",
    "content": "import 'package:bloc/bloc.dart';\nimport 'package:bloc_concurrency/bloc_concurrency.dart';\nimport 'package:equatable/equatable.dart';\nimport 'package:flutter_bloc_with_stream/ticker/ticker.dart';\n\npart 'ticker_event.dart';\npart 'ticker_state.dart';\n\n/// {@template ticker_bloc}\n/// Bloc which manages the current [TickerState]\n/// and depends on a [Ticker] instance.\n/// {@endtemplate}\nclass TickerBloc extends Bloc<TickerEvent, TickerState> {\n  /// {@macro ticker_bloc}\n  TickerBloc(Ticker ticker) : super(TickerInitial()) {\n    on<TickerStarted>(\n      (event, emit) async {\n        await emit.onEach<int>(\n          ticker.tick(),\n          onData: (tick) => add(_TickerTicked(tick)),\n        );\n        emit(const TickerComplete());\n      },\n      transformer: restartable(),\n    );\n\n    on<_TickerTicked>((event, emit) => emit(TickerTickSuccess(event.tick)));\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_bloc_with_stream/bloc/ticker_event.dart",
    "content": "part of 'ticker_bloc.dart';\n\n/// {@template ticker_event}\n/// Base class for all [TickerEvent]s which are\n/// handled by the [TickerBloc].\n/// {@endtemplate}\nsealed class TickerEvent extends Equatable {\n  /// {@macro ticker_event}\n  const TickerEvent();\n\n  @override\n  List<Object> get props => [];\n}\n\n/// {@template ticker_started}\n/// Signifies to the [TickerBloc] that the user\n/// has requested to start the [Ticker].\n/// {@endtemplate}\nfinal class TickerStarted extends TickerEvent {\n  /// {@macro ticker_started}\n  const TickerStarted();\n}\n\nfinal class _TickerTicked extends TickerEvent {\n  const _TickerTicked(this.tick);\n\n  /// The current tick count.\n  final int tick;\n\n  @override\n  List<Object> get props => [tick];\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_bloc_with_stream/bloc/ticker_state.dart",
    "content": "part of 'ticker_bloc.dart';\n\n/// {@template ticker_state}\n/// Base class for all [TickerState]s which are\n/// managed by the [TickerBloc].\n/// {@endtemplate}\nsealed class TickerState extends Equatable {\n  /// {@macro ticker_state}\n  const TickerState();\n\n  @override\n  List<Object> get props => [];\n}\n\n/// The initial state of the [TickerBloc].\nfinal class TickerInitial extends TickerState {}\n\n/// {@template ticker_tick_success}\n/// The state of the [TickerBloc] after a [Ticker]\n/// has been started and includes the current tick count.\n/// {@endtemplate}\nfinal class TickerTickSuccess extends TickerState {\n  /// {@macro ticker_tick_success}\n  const TickerTickSuccess(this.count);\n\n  /// The current tick count.\n  final int count;\n\n  @override\n  List<Object> get props => [count];\n}\n\n/// {@template ticker_complete}\n/// The state of the [TickerBloc] after the [Ticker] has completed.\n/// {@endtemplate}\nfinal class TickerComplete extends TickerState {\n  /// {@macro ticker_complete}\n  const TickerComplete();\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_bloc_with_stream/main.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_bloc_with_stream/bloc/ticker_bloc.dart';\nimport 'package:flutter_bloc_with_stream/ticker/ticker.dart';\n\nvoid main() => runApp(TickerApp());\n\n/// {@template ticker_app}\n/// [MaterialApp] which sets the [TickerPage] as the `home`.\n/// [TickerApp] also provides an instance of [TickerBloc] to\n/// the [TickerPage].\n/// {@endtemplate}\nclass TickerApp extends MaterialApp {\n  /// {@macro ticker_app}\n  TickerApp({super.key})\n      : super(\n          home: BlocProvider(\n            create: (_) => TickerBloc(Ticker()),\n            child: const TickerPage(),\n          ),\n        );\n}\n\n/// {@template ticker_page}\n/// [StatelessWidget] which consumes a [TickerBloc]\n/// and responds to changes in the [TickerState].\n/// [TickerPage] also notifies the [TickerBloc] when\n/// the user taps on the start button.\n/// {@endtemplate}\nclass TickerPage extends StatelessWidget {\n  /// {@macro ticker_page}\n  const TickerPage({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(title: const Text('Flutter Bloc with Streams')),\n      body: Center(\n        child: BlocBuilder<TickerBloc, TickerState>(\n          builder: (context, state) {\n            return switch (state) {\n              TickerInitial() =>\n                const Text('Press the floating button to start.'),\n              TickerTickSuccess() => Text('Tick #${state.count}'),\n              TickerComplete() =>\n                const Text('Complete! Press the floating button to restart.')\n            };\n          },\n        ),\n      ),\n      floatingActionButton: FloatingActionButton(\n        onPressed: () => context.read<TickerBloc>().add(const TickerStarted()),\n        tooltip: 'Start',\n        child: const Icon(Icons.timer),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_bloc_with_stream/ticker/ticker.dart",
    "content": "import 'dart:async';\n\n/// Class which exposes a `tick` method to emit values periodically.\nclass Ticker {\n  /// Emits a new `int` up to 10 every second.\n  Stream<int> tick() {\n    return Stream.periodic(const Duration(seconds: 1), (x) => x).take(10);\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_complex_list/.gitignore",
    "content": "# Miscellaneous\n*.class\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\n\n# IntelliJ related\n*.iml\n*.ipr\n*.iws\n.idea/\n\n# Visual Studio Code related\n.vscode/\n\n# Flutter/Dart/Pub related\n**/doc/api/\n.dart_tool/\n.flutter-plugins\n.packages\n.pub-cache/\n.pub/\n/build/\n\n# Android related\n**/android/**/gradle-wrapper.jar\n**/android/.gradle\n**/android/captures/\n**/android/gradlew\n**/android/gradlew.bat\n**/android/local.properties\n**/android/**/GeneratedPluginRegistrant.java\n\n# iOS/XCode related\n**/ios/**/*.mode1v3\n**/ios/**/*.mode2v3\n**/ios/**/*.moved-aside\n**/ios/**/*.pbxuser\n**/ios/**/*.perspectivev3\n**/ios/**/*sync/\n**/ios/**/.sconsign.dblite\n**/ios/**/.tags*\n**/ios/**/.vagrant/\n**/ios/**/DerivedData/\n**/ios/**/Icon?\n**/ios/**/Pods/\n**/ios/**/.symlinks/\n**/ios/**/profile\n**/ios/**/xcuserdata\n**/ios/.generated/\n**/ios/Flutter/App.framework\n**/ios/Flutter/Flutter.framework\n**/ios/Flutter/Generated.xcconfig\n**/ios/Flutter/app.flx\n**/ios/Flutter/app.zip\n**/ios/Flutter/flutter_assets/\n**/ios/Flutter/.last_build_id\n**/ios/ServiceDefinitions.json\n**/ios/Runner/GeneratedPluginRegistrant.*\n\n# Exceptions to above rules.\n!**/ios/**/default.mode1v3\n!**/ios/**/default.mode2v3\n!**/ios/**/default.pbxuser\n!**/ios/**/default.perspectivev3\n!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_complex_list/.metadata",
    "content": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrades etc.\n#\n# This file should be version controlled.\n\nversion:\n  revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n  channel: beta\n\nproject_type: app\n\n# Tracks metadata for the flutter migrate command\nmigration:\n  platforms:\n    - platform: root\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: android\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: ios\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n\n  # User provided section\n\n  # List of Local paths (relative to this file) that should be\n  # ignored by the migrate tool.\n  #\n  # Files that are not part of the templates will be ignored by default.\n  unmanaged_files:\n    - 'lib/main.dart'\n    - 'ios/Runner.xcodeproj/project.pbxproj'\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_complex_list/app.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_complex_list/complex_list/complex_list.dart';\nimport 'package:flutter_complex_list/repository.dart';\n\nclass App extends MaterialApp {\n  App({required Repository repository, super.key})\n      : super(\n          home: RepositoryProvider.value(\n            value: repository,\n            child: const ComplexListPage(),\n          ),\n        );\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_complex_list/complex_list/complex_list.dart",
    "content": "export 'cubit/complex_list_cubit.dart';\nexport 'models/models.dart';\nexport 'view/view.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_complex_list/complex_list/cubit/complex_list_cubit.dart",
    "content": "import 'dart:async';\n\nimport 'package:bloc/bloc.dart';\nimport 'package:equatable/equatable.dart';\nimport 'package:flutter_complex_list/complex_list/complex_list.dart';\nimport 'package:flutter_complex_list/repository.dart';\n\npart 'complex_list_state.dart';\n\nclass ComplexListCubit extends Cubit<ComplexListState> {\n  ComplexListCubit({required this.repository})\n      : super(const ComplexListState.loading());\n\n  final Repository repository;\n\n  Future<void> fetchList() async {\n    try {\n      final items = await repository.fetchItems();\n      emit(ComplexListState.success(items));\n    } on Exception {\n      emit(const ComplexListState.failure());\n    }\n  }\n\n  Future<void> deleteItem(String id) async {\n    final deleteInProgress = state.items.map((item) {\n      return item.id == id ? item.copyWith(isDeleting: true) : item;\n    }).toList();\n\n    emit(ComplexListState.success(deleteInProgress));\n\n    unawaited(\n      repository.deleteItem(id).then((_) {\n        final deleteSuccess = List.of(state.items)\n          ..removeWhere((element) => element.id == id);\n        emit(ComplexListState.success(deleteSuccess));\n      }),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_complex_list/complex_list/cubit/complex_list_state.dart",
    "content": "part of 'complex_list_cubit.dart';\n\nenum ListStatus { loading, success, failure }\n\nfinal class ComplexListState extends Equatable {\n  const ComplexListState._({\n    this.status = ListStatus.loading,\n    this.items = const <Item>[],\n  });\n\n  const ComplexListState.loading() : this._();\n\n  const ComplexListState.success(List<Item> items)\n      : this._(status: ListStatus.success, items: items);\n\n  const ComplexListState.failure() : this._(status: ListStatus.failure);\n\n  final ListStatus status;\n  final List<Item> items;\n\n  @override\n  List<Object> get props => [status, items];\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_complex_list/complex_list/models/item.dart",
    "content": "import 'package:equatable/equatable.dart';\n\nclass Item extends Equatable {\n  const Item({\n    required this.id,\n    required this.value,\n    this.isDeleting = false,\n  });\n\n  final String id;\n  final String value;\n  final bool isDeleting;\n\n  Item copyWith({String? id, String? value, bool? isDeleting}) {\n    return Item(\n      id: id ?? this.id,\n      value: value ?? this.value,\n      isDeleting: isDeleting ?? this.isDeleting,\n    );\n  }\n\n  @override\n  List<Object> get props => [id, value, isDeleting];\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_complex_list/complex_list/models/models.dart",
    "content": "export 'item.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_complex_list/complex_list/view/complex_list_page.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_complex_list/complex_list/complex_list.dart';\nimport 'package:flutter_complex_list/repository.dart';\n\nclass ComplexListPage extends StatelessWidget {\n  const ComplexListPage({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(title: const Text('Complex List')),\n      body: BlocProvider(\n        create: (_) => ComplexListCubit(\n          repository: context.read<Repository>(),\n        )..fetchList(),\n        child: const ComplexListView(),\n      ),\n    );\n  }\n}\n\nclass ComplexListView extends StatelessWidget {\n  const ComplexListView({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    final state = context.watch<ComplexListCubit>().state;\n    switch (state.status) {\n      case ListStatus.failure:\n        return const Center(child: Text('Oops something went wrong!'));\n      case ListStatus.success:\n        return ItemView(items: state.items);\n      case ListStatus.loading:\n        return const Center(child: CircularProgressIndicator());\n    }\n  }\n}\n\nclass ItemView extends StatelessWidget {\n  const ItemView({required this.items, super.key});\n\n  final List<Item> items;\n\n  @override\n  Widget build(BuildContext context) {\n    return items.isEmpty\n        ? const Center(child: Text('no content'))\n        : ListView.builder(\n            itemBuilder: (BuildContext context, int index) {\n              return ItemTile(\n                item: items[index],\n                onDeletePressed: (id) {\n                  context.read<ComplexListCubit>().deleteItem(id);\n                },\n              );\n            },\n            itemCount: items.length,\n          );\n  }\n}\n\nclass ItemTile extends StatelessWidget {\n  const ItemTile({\n    required this.item,\n    required this.onDeletePressed,\n    super.key,\n  });\n\n  final Item item;\n  final ValueSetter<String> onDeletePressed;\n\n  @override\n  Widget build(BuildContext context) {\n    return Material(\n      child: ListTile(\n        leading: Text('#${item.id}'),\n        title: Text(item.value),\n        trailing: item.isDeleting\n            ? const CircularProgressIndicator()\n            : IconButton(\n                icon: const Icon(Icons.delete, color: Colors.red),\n                onPressed: () => onDeletePressed(item.id),\n              ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_complex_list/complex_list/view/view.dart",
    "content": "export 'complex_list_page.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_complex_list/main.dart",
    "content": "import 'package:bloc/bloc.dart';\nimport 'package:flutter/widgets.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_complex_list/app.dart';\nimport 'package:flutter_complex_list/repository.dart';\nimport 'package:flutter_complex_list/simple_bloc_observer.dart';\n\nvoid main() {\n  Bloc.observer = const SimpleBlocObserver();\n  runApp(App(repository: Repository()));\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_complex_list/repository.dart",
    "content": "import 'dart:async';\nimport 'dart:math';\n\nimport 'package:flutter_complex_list/complex_list/complex_list.dart';\n\nclass Repository {\n  final _random = Random();\n\n  int _randomRange(int min, int max) => min + _random.nextInt(max - min);\n\n  Future<List<Item>> fetchItems() async {\n    await Future<void>.delayed(Duration(seconds: _randomRange(1, 5)));\n    return List.of(_generateItemsList(10));\n  }\n\n  List<Item> _generateItemsList(int length) {\n    return List.generate(\n      length,\n      (index) => Item(id: '$index', value: 'Item $index'),\n    );\n  }\n\n  Future<void> deleteItem(String id) async {\n    await Future<void>.delayed(Duration(seconds: _randomRange(1, 5)));\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_complex_list/simple_bloc_observer.dart",
    "content": "import 'package:bloc/bloc.dart';\n\nclass SimpleBlocObserver extends BlocObserver {\n  const SimpleBlocObserver();\n\n  @override\n  void onError(BlocBase<dynamic> bloc, Object error, StackTrace stackTrace) {\n    // ignore: avoid_print\n    print(error);\n    super.onError(bloc, error, stackTrace);\n  }\n\n  @override\n  void onChange(BlocBase<dynamic> bloc, Change<dynamic> change) {\n    super.onChange(bloc, change);\n    // ignore: avoid_print\n    print(change);\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_counter/.gitignore",
    "content": "# Miscellaneous\n*.class\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\n\n# IntelliJ related\n*.iml\n*.ipr\n*.iws\n.idea/\n\n# The .vscode folder contains launch configuration and tasks you configure in\n# VS Code which you may wish to be included in version control, so this line\n# is commented out by default.\n#.vscode/\n\n# Flutter/Dart/Pub related\n**/doc/api/\n.dart_tool/\n.flutter-plugins\n.flutter-plugins-dependencies\n.packages\n.pub-cache/\n.pub/\n/build/\n\n# Web related\nlib/generated_plugin_registrant.dart\n\n# Symbolication related\napp.*.symbols\n\n# Obfuscation related\napp.*.map.json\n\n# Exceptions to above rules.\n!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_counter/.metadata",
    "content": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrades etc.\n#\n# This file should be version controlled.\n\nversion:\n  revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n  channel: beta\n\nproject_type: app\n\n# Tracks metadata for the flutter migrate command\nmigration:\n  platforms:\n    - platform: root\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: android\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: ios\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: linux\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: macos\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: web\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: windows\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n\n  # User provided section\n\n  # List of Local paths (relative to this file) that should be\n  # ignored by the migrate tool.\n  #\n  # Files that are not part of the templates will be ignored by default.\n  unmanaged_files:\n    - 'lib/main.dart'\n    - 'ios/Runner.xcodeproj/project.pbxproj'\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_counter/app.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_counter/counter/counter.dart';\n\n/// {@template counter_app}\n/// A [MaterialApp] which sets the `home` to [CounterPage].\n/// {@endtemplate}\nclass CounterApp extends MaterialApp {\n  /// {@macro counter_app}\n  const CounterApp({super.key}) : super(home: const CounterPage());\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_counter/counter/counter.dart",
    "content": "export 'cubit/counter_cubit.dart';\nexport 'view/view.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_counter/counter/cubit/counter_cubit.dart",
    "content": "import 'package:bloc/bloc.dart';\n\n/// {@template counter_cubit}\n/// A [Cubit] which manages an [int] as its state.\n/// {@endtemplate}\nclass CounterCubit extends Cubit<int> {\n  /// {@macro counter_cubit}\n  CounterCubit() : super(0);\n\n  /// Add 1 to the current state.\n  void increment() => emit(state + 1);\n\n  /// Subtract 1 from the current state.\n  void decrement() => emit(state - 1);\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_counter/counter/view/counter_page.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_counter/counter/counter.dart';\n\n/// {@template counter_page}\n/// A [StatelessWidget] which is responsible for providing a\n/// [CounterCubit] instance to the [CounterView].\n/// {@endtemplate}\nclass CounterPage extends StatelessWidget {\n  /// {@macro counter_page}\n  const CounterPage({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return BlocProvider(\n      create: (_) => CounterCubit(),\n      child: const CounterView(),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_counter/counter/view/counter_view.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_counter/counter/counter.dart';\n\n/// {@template counter_view}\n/// A [StatelessWidget] which reacts to the provided\n/// [CounterCubit] state and notifies it in response to user input.\n/// {@endtemplate}\nclass CounterView extends StatelessWidget {\n  /// {@macro counter_view}\n  const CounterView({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    final textTheme = Theme.of(context).textTheme;\n    return Scaffold(\n      appBar: AppBar(title: const Text('Counter')),\n      body: Center(\n        child: BlocBuilder<CounterCubit, int>(\n          builder: (context, state) {\n            return Text('$state', style: textTheme.displayMedium);\n          },\n        ),\n      ),\n      floatingActionButton: Column(\n        mainAxisAlignment: MainAxisAlignment.end,\n        crossAxisAlignment: CrossAxisAlignment.end,\n        children: <Widget>[\n          FloatingActionButton(\n            key: const Key('counterView_increment_floatingActionButton'),\n            child: const Icon(Icons.add),\n            onPressed: () => context.read<CounterCubit>().increment(),\n          ),\n          const SizedBox(height: 8),\n          FloatingActionButton(\n            key: const Key('counterView_decrement_floatingActionButton'),\n            child: const Icon(Icons.remove),\n            onPressed: () => context.read<CounterCubit>().decrement(),\n          ),\n        ],\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_counter/counter/view/view.dart",
    "content": "export 'counter_page.dart';\nexport 'counter_view.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_counter/counter_observer.dart",
    "content": "import 'package:bloc/bloc.dart';\n\n/// {@template counter_observer}\n/// [BlocObserver] for the counter application which\n/// observes all state changes.\n/// {@endtemplate}\nclass CounterObserver extends BlocObserver {\n  /// {@macro counter_observer}\n  const CounterObserver();\n\n  @override\n  void onChange(BlocBase<dynamic> bloc, Change<dynamic> change) {\n    super.onChange(bloc, change);\n    // ignore: avoid_print\n    print('${bloc.runtimeType} $change');\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_counter/main.dart",
    "content": "import 'package:bloc/bloc.dart';\nimport 'package:flutter/widgets.dart';\nimport 'package:flutter_counter/app.dart';\nimport 'package:flutter_counter/counter_observer.dart';\n\nvoid main() {\n  Bloc.observer = const CounterObserver();\n  runApp(const CounterApp());\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_dynamic_form/.gitignore",
    "content": "# Miscellaneous\n*.class\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\n\n# IntelliJ related\n*.iml\n*.ipr\n*.iws\n.idea/\n\n# The .vscode folder contains launch configuration and tasks you configure in\n# VS Code which you may wish to be included in version control, so this line\n# is commented out by default.\n#.vscode/\n\n# Flutter/Dart/Pub related\n**/doc/api/\n.dart_tool/\n.flutter-plugins\n.packages\n.pub-cache/\n.pub/\n/build/\n\n# Android related\n**/android/**/gradle-wrapper.jar\n**/android/.gradle\n**/android/captures/\n**/android/gradlew\n**/android/gradlew.bat\n**/android/local.properties\n**/android/**/GeneratedPluginRegistrant.java\n\n# iOS/XCode related\n**/ios/**/*.mode1v3\n**/ios/**/*.mode2v3\n**/ios/**/*.moved-aside\n**/ios/**/*.pbxuser\n**/ios/**/*.perspectivev3\n**/ios/**/*sync/\n**/ios/**/.sconsign.dblite\n**/ios/**/.tags*\n**/ios/**/.vagrant/\n**/ios/**/DerivedData/\n**/ios/**/Icon?\n**/ios/**/Pods/\n**/ios/**/.symlinks/\n**/ios/**/profile\n**/ios/**/xcuserdata\n**/ios/.generated/\n**/ios/Flutter/App.framework\n**/ios/Flutter/Flutter.framework\n**/ios/Flutter/Generated.xcconfig\n**/ios/Flutter/app.flx\n**/ios/Flutter/app.zip\n**/ios/Flutter/flutter_assets/\n**/ios/ServiceDefinitions.json\n**/ios/Runner/GeneratedPluginRegistrant.*\n\n# Exceptions to above rules.\n!**/ios/**/default.mode1v3\n!**/ios/**/default.mode2v3\n!**/ios/**/default.pbxuser\n!**/ios/**/default.perspectivev3\n!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_dynamic_form/.metadata",
    "content": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrades etc.\n#\n# This file should be version controlled.\n\nversion:\n  revision: b06b8b2710955028a6b562f5aa6fe62941d6febf\n  channel: stable\n\nproject_type: app\n\n# Tracks metadata for the flutter migrate command\nmigration:\n  platforms:\n    - platform: root\n      create_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf\n      base_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf\n    - platform: android\n      create_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf\n      base_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf\n    - platform: ios\n      create_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf\n      base_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf\n\n  # User provided section\n\n  # List of Local paths (relative to this file) that should be\n  # ignored by the migrate tool.\n  #\n  # Files that are not part of the templates will be ignored by default.\n  unmanaged_files:\n    - 'lib/main.dart'\n    - 'ios/Runner.xcodeproj/project.pbxproj'\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_dynamic_form/app.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_dynamic_form/new_car/new_car.dart';\nimport 'package:flutter_dynamic_form/new_car_repository.dart';\n\nclass MyApp extends StatelessWidget {\n  const MyApp({required this.newCarRepository, super.key});\n\n  final NewCarRepository newCarRepository;\n\n  @override\n  Widget build(BuildContext context) {\n    return RepositoryProvider.value(\n      value: newCarRepository,\n      child: const MaterialApp(home: NewCarPage()),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_dynamic_form/main.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_dynamic_form/app.dart';\nimport 'package:flutter_dynamic_form/new_car_repository.dart';\n\nvoid main() => runApp(MyApp(newCarRepository: NewCarRepository()));\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_dynamic_form/new_car/bloc/new_car_bloc.dart",
    "content": "import 'package:bloc/bloc.dart';\nimport 'package:bloc_concurrency/bloc_concurrency.dart';\nimport 'package:equatable/equatable.dart';\nimport 'package:flutter_dynamic_form/new_car_repository.dart';\n\npart 'new_car_event.dart';\npart 'new_car_state.dart';\n\nclass NewCarBloc extends Bloc<NewCarEvent, NewCarState> {\n  NewCarBloc({required NewCarRepository newCarRepository})\n      : _newCarRepository = newCarRepository,\n        super(const NewCarState.initial()) {\n    on<NewCarEvent>(_onEvent, transformer: sequential());\n  }\n\n  final NewCarRepository _newCarRepository;\n\n  Future<void> _onEvent(NewCarEvent event, Emitter<NewCarState> emit) async {\n    return switch (event) {\n      final NewCarFormLoaded e => _onNewCarFormLoaded(e, emit),\n      final NewCarBrandChanged e => _onNewCarBrandChanged(e, emit),\n      final NewCarModelChanged e => _onNewCarModelChanged(e, emit),\n      final NewCarYearChanged e => _onNewCarYearChanged(e, emit),\n    };\n  }\n\n  Future<void> _onNewCarFormLoaded(\n    NewCarFormLoaded event,\n    Emitter<NewCarState> emit,\n  ) async {\n    emit(const NewCarState.brandsLoadInProgress());\n    final brands = await _newCarRepository.fetchBrands();\n    emit(NewCarState.brandsLoadSuccess(brands: brands));\n  }\n\n  Future<void> _onNewCarBrandChanged(\n    NewCarBrandChanged event,\n    Emitter<NewCarState> emit,\n  ) async {\n    emit(\n      NewCarState.modelsLoadInProgress(\n        brands: state.brands,\n        brand: event.brand,\n      ),\n    );\n    final models = await _newCarRepository.fetchModels(brand: event.brand);\n    emit(\n      NewCarState.modelsLoadSuccess(\n        brands: state.brands,\n        brand: event.brand,\n        models: models,\n      ),\n    );\n  }\n\n  Future<void> _onNewCarModelChanged(\n    NewCarModelChanged event,\n    Emitter<NewCarState> emit,\n  ) async {\n    emit(\n      NewCarState.yearsLoadInProgress(\n        brands: state.brands,\n        brand: state.brand,\n        models: state.models,\n        model: event.model,\n      ),\n    );\n    final years = await _newCarRepository.fetchYears(\n      brand: state.brand,\n      model: event.model,\n    );\n    emit(\n      NewCarState.yearsLoadSuccess(\n        brands: state.brands,\n        brand: state.brand,\n        models: state.models,\n        model: event.model,\n        years: years,\n      ),\n    );\n  }\n\n  Future<void> _onNewCarYearChanged(\n    NewCarYearChanged event,\n    Emitter<NewCarState> emit,\n  ) async {\n    emit(state.copyWith(year: event.year));\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_dynamic_form/new_car/bloc/new_car_event.dart",
    "content": "part of 'new_car_bloc.dart';\n\nsealed class NewCarEvent extends Equatable {\n  const NewCarEvent();\n\n  @override\n  List<Object?> get props => [];\n}\n\nfinal class NewCarFormLoaded extends NewCarEvent {\n  const NewCarFormLoaded();\n}\n\nfinal class NewCarBrandChanged extends NewCarEvent {\n  const NewCarBrandChanged({this.brand});\n\n  final String? brand;\n\n  @override\n  List<Object?> get props => [brand];\n}\n\nfinal class NewCarModelChanged extends NewCarEvent {\n  const NewCarModelChanged({this.model});\n\n  final String? model;\n\n  @override\n  List<Object?> get props => [model];\n}\n\nfinal class NewCarYearChanged extends NewCarEvent {\n  const NewCarYearChanged({this.year});\n\n  final String? year;\n\n  @override\n  List<Object?> get props => [year];\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_dynamic_form/new_car/bloc/new_car_state.dart",
    "content": "part of 'new_car_bloc.dart';\n\nfinal class NewCarState extends Equatable {\n  const NewCarState._({\n    this.brands = const <String>[],\n    this.brand,\n    this.models = const <String>[],\n    this.model,\n    this.years = const <String>[],\n    this.year,\n  });\n\n  const NewCarState.initial() : this._();\n\n  const NewCarState.brandsLoadInProgress() : this._();\n\n  const NewCarState.brandsLoadSuccess({required List<String> brands})\n      : this._(brands: brands);\n\n  const NewCarState.modelsLoadInProgress({\n    required List<String> brands,\n    String? brand,\n  }) : this._(brands: brands, brand: brand);\n\n  const NewCarState.modelsLoadSuccess({\n    required List<String> brands,\n    required String? brand,\n    required List<String> models,\n  }) : this._(brands: brands, brand: brand, models: models);\n\n  const NewCarState.yearsLoadInProgress({\n    required List<String> brands,\n    required String? brand,\n    required List<String> models,\n    required String? model,\n  }) : this._(brands: brands, brand: brand, models: models, model: model);\n\n  const NewCarState.yearsLoadSuccess({\n    required List<String> brands,\n    required String? brand,\n    required List<String> models,\n    required String? model,\n    required List<String> years,\n  }) : this._(\n          brands: brands,\n          brand: brand,\n          models: models,\n          model: model,\n          years: years,\n        );\n\n  NewCarState copyWith({\n    List<String>? brands,\n    String? brand,\n    List<String>? models,\n    String? model,\n    List<String>? years,\n    String? year,\n  }) {\n    return NewCarState._(\n      brands: brands ?? this.brands,\n      brand: brand ?? this.brand,\n      models: models ?? this.models,\n      model: model ?? this.model,\n      years: years ?? this.years,\n      year: year ?? this.year,\n    );\n  }\n\n  final List<String> brands;\n  final String? brand;\n\n  final List<String> models;\n  final String? model;\n\n  final List<String> years;\n  final String? year;\n\n  bool get isComplete => brand != null && model != null && year != null;\n\n  @override\n  List<Object?> get props => [brands, brand, models, model, years, year];\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_dynamic_form/new_car/new_car.dart",
    "content": "export 'bloc/new_car_bloc.dart';\nexport 'view/new_car_page.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_dynamic_form/new_car/view/new_car_page.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_dynamic_form/new_car/new_car.dart';\nimport 'package:flutter_dynamic_form/new_car_repository.dart';\n\nclass NewCarPage extends StatelessWidget {\n  const NewCarPage({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(title: const Text('Flutter Dynamic Form')),\n      body: BlocProvider(\n        create: (_) => NewCarBloc(\n          newCarRepository: context.read<NewCarRepository>(),\n        )..add(const NewCarFormLoaded()),\n        child: const NewCarForm(),\n      ),\n    );\n  }\n}\n\nclass NewCarForm extends StatelessWidget {\n  const NewCarForm({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return const Column(\n      crossAxisAlignment: CrossAxisAlignment.stretch,\n      children: <Widget>[\n        _BrandDropdownButton(),\n        _ModelDropdownButton(),\n        _YearDropdownButton(),\n        _FormSubmitButton(),\n      ],\n    );\n  }\n}\n\nclass _BrandDropdownButton extends StatelessWidget {\n  const _BrandDropdownButton();\n\n  @override\n  Widget build(BuildContext context) {\n    final brands = context.select((NewCarBloc bloc) => bloc.state.brands);\n    final brand = context.select((NewCarBloc bloc) => bloc.state.brand);\n    return Material(\n      child: DropdownButton<String>(\n        key: const Key('newCarForm_brand_dropdownButton'),\n        items: brands.isNotEmpty\n            ? brands.map((brand) {\n                return DropdownMenuItem(value: brand, child: Text(brand));\n              }).toList()\n            : const [],\n        value: brand,\n        hint: const Text('Select a Brand'),\n        onChanged: (brand) {\n          context.read<NewCarBloc>().add(NewCarBrandChanged(brand: brand));\n        },\n      ),\n    );\n  }\n}\n\nclass _ModelDropdownButton extends StatelessWidget {\n  const _ModelDropdownButton();\n\n  @override\n  Widget build(BuildContext context) {\n    final models = context.select((NewCarBloc bloc) => bloc.state.models);\n    final model = context.select((NewCarBloc bloc) => bloc.state.model);\n    return Material(\n      child: DropdownButton<String>(\n        key: const Key('newCarForm_model_dropdownButton'),\n        items: models.isNotEmpty\n            ? models.map((model) {\n                return DropdownMenuItem(value: model, child: Text(model));\n              }).toList()\n            : const [],\n        value: model,\n        hint: const Text('Select a Model'),\n        onChanged: (model) {\n          context.read<NewCarBloc>().add(NewCarModelChanged(model: model));\n        },\n      ),\n    );\n  }\n}\n\nclass _YearDropdownButton extends StatelessWidget {\n  const _YearDropdownButton();\n\n  @override\n  Widget build(BuildContext context) {\n    final years = context.select((NewCarBloc bloc) => bloc.state.years);\n    final year = context.select((NewCarBloc bloc) => bloc.state.year);\n    return Material(\n      child: DropdownButton<String>(\n        key: const Key('newCarForm_year_dropdownButton'),\n        items: years.isNotEmpty\n            ? years.map((year) {\n                return DropdownMenuItem(value: year, child: Text(year));\n              }).toList()\n            : const [],\n        value: year,\n        hint: const Text('Select a Year'),\n        onChanged: (year) {\n          context.read<NewCarBloc>().add(NewCarYearChanged(year: year));\n        },\n      ),\n    );\n  }\n}\n\nclass _FormSubmitButton extends StatelessWidget {\n  const _FormSubmitButton();\n\n  @override\n  Widget build(BuildContext context) {\n    final state = context.watch<NewCarBloc>().state;\n\n    void onFormSubmitted() {\n      ScaffoldMessenger.of(context)\n        ..hideCurrentSnackBar()\n        ..showSnackBar(\n          SnackBar(\n            content:\n                Text('Submitted ${state.brand} ${state.model} ${state.year}'),\n          ),\n        );\n    }\n\n    return ElevatedButton(\n      onPressed: state.isComplete ? onFormSubmitted : null,\n      child: const Text('Submit'),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_dynamic_form/new_car_repository.dart",
    "content": "const _delay = Duration(milliseconds: 300);\nFuture<void> wait() => Future.delayed(_delay);\n\nclass NewCarRepository {\n  Future<List<String>> fetchBrands() async {\n    await wait();\n    return ['Chevy', 'Toyota', 'Honda'];\n  }\n\n  Future<List<String>> fetchModels({String? brand}) async {\n    await wait();\n    switch (brand) {\n      case 'Chevy':\n        return ['Malibu', 'Impala'];\n      case 'Toyota':\n        return ['Corolla', 'Supra'];\n      case 'Honda':\n        return ['Civic', 'Accord'];\n      default:\n        return [];\n    }\n  }\n\n  Future<List<String>> fetchYears({String? brand, String? model}) async {\n    await wait();\n    switch (brand) {\n      case 'Chevy':\n        switch (model) {\n          case 'Malibu':\n            return ['2019', '2018'];\n          case 'Impala':\n            return ['2017', '2016'];\n          default:\n            return [];\n        }\n      case 'Toyota':\n        switch (model) {\n          case 'Corolla':\n            return ['2015', '2014'];\n          case 'Supra':\n            return ['2013', '2012'];\n          default:\n            return [];\n        }\n      case 'Honda':\n        switch (model) {\n          case 'Civic':\n            return ['2011', '2010'];\n          case 'Accord':\n            return ['2009', '2008'];\n          default:\n            return [];\n        }\n      default:\n        return [];\n    }\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_firebase_login/.gitignore",
    "content": "# Miscellaneous\n*.class\n*.lock\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\n\n# IntelliJ related\n*.iml\n*.ipr\n*.iws\n.idea/\n\n# Visual Studio Code related\n.vscode/\n\n# Flutter/Dart/Pub related\n**/doc/api/\n.dart_tool/\n.flutter-plugins\n.packages\n.pub-cache/\n.pub/\nbuild/\n\n# Android related\n**/android/**/gradle-wrapper.jar\n**/android/.gradle\n**/android/captures/\n**/android/gradlew\n**/android/gradlew.bat\n**/android/local.properties\n**/android/**/GeneratedPluginRegistrant.java\n**/android/app/google-services.json\n\n# iOS/XCode related\n**/ios/**/*.mode1v3\n**/ios/**/*.mode2v3\n**/ios/**/*.moved-aside\n**/ios/**/*.pbxuser\n**/ios/**/*.perspectivev3\n**/ios/**/*sync/\n**/ios/**/.sconsign.dblite\n**/ios/**/.tags*\n**/ios/**/.vagrant/\n**/ios/**/DerivedData/\n**/ios/**/Icon?\n**/ios/**/Pods/\n**/ios/**/.symlinks/\n**/ios/**/profile\n**/ios/**/xcuserdata\n**/ios/.generated/\n**/ios/Flutter/App.framework\n**/ios/Flutter/Flutter.framework\n**/ios/Flutter/Generated.xcconfig\n**/ios/Flutter/app.flx\n**/ios/Flutter/app.zip\n**/ios/Flutter/flutter_assets/\n**/ios/ServiceDefinitions.json\n**/ios/Runner/GeneratedPluginRegistrant.*\n\n# Firebase related\n.firebase/\n\n# Exceptions to above rules.\n!**/ios/**/default.mode1v3\n!**/ios/**/default.mode2v3\n!**/ios/**/default.pbxuser\n!**/ios/**/default.perspectivev3\n!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_firebase_login/.metadata",
    "content": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrades etc.\n#\n# This file should be version controlled.\n\nversion:\n  revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n  channel: beta\n\nproject_type: app\n\n# Tracks metadata for the flutter migrate command\nmigration:\n  platforms:\n    - platform: root\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: android\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: ios\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n\n  # User provided section\n\n  # List of Local paths (relative to this file) that should be\n  # ignored by the migrate tool.\n  #\n  # Files that are not part of the templates will be ignored by default.\n  unmanaged_files:\n    - 'lib/main.dart'\n    - 'ios/Runner.xcodeproj/project.pbxproj'\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_firebase_login/app/app.dart",
    "content": "export 'bloc/app_bloc.dart';\nexport 'bloc_observer.dart';\nexport 'routes/routes.dart';\nexport 'view/app.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_firebase_login/app/bloc/app_bloc.dart",
    "content": "import 'dart:async';\n\nimport 'package:authentication_repository/authentication_repository.dart';\nimport 'package:bloc/bloc.dart';\nimport 'package:equatable/equatable.dart';\n\npart 'app_event.dart';\npart 'app_state.dart';\n\nclass AppBloc extends Bloc<AppEvent, AppState> {\n  AppBloc({required AuthenticationRepository authenticationRepository})\n      : _authenticationRepository = authenticationRepository,\n        super(\n          authenticationRepository.currentUser.isNotEmpty\n              ? AppState.authenticated(authenticationRepository.currentUser)\n              : const AppState.unauthenticated(),\n        ) {\n    on<_AppUserChanged>(_onUserChanged);\n    on<AppLogoutRequested>(_onLogoutRequested);\n    _userSubscription = _authenticationRepository.user.listen(\n      (user) => add(_AppUserChanged(user)),\n    );\n  }\n\n  final AuthenticationRepository _authenticationRepository;\n  late final StreamSubscription<User> _userSubscription;\n\n  void _onUserChanged(_AppUserChanged event, Emitter<AppState> emit) {\n    emit(\n      event.user.isNotEmpty\n          ? AppState.authenticated(event.user)\n          : const AppState.unauthenticated(),\n    );\n  }\n\n  void _onLogoutRequested(AppLogoutRequested event, Emitter<AppState> emit) {\n    unawaited(_authenticationRepository.logOut());\n  }\n\n  @override\n  Future<void> close() {\n    _userSubscription.cancel();\n    return super.close();\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_firebase_login/app/bloc/app_event.dart",
    "content": "part of 'app_bloc.dart';\n\nsealed class AppEvent {\n  const AppEvent();\n}\n\nfinal class AppLogoutRequested extends AppEvent {\n  const AppLogoutRequested();\n}\n\nfinal class _AppUserChanged extends AppEvent {\n  const _AppUserChanged(this.user);\n\n  final User user;\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_firebase_login/app/bloc/app_state.dart",
    "content": "part of 'app_bloc.dart';\n\nenum AppStatus {\n  authenticated,\n  unauthenticated,\n}\n\nfinal class AppState extends Equatable {\n  const AppState._({\n    required this.status,\n    this.user = User.empty,\n  });\n\n  const AppState.authenticated(User user)\n      : this._(status: AppStatus.authenticated, user: user);\n\n  const AppState.unauthenticated() : this._(status: AppStatus.unauthenticated);\n\n  final AppStatus status;\n  final User user;\n\n  @override\n  List<Object> get props => [status, user];\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_firebase_login/app/bloc_observer.dart",
    "content": "// ignore_for_file: avoid_print\nimport 'package:bloc/bloc.dart';\n\nclass AppBlocObserver extends BlocObserver {\n  const AppBlocObserver();\n\n  @override\n  void onEvent(Bloc<dynamic, dynamic> bloc, Object? event) {\n    super.onEvent(bloc, event);\n    print(event);\n  }\n\n  @override\n  void onError(BlocBase<dynamic> bloc, Object error, StackTrace stackTrace) {\n    print(error);\n    super.onError(bloc, error, stackTrace);\n  }\n\n  @override\n  void onChange(BlocBase<dynamic> bloc, Change<dynamic> change) {\n    super.onChange(bloc, change);\n    print(change);\n  }\n\n  @override\n  void onTransition(\n    Bloc<dynamic, dynamic> bloc,\n    Transition<dynamic, dynamic> transition,\n  ) {\n    super.onTransition(bloc, transition);\n    print(transition);\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_firebase_login/app/routes/routes.dart",
    "content": "import 'package:flutter/widgets.dart';\nimport 'package:flutter_firebase_login/app/app.dart';\nimport 'package:flutter_firebase_login/home/home.dart';\nimport 'package:flutter_firebase_login/login/login.dart';\n\nList<Page<dynamic>> onGenerateAppViewPages(\n  AppStatus state,\n  List<Page<dynamic>> pages,\n) {\n  switch (state) {\n    case AppStatus.authenticated:\n      return [HomePage.page()];\n    case AppStatus.unauthenticated:\n      return [LoginPage.page()];\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_firebase_login/app/view/app.dart",
    "content": "import 'package:authentication_repository/authentication_repository.dart';\nimport 'package:flow_builder/flow_builder.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_firebase_login/app/app.dart';\nimport 'package:flutter_firebase_login/theme.dart';\n\nclass App extends StatelessWidget {\n  const App({\n    required AuthenticationRepository authenticationRepository,\n    super.key,\n  }) : _authenticationRepository = authenticationRepository;\n\n  final AuthenticationRepository _authenticationRepository;\n\n  @override\n  Widget build(BuildContext context) {\n    return RepositoryProvider.value(\n      value: _authenticationRepository,\n      child: BlocProvider(\n        create: (_) => AppBloc(\n          authenticationRepository: _authenticationRepository,\n        ),\n        child: const AppView(),\n      ),\n    );\n  }\n}\n\nclass AppView extends StatelessWidget {\n  const AppView({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      theme: theme,\n      home: FlowBuilder<AppStatus>(\n        state: context.select((AppBloc bloc) => bloc.state.status),\n        onGeneratePages: onGenerateAppViewPages,\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_firebase_login/generated_plugin_registrant.dart",
    "content": "//\n// Generated file. Do not edit.\n//\n\n// ignore_for_file: directives_ordering\n// ignore_for_file: lines_longer_than_80_chars\n// ignore_for_file: depend_on_referenced_packages\n\nimport 'package:firebase_auth_web/firebase_auth_web.dart';\nimport 'package:firebase_core_web/firebase_core_web.dart';\nimport 'package:google_sign_in_web/google_sign_in_web.dart';\n\nimport 'package:flutter_web_plugins/flutter_web_plugins.dart';\n\n// ignore: public_member_api_docs\nvoid registerPlugins(Registrar registrar) {\n  FirebaseAuthWeb.registerWith(registrar);\n  FirebaseCoreWeb.registerWith(registrar);\n  GoogleSignInPlugin.registerWith(registrar);\n  registrar.registerMessageHandler();\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_firebase_login/home/home.dart",
    "content": "export 'view/home_page.dart';\nexport 'widgets/widgets.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_firebase_login/home/view/home_page.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_firebase_login/app/app.dart';\nimport 'package:flutter_firebase_login/home/home.dart';\n\nclass HomePage extends StatelessWidget {\n  const HomePage({super.key});\n\n  static Page<void> page() => const MaterialPage<void>(child: HomePage());\n\n  @override\n  Widget build(BuildContext context) {\n    final textTheme = Theme.of(context).textTheme;\n    final user = context.select((AppBloc bloc) => bloc.state.user);\n    return Scaffold(\n      appBar: AppBar(\n        title: const Text('Home'),\n        actions: <Widget>[\n          IconButton(\n            key: const Key('homePage_logout_iconButton'),\n            icon: const Icon(Icons.exit_to_app),\n            onPressed: () {\n              context.read<AppBloc>().add(const AppLogoutRequested());\n            },\n          ),\n        ],\n      ),\n      body: Align(\n        alignment: const Alignment(0, -1 / 3),\n        child: Column(\n          mainAxisSize: MainAxisSize.min,\n          children: <Widget>[\n            Avatar(photo: user.photo),\n            const SizedBox(height: 4),\n            Text(user.email ?? '', style: textTheme.titleLarge),\n            const SizedBox(height: 4),\n            Text(user.name ?? '', style: textTheme.headlineSmall),\n          ],\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_firebase_login/home/widgets/avatar.dart",
    "content": "import 'package:flutter/material.dart';\n\nconst _avatarSize = 48.0;\n\nclass Avatar extends StatelessWidget {\n  const Avatar({super.key, this.photo});\n\n  final String? photo;\n\n  @override\n  Widget build(BuildContext context) {\n    final photo = this.photo;\n    return CircleAvatar(\n      radius: _avatarSize,\n      backgroundImage: photo != null ? NetworkImage(photo) : null,\n      child: photo == null\n          ? const Icon(Icons.person_outline, size: _avatarSize)\n          : null,\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_firebase_login/home/widgets/widgets.dart",
    "content": "export 'avatar.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_firebase_login/login/cubit/login_cubit.dart",
    "content": "import 'package:authentication_repository/authentication_repository.dart';\nimport 'package:bloc/bloc.dart';\nimport 'package:equatable/equatable.dart';\nimport 'package:form_inputs/form_inputs.dart';\nimport 'package:formz/formz.dart';\n\npart 'login_state.dart';\n\nclass LoginCubit extends Cubit<LoginState> {\n  LoginCubit(this._authenticationRepository) : super(const LoginState());\n\n  final AuthenticationRepository _authenticationRepository;\n\n  void emailChanged(String value) {\n    final email = Email.dirty(value);\n    emit(\n      state.copyWith(\n        email: email,\n        isValid: Formz.validate([email, state.password]),\n      ),\n    );\n  }\n\n  void passwordChanged(String value) {\n    final password = Password.dirty(value);\n    emit(\n      state.copyWith(\n        password: password,\n        isValid: Formz.validate([state.email, password]),\n      ),\n    );\n  }\n\n  Future<void> logInWithCredentials() async {\n    if (!state.isValid) return;\n    emit(state.copyWith(status: FormzSubmissionStatus.inProgress));\n    try {\n      await _authenticationRepository.logInWithEmailAndPassword(\n        email: state.email.value,\n        password: state.password.value,\n      );\n      emit(state.copyWith(status: FormzSubmissionStatus.success));\n    } on LogInWithEmailAndPasswordFailure catch (e) {\n      emit(\n        state.copyWith(\n          errorMessage: e.message,\n          status: FormzSubmissionStatus.failure,\n        ),\n      );\n    } catch (_) {\n      emit(state.copyWith(status: FormzSubmissionStatus.failure));\n    }\n  }\n\n  Future<void> logInWithGoogle() async {\n    emit(state.copyWith(status: FormzSubmissionStatus.inProgress));\n    try {\n      await _authenticationRepository.logInWithGoogle();\n      emit(state.copyWith(status: FormzSubmissionStatus.success));\n    } on LogInWithGoogleFailure catch (e) {\n      emit(\n        state.copyWith(\n          errorMessage: e.message,\n          status: FormzSubmissionStatus.failure,\n        ),\n      );\n    } catch (_) {\n      emit(state.copyWith(status: FormzSubmissionStatus.failure));\n    }\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_firebase_login/login/cubit/login_state.dart",
    "content": "part of 'login_cubit.dart';\n\nfinal class LoginState extends Equatable {\n  const LoginState({\n    this.email = const Email.pure(),\n    this.password = const Password.pure(),\n    this.status = FormzSubmissionStatus.initial,\n    this.isValid = false,\n    this.errorMessage,\n  });\n\n  final Email email;\n  final Password password;\n  final FormzSubmissionStatus status;\n  final bool isValid;\n  final String? errorMessage;\n\n  @override\n  List<Object?> get props => [email, password, status, isValid, errorMessage];\n\n  LoginState copyWith({\n    Email? email,\n    Password? password,\n    FormzSubmissionStatus? status,\n    bool? isValid,\n    String? errorMessage,\n  }) {\n    return LoginState(\n      email: email ?? this.email,\n      password: password ?? this.password,\n      status: status ?? this.status,\n      isValid: isValid ?? this.isValid,\n      errorMessage: errorMessage ?? this.errorMessage,\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_firebase_login/login/login.dart",
    "content": "export 'cubit/login_cubit.dart';\nexport 'view/view.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_firebase_login/login/view/login_form.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_firebase_login/login/login.dart';\nimport 'package:flutter_firebase_login/sign_up/sign_up.dart';\nimport 'package:font_awesome_flutter/font_awesome_flutter.dart';\nimport 'package:formz/formz.dart';\n\nclass LoginForm extends StatelessWidget {\n  const LoginForm({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return BlocListener<LoginCubit, LoginState>(\n      listener: (context, state) {\n        if (state.status.isFailure) {\n          ScaffoldMessenger.of(context)\n            ..hideCurrentSnackBar()\n            ..showSnackBar(\n              SnackBar(\n                content: Text(state.errorMessage ?? 'Authentication Failure'),\n              ),\n            );\n        }\n      },\n      child: Align(\n        alignment: const Alignment(0, -1 / 3),\n        child: SingleChildScrollView(\n          child: Column(\n            mainAxisSize: MainAxisSize.min,\n            children: [\n              Image.asset(\n                'assets/bloc_logo_small.png',\n                height: 120,\n              ),\n              const SizedBox(height: 16),\n              _EmailInput(),\n              const SizedBox(height: 8),\n              _PasswordInput(),\n              const SizedBox(height: 8),\n              _LoginButton(),\n              const SizedBox(height: 8),\n              _GoogleLoginButton(),\n              const SizedBox(height: 4),\n              _SignUpButton(),\n            ],\n          ),\n        ),\n      ),\n    );\n  }\n}\n\nclass _EmailInput extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return BlocBuilder<LoginCubit, LoginState>(\n      buildWhen: (previous, current) => previous.email != current.email,\n      builder: (context, state) {\n        return TextField(\n          key: const Key('loginForm_emailInput_textField'),\n          onChanged: (email) => context.read<LoginCubit>().emailChanged(email),\n          keyboardType: TextInputType.emailAddress,\n          decoration: InputDecoration(\n            labelText: 'email',\n            helperText: '',\n            errorText:\n                state.email.displayError != null ? 'invalid email' : null,\n          ),\n        );\n      },\n    );\n  }\n}\n\nclass _PasswordInput extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return BlocBuilder<LoginCubit, LoginState>(\n      buildWhen: (previous, current) => previous.password != current.password,\n      builder: (context, state) {\n        return TextField(\n          key: const Key('loginForm_passwordInput_textField'),\n          onChanged: (password) =>\n              context.read<LoginCubit>().passwordChanged(password),\n          obscureText: true,\n          decoration: InputDecoration(\n            labelText: 'password',\n            helperText: '',\n            errorText:\n                state.password.displayError != null ? 'invalid password' : null,\n          ),\n        );\n      },\n    );\n  }\n}\n\nclass _LoginButton extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return BlocBuilder<LoginCubit, LoginState>(\n      builder: (context, state) {\n        return state.status.isInProgress\n            ? const CircularProgressIndicator()\n            : ElevatedButton(\n                key: const Key('loginForm_continue_raisedButton'),\n                style: ElevatedButton.styleFrom(\n                  shape: RoundedRectangleBorder(\n                    borderRadius: BorderRadius.circular(30),\n                  ),\n                  backgroundColor: const Color(0xFFFFD600),\n                ),\n                onPressed: state.isValid\n                    ? () => context.read<LoginCubit>().logInWithCredentials()\n                    : null,\n                child: const Text('LOGIN'),\n              );\n      },\n    );\n  }\n}\n\nclass _GoogleLoginButton extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    final theme = Theme.of(context);\n    return ElevatedButton.icon(\n      key: const Key('loginForm_googleLogin_raisedButton'),\n      label: const Text(\n        'SIGN IN WITH GOOGLE',\n        style: TextStyle(color: Colors.white),\n      ),\n      style: ElevatedButton.styleFrom(\n        shape: RoundedRectangleBorder(\n          borderRadius: BorderRadius.circular(30),\n        ),\n        backgroundColor: theme.colorScheme.secondary,\n      ),\n      icon: const Icon(FontAwesomeIcons.google, color: Colors.white),\n      onPressed: () => context.read<LoginCubit>().logInWithGoogle(),\n    );\n  }\n}\n\nclass _SignUpButton extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    final theme = Theme.of(context);\n    return TextButton(\n      key: const Key('loginForm_createAccount_flatButton'),\n      onPressed: () => Navigator.of(context).push<void>(SignUpPage.route()),\n      child: Text(\n        'CREATE ACCOUNT',\n        style: TextStyle(color: theme.primaryColor),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_firebase_login/login/view/login_page.dart",
    "content": "import 'package:authentication_repository/authentication_repository.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_firebase_login/login/login.dart';\n\nclass LoginPage extends StatelessWidget {\n  const LoginPage({super.key});\n\n  static Page<void> page() => const MaterialPage<void>(child: LoginPage());\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(title: const Text('Login')),\n      body: Padding(\n        padding: const EdgeInsets.all(8),\n        child: BlocProvider(\n          create: (_) => LoginCubit(context.read<AuthenticationRepository>()),\n          child: const LoginForm(),\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_firebase_login/login/view/view.dart",
    "content": "export 'login_form.dart';\nexport 'login_page.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_firebase_login/main.dart",
    "content": "import 'package:authentication_repository/authentication_repository.dart';\nimport 'package:bloc/bloc.dart';\nimport 'package:firebase_core/firebase_core.dart';\nimport 'package:flutter/widgets.dart';\nimport 'package:flutter_firebase_login/app/app.dart';\n\nFuture<void> main() async {\n  WidgetsFlutterBinding.ensureInitialized();\n  Bloc.observer = const AppBlocObserver();\n\n  await Firebase.initializeApp();\n\n  final authenticationRepository = AuthenticationRepository();\n  await authenticationRepository.user.first;\n\n  runApp(App(authenticationRepository: authenticationRepository));\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_firebase_login/sign_up/cubit/sign_up_cubit.dart",
    "content": "import 'package:authentication_repository/authentication_repository.dart';\nimport 'package:bloc/bloc.dart';\nimport 'package:equatable/equatable.dart';\nimport 'package:form_inputs/form_inputs.dart';\nimport 'package:formz/formz.dart';\n\npart 'sign_up_state.dart';\n\nclass SignUpCubit extends Cubit<SignUpState> {\n  SignUpCubit(this._authenticationRepository) : super(const SignUpState());\n\n  final AuthenticationRepository _authenticationRepository;\n\n  void emailChanged(String value) {\n    final email = Email.dirty(value);\n    emit(\n      state.copyWith(\n        email: email,\n        isValid: Formz.validate([\n          email,\n          state.password,\n          state.confirmedPassword,\n        ]),\n      ),\n    );\n  }\n\n  void passwordChanged(String value) {\n    final password = Password.dirty(value);\n    final confirmedPassword = ConfirmedPassword.dirty(\n      password: password.value,\n      value: state.confirmedPassword.value,\n    );\n    emit(\n      state.copyWith(\n        password: password,\n        confirmedPassword: confirmedPassword,\n        isValid: Formz.validate([\n          state.email,\n          password,\n          confirmedPassword,\n        ]),\n      ),\n    );\n  }\n\n  void confirmedPasswordChanged(String value) {\n    final confirmedPassword = ConfirmedPassword.dirty(\n      password: state.password.value,\n      value: value,\n    );\n    emit(\n      state.copyWith(\n        confirmedPassword: confirmedPassword,\n        isValid: Formz.validate([\n          state.email,\n          state.password,\n          confirmedPassword,\n        ]),\n      ),\n    );\n  }\n\n  Future<void> signUpFormSubmitted() async {\n    if (!state.isValid) return;\n    emit(state.copyWith(status: FormzSubmissionStatus.inProgress));\n    try {\n      await _authenticationRepository.signUp(\n        email: state.email.value,\n        password: state.password.value,\n      );\n      emit(state.copyWith(status: FormzSubmissionStatus.success));\n    } on SignUpWithEmailAndPasswordFailure catch (e) {\n      emit(\n        state.copyWith(\n          errorMessage: e.message,\n          status: FormzSubmissionStatus.failure,\n        ),\n      );\n    } catch (_) {\n      emit(state.copyWith(status: FormzSubmissionStatus.failure));\n    }\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_firebase_login/sign_up/cubit/sign_up_state.dart",
    "content": "part of 'sign_up_cubit.dart';\n\nenum ConfirmPasswordValidationError { invalid }\n\nfinal class SignUpState extends Equatable {\n  const SignUpState({\n    this.email = const Email.pure(),\n    this.password = const Password.pure(),\n    this.confirmedPassword = const ConfirmedPassword.pure(),\n    this.status = FormzSubmissionStatus.initial,\n    this.isValid = false,\n    this.errorMessage,\n  });\n\n  final Email email;\n  final Password password;\n  final ConfirmedPassword confirmedPassword;\n  final FormzSubmissionStatus status;\n  final bool isValid;\n  final String? errorMessage;\n\n  @override\n  List<Object?> get props => [\n        email,\n        password,\n        confirmedPassword,\n        status,\n        isValid,\n        errorMessage,\n      ];\n\n  SignUpState copyWith({\n    Email? email,\n    Password? password,\n    ConfirmedPassword? confirmedPassword,\n    FormzSubmissionStatus? status,\n    bool? isValid,\n    String? errorMessage,\n  }) {\n    return SignUpState(\n      email: email ?? this.email,\n      password: password ?? this.password,\n      confirmedPassword: confirmedPassword ?? this.confirmedPassword,\n      status: status ?? this.status,\n      isValid: isValid ?? this.isValid,\n      errorMessage: errorMessage ?? this.errorMessage,\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_firebase_login/sign_up/sign_up.dart",
    "content": "export 'cubit/sign_up_cubit.dart';\nexport 'view/view.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_firebase_login/sign_up/view/sign_up_form.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_firebase_login/sign_up/sign_up.dart';\nimport 'package:formz/formz.dart';\n\nclass SignUpForm extends StatelessWidget {\n  const SignUpForm({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return BlocListener<SignUpCubit, SignUpState>(\n      listener: (context, state) {\n        if (state.status.isSuccess) {\n          Navigator.of(context).pop();\n        } else if (state.status.isFailure) {\n          ScaffoldMessenger.of(context)\n            ..hideCurrentSnackBar()\n            ..showSnackBar(\n              SnackBar(content: Text(state.errorMessage ?? 'Sign Up Failure')),\n            );\n        }\n      },\n      child: Align(\n        alignment: const Alignment(0, -1 / 3),\n        child: Column(\n          mainAxisSize: MainAxisSize.min,\n          children: [\n            _EmailInput(),\n            const SizedBox(height: 8),\n            _PasswordInput(),\n            const SizedBox(height: 8),\n            _ConfirmPasswordInput(),\n            const SizedBox(height: 8),\n            _SignUpButton(),\n          ],\n        ),\n      ),\n    );\n  }\n}\n\nclass _EmailInput extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return BlocBuilder<SignUpCubit, SignUpState>(\n      buildWhen: (previous, current) => previous.email != current.email,\n      builder: (context, state) {\n        return TextField(\n          key: const Key('signUpForm_emailInput_textField'),\n          onChanged: (email) => context.read<SignUpCubit>().emailChanged(email),\n          keyboardType: TextInputType.emailAddress,\n          decoration: InputDecoration(\n            labelText: 'email',\n            helperText: '',\n            errorText:\n                state.email.displayError != null ? 'invalid email' : null,\n          ),\n        );\n      },\n    );\n  }\n}\n\nclass _PasswordInput extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return BlocBuilder<SignUpCubit, SignUpState>(\n      buildWhen: (previous, current) => previous.password != current.password,\n      builder: (context, state) {\n        return TextField(\n          key: const Key('signUpForm_passwordInput_textField'),\n          onChanged: (password) =>\n              context.read<SignUpCubit>().passwordChanged(password),\n          obscureText: true,\n          decoration: InputDecoration(\n            labelText: 'password',\n            helperText: '',\n            errorText:\n                state.password.displayError != null ? 'invalid password' : null,\n          ),\n        );\n      },\n    );\n  }\n}\n\nclass _ConfirmPasswordInput extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return BlocBuilder<SignUpCubit, SignUpState>(\n      buildWhen: (previous, current) =>\n          previous.password != current.password ||\n          previous.confirmedPassword != current.confirmedPassword,\n      builder: (context, state) {\n        return TextField(\n          key: const Key('signUpForm_confirmedPasswordInput_textField'),\n          onChanged: (confirmPassword) => context\n              .read<SignUpCubit>()\n              .confirmedPasswordChanged(confirmPassword),\n          obscureText: true,\n          decoration: InputDecoration(\n            labelText: 'confirm password',\n            helperText: '',\n            errorText: state.confirmedPassword.displayError != null\n                ? 'passwords do not match'\n                : null,\n          ),\n        );\n      },\n    );\n  }\n}\n\nclass _SignUpButton extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return BlocBuilder<SignUpCubit, SignUpState>(\n      builder: (context, state) {\n        return state.status.isInProgress\n            ? const CircularProgressIndicator()\n            : ElevatedButton(\n                key: const Key('signUpForm_continue_raisedButton'),\n                style: ElevatedButton.styleFrom(\n                  shape: RoundedRectangleBorder(\n                    borderRadius: BorderRadius.circular(30),\n                  ),\n                  backgroundColor: Colors.orangeAccent,\n                ),\n                onPressed: state.isValid\n                    ? () => context.read<SignUpCubit>().signUpFormSubmitted()\n                    : null,\n                child: const Text('SIGN UP'),\n              );\n      },\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_firebase_login/sign_up/view/sign_up_page.dart",
    "content": "import 'package:authentication_repository/authentication_repository.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_firebase_login/sign_up/sign_up.dart';\n\nclass SignUpPage extends StatelessWidget {\n  const SignUpPage({super.key});\n\n  static Route<void> route() {\n    return MaterialPageRoute<void>(builder: (_) => const SignUpPage());\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(title: const Text('Sign Up')),\n      body: Padding(\n        padding: const EdgeInsets.all(8),\n        child: BlocProvider<SignUpCubit>(\n          create: (_) => SignUpCubit(context.read<AuthenticationRepository>()),\n          child: const SignUpForm(),\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_firebase_login/sign_up/view/view.dart",
    "content": "export 'sign_up_form.dart';\nexport 'sign_up_page.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_firebase_login/theme.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:google_fonts/google_fonts.dart';\n\nfinal theme = ThemeData(\n  textTheme: GoogleFonts.openSansTextTheme(),\n  primaryColorDark: const Color(0xFF0097A7),\n  primaryColorLight: const Color(0xFFB2EBF2),\n  primaryColor: const Color(0xFF00BCD4),\n  colorScheme: const ColorScheme.light(secondary: Color(0xFF009688)),\n  scaffoldBackgroundColor: const Color(0xFFE0F2F1),\n  inputDecorationTheme: InputDecorationTheme(\n    border: OutlineInputBorder(\n      borderRadius: BorderRadius.circular(8),\n    ),\n  ),\n);\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_form_validation/.gitignore",
    "content": "# Miscellaneous\n*.class\n*.lock\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\n\n# IntelliJ related\n*.iml\n*.ipr\n*.iws\n.idea/\n\n# Visual Studio Code related\n.vscode/\n\n# Flutter/Dart/Pub related\n**/doc/api/\n.dart_tool/\n.flutter-plugins\n.packages\n.pub-cache/\n.pub/\nbuild/\n.last_build_id\n\n# Android related\n**/android/**/gradle-wrapper.jar\n**/android/.gradle\n**/android/captures/\n**/android/gradlew\n**/android/gradlew.bat\n**/android/local.properties\n**/android/**/GeneratedPluginRegistrant.java\n\n# iOS/XCode related\n**/ios/**/*.mode1v3\n**/ios/**/*.mode2v3\n**/ios/**/*.moved-aside\n**/ios/**/*.pbxuser\n**/ios/**/*.perspectivev3\n**/ios/**/*sync/\n**/ios/**/.sconsign.dblite\n**/ios/**/.tags*\n**/ios/**/.vagrant/\n**/ios/**/DerivedData/\n**/ios/**/Icon?\n**/ios/**/Pods/\n**/ios/**/.symlinks/\n**/ios/**/profile\n**/ios/**/xcuserdata\n**/ios/.generated/\n**/ios/Flutter/App.framework\n**/ios/Flutter/Flutter.framework\n**/ios/Flutter/Generated.xcconfig\n**/ios/Flutter/app.flx\n**/ios/Flutter/app.zip\n**/ios/Flutter/flutter_assets/\n**/ios/ServiceDefinitions.json\n**/ios/Runner/GeneratedPluginRegistrant.*\n\n# Exceptions to above rules.\n!**/ios/**/default.mode1v3\n!**/ios/**/default.mode2v3\n!**/ios/**/default.pbxuser\n!**/ios/**/default.perspectivev3\n!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_form_validation/.metadata",
    "content": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrades etc.\n#\n# This file should be version controlled.\n\nversion:\n  revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n  channel: beta\n\nproject_type: app\n\n# Tracks metadata for the flutter migrate command\nmigration:\n  platforms:\n    - platform: root\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: android\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: ios\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n\n  # User provided section\n\n  # List of Local paths (relative to this file) that should be\n  # ignored by the migrate tool.\n  #\n  # Files that are not part of the templates will be ignored by default.\n  unmanaged_files:\n    - 'lib/main.dart'\n    - 'ios/Runner.xcodeproj/project.pbxproj'\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_form_validation/bloc/my_form_bloc.dart",
    "content": "import 'dart:async';\n\nimport 'package:bloc/bloc.dart';\nimport 'package:equatable/equatable.dart';\nimport 'package:flutter_form_validation/models/models.dart';\nimport 'package:formz/formz.dart';\n\npart 'my_form_event.dart';\npart 'my_form_state.dart';\n\nclass MyFormBloc extends Bloc<MyFormEvent, MyFormState> {\n  MyFormBloc() : super(const MyFormState()) {\n    on<EmailChanged>(_onEmailChanged);\n    on<PasswordChanged>(_onPasswordChanged);\n    on<EmailUnfocused>(_onEmailUnfocused);\n    on<PasswordUnfocused>(_onPasswordUnfocused);\n    on<FormSubmitted>(_onFormSubmitted);\n  }\n\n  void _onEmailChanged(EmailChanged event, Emitter<MyFormState> emit) {\n    final email = Email.dirty(event.email);\n    emit(\n      state.copyWith(\n        email: email.isValid ? email : Email.pure(event.email),\n        isValid: Formz.validate([email, state.password]),\n      ),\n    );\n  }\n\n  void _onPasswordChanged(PasswordChanged event, Emitter<MyFormState> emit) {\n    final password = Password.dirty(event.password);\n    emit(\n      state.copyWith(\n        password: password.isValid ? password : Password.pure(event.password),\n        isValid: Formz.validate([state.email, password]),\n      ),\n    );\n  }\n\n  void _onEmailUnfocused(EmailUnfocused event, Emitter<MyFormState> emit) {\n    final email = Email.dirty(state.email.value);\n    emit(\n      state.copyWith(\n        email: email,\n        isValid: Formz.validate([email, state.password]),\n      ),\n    );\n  }\n\n  void _onPasswordUnfocused(\n    PasswordUnfocused event,\n    Emitter<MyFormState> emit,\n  ) {\n    final password = Password.dirty(state.password.value);\n    emit(\n      state.copyWith(\n        password: password,\n        isValid: Formz.validate([state.email, password]),\n      ),\n    );\n  }\n\n  Future<void> _onFormSubmitted(\n    FormSubmitted event,\n    Emitter<MyFormState> emit,\n  ) async {\n    final email = Email.dirty(state.email.value);\n    final password = Password.dirty(state.password.value);\n    emit(\n      state.copyWith(\n        email: email,\n        password: password,\n        isValid: Formz.validate([email, password]),\n      ),\n    );\n    if (state.isValid) {\n      emit(state.copyWith(status: FormzSubmissionStatus.inProgress));\n      await Future<void>.delayed(const Duration(seconds: 1));\n      emit(state.copyWith(status: FormzSubmissionStatus.success));\n    }\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_form_validation/bloc/my_form_event.dart",
    "content": "part of 'my_form_bloc.dart';\n\nsealed class MyFormEvent extends Equatable {\n  const MyFormEvent();\n\n  @override\n  List<Object> get props => [];\n}\n\nfinal class EmailChanged extends MyFormEvent {\n  const EmailChanged({required this.email});\n\n  final String email;\n\n  @override\n  List<Object> get props => [email];\n}\n\nfinal class EmailUnfocused extends MyFormEvent {}\n\nfinal class PasswordChanged extends MyFormEvent {\n  const PasswordChanged({required this.password});\n\n  final String password;\n\n  @override\n  List<Object> get props => [password];\n}\n\nfinal class PasswordUnfocused extends MyFormEvent {}\n\nfinal class FormSubmitted extends MyFormEvent {}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_form_validation/bloc/my_form_state.dart",
    "content": "part of 'my_form_bloc.dart';\n\nfinal class MyFormState extends Equatable {\n  const MyFormState({\n    this.email = const Email.pure(),\n    this.password = const Password.pure(),\n    this.isValid = false,\n    this.status = FormzSubmissionStatus.initial,\n  });\n\n  final Email email;\n  final Password password;\n  final bool isValid;\n  final FormzSubmissionStatus status;\n\n  MyFormState copyWith({\n    Email? email,\n    Password? password,\n    bool? isValid,\n    FormzSubmissionStatus? status,\n  }) {\n    return MyFormState(\n      email: email ?? this.email,\n      password: password ?? this.password,\n      isValid: isValid ?? this.isValid,\n      status: status ?? this.status,\n    );\n  }\n\n  @override\n  List<Object> get props => [email, password, status];\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_form_validation/main.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_form_validation/bloc/my_form_bloc.dart';\nimport 'package:formz/formz.dart';\n\nvoid main() => runApp(const App());\n\nclass App extends StatelessWidget {\n  const App({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      home: Scaffold(\n        appBar: AppBar(title: const Text('Flutter Form Validation')),\n        body: BlocProvider(\n          create: (_) => MyFormBloc(),\n          child: const MyForm(),\n        ),\n      ),\n    );\n  }\n}\n\nclass MyForm extends StatefulWidget {\n  const MyForm({super.key});\n\n  @override\n  State<MyForm> createState() => _MyFormState();\n}\n\nclass _MyFormState extends State<MyForm> {\n  final _emailFocusNode = FocusNode();\n  final _passwordFocusNode = FocusNode();\n\n  @override\n  void initState() {\n    super.initState();\n    _emailFocusNode.addListener(() {\n      if (!_emailFocusNode.hasFocus) {\n        context.read<MyFormBloc>().add(EmailUnfocused());\n        FocusScope.of(context).requestFocus(_passwordFocusNode);\n      }\n    });\n    _passwordFocusNode.addListener(() {\n      if (!_passwordFocusNode.hasFocus) {\n        context.read<MyFormBloc>().add(PasswordUnfocused());\n      }\n    });\n  }\n\n  @override\n  void dispose() {\n    _emailFocusNode.dispose();\n    _passwordFocusNode.dispose();\n    super.dispose();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return BlocListener<MyFormBloc, MyFormState>(\n      listener: (context, state) {\n        if (state.status.isSuccess) {\n          ScaffoldMessenger.of(context).hideCurrentSnackBar();\n          showDialog<void>(\n            context: context,\n            builder: (_) => const SuccessDialog(),\n          );\n        }\n        if (state.status.isInProgress) {\n          ScaffoldMessenger.of(context)\n            ..hideCurrentSnackBar()\n            ..showSnackBar(\n              const SnackBar(content: Text('Submitting...')),\n            );\n        }\n      },\n      child: Padding(\n        padding: const EdgeInsets.all(8),\n        child: Column(\n          children: <Widget>[\n            EmailInput(focusNode: _emailFocusNode),\n            PasswordInput(focusNode: _passwordFocusNode),\n            const SubmitButton(),\n          ],\n        ),\n      ),\n    );\n  }\n}\n\nclass EmailInput extends StatelessWidget {\n  const EmailInput({required this.focusNode, super.key});\n\n  final FocusNode focusNode;\n\n  @override\n  Widget build(BuildContext context) {\n    return BlocBuilder<MyFormBloc, MyFormState>(\n      builder: (context, state) {\n        return TextFormField(\n          initialValue: state.email.value,\n          focusNode: focusNode,\n          decoration: InputDecoration(\n            icon: const Icon(Icons.email),\n            labelText: 'Email',\n            helperText: 'A complete, valid email e.g. joe@gmail.com',\n            errorText: state.email.displayError != null\n                ? 'Please ensure the email entered is valid'\n                : null,\n          ),\n          keyboardType: TextInputType.emailAddress,\n          onChanged: (value) {\n            context.read<MyFormBloc>().add(EmailChanged(email: value));\n          },\n          textInputAction: TextInputAction.next,\n        );\n      },\n    );\n  }\n}\n\nclass PasswordInput extends StatelessWidget {\n  const PasswordInput({required this.focusNode, super.key});\n\n  final FocusNode focusNode;\n\n  @override\n  Widget build(BuildContext context) {\n    return BlocBuilder<MyFormBloc, MyFormState>(\n      builder: (context, state) {\n        return TextFormField(\n          initialValue: state.password.value,\n          focusNode: focusNode,\n          decoration: InputDecoration(\n            icon: const Icon(Icons.lock),\n            helperText:\n                '''Password should be at least 8 characters with at least one letter and number''',\n            helperMaxLines: 2,\n            labelText: 'Password',\n            errorMaxLines: 2,\n            errorText: state.password.displayError != null\n                ? '''Password must be at least 8 characters and contain at least one letter and number'''\n                : null,\n          ),\n          obscureText: true,\n          onChanged: (value) {\n            context.read<MyFormBloc>().add(PasswordChanged(password: value));\n          },\n          textInputAction: TextInputAction.done,\n        );\n      },\n    );\n  }\n}\n\nclass SubmitButton extends StatelessWidget {\n  const SubmitButton({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    final isValid = context.select((MyFormBloc bloc) => bloc.state.isValid);\n    return ElevatedButton(\n      onPressed: isValid\n          ? () => context.read<MyFormBloc>().add(FormSubmitted())\n          : null,\n      child: const Text('Submit'),\n    );\n  }\n}\n\nclass SuccessDialog extends StatelessWidget {\n  const SuccessDialog({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return Dialog(\n      shape: RoundedRectangleBorder(\n        borderRadius: BorderRadius.circular(8),\n      ),\n      child: Padding(\n        padding: const EdgeInsets.all(8),\n        child: Column(\n          mainAxisSize: MainAxisSize.min,\n          children: <Widget>[\n            const Row(\n              children: <Widget>[\n                Icon(Icons.info),\n                Flexible(\n                  child: Padding(\n                    padding: EdgeInsets.all(10),\n                    child: Text(\n                      'Form Submitted Successfully!',\n                      softWrap: true,\n                    ),\n                  ),\n                ),\n              ],\n            ),\n            ElevatedButton(\n              child: const Text('OK'),\n              onPressed: () => Navigator.of(context).pop(),\n            ),\n          ],\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_form_validation/models/email.dart",
    "content": "import 'package:formz/formz.dart';\n\nenum EmailValidationError { invalid }\n\nfinal class Email extends FormzInput<String, EmailValidationError> {\n  const Email.pure([super.value = '']) : super.pure();\n  const Email.dirty([super.value = '']) : super.dirty();\n\n  static final _emailRegex = RegExp(\n    r'^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$',\n  );\n\n  @override\n  EmailValidationError? validator(String? value) {\n    return _emailRegex.hasMatch(value ?? '')\n        ? null\n        : EmailValidationError.invalid;\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_form_validation/models/models.dart",
    "content": "export 'email.dart';\nexport 'password.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_form_validation/models/password.dart",
    "content": "import 'package:formz/formz.dart';\n\nenum PasswordValidationError { invalid }\n\nfinal class Password extends FormzInput<String, PasswordValidationError> {\n  const Password.pure([super.value = '']) : super.pure();\n  const Password.dirty([super.value = '']) : super.dirty();\n\n  static final _passwordRegex =\n      RegExp(r'^(?=.*[A-Za-z])(?=.*\\d)[A-Za-z\\d]{8,}$');\n\n  @override\n  PasswordValidationError? validator(String? value) {\n    return _passwordRegex.hasMatch(value ?? '')\n        ? null\n        : PasswordValidationError.invalid;\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_infinite_list/.gitignore",
    "content": "# Miscellaneous\n*.class\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\n\n# IntelliJ related\n*.iml\n*.ipr\n*.iws\n.idea/\n\n# Visual Studio Code related\n.vscode/\n\n# Flutter/Dart/Pub related\n**/doc/api/\n**/ios/Flutter/.last_build_id\n.dart_tool/\n.flutter-plugins\n.flutter-plugins-dependencies\n.packages\n.pub-cache/\n.pub/\n/build/\n\n# Web related\nlib/generated_plugin_registrant.dart\n\n# Symbolication related\napp.*.symbols\n\n# Obfuscation related\napp.*.map.json\n\n# Android Studio will place build artifacts here\n/android/app/debug\n/android/app/profile\n/android/app/release\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_infinite_list/.metadata",
    "content": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrades etc.\n#\n# This file should be version controlled.\n\nversion:\n  revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n  channel: beta\n\nproject_type: app\n\n# Tracks metadata for the flutter migrate command\nmigration:\n  platforms:\n    - platform: root\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: android\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: ios\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: linux\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: macos\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: web\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: windows\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n\n  # User provided section\n\n  # List of Local paths (relative to this file) that should be\n  # ignored by the migrate tool.\n  #\n  # Files that are not part of the templates will be ignored by default.\n  unmanaged_files:\n    - 'lib/main.dart'\n    - 'ios/Runner.xcodeproj/project.pbxproj'\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_infinite_list/app.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_infinite_list/posts/posts.dart';\n\nclass App extends MaterialApp {\n  const App({super.key}) : super(home: const PostsPage());\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_infinite_list/main.dart",
    "content": "import 'package:bloc/bloc.dart';\nimport 'package:flutter/widgets.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_infinite_list/app.dart';\nimport 'package:flutter_infinite_list/simple_bloc_observer.dart';\n\nvoid main() {\n  Bloc.observer = const SimpleBlocObserver();\n  runApp(const App());\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_infinite_list/posts/bloc/post_bloc.dart",
    "content": "import 'dart:async';\nimport 'dart:convert';\n\nimport 'package:bloc/bloc.dart';\nimport 'package:bloc_concurrency/bloc_concurrency.dart';\nimport 'package:equatable/equatable.dart';\nimport 'package:flutter_infinite_list/posts/posts.dart';\nimport 'package:http/http.dart' as http;\nimport 'package:stream_transform/stream_transform.dart';\n\npart 'post_event.dart';\npart 'post_state.dart';\n\nconst _postLimit = 20;\nconst throttleDuration = Duration(milliseconds: 100);\n\nEventTransformer<E> throttleDroppable<E>(Duration duration) {\n  return (events, mapper) {\n    return droppable<E>().call(events.throttle(duration), mapper);\n  };\n}\n\nclass PostBloc extends Bloc<PostEvent, PostState> {\n  PostBloc({required this.httpClient}) : super(const PostState()) {\n    on<PostFetched>(\n      _onPostFetched,\n      transformer: throttleDroppable(throttleDuration),\n    );\n  }\n\n  final http.Client httpClient;\n\n  Future<void> _onPostFetched(\n    PostFetched event,\n    Emitter<PostState> emit,\n  ) async {\n    if (state.hasReachedMax) return;\n    try {\n      if (state.status == PostStatus.initial) {\n        final posts = await _fetchPosts();\n        return emit(\n          state.copyWith(\n            status: PostStatus.success,\n            posts: posts,\n            hasReachedMax: false,\n          ),\n        );\n      }\n      final posts = await _fetchPosts(state.posts.length);\n      posts.isEmpty\n          ? emit(state.copyWith(hasReachedMax: true))\n          : emit(\n              state.copyWith(\n                status: PostStatus.success,\n                posts: List.of(state.posts)..addAll(posts),\n                hasReachedMax: false,\n              ),\n            );\n    } catch (_) {\n      emit(state.copyWith(status: PostStatus.failure));\n    }\n  }\n\n  Future<List<Post>> _fetchPosts([int startIndex = 0]) async {\n    final response = await httpClient.get(\n      Uri.https(\n        'jsonplaceholder.typicode.com',\n        '/posts',\n        <String, String>{'_start': '$startIndex', '_limit': '$_postLimit'},\n      ),\n    );\n    if (response.statusCode == 200) {\n      final body = json.decode(response.body) as List;\n      return body.map((dynamic json) {\n        final map = json as Map<String, dynamic>;\n        return Post(\n          id: map['id'] as int,\n          title: map['title'] as String,\n          body: map['body'] as String,\n        );\n      }).toList();\n    }\n    throw Exception('error fetching posts');\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_infinite_list/posts/bloc/post_event.dart",
    "content": "part of 'post_bloc.dart';\n\nsealed class PostEvent extends Equatable {\n  @override\n  List<Object> get props => [];\n}\n\nfinal class PostFetched extends PostEvent {}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_infinite_list/posts/bloc/post_state.dart",
    "content": "part of 'post_bloc.dart';\n\nenum PostStatus { initial, success, failure }\n\nfinal class PostState extends Equatable {\n  const PostState({\n    this.status = PostStatus.initial,\n    this.posts = const <Post>[],\n    this.hasReachedMax = false,\n  });\n\n  final PostStatus status;\n  final List<Post> posts;\n  final bool hasReachedMax;\n\n  PostState copyWith({\n    PostStatus? status,\n    List<Post>? posts,\n    bool? hasReachedMax,\n  }) {\n    return PostState(\n      status: status ?? this.status,\n      posts: posts ?? this.posts,\n      hasReachedMax: hasReachedMax ?? this.hasReachedMax,\n    );\n  }\n\n  @override\n  String toString() {\n    return '''PostState { status: $status, hasReachedMax: $hasReachedMax, posts: ${posts.length} }''';\n  }\n\n  @override\n  List<Object> get props => [status, posts, hasReachedMax];\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_infinite_list/posts/models/models.dart",
    "content": "export './post.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_infinite_list/posts/models/post.dart",
    "content": "import 'package:equatable/equatable.dart';\n\nfinal class Post extends Equatable {\n  const Post({required this.id, required this.title, required this.body});\n\n  final int id;\n  final String title;\n  final String body;\n\n  @override\n  List<Object> get props => [id, title, body];\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_infinite_list/posts/posts.dart",
    "content": "export 'bloc/post_bloc.dart';\nexport 'models/models.dart';\nexport 'view/view.dart';\nexport 'widgets/widgets.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_infinite_list/posts/view/posts_list.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_infinite_list/posts/posts.dart';\n\nclass PostsList extends StatefulWidget {\n  const PostsList({super.key});\n\n  @override\n  State<PostsList> createState() => _PostsListState();\n}\n\nclass _PostsListState extends State<PostsList> {\n  final _scrollController = ScrollController();\n\n  @override\n  void initState() {\n    super.initState();\n    _scrollController.addListener(_onScroll);\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return BlocBuilder<PostBloc, PostState>(\n      builder: (context, state) {\n        switch (state.status) {\n          case PostStatus.failure:\n            return const Center(child: Text('failed to fetch posts'));\n          case PostStatus.success:\n            if (state.posts.isEmpty) {\n              return const Center(child: Text('no posts'));\n            }\n            return ListView.builder(\n              itemBuilder: (BuildContext context, int index) {\n                return index >= state.posts.length\n                    ? const BottomLoader()\n                    : PostListItem(post: state.posts[index]);\n              },\n              itemCount: state.hasReachedMax\n                  ? state.posts.length\n                  : state.posts.length + 1,\n              controller: _scrollController,\n            );\n          case PostStatus.initial:\n            return const Center(child: CircularProgressIndicator());\n        }\n      },\n    );\n  }\n\n  @override\n  void dispose() {\n    _scrollController\n      ..removeListener(_onScroll)\n      ..dispose();\n    super.dispose();\n  }\n\n  void _onScroll() {\n    if (_isBottom) context.read<PostBloc>().add(PostFetched());\n  }\n\n  bool get _isBottom {\n    if (!_scrollController.hasClients) return false;\n    final maxScroll = _scrollController.position.maxScrollExtent;\n    final currentScroll = _scrollController.offset;\n    return currentScroll >= (maxScroll * 0.9);\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_infinite_list/posts/view/posts_page.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_infinite_list/posts/posts.dart';\nimport 'package:http/http.dart' as http;\n\nclass PostsPage extends StatelessWidget {\n  const PostsPage({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(title: const Text('Posts')),\n      body: BlocProvider(\n        create: (_) => PostBloc(httpClient: http.Client())..add(PostFetched()),\n        child: const PostsList(),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_infinite_list/posts/view/view.dart",
    "content": "export 'posts_list.dart';\nexport 'posts_page.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_infinite_list/posts/widgets/bottom_loader.dart",
    "content": "import 'package:flutter/material.dart';\n\nclass BottomLoader extends StatelessWidget {\n  const BottomLoader({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return const Center(\n      child: SizedBox(\n        height: 24,\n        width: 24,\n        child: CircularProgressIndicator(strokeWidth: 1.5),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_infinite_list/posts/widgets/post_list_item.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_infinite_list/posts/posts.dart';\n\nclass PostListItem extends StatelessWidget {\n  const PostListItem({required this.post, super.key});\n\n  final Post post;\n\n  @override\n  Widget build(BuildContext context) {\n    final textTheme = Theme.of(context).textTheme;\n    return Material(\n      child: ListTile(\n        leading: Text('${post.id}', style: textTheme.bodySmall),\n        title: Text(post.title),\n        isThreeLine: true,\n        subtitle: Text(post.body),\n        dense: true,\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_infinite_list/posts/widgets/widgets.dart",
    "content": "export 'bottom_loader.dart';\nexport 'post_list_item.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_infinite_list/simple_bloc_observer.dart",
    "content": "// ignore_for_file: avoid_print\n\nimport 'package:bloc/bloc.dart';\n\nclass SimpleBlocObserver extends BlocObserver {\n  const SimpleBlocObserver();\n\n  @override\n  void onTransition(\n    Bloc<dynamic, dynamic> bloc,\n    Transition<dynamic, dynamic> transition,\n  ) {\n    super.onTransition(bloc, transition);\n    print(transition);\n  }\n\n  @override\n  void onError(BlocBase<dynamic> bloc, Object error, StackTrace stackTrace) {\n    print(error);\n    super.onError(bloc, error, stackTrace);\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_login/.gitignore",
    "content": "# Miscellaneous\n*.class\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\n\n# IntelliJ related\n*.iml\n*.ipr\n*.iws\n.idea/\n\n# The .vscode folder contains launch configuration and tasks you configure in\n# VS Code which you may wish to be included in version control, so this line\n# is commented out by default.\n#.vscode/\n\n# Flutter/Dart/Pub related\n**/doc/api/\n.dart_tool/\n.flutter-plugins\n.flutter-plugins-dependencies\n.packages\n.pub-cache/\n.pub/\n/build/\n\n# Web related\nlib/generated_plugin_registrant.dart\n\n# Symbolication related\napp.*.symbols\n\n# Obfuscation related\napp.*.map.json\n\n# Exceptions to above rules.\n!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_login/.metadata",
    "content": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrades etc.\n#\n# This file should be version controlled.\n\nversion:\n  revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n  channel: beta\n\nproject_type: app\n\n# Tracks metadata for the flutter migrate command\nmigration:\n  platforms:\n    - platform: root\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: android\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: ios\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: linux\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: macos\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: web\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: windows\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n\n  # User provided section\n\n  # List of Local paths (relative to this file) that should be\n  # ignored by the migrate tool.\n  #\n  # Files that are not part of the templates will be ignored by default.\n  unmanaged_files:\n    - 'lib/main.dart'\n    - 'ios/Runner.xcodeproj/project.pbxproj'\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_login/app.dart",
    "content": "import 'package:authentication_repository/authentication_repository.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_login/authentication/authentication.dart';\nimport 'package:flutter_login/home/home.dart';\nimport 'package:flutter_login/login/login.dart';\nimport 'package:flutter_login/splash/splash.dart';\nimport 'package:user_repository/user_repository.dart';\n\nclass App extends StatefulWidget {\n  const App({super.key});\n\n  @override\n  State<App> createState() => _AppState();\n}\n\nclass _AppState extends State<App> {\n  late final AuthenticationRepository _authenticationRepository;\n  late final UserRepository _userRepository;\n\n  @override\n  void initState() {\n    super.initState();\n    _authenticationRepository = AuthenticationRepository();\n    _userRepository = UserRepository();\n  }\n\n  @override\n  void dispose() {\n    _authenticationRepository.dispose();\n    super.dispose();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return RepositoryProvider.value(\n      value: _authenticationRepository,\n      child: BlocProvider(\n        create: (_) => AuthenticationBloc(\n          authenticationRepository: _authenticationRepository,\n          userRepository: _userRepository,\n        ),\n        child: const AppView(),\n      ),\n    );\n  }\n}\n\nclass AppView extends StatefulWidget {\n  const AppView({super.key});\n\n  @override\n  State<AppView> createState() => _AppViewState();\n}\n\nclass _AppViewState extends State<AppView> {\n  final _navigatorKey = GlobalKey<NavigatorState>();\n\n  NavigatorState get _navigator => _navigatorKey.currentState!;\n\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      navigatorKey: _navigatorKey,\n      builder: (context, child) {\n        return BlocListener<AuthenticationBloc, AuthenticationState>(\n          listener: (context, state) {\n            switch (state.status) {\n              case AuthenticationStatus.authenticated:\n                _navigator.pushAndRemoveUntil<void>(\n                  HomePage.route(),\n                  (route) => false,\n                );\n              case AuthenticationStatus.unauthenticated:\n                _navigator.pushAndRemoveUntil<void>(\n                  LoginPage.route(),\n                  (route) => false,\n                );\n              case AuthenticationStatus.unknown:\n                break;\n            }\n          },\n          child: child,\n        );\n      },\n      onGenerateRoute: (_) => SplashPage.route(),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_login/authentication/authentication.dart",
    "content": "export 'bloc/authentication_bloc.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_login/authentication/bloc/authentication_bloc.dart",
    "content": "import 'dart:async';\n\nimport 'package:authentication_repository/authentication_repository.dart';\nimport 'package:bloc/bloc.dart';\nimport 'package:equatable/equatable.dart';\nimport 'package:user_repository/user_repository.dart';\n\npart 'authentication_event.dart';\npart 'authentication_state.dart';\n\nclass AuthenticationBloc\n    extends Bloc<AuthenticationEvent, AuthenticationState> {\n  AuthenticationBloc({\n    required AuthenticationRepository authenticationRepository,\n    required UserRepository userRepository,\n  })  : _authenticationRepository = authenticationRepository,\n        _userRepository = userRepository,\n        super(const AuthenticationState.unknown()) {\n    on<_AuthenticationStatusChanged>(_onAuthenticationStatusChanged);\n    on<AuthenticationLogoutRequested>(_onAuthenticationLogoutRequested);\n    _authenticationStatusSubscription = _authenticationRepository.status.listen(\n      (status) => add(_AuthenticationStatusChanged(status)),\n    );\n  }\n\n  final AuthenticationRepository _authenticationRepository;\n  final UserRepository _userRepository;\n  late StreamSubscription<AuthenticationStatus>\n      _authenticationStatusSubscription;\n\n  @override\n  Future<void> close() {\n    _authenticationStatusSubscription.cancel();\n    return super.close();\n  }\n\n  Future<void> _onAuthenticationStatusChanged(\n    _AuthenticationStatusChanged event,\n    Emitter<AuthenticationState> emit,\n  ) async {\n    switch (event.status) {\n      case AuthenticationStatus.unauthenticated:\n        return emit(const AuthenticationState.unauthenticated());\n      case AuthenticationStatus.authenticated:\n        final user = await _tryGetUser();\n        return emit(\n          user != null\n              ? AuthenticationState.authenticated(user)\n              : const AuthenticationState.unauthenticated(),\n        );\n      case AuthenticationStatus.unknown:\n        return emit(const AuthenticationState.unknown());\n    }\n  }\n\n  void _onAuthenticationLogoutRequested(\n    AuthenticationLogoutRequested event,\n    Emitter<AuthenticationState> emit,\n  ) {\n    _authenticationRepository.logOut();\n  }\n\n  Future<User?> _tryGetUser() async {\n    try {\n      final user = await _userRepository.getUser();\n      return user;\n    } catch (_) {\n      return null;\n    }\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_login/authentication/bloc/authentication_event.dart",
    "content": "part of 'authentication_bloc.dart';\n\nsealed class AuthenticationEvent {\n  const AuthenticationEvent();\n}\n\nfinal class _AuthenticationStatusChanged extends AuthenticationEvent {\n  const _AuthenticationStatusChanged(this.status);\n\n  final AuthenticationStatus status;\n}\n\nfinal class AuthenticationLogoutRequested extends AuthenticationEvent {}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_login/authentication/bloc/authentication_state.dart",
    "content": "part of 'authentication_bloc.dart';\n\nclass AuthenticationState extends Equatable {\n  const AuthenticationState._({\n    this.status = AuthenticationStatus.unknown,\n    this.user = User.empty,\n  });\n\n  const AuthenticationState.unknown() : this._();\n\n  const AuthenticationState.authenticated(User user)\n      : this._(status: AuthenticationStatus.authenticated, user: user);\n\n  const AuthenticationState.unauthenticated()\n      : this._(status: AuthenticationStatus.unauthenticated);\n\n  final AuthenticationStatus status;\n  final User user;\n\n  @override\n  List<Object> get props => [status, user];\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_login/home/home.dart",
    "content": "export 'view/home_page.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_login/home/view/home_page.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_login/authentication/authentication.dart';\n\nclass HomePage extends StatelessWidget {\n  const HomePage({super.key});\n\n  static Route<void> route() {\n    return MaterialPageRoute<void>(builder: (_) => const HomePage());\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(title: const Text('Home')),\n      body: Center(\n        child: Column(\n          mainAxisSize: MainAxisSize.min,\n          children: <Widget>[\n            Builder(\n              builder: (context) {\n                final userId = context.select(\n                  (AuthenticationBloc bloc) => bloc.state.user.id,\n                );\n                return Text('UserID: $userId');\n              },\n            ),\n            ElevatedButton(\n              child: const Text('Logout'),\n              onPressed: () {\n                context\n                    .read<AuthenticationBloc>()\n                    .add(AuthenticationLogoutRequested());\n              },\n            ),\n          ],\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_login/login/bloc/login_bloc.dart",
    "content": "import 'package:authentication_repository/authentication_repository.dart';\nimport 'package:bloc/bloc.dart';\nimport 'package:equatable/equatable.dart';\nimport 'package:flutter_login/login/login.dart';\nimport 'package:formz/formz.dart';\n\npart 'login_event.dart';\npart 'login_state.dart';\n\nclass LoginBloc extends Bloc<LoginEvent, LoginState> {\n  LoginBloc({\n    required AuthenticationRepository authenticationRepository,\n  })  : _authenticationRepository = authenticationRepository,\n        super(const LoginState()) {\n    on<LoginUsernameChanged>(_onUsernameChanged);\n    on<LoginPasswordChanged>(_onPasswordChanged);\n    on<LoginSubmitted>(_onSubmitted);\n  }\n\n  final AuthenticationRepository _authenticationRepository;\n\n  void _onUsernameChanged(\n    LoginUsernameChanged event,\n    Emitter<LoginState> emit,\n  ) {\n    final username = Username.dirty(event.username);\n    emit(\n      state.copyWith(\n        username: username,\n        isValid: Formz.validate([state.password, username]),\n      ),\n    );\n  }\n\n  void _onPasswordChanged(\n    LoginPasswordChanged event,\n    Emitter<LoginState> emit,\n  ) {\n    final password = Password.dirty(event.password);\n    emit(\n      state.copyWith(\n        password: password,\n        isValid: Formz.validate([password, state.username]),\n      ),\n    );\n  }\n\n  Future<void> _onSubmitted(\n    LoginSubmitted event,\n    Emitter<LoginState> emit,\n  ) async {\n    if (state.isValid) {\n      emit(state.copyWith(status: FormzSubmissionStatus.inProgress));\n      try {\n        await _authenticationRepository.logIn(\n          username: state.username.value,\n          password: state.password.value,\n        );\n        emit(state.copyWith(status: FormzSubmissionStatus.success));\n      } catch (_) {\n        emit(state.copyWith(status: FormzSubmissionStatus.failure));\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_login/login/bloc/login_event.dart",
    "content": "part of 'login_bloc.dart';\n\nsealed class LoginEvent extends Equatable {\n  const LoginEvent();\n\n  @override\n  List<Object> get props => [];\n}\n\nfinal class LoginUsernameChanged extends LoginEvent {\n  const LoginUsernameChanged(this.username);\n\n  final String username;\n\n  @override\n  List<Object> get props => [username];\n}\n\nfinal class LoginPasswordChanged extends LoginEvent {\n  const LoginPasswordChanged(this.password);\n\n  final String password;\n\n  @override\n  List<Object> get props => [password];\n}\n\nfinal class LoginSubmitted extends LoginEvent {\n  const LoginSubmitted();\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_login/login/bloc/login_state.dart",
    "content": "part of 'login_bloc.dart';\n\nfinal class LoginState extends Equatable {\n  const LoginState({\n    this.status = FormzSubmissionStatus.initial,\n    this.username = const Username.pure(),\n    this.password = const Password.pure(),\n    this.isValid = false,\n  });\n\n  final FormzSubmissionStatus status;\n  final Username username;\n  final Password password;\n  final bool isValid;\n\n  LoginState copyWith({\n    FormzSubmissionStatus? status,\n    Username? username,\n    Password? password,\n    bool? isValid,\n  }) {\n    return LoginState(\n      status: status ?? this.status,\n      username: username ?? this.username,\n      password: password ?? this.password,\n      isValid: isValid ?? this.isValid,\n    );\n  }\n\n  @override\n  List<Object> get props => [status, username, password];\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_login/login/login.dart",
    "content": "export 'bloc/login_bloc.dart';\nexport 'models/models.dart';\nexport 'view/view.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_login/login/models/models.dart",
    "content": "export 'password.dart';\nexport 'username.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_login/login/models/password.dart",
    "content": "import 'package:formz/formz.dart';\n\nenum PasswordValidationError { empty }\n\nclass Password extends FormzInput<String, PasswordValidationError> {\n  const Password.pure() : super.pure('');\n  const Password.dirty([super.value = '']) : super.dirty();\n\n  @override\n  PasswordValidationError? validator(String value) {\n    if (value.isEmpty) return PasswordValidationError.empty;\n    return null;\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_login/login/models/username.dart",
    "content": "import 'package:formz/formz.dart';\n\nenum UsernameValidationError { empty }\n\nclass Username extends FormzInput<String, UsernameValidationError> {\n  const Username.pure() : super.pure('');\n  const Username.dirty([super.value = '']) : super.dirty();\n\n  @override\n  UsernameValidationError? validator(String value) {\n    if (value.isEmpty) return UsernameValidationError.empty;\n    return null;\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_login/login/view/login_form.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_login/login/login.dart';\nimport 'package:formz/formz.dart';\n\nclass LoginForm extends StatelessWidget {\n  const LoginForm({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return BlocListener<LoginBloc, LoginState>(\n      listener: (context, state) {\n        if (state.status.isFailure) {\n          ScaffoldMessenger.of(context)\n            ..hideCurrentSnackBar()\n            ..showSnackBar(\n              const SnackBar(content: Text('Authentication Failure')),\n            );\n        }\n      },\n      child: Align(\n        alignment: const Alignment(0, -1 / 3),\n        child: Column(\n          mainAxisSize: MainAxisSize.min,\n          children: [\n            _UsernameInput(),\n            const Padding(padding: EdgeInsets.all(12)),\n            _PasswordInput(),\n            const Padding(padding: EdgeInsets.all(12)),\n            _LoginButton(),\n          ],\n        ),\n      ),\n    );\n  }\n}\n\nclass _UsernameInput extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return BlocBuilder<LoginBloc, LoginState>(\n      buildWhen: (previous, current) => previous.username != current.username,\n      builder: (context, state) {\n        return TextField(\n          key: const Key('loginForm_usernameInput_textField'),\n          onChanged: (username) =>\n              context.read<LoginBloc>().add(LoginUsernameChanged(username)),\n          decoration: InputDecoration(\n            labelText: 'username',\n            errorText:\n                state.username.displayError != null ? 'invalid username' : null,\n          ),\n        );\n      },\n    );\n  }\n}\n\nclass _PasswordInput extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return BlocBuilder<LoginBloc, LoginState>(\n      buildWhen: (previous, current) => previous.password != current.password,\n      builder: (context, state) {\n        return TextField(\n          key: const Key('loginForm_passwordInput_textField'),\n          onChanged: (password) =>\n              context.read<LoginBloc>().add(LoginPasswordChanged(password)),\n          obscureText: true,\n          decoration: InputDecoration(\n            labelText: 'password',\n            errorText:\n                state.password.displayError != null ? 'invalid password' : null,\n          ),\n        );\n      },\n    );\n  }\n}\n\nclass _LoginButton extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return BlocBuilder<LoginBloc, LoginState>(\n      builder: (context, state) {\n        return state.status.isInProgress\n            ? const CircularProgressIndicator()\n            : ElevatedButton(\n                key: const Key('loginForm_continue_raisedButton'),\n                onPressed: state.isValid\n                    ? () {\n                        context.read<LoginBloc>().add(const LoginSubmitted());\n                      }\n                    : null,\n                child: const Text('Login'),\n              );\n      },\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_login/login/view/login_page.dart",
    "content": "import 'package:authentication_repository/authentication_repository.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_login/login/login.dart';\n\nclass LoginPage extends StatelessWidget {\n  const LoginPage({super.key});\n\n  static Route<void> route() {\n    return MaterialPageRoute<void>(builder: (_) => const LoginPage());\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(title: const Text('Login')),\n      body: Padding(\n        padding: const EdgeInsets.all(12),\n        child: BlocProvider(\n          create: (context) {\n            return LoginBloc(\n              authenticationRepository:\n                  RepositoryProvider.of<AuthenticationRepository>(context),\n            );\n          },\n          child: const LoginForm(),\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_login/login/view/view.dart",
    "content": "export 'login_form.dart';\nexport 'login_page.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_login/main.dart",
    "content": "import 'package:flutter/widgets.dart';\nimport 'package:flutter_login/app.dart';\n\nvoid main() => runApp(const App());\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_login/splash/splash.dart",
    "content": "export 'view/splash_page.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_login/splash/view/splash_page.dart",
    "content": "import 'package:flutter/material.dart';\n\nclass SplashPage extends StatelessWidget {\n  const SplashPage({super.key});\n\n  static Route<void> route() {\n    return MaterialPageRoute<void>(builder: (_) => const SplashPage());\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return const Scaffold(\n      body: Center(child: CircularProgressIndicator()),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_shopping_cart/.gitignore",
    "content": "# Miscellaneous\n*.class\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\n\n# IntelliJ related\n*.iml\n*.ipr\n*.iws\n.idea/\n\n# The .vscode folder contains launch configuration and tasks you configure in\n# VS Code which you may wish to be included in version control, so this line\n# is commented out by default.\n#.vscode/\n\n# Flutter/Dart/Pub related\n**/doc/api/\n.dart_tool/\n.flutter-plugins\n.packages\n.pub-cache/\n.pub/\n/build/\n\n# Android related\n**/android/**/gradle-wrapper.jar\n**/android/.gradle\n**/android/captures/\n**/android/gradlew\n**/android/gradlew.bat\n**/android/local.properties\n**/android/**/GeneratedPluginRegistrant.java\n\n# iOS/XCode related\n**/ios/**/*.mode1v3\n**/ios/**/*.mode2v3\n**/ios/**/*.moved-aside\n**/ios/**/*.pbxuser\n**/ios/**/*.perspectivev3\n**/ios/**/*sync/\n**/ios/**/.sconsign.dblite\n**/ios/**/.tags*\n**/ios/**/.vagrant/\n**/ios/**/DerivedData/\n**/ios/**/Icon?\n**/ios/**/Pods/\n**/ios/**/.symlinks/\n**/ios/**/profile\n**/ios/**/xcuserdata\n**/ios/.generated/\n**/ios/Flutter/App.framework\n**/ios/Flutter/Flutter.framework\n**/ios/Flutter/Generated.xcconfig\n**/ios/Flutter/app.flx\n**/ios/Flutter/app.zip\n**/ios/Flutter/flutter_assets/\n**/ios/ServiceDefinitions.json\n**/ios/Runner/GeneratedPluginRegistrant.*\n\n# Exceptions to above rules.\n!**/ios/**/default.mode1v3\n!**/ios/**/default.mode2v3\n!**/ios/**/default.pbxuser\n!**/ios/**/default.perspectivev3\n!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_shopping_cart/.metadata",
    "content": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrades etc.\n#\n# This file should be version controlled.\n\nversion:\n  revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n  channel: beta\n\nproject_type: app\n\n# Tracks metadata for the flutter migrate command\nmigration:\n  platforms:\n    - platform: root\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: android\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: ios\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: linux\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: macos\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: web\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: windows\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n\n  # User provided section\n\n  # List of Local paths (relative to this file) that should be\n  # ignored by the migrate tool.\n  #\n  # Files that are not part of the templates will be ignored by default.\n  unmanaged_files:\n    - 'lib/main.dart'\n    - 'ios/Runner.xcodeproj/project.pbxproj'\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_shopping_cart/app.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_shopping_cart/cart/cart.dart';\nimport 'package:flutter_shopping_cart/catalog/catalog.dart';\nimport 'package:flutter_shopping_cart/shopping_repository.dart';\n\nclass App extends StatelessWidget {\n  const App({required this.shoppingRepository, super.key});\n\n  final ShoppingRepository shoppingRepository;\n\n  @override\n  Widget build(BuildContext context) {\n    return MultiBlocProvider(\n      providers: [\n        BlocProvider(\n          create: (_) => CatalogBloc(\n            shoppingRepository: shoppingRepository,\n          )..add(CatalogStarted()),\n        ),\n        BlocProvider(\n          create: (_) => CartBloc(\n            shoppingRepository: shoppingRepository,\n          )..add(CartStarted()),\n        ),\n      ],\n      child: MaterialApp(\n        title: 'Flutter Bloc Shopping Cart',\n        initialRoute: '/',\n        routes: {\n          '/': (_) => const CatalogPage(),\n          '/cart': (_) => const CartPage(),\n        },\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_shopping_cart/cart/bloc/cart_bloc.dart",
    "content": "import 'package:bloc/bloc.dart';\nimport 'package:equatable/equatable.dart';\nimport 'package:flutter_shopping_cart/cart/cart.dart';\nimport 'package:flutter_shopping_cart/catalog/catalog.dart';\nimport 'package:flutter_shopping_cart/shopping_repository.dart';\nimport 'package:meta/meta.dart';\n\npart 'cart_event.dart';\npart 'cart_state.dart';\n\nclass CartBloc extends Bloc<CartEvent, CartState> {\n  CartBloc({required this.shoppingRepository}) : super(CartLoading()) {\n    on<CartStarted>(_onStarted);\n    on<CartItemAdded>(_onItemAdded);\n    on<CartItemRemoved>(_onItemRemoved);\n  }\n\n  final ShoppingRepository shoppingRepository;\n\n  Future<void> _onStarted(CartStarted event, Emitter<CartState> emit) async {\n    emit(CartLoading());\n    try {\n      final items = await shoppingRepository.loadCartItems();\n      emit(CartLoaded(cart: Cart(items: [...items])));\n    } catch (_) {\n      emit(CartError());\n    }\n  }\n\n  Future<void> _onItemAdded(\n    CartItemAdded event,\n    Emitter<CartState> emit,\n  ) async {\n    final state = this.state;\n    if (state is CartLoaded) {\n      try {\n        shoppingRepository.addItemToCart(event.item);\n        emit(CartLoaded(cart: Cart(items: [...state.cart.items, event.item])));\n      } catch (_) {\n        emit(CartError());\n      }\n    }\n  }\n\n  void _onItemRemoved(CartItemRemoved event, Emitter<CartState> emit) {\n    final state = this.state;\n    if (state is CartLoaded) {\n      try {\n        shoppingRepository.removeItemFromCart(event.item);\n        emit(\n          CartLoaded(\n            cart: Cart(\n              items: [...state.cart.items]..remove(event.item),\n            ),\n          ),\n        );\n      } catch (_) {\n        emit(CartError());\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_shopping_cart/cart/bloc/cart_event.dart",
    "content": "part of 'cart_bloc.dart';\n\n@immutable\nsealed class CartEvent extends Equatable {\n  const CartEvent();\n}\n\nfinal class CartStarted extends CartEvent {\n  @override\n  List<Object> get props => [];\n}\n\nfinal class CartItemAdded extends CartEvent {\n  const CartItemAdded(this.item);\n\n  final Item item;\n\n  @override\n  List<Object> get props => [item];\n}\n\nfinal class CartItemRemoved extends CartEvent {\n  const CartItemRemoved(this.item);\n\n  final Item item;\n\n  @override\n  List<Object> get props => [item];\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_shopping_cart/cart/bloc/cart_state.dart",
    "content": "part of 'cart_bloc.dart';\n\n@immutable\nsealed class CartState extends Equatable {\n  const CartState();\n}\n\nfinal class CartLoading extends CartState {\n  @override\n  List<Object> get props => [];\n}\n\nfinal class CartLoaded extends CartState {\n  const CartLoaded({this.cart = const Cart()});\n\n  final Cart cart;\n\n  @override\n  List<Object> get props => [cart];\n}\n\nfinal class CartError extends CartState {\n  @override\n  List<Object> get props => [];\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_shopping_cart/cart/cart.dart",
    "content": "export 'bloc/cart_bloc.dart';\nexport 'models/models.dart';\nexport 'view/cart_page.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_shopping_cart/cart/models/cart.dart",
    "content": "import 'package:equatable/equatable.dart';\nimport 'package:flutter_shopping_cart/catalog/catalog.dart';\n\nclass Cart extends Equatable {\n  const Cart({this.items = const <Item>[]});\n\n  final List<Item> items;\n\n  int get totalPrice {\n    return items.fold(0, (total, current) => total + current.price);\n  }\n\n  @override\n  List<Object> get props => [items];\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_shopping_cart/cart/models/models.dart",
    "content": "export 'cart.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_shopping_cart/cart/view/cart_page.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_shopping_cart/cart/cart.dart';\n\nclass CartPage extends StatelessWidget {\n  const CartPage({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(title: const Text('Cart')),\n      body: const ColoredBox(\n        color: Colors.yellow,\n        child: Column(\n          children: [\n            Expanded(\n              child: Padding(\n                padding: EdgeInsets.all(32),\n                child: CartList(),\n              ),\n            ),\n            Divider(height: 4, color: Colors.black),\n            CartTotal(),\n          ],\n        ),\n      ),\n    );\n  }\n}\n\nclass CartList extends StatelessWidget {\n  const CartList({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    final itemNameStyle = Theme.of(context).textTheme.titleLarge;\n\n    return BlocBuilder<CartBloc, CartState>(\n      builder: (context, state) {\n        return switch (state) {\n          CartLoading() => const CircularProgressIndicator(),\n          CartError() => const Text('Something went wrong!'),\n          CartLoaded() => ListView.separated(\n              itemCount: state.cart.items.length,\n              separatorBuilder: (_, __) => const SizedBox(height: 4),\n              itemBuilder: (context, index) {\n                final item = state.cart.items[index];\n                return Material(\n                  shape: RoundedRectangleBorder(\n                    borderRadius: BorderRadius.circular(16),\n                  ),\n                  clipBehavior: Clip.hardEdge,\n                  child: ListTile(\n                    leading: const Icon(Icons.done),\n                    title: Text(item.name, style: itemNameStyle),\n                    onLongPress: () {\n                      context.read<CartBloc>().add(CartItemRemoved(item));\n                    },\n                  ),\n                );\n              },\n            ),\n        };\n      },\n    );\n  }\n}\n\nclass CartTotal extends StatelessWidget {\n  const CartTotal({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    final hugeStyle =\n        Theme.of(context).textTheme.displayLarge?.copyWith(fontSize: 48);\n\n    return SizedBox(\n      height: 200,\n      child: Center(\n        child: Column(\n          mainAxisAlignment: MainAxisAlignment.center,\n          children: [\n            BlocBuilder<CartBloc, CartState>(\n              builder: (context, state) {\n                return switch (state) {\n                  CartLoading() => const CircularProgressIndicator(),\n                  CartError() => const Text('Something went wrong!'),\n                  CartLoaded() =>\n                    Text('\\$${state.cart.totalPrice}', style: hugeStyle),\n                };\n              },\n            ),\n            const SizedBox(width: 24),\n            ElevatedButton(\n              onPressed: () {\n                ScaffoldMessenger.of(context).showSnackBar(\n                  const SnackBar(content: Text('Buying not supported yet.')),\n                );\n              },\n              style: ElevatedButton.styleFrom(backgroundColor: Colors.black),\n              child: const Text('BUY'),\n            ),\n          ],\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_shopping_cart/catalog/bloc/catalog_bloc.dart",
    "content": "import 'package:bloc/bloc.dart';\nimport 'package:equatable/equatable.dart';\nimport 'package:flutter_shopping_cart/catalog/catalog.dart';\nimport 'package:flutter_shopping_cart/shopping_repository.dart';\n\npart 'catalog_event.dart';\npart 'catalog_state.dart';\n\nclass CatalogBloc extends Bloc<CatalogEvent, CatalogState> {\n  CatalogBloc({required this.shoppingRepository}) : super(CatalogLoading()) {\n    on<CatalogStarted>(_onStarted);\n  }\n\n  final ShoppingRepository shoppingRepository;\n\n  Future<void> _onStarted(\n    CatalogStarted event,\n    Emitter<CatalogState> emit,\n  ) async {\n    emit(CatalogLoading());\n    try {\n      final catalog = await shoppingRepository.loadCatalog();\n      emit(CatalogLoaded(Catalog(itemNames: catalog)));\n    } catch (_) {\n      emit(CatalogError());\n    }\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_shopping_cart/catalog/bloc/catalog_event.dart",
    "content": "part of 'catalog_bloc.dart';\n\nsealed class CatalogEvent extends Equatable {\n  const CatalogEvent();\n}\n\nfinal class CatalogStarted extends CatalogEvent {\n  @override\n  List<Object> get props => [];\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_shopping_cart/catalog/bloc/catalog_state.dart",
    "content": "part of 'catalog_bloc.dart';\n\nsealed class CatalogState extends Equatable {\n  const CatalogState();\n\n  @override\n  List<Object> get props => [];\n}\n\nfinal class CatalogLoading extends CatalogState {}\n\nfinal class CatalogLoaded extends CatalogState {\n  const CatalogLoaded(this.catalog);\n\n  final Catalog catalog;\n\n  @override\n  List<Object> get props => [catalog];\n}\n\nfinal class CatalogError extends CatalogState {}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_shopping_cart/catalog/catalog.dart",
    "content": "export 'bloc/catalog_bloc.dart';\nexport 'models/models.dart';\nexport 'view/catalog_page.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_shopping_cart/catalog/models/catalog.dart",
    "content": "import 'package:equatable/equatable.dart';\nimport 'package:flutter_shopping_cart/catalog/catalog.dart';\n\nclass Catalog extends Equatable {\n  const Catalog({required this.itemNames});\n\n  final List<String> itemNames;\n\n  Item getById(int id) => Item(id, itemNames[id % itemNames.length]);\n\n  Item getByPosition(int position) => getById(position);\n\n  @override\n  List<Object> get props => [itemNames];\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_shopping_cart/catalog/models/item.dart",
    "content": "import 'package:equatable/equatable.dart';\nimport 'package:flutter/material.dart';\n\nclass Item extends Equatable {\n  Item(this.id, this.name)\n      : color = Colors.primaries[id % Colors.primaries.length];\n\n  final int id;\n  final String name;\n  final Color color;\n  final int price = 42;\n\n  @override\n  List<Object> get props => [id, name, color, price];\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_shopping_cart/catalog/models/models.dart",
    "content": "export 'catalog.dart';\nexport 'item.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_shopping_cart/catalog/view/catalog_page.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_shopping_cart/cart/cart.dart';\nimport 'package:flutter_shopping_cart/catalog/catalog.dart';\n\nclass CatalogPage extends StatelessWidget {\n  const CatalogPage({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      body: CustomScrollView(\n        slivers: [\n          const CatalogAppBar(),\n          const SliverToBoxAdapter(child: SizedBox(height: 12)),\n          BlocBuilder<CatalogBloc, CatalogState>(\n            builder: (context, state) {\n              return switch (state) {\n                CatalogLoading() => const SliverFillRemaining(\n                    child: Center(child: CircularProgressIndicator()),\n                  ),\n                CatalogError() => const SliverFillRemaining(\n                    child: Text('Something went wrong!'),\n                  ),\n                CatalogLoaded() => SliverList(\n                    delegate: SliverChildBuilderDelegate(\n                      (context, index) => CatalogListItem(\n                        state.catalog.getByPosition(index),\n                      ),\n                      childCount: state.catalog.itemNames.length,\n                    ),\n                  )\n              };\n            },\n          ),\n        ],\n      ),\n    );\n  }\n}\n\nclass AddButton extends StatelessWidget {\n  const AddButton({required this.item, super.key});\n\n  final Item item;\n\n  @override\n  Widget build(BuildContext context) {\n    final theme = Theme.of(context);\n    return BlocBuilder<CartBloc, CartState>(\n      builder: (context, state) {\n        return switch (state) {\n          CartLoading() => const CircularProgressIndicator(),\n          CartError() => const Text('Something went wrong!'),\n          CartLoaded() => Builder(\n              builder: (context) {\n                final isInCart = state.cart.items.contains(item);\n                return TextButton(\n                  style: TextButton.styleFrom(\n                    disabledForegroundColor: theme.primaryColor,\n                  ),\n                  onPressed: isInCart\n                      ? null\n                      : () => context.read<CartBloc>().add(CartItemAdded(item)),\n                  child: isInCart\n                      ? const Icon(Icons.check, semanticLabel: 'ADDED')\n                      : const Text('ADD'),\n                );\n              },\n            )\n        };\n      },\n    );\n  }\n}\n\nclass CatalogAppBar extends StatelessWidget {\n  const CatalogAppBar({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return SliverAppBar(\n      title: const Text('Catalog'),\n      floating: true,\n      actions: [\n        IconButton(\n          icon: const Icon(Icons.shopping_cart),\n          onPressed: () => Navigator.of(context).pushNamed('/cart'),\n        ),\n      ],\n    );\n  }\n}\n\nclass CatalogListItem extends StatelessWidget {\n  const CatalogListItem(this.item, {super.key});\n\n  final Item item;\n\n  @override\n  Widget build(BuildContext context) {\n    final textTheme = Theme.of(context).textTheme.titleLarge;\n    return Padding(\n      padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),\n      child: LimitedBox(\n        maxHeight: 48,\n        child: Row(\n          children: [\n            AspectRatio(aspectRatio: 1, child: ColoredBox(color: item.color)),\n            const SizedBox(width: 24),\n            Expanded(child: Text(item.name, style: textTheme)),\n            const SizedBox(width: 24),\n            AddButton(item: item),\n          ],\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_shopping_cart/main.dart",
    "content": "import 'package:flutter/widgets.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_shopping_cart/app.dart';\nimport 'package:flutter_shopping_cart/shopping_repository.dart';\nimport 'package:flutter_shopping_cart/simple_bloc_observer.dart';\n\nvoid main() {\n  Bloc.observer = const SimpleBlocObserver();\n  runApp(App(shoppingRepository: ShoppingRepository()));\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_shopping_cart/shopping_repository.dart",
    "content": "import 'dart:async';\n\nimport 'package:flutter_shopping_cart/catalog/catalog.dart';\n\nconst _delay = Duration(milliseconds: 800);\n\nconst _catalog = [\n  'Code Smell',\n  'Control Flow',\n  'Interpreter',\n  'Recursion',\n  'Sprint',\n  'Heisenbug',\n  'Spaghetti',\n  'Hydra Code',\n  'Off-By-One',\n  'Scope',\n  'Callback',\n  'Closure',\n  'Automata',\n  'Bit Shift',\n  'Currying',\n];\n\nclass ShoppingRepository {\n  final _items = <Item>[];\n\n  Future<List<String>> loadCatalog() => Future.delayed(_delay, () => _catalog);\n\n  Future<List<Item>> loadCartItems() => Future.delayed(_delay, () => _items);\n\n  void addItemToCart(Item item) => _items.add(item);\n\n  void removeItemFromCart(Item item) => _items.remove(item);\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_shopping_cart/simple_bloc_observer.dart",
    "content": "import 'dart:developer';\n\nimport 'package:bloc/bloc.dart';\n\nclass SimpleBlocObserver extends BlocObserver {\n  const SimpleBlocObserver();\n\n  @override\n  void onEvent(Bloc<dynamic, dynamic> bloc, Object? event) {\n    super.onEvent(bloc, event);\n    log('${bloc.runtimeType} $event');\n  }\n\n  @override\n  void onError(BlocBase<dynamic> bloc, Object error, StackTrace stackTrace) {\n    log('${bloc.runtimeType} $error');\n    super.onError(bloc, error, stackTrace);\n  }\n\n  @override\n  void onTransition(\n    Bloc<dynamic, dynamic> bloc,\n    Transition<dynamic, dynamic> transition,\n  ) {\n    super.onTransition(bloc, transition);\n    log('$transition');\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_timer/.gitignore",
    "content": "# Miscellaneous\n*.class\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\n\n# IntelliJ related\n*.iml\n*.ipr\n*.iws\n.idea/\n\n# Visual Studio Code related\n.vscode/\n\n# Flutter/Dart/Pub related\n**/doc/api/\n**/ios/Flutter/.last_build_id\n.dart_tool/\n.flutter-plugins\n.flutter-plugins-dependencies\n.packages\n.pub-cache/\n.pub/\n/build/\n\n# Web related\nlib/generated_plugin_registrant.dart\n\n# Symbolication related\napp.*.symbols\n\n# Obfuscation related\napp.*.map.json\n\n# Android Studio will place build artifacts here\n/android/app/debug\n/android/app/profile\n/android/app/release\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_timer/.metadata",
    "content": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrades etc.\n#\n# This file should be version controlled.\n\nversion:\n  revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n  channel: beta\n\nproject_type: app\n\n# Tracks metadata for the flutter migrate command\nmigration:\n  platforms:\n    - platform: root\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: android\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: ios\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: linux\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: macos\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: web\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: windows\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n\n  # User provided section\n\n  # List of Local paths (relative to this file) that should be\n  # ignored by the migrate tool.\n  #\n  # Files that are not part of the templates will be ignored by default.\n  unmanaged_files:\n    - 'lib/main.dart'\n    - 'ios/Runner.xcodeproj/project.pbxproj'\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_timer/app.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_timer/timer/timer.dart';\n\nclass App extends StatelessWidget {\n  const App({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      title: 'Flutter Timer',\n      theme: ThemeData(\n        primaryColor: const Color.fromRGBO(109, 234, 255, 1),\n        colorScheme: const ColorScheme.light(\n          secondary: Color.fromRGBO(72, 74, 126, 1),\n        ),\n      ),\n      home: const TimerPage(),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_timer/main.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_timer/app.dart';\n\nvoid main() => runApp(const App());\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_timer/ticker.dart",
    "content": "class Ticker {\n  const Ticker();\n  Stream<int> tick({required int ticks}) {\n    return Stream.periodic(const Duration(seconds: 1), (x) => ticks - x - 1)\n        .take(ticks);\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_timer/timer/bloc/timer_bloc.dart",
    "content": "import 'dart:async';\n\nimport 'package:bloc/bloc.dart';\nimport 'package:equatable/equatable.dart';\nimport 'package:flutter_timer/ticker.dart';\n\npart 'timer_event.dart';\npart 'timer_state.dart';\n\nclass TimerBloc extends Bloc<TimerEvent, TimerState> {\n  TimerBloc({required Ticker ticker})\n      : _ticker = ticker,\n        super(const TimerInitial(_duration)) {\n    on<TimerStarted>(_onStarted);\n    on<TimerPaused>(_onPaused);\n    on<TimerResumed>(_onResumed);\n    on<TimerReset>(_onReset);\n    on<_TimerTicked>(_onTicked);\n  }\n\n  final Ticker _ticker;\n  static const int _duration = 60;\n\n  StreamSubscription<int>? _tickerSubscription;\n\n  @override\n  Future<void> close() {\n    _tickerSubscription?.cancel();\n    return super.close();\n  }\n\n  void _onStarted(TimerStarted event, Emitter<TimerState> emit) {\n    emit(TimerRunInProgress(event.duration));\n    _tickerSubscription?.cancel();\n    _tickerSubscription = _ticker\n        .tick(ticks: event.duration)\n        .listen((duration) => add(_TimerTicked(duration: duration)));\n  }\n\n  void _onPaused(TimerPaused event, Emitter<TimerState> emit) {\n    if (state is TimerRunInProgress) {\n      _tickerSubscription?.pause();\n      emit(TimerRunPause(state.duration));\n    }\n  }\n\n  void _onResumed(TimerResumed resume, Emitter<TimerState> emit) {\n    if (state is TimerRunPause) {\n      _tickerSubscription?.resume();\n      emit(TimerRunInProgress(state.duration));\n    }\n  }\n\n  void _onReset(TimerReset event, Emitter<TimerState> emit) {\n    _tickerSubscription?.cancel();\n    emit(const TimerInitial(_duration));\n  }\n\n  void _onTicked(_TimerTicked event, Emitter<TimerState> emit) {\n    emit(\n      event.duration > 0\n          ? TimerRunInProgress(event.duration)\n          : const TimerRunComplete(),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_timer/timer/bloc/timer_event.dart",
    "content": "part of 'timer_bloc.dart';\n\nsealed class TimerEvent {\n  const TimerEvent();\n}\n\nfinal class TimerStarted extends TimerEvent {\n  const TimerStarted({required this.duration});\n  final int duration;\n}\n\nfinal class TimerPaused extends TimerEvent {\n  const TimerPaused();\n}\n\nfinal class TimerResumed extends TimerEvent {\n  const TimerResumed();\n}\n\nclass TimerReset extends TimerEvent {\n  const TimerReset();\n}\n\nclass _TimerTicked extends TimerEvent {\n  const _TimerTicked({required this.duration});\n  final int duration;\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_timer/timer/bloc/timer_state.dart",
    "content": "part of 'timer_bloc.dart';\n\nsealed class TimerState extends Equatable {\n  const TimerState(this.duration);\n  final int duration;\n\n  @override\n  List<Object> get props => [duration];\n}\n\nfinal class TimerInitial extends TimerState {\n  const TimerInitial(super.duration);\n\n  @override\n  String toString() => 'TimerInitial { duration: $duration }';\n}\n\nfinal class TimerRunPause extends TimerState {\n  const TimerRunPause(super.duration);\n\n  @override\n  String toString() => 'TimerRunPause { duration: $duration }';\n}\n\nfinal class TimerRunInProgress extends TimerState {\n  const TimerRunInProgress(super.duration);\n\n  @override\n  String toString() => 'TimerRunInProgress { duration: $duration }';\n}\n\nfinal class TimerRunComplete extends TimerState {\n  const TimerRunComplete() : super(0);\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_timer/timer/timer.dart",
    "content": "export 'bloc/timer_bloc.dart';\nexport 'view/timer_page.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_timer/timer/view/timer_page.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_timer/ticker.dart';\nimport 'package:flutter_timer/timer/timer.dart';\n\nclass TimerPage extends StatelessWidget {\n  const TimerPage({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return BlocProvider(\n      create: (_) => TimerBloc(ticker: const Ticker()),\n      child: const TimerView(),\n    );\n  }\n}\n\nclass TimerView extends StatelessWidget {\n  const TimerView({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(title: const Text('Flutter Timer')),\n      body: const Stack(\n        children: [\n          Background(),\n          Column(\n            mainAxisAlignment: MainAxisAlignment.center,\n            children: <Widget>[\n              Padding(\n                padding: EdgeInsets.symmetric(vertical: 100),\n                child: Center(child: TimerText()),\n              ),\n              Actions(),\n            ],\n          ),\n        ],\n      ),\n    );\n  }\n}\n\nclass TimerText extends StatelessWidget {\n  const TimerText({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    final duration = context.select((TimerBloc bloc) => bloc.state.duration);\n    final minutesStr =\n        ((duration / 60) % 60).floor().toString().padLeft(2, '0');\n    final secondsStr = (duration % 60).toString().padLeft(2, '0');\n    return Text(\n      '$minutesStr:$secondsStr',\n      style: Theme.of(context).textTheme.displayLarge,\n    );\n  }\n}\n\nclass Actions extends StatelessWidget {\n  const Actions({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return BlocBuilder<TimerBloc, TimerState>(\n      buildWhen: (prev, state) => prev.runtimeType != state.runtimeType,\n      builder: (context, state) {\n        return Row(\n          mainAxisAlignment: MainAxisAlignment.spaceEvenly,\n          children: [\n            ...switch (state) {\n              TimerInitial() => [\n                  FloatingActionButton(\n                    child: const Icon(Icons.play_arrow),\n                    onPressed: () => context\n                        .read<TimerBloc>()\n                        .add(TimerStarted(duration: state.duration)),\n                  ),\n                ],\n              TimerRunInProgress() => [\n                  FloatingActionButton(\n                    child: const Icon(Icons.pause),\n                    onPressed: () =>\n                        context.read<TimerBloc>().add(const TimerPaused()),\n                  ),\n                  FloatingActionButton(\n                    child: const Icon(Icons.replay),\n                    onPressed: () =>\n                        context.read<TimerBloc>().add(const TimerReset()),\n                  ),\n                ],\n              TimerRunPause() => [\n                  FloatingActionButton(\n                    child: const Icon(Icons.play_arrow),\n                    onPressed: () =>\n                        context.read<TimerBloc>().add(const TimerResumed()),\n                  ),\n                  FloatingActionButton(\n                    child: const Icon(Icons.replay),\n                    onPressed: () =>\n                        context.read<TimerBloc>().add(const TimerReset()),\n                  ),\n                ],\n              TimerRunComplete() => [\n                  FloatingActionButton(\n                    child: const Icon(Icons.replay),\n                    onPressed: () =>\n                        context.read<TimerBloc>().add(const TimerReset()),\n                  ),\n                ]\n            },\n          ],\n        );\n      },\n    );\n  }\n}\n\nclass Background extends StatelessWidget {\n  const Background({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return SizedBox.expand(\n      child: DecoratedBox(\n        decoration: BoxDecoration(\n          gradient: LinearGradient(\n            begin: Alignment.topCenter,\n            end: Alignment.bottomCenter,\n            colors: [\n              Colors.blue.shade50,\n              Colors.blue.shade500,\n            ],\n          ),\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/.gitignore",
    "content": "# Miscellaneous\n*.class\n*.lock\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\n\n# IntelliJ related\n*.iml\n*.ipr\n*.iws\n.idea/*\n\n# Visual Studio Code related\n.classpath\n.project\n.settings/\n.vscode/*\n\n# Flutter repo-specific\n/bin/cache/\n/bin/mingit/\n/dev/benchmarks/mega_gallery/\n/dev/bots/.recipe_deps\n/dev/bots/android_tools/\n/dev/docs/doc/\n/dev/docs/flutter.docs.zip\n/dev/docs/lib/\n/dev/docs/pubspec.yaml\n/dev/integration_tests/**/xcuserdata\n/dev/integration_tests/**/Pods\n/packages/flutter/coverage/\nversion\n\n# packages file containing multi-root paths\n.packages.generated\n\n# Flutter/Dart/Pub related\n**/doc/api/\n**/ios/Flutter/.last_build_id\n.dart_tool/\n.flutter-plugins\n.flutter-plugins-dependencies\n.packages\n.pub-cache/\n.pub/\nbuild/\nflutter_*.png\nlinked_*.ds\nunlinked.ds\nunlinked_spec.ds\n.fvm/\n\n# Android related\n**/android/**/gradle-wrapper.jar\n**/android/.gradle\n**/android/captures/\n**/android/gradlew\n**/android/gradlew.bat\n**/android/local.properties\n**/android/**/GeneratedPluginRegistrant.java\n**/android/key.properties\n**/android/.idea/\n*.jks\n\n# iOS/XCode related\n**/ios/**/*.mode1v3\n**/ios/**/*.mode2v3\n**/ios/**/*.moved-aside\n**/ios/**/*.pbxuser\n**/ios/**/*.perspectivev3\n**/ios/**/*sync/\n**/ios/**/.sconsign.dblite\n**/ios/**/.tags*\n**/ios/**/.vagrant/\n**/ios/**/DerivedData/\n**/ios/**/Icon?\n**/ios/**/Pods/\n**/ios/**/.symlinks/\n**/ios/**/profile\n**/ios/**/xcuserdata\n**/ios/.generated/\n**/ios/Flutter/App.framework\n**/ios/Flutter/Flutter.framework\n**/ios/Flutter/Flutter.podspec\n**/ios/Flutter/Generated.xcconfig\n**/ios/Flutter/app.flx\n**/ios/Flutter/app.zip\n**/ios/Flutter/.last_build_id\n**/ios/Flutter/flutter_assets/\n**/ios/Flutter/flutter_export_environment.sh\n**/ios/ServiceDefinitions.json\n**/ios/Runner/GeneratedPluginRegistrant.*\n\n# Coverage\ncoverage/\n\n# Submodules\n!pubspec.lock\npackages/**/pubspec.lock\n\n# Web related\nlib/generated_plugin_registrant.dart\n\n# Symbolication related\napp.*.symbols\n\n# Obfuscation related\napp.*.map.json\n\n# Exceptions to the above rules.\n!**/ios/**/default.mode1v3\n!**/ios/**/default.mode2v3\n!**/ios/**/default.pbxuser\n!**/ios/**/default.perspectivev3\n!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages\n!/dev/ci/**/Gemfile.lock\n!.vscode/extensions.json\n!.vscode/launch.json\n!.idea/codeStyles/\n!.idea/dictionaries/\n!.idea/runConfigurations/\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/.metadata",
    "content": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrades etc.\n#\n# This file should be version controlled.\n\nversion:\n  revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n  channel: beta\n\nproject_type: app\n\n# Tracks metadata for the flutter migrate command\nmigration:\n  platforms:\n    - platform: root\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: android\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: ios\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: web\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n\n  # User provided section\n\n  # List of Local paths (relative to this file) that should be\n  # ignored by the migrate tool.\n  #\n  # Files that are not part of the templates will be ignored by default.\n  unmanaged_files:\n    - 'lib/main.dart'\n    - 'ios/Runner.xcodeproj/project.pbxproj'\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/.vscode/launch.json",
    "content": "{\n  // Use IntelliSense to learn about possible attributes.\n  // Hover to view descriptions of existing attributes.\n  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387\n  \"version\": \"0.2.0\",\n  \"configurations\": [\n    {\n      \"name\": \"Launch development\",\n      \"request\": \"launch\",\n      \"type\": \"dart\",\n      \"program\": \"lib/main_development.dart\",\n      \"args\": [\n        \"--flavor\",\n        \"development\",\n        \"--target\",\n        \"lib/main_development.dart\"\n      ]\n    },\n    {\n      \"name\": \"Launch staging\",\n      \"request\": \"launch\",\n      \"type\": \"dart\",\n      \"program\": \"lib/main_staging.dart\",\n      \"args\": [\"--flavor\", \"staging\", \"--target\", \"lib/main_staging.dart\"]\n    },\n    {\n      \"name\": \"Launch production\",\n      \"request\": \"launch\",\n      \"type\": \"dart\",\n      \"program\": \"lib/main_production.dart\",\n      \"args\": [\"--flavor\", \"production\", \"--target\", \"lib/main_production.dart\"]\n    }\n  ]\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/app/app.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_todos/home/home.dart';\nimport 'package:flutter_todos/l10n/l10n.dart';\nimport 'package:flutter_todos/theme/theme.dart';\nimport 'package:todos_repository/todos_repository.dart';\n\nclass App extends StatelessWidget {\n  const App({required this.todosRepository, super.key});\n\n  final TodosRepository todosRepository;\n\n  @override\n  Widget build(BuildContext context) {\n    return RepositoryProvider.value(\n      value: todosRepository,\n      child: const AppView(),\n    );\n  }\n}\n\nclass AppView extends StatelessWidget {\n  const AppView({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      theme: FlutterTodosTheme.light,\n      darkTheme: FlutterTodosTheme.dark,\n      localizationsDelegates: AppLocalizations.localizationsDelegates,\n      supportedLocales: AppLocalizations.supportedLocales,\n      home: const HomePage(),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/app/app_bloc_observer.dart",
    "content": "import 'dart:developer';\n\nimport 'package:bloc/bloc.dart';\n\nclass AppBlocObserver extends BlocObserver {\n  const AppBlocObserver();\n\n  @override\n  void onChange(BlocBase<dynamic> bloc, Change<dynamic> change) {\n    super.onChange(bloc, change);\n    log('onChange(${bloc.runtimeType}, $change)');\n  }\n\n  @override\n  void onError(BlocBase<dynamic> bloc, Object error, StackTrace stackTrace) {\n    log('onError(${bloc.runtimeType}, $error, $stackTrace)');\n    super.onError(bloc, error, stackTrace);\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/bootstrap.dart",
    "content": "import 'dart:async';\nimport 'dart:developer';\n\nimport 'package:bloc/bloc.dart';\nimport 'package:flutter/widgets.dart';\nimport 'package:flutter_todos/app/app.dart';\nimport 'package:flutter_todos/app/app_bloc_observer.dart';\nimport 'package:todos_api/todos_api.dart';\nimport 'package:todos_repository/todos_repository.dart';\n\nvoid bootstrap({required TodosApi todosApi}) {\n  FlutterError.onError = (details) {\n    log(details.exceptionAsString(), stackTrace: details.stack);\n  };\n\n  Bloc.observer = const AppBlocObserver();\n\n  final todosRepository = TodosRepository(todosApi: todosApi);\n\n  runZonedGuarded(\n    () => runApp(App(todosRepository: todosRepository)),\n    (error, stackTrace) => log(error.toString(), stackTrace: stackTrace),\n  );\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/edit_todo/bloc/edit_todo_bloc.dart",
    "content": "import 'package:bloc/bloc.dart';\nimport 'package:equatable/equatable.dart';\nimport 'package:todos_repository/todos_repository.dart';\n\npart 'edit_todo_event.dart';\npart 'edit_todo_state.dart';\n\nclass EditTodoBloc extends Bloc<EditTodoEvent, EditTodoState> {\n  EditTodoBloc({\n    required TodosRepository todosRepository,\n    required Todo? initialTodo,\n  })  : _todosRepository = todosRepository,\n        super(\n          EditTodoState(\n            initialTodo: initialTodo,\n            title: initialTodo?.title ?? '',\n            description: initialTodo?.description ?? '',\n          ),\n        ) {\n    on<EditTodoTitleChanged>(_onTitleChanged);\n    on<EditTodoDescriptionChanged>(_onDescriptionChanged);\n    on<EditTodoSubmitted>(_onSubmitted);\n  }\n\n  final TodosRepository _todosRepository;\n\n  void _onTitleChanged(\n    EditTodoTitleChanged event,\n    Emitter<EditTodoState> emit,\n  ) {\n    emit(state.copyWith(title: event.title));\n  }\n\n  void _onDescriptionChanged(\n    EditTodoDescriptionChanged event,\n    Emitter<EditTodoState> emit,\n  ) {\n    emit(state.copyWith(description: event.description));\n  }\n\n  Future<void> _onSubmitted(\n    EditTodoSubmitted event,\n    Emitter<EditTodoState> emit,\n  ) async {\n    emit(state.copyWith(status: EditTodoStatus.loading));\n    final todo = (state.initialTodo ?? Todo(title: '')).copyWith(\n      title: state.title,\n      description: state.description,\n    );\n\n    try {\n      await _todosRepository.saveTodo(todo);\n      emit(state.copyWith(status: EditTodoStatus.success));\n    } catch (e) {\n      emit(state.copyWith(status: EditTodoStatus.failure));\n    }\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/edit_todo/bloc/edit_todo_event.dart",
    "content": "part of 'edit_todo_bloc.dart';\n\nsealed class EditTodoEvent extends Equatable {\n  const EditTodoEvent();\n\n  @override\n  List<Object> get props => [];\n}\n\nfinal class EditTodoTitleChanged extends EditTodoEvent {\n  const EditTodoTitleChanged(this.title);\n\n  final String title;\n\n  @override\n  List<Object> get props => [title];\n}\n\nfinal class EditTodoDescriptionChanged extends EditTodoEvent {\n  const EditTodoDescriptionChanged(this.description);\n\n  final String description;\n\n  @override\n  List<Object> get props => [description];\n}\n\nfinal class EditTodoSubmitted extends EditTodoEvent {\n  const EditTodoSubmitted();\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/edit_todo/bloc/edit_todo_state.dart",
    "content": "part of 'edit_todo_bloc.dart';\n\nenum EditTodoStatus { initial, loading, success, failure }\n\nextension EditTodoStatusX on EditTodoStatus {\n  bool get isLoadingOrSuccess => [\n        EditTodoStatus.loading,\n        EditTodoStatus.success,\n      ].contains(this);\n}\n\nfinal class EditTodoState extends Equatable {\n  const EditTodoState({\n    this.status = EditTodoStatus.initial,\n    this.initialTodo,\n    this.title = '',\n    this.description = '',\n  });\n\n  final EditTodoStatus status;\n  final Todo? initialTodo;\n  final String title;\n  final String description;\n\n  bool get isNewTodo => initialTodo == null;\n\n  EditTodoState copyWith({\n    EditTodoStatus? status,\n    Todo? initialTodo,\n    String? title,\n    String? description,\n  }) {\n    return EditTodoState(\n      status: status ?? this.status,\n      initialTodo: initialTodo ?? this.initialTodo,\n      title: title ?? this.title,\n      description: description ?? this.description,\n    );\n  }\n\n  @override\n  List<Object?> get props => [status, initialTodo, title, description];\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/edit_todo/edit_todo.dart",
    "content": "export 'bloc/edit_todo_bloc.dart';\nexport 'view/view.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/edit_todo/view/edit_todo_page.dart",
    "content": "import 'package:flutter/cupertino.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter/services.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_todos/edit_todo/edit_todo.dart';\nimport 'package:flutter_todos/l10n/l10n.dart';\nimport 'package:todos_repository/todos_repository.dart';\n\nclass EditTodoPage extends StatelessWidget {\n  const EditTodoPage({super.key});\n\n  static Route<void> route({Todo? initialTodo}) {\n    return MaterialPageRoute(\n      fullscreenDialog: true,\n      builder: (context) => BlocProvider(\n        create: (context) => EditTodoBloc(\n          todosRepository: context.read<TodosRepository>(),\n          initialTodo: initialTodo,\n        ),\n        child: const EditTodoPage(),\n      ),\n    );\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return BlocListener<EditTodoBloc, EditTodoState>(\n      listenWhen: (previous, current) =>\n          previous.status != current.status &&\n          current.status == EditTodoStatus.success,\n      listener: (context, state) => Navigator.of(context).pop(),\n      child: const EditTodoView(),\n    );\n  }\n}\n\nclass EditTodoView extends StatelessWidget {\n  const EditTodoView({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    final l10n = context.l10n;\n    final status = context.select((EditTodoBloc bloc) => bloc.state.status);\n    final isNewTodo = context.select(\n      (EditTodoBloc bloc) => bloc.state.isNewTodo,\n    );\n    final theme = Theme.of(context);\n    final floatingActionButtonTheme = theme.floatingActionButtonTheme;\n    final fabBackgroundColor = floatingActionButtonTheme.backgroundColor ??\n        theme.colorScheme.secondary;\n\n    return Scaffold(\n      appBar: AppBar(\n        title: Text(\n          isNewTodo\n              ? l10n.editTodoAddAppBarTitle\n              : l10n.editTodoEditAppBarTitle,\n        ),\n      ),\n      floatingActionButton: FloatingActionButton(\n        tooltip: l10n.editTodoSaveButtonTooltip,\n        shape: const ContinuousRectangleBorder(\n          borderRadius: BorderRadius.all(Radius.circular(32)),\n        ),\n        backgroundColor: status.isLoadingOrSuccess\n            ? fabBackgroundColor.withOpacity(0.5)\n            : fabBackgroundColor,\n        onPressed: status.isLoadingOrSuccess\n            ? null\n            : () => context.read<EditTodoBloc>().add(const EditTodoSubmitted()),\n        child: status.isLoadingOrSuccess\n            ? const CupertinoActivityIndicator()\n            : const Icon(Icons.check_rounded),\n      ),\n      body: const CupertinoScrollbar(\n        child: SingleChildScrollView(\n          child: Padding(\n            padding: EdgeInsets.all(16),\n            child: Column(\n              children: [_TitleField(), _DescriptionField()],\n            ),\n          ),\n        ),\n      ),\n    );\n  }\n}\n\nclass _TitleField extends StatelessWidget {\n  const _TitleField();\n\n  @override\n  Widget build(BuildContext context) {\n    final l10n = context.l10n;\n    final state = context.watch<EditTodoBloc>().state;\n    final hintText = state.initialTodo?.title ?? '';\n\n    return TextFormField(\n      key: const Key('editTodoView_title_textFormField'),\n      initialValue: state.title,\n      decoration: InputDecoration(\n        enabled: !state.status.isLoadingOrSuccess,\n        labelText: l10n.editTodoTitleLabel,\n        hintText: hintText,\n      ),\n      maxLength: 50,\n      inputFormatters: [\n        LengthLimitingTextInputFormatter(50),\n        FilteringTextInputFormatter.allow(RegExp(r'[a-zA-Z0-9\\s]')),\n      ],\n      onChanged: (value) {\n        context.read<EditTodoBloc>().add(EditTodoTitleChanged(value));\n      },\n    );\n  }\n}\n\nclass _DescriptionField extends StatelessWidget {\n  const _DescriptionField();\n\n  @override\n  Widget build(BuildContext context) {\n    final l10n = context.l10n;\n\n    final state = context.watch<EditTodoBloc>().state;\n    final hintText = state.initialTodo?.description ?? '';\n\n    return TextFormField(\n      key: const Key('editTodoView_description_textFormField'),\n      initialValue: state.description,\n      decoration: InputDecoration(\n        enabled: !state.status.isLoadingOrSuccess,\n        labelText: l10n.editTodoDescriptionLabel,\n        hintText: hintText,\n      ),\n      maxLength: 300,\n      maxLines: 7,\n      inputFormatters: [\n        LengthLimitingTextInputFormatter(300),\n      ],\n      onChanged: (value) {\n        context.read<EditTodoBloc>().add(EditTodoDescriptionChanged(value));\n      },\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/edit_todo/view/view.dart",
    "content": "export 'edit_todo_page.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/generated_plugin_registrant.dart",
    "content": "//\n// Generated file. Do not edit.\n//\n\n// ignore_for_file: directives_ordering\n// ignore_for_file: lines_longer_than_80_chars\n// ignore_for_file: depend_on_referenced_packages\n\nimport 'package:shared_preferences_web/shared_preferences_web.dart';\n\nimport 'package:flutter_web_plugins/flutter_web_plugins.dart';\n\n// ignore: public_member_api_docs\nvoid registerPlugins(Registrar registrar) {\n  SharedPreferencesPlugin.registerWith(registrar);\n  registrar.registerMessageHandler();\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/home/cubit/home_cubit.dart",
    "content": "import 'package:bloc/bloc.dart';\nimport 'package:equatable/equatable.dart';\n\npart 'home_state.dart';\n\nclass HomeCubit extends Cubit<HomeState> {\n  HomeCubit() : super(const HomeState());\n\n  void setTab(HomeTab tab) => emit(HomeState(tab: tab));\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/home/cubit/home_state.dart",
    "content": "part of 'home_cubit.dart';\n\nenum HomeTab { todos, stats }\n\nfinal class HomeState extends Equatable {\n  const HomeState({\n    this.tab = HomeTab.todos,\n  });\n\n  final HomeTab tab;\n\n  @override\n  List<Object> get props => [tab];\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/home/home.dart",
    "content": "export 'cubit/home_cubit.dart';\nexport 'view/view.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/home/view/home_page.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_todos/edit_todo/edit_todo.dart';\nimport 'package:flutter_todos/home/home.dart';\nimport 'package:flutter_todos/stats/stats.dart';\nimport 'package:flutter_todos/todos_overview/todos_overview.dart';\n\nclass HomePage extends StatelessWidget {\n  const HomePage({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return BlocProvider(\n      create: (_) => HomeCubit(),\n      child: const HomeView(),\n    );\n  }\n}\n\nclass HomeView extends StatelessWidget {\n  const HomeView({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    final selectedTab = context.select((HomeCubit cubit) => cubit.state.tab);\n\n    return Scaffold(\n      body: IndexedStack(\n        index: selectedTab.index,\n        children: const [TodosOverviewPage(), StatsPage()],\n      ),\n      floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,\n      floatingActionButton: FloatingActionButton(\n        key: const Key('homeView_addTodo_floatingActionButton'),\n        onPressed: () => Navigator.of(context).push(EditTodoPage.route()),\n        child: const Icon(Icons.add),\n      ),\n      bottomNavigationBar: BottomAppBar(\n        shape: const CircularNotchedRectangle(),\n        child: Row(\n          mainAxisAlignment: MainAxisAlignment.spaceEvenly,\n          children: [\n            _HomeTabButton(\n              groupValue: selectedTab,\n              value: HomeTab.todos,\n              icon: const Icon(Icons.list_rounded),\n            ),\n            _HomeTabButton(\n              groupValue: selectedTab,\n              value: HomeTab.stats,\n              icon: const Icon(Icons.show_chart_rounded),\n            ),\n          ],\n        ),\n      ),\n    );\n  }\n}\n\nclass _HomeTabButton extends StatelessWidget {\n  const _HomeTabButton({\n    required this.groupValue,\n    required this.value,\n    required this.icon,\n  });\n\n  final HomeTab groupValue;\n  final HomeTab value;\n  final Widget icon;\n\n  @override\n  Widget build(BuildContext context) {\n    return IconButton(\n      onPressed: () => context.read<HomeCubit>().setTab(value),\n      iconSize: 32,\n      color:\n          groupValue != value ? null : Theme.of(context).colorScheme.secondary,\n      icon: icon,\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/home/view/view.dart",
    "content": "export 'home_page.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/l10n/arb/app_en.arb",
    "content": "{\n  \"@@locale\": \"en\",\n  \"todosOverviewAppBarTitle\": \"Flutter Todos\",\n  \"@todosOverviewAppBarTitle\": {\n    \"description\": \"Title text shown in the AppBar of the Todos Overview Page\"\n  },\n  \"todosOverviewFilterTooltip\": \"Filter\",\n  \"@todosOverviewFilterTooltip\": {\n    \"description\": \"Tooltip text shown in the filter dropdown of the Todos Overview Page\"\n  },\n  \"todosOverviewFilterAll\": \"All\",\n  \"@todosOverviewFilterAll\": {\n    \"description\": \"Text shown in the filter dropdown of the Todos Overview Page for the option to display all todos\"\n  },\n  \"todosOverviewFilterActiveOnly\": \"Active only\",\n  \"@todosOverviewFilterActiveOnly\": {\n    \"description\": \"Text shown in the filter dropdown of the Todos Overview Page for the option to display active todos only\"\n  },\n  \"todosOverviewFilterCompletedOnly\": \"Completed only\",\n  \"@todosOverviewFilterCompletedOnly\": {\n    \"description\": \"Text shown in the filter dropdown of the Todos Overview Page for the option to display completed todos only\"\n  },\n  \"todosOverviewMarkAllCompleteButtonText\": \"Mark all complete\",\n  \"@todosOverviewMarkAllCompleteButtonText\": {\n    \"description\": \"Button text shown in the options dropdown of the Todos Overview Page that marks all current todos as complete\"\n  },\n  \"todosOverviewClearCompletedButtonText\": \"Clear completed\",\n  \"@todosOverviewClearCompletedButtonText\": {\n    \"description\": \"Button text shown in the options dropdown of the Todos Overview Page that deletes all completed todos\"\n  },\n  \"todosOverviewEmptyText\": \"No todos found with the selected filters.\",\n  \"@todosOverviewEmptyText\": {\n    \"description\": \"Text shown in the Todos Overview Page when no todos are found with the selected filters\"\n  },\n  \"todosOverviewTodoDeletedSnackbarText\": \"Todo \\\"{todoTitle}\\\" deleted.\",\n  \"@todosOverviewTodoDeletedSnackbarText\": {\n    \"description\": \"Snackbar text shown when a todo is deleted from the Todos Overview Page\",\n    \"placeholders\": {\n      \"todoTitle\": {\n        \"description\": \"The title of the todo that was deleted\"\n      }\n    }\n  },\n  \"todosOverviewUndoDeletionButtonText\": \"Undo\",\n  \"@todosOverviewUndoDeletionButtonText\": {\n    \"description\": \"Button text shown in the snackbar that undoes a deletion of a todo\"\n  },\n  \"todosOverviewErrorSnackbarText\": \"An error occurred while loading todos.\",\n  \"@todosOverviewErrorSnackbarText\": {\n    \"description\": \"Snackbar text shown when an error occurs while loading todos\"\n  },\n  \"todosOverviewOptionsTooltip\": \"Options\",\n  \"@todosOverviewOptionsTooltip\": {\n    \"description\": \"Tooltip text shown in the options dropdown of the Todos Overview Page\"\n  },\n  \"todosOverviewOptionsMarkAllComplete\": \"Mark all as completed\",\n  \"@todosOverviewOptionsMarkAllComplete\": {\n    \"description\": \"Button text shown in the options dropdown of the Todos Overview Page that marks all todos as complete\"\n  },\n  \"todosOverviewOptionsMarkAllIncomplete\": \"Mark all as incomplete\",\n  \"@todosOverviewOptionsMarkAllIncomplete\": {\n    \"description\": \"Button text shown in the options dropdown of the Todos Overview Page that marks all todos as incomplete\"\n  },\n  \"todosOverviewOptionsClearCompleted\": \"Clear completed\",\n  \"@todosOverviewOptionsClearCompleted\": {\n    \"description\": \"Button text shown in the options dropdown of the Todos Overview Page that deletes all completed todos\"\n  },\n  \"todoDetailsAppBarTitle\": \"Todo Details\",\n  \"@todoDetailsAppBarTitle\": {\n    \"description\": \"Title text shown in the AppBar of the Todo Details Page\"\n  },\n  \"todoDetailsDeleteButtonTooltip\": \"Delete\",\n  \"@todoDetailsDeleteButtonTooltip\": {\n    \"description\": \"Tooltip text shown in the delete button on the Todo Details Page\"\n  },\n  \"todoDetailsEditButtonTooltip\": \"Edit\",\n  \"@todoDetailsEditButtonTooltip\": {\n    \"description\": \"Tooltip text shown in the edit button on the Todo Details Page\"\n  },\n  \"editTodoEditAppBarTitle\": \"Edit Todo\",\n  \"@editTodoEditAppBarTitle\": {\n    \"description\": \"Title text shown in the AppBar of the Todo Edit Page when editing an existing todo\"\n  },\n  \"editTodoAddAppBarTitle\": \"Add Todo\",\n  \"@editTodoAddAppBarTitle\": {\n    \"description\": \"Title text shown in the AppBar of the Todo Edit Page when adding a new todo\"\n  },\n  \"editTodoTitleLabel\": \"Title\",\n  \"@editTodoTitleLabel\": {\n    \"description\": \"Label text shown in the title input field of the Todo Edit Page\"\n  },\n  \"editTodoDescriptionLabel\": \"Description\",\n  \"@editTodoDescriptionLabel\": {\n    \"description\": \"Label text shown in the description input field of the Todo Edit Page\"\n  },\n  \"editTodoSaveButtonTooltip\": \"Save changes\",\n  \"@editTodoSaveButtonTooltip\": {\n    \"description\": \"Tooltip text shown in the save button on the Todo Edit Page\"\n  },\n  \"statsAppBarTitle\": \"Stats\",\n  \"@statsAppBarTitle\": {\n    \"description\": \"Title text shown in the AppBar of the Stats Page\"\n  },\n  \"statsCompletedTodoCountLabel\": \"Completed todos\",\n  \"@statsCompletedTodoCountLabel\": {\n    \"description\": \"Label text shown in the completed todos count section of the Stats Page\"\n  },\n  \"statsActiveTodoCountLabel\": \"Active todos\",\n  \"@statsActiveTodoCountLabel\": {\n    \"description\": \"Label text shown in the active todos count section of the Stats Page\"\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/l10n/l10n.dart",
    "content": "import 'package:flutter/widgets.dart';\nimport 'package:flutter_gen/gen_l10n/app_localizations.dart';\n\nexport 'package:flutter_gen/gen_l10n/app_localizations.dart';\n\nextension AppLocalizationsX on BuildContext {\n  AppLocalizations get l10n => AppLocalizations.of(this);\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/main_development.dart",
    "content": "import 'package:flutter/widgets.dart';\nimport 'package:flutter_todos/bootstrap.dart';\nimport 'package:local_storage_todos_api/local_storage_todos_api.dart';\n\nFuture<void> main() async {\n  WidgetsFlutterBinding.ensureInitialized();\n\n  final todosApi = LocalStorageTodosApi(\n    plugin: await SharedPreferences.getInstance(),\n  );\n\n  bootstrap(todosApi: todosApi);\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/main_production.dart",
    "content": "import 'package:flutter/widgets.dart';\nimport 'package:flutter_todos/bootstrap.dart';\nimport 'package:local_storage_todos_api/local_storage_todos_api.dart';\n\nFuture<void> main() async {\n  WidgetsFlutterBinding.ensureInitialized();\n\n  final todosApi = LocalStorageTodosApi(\n    plugin: await SharedPreferences.getInstance(),\n  );\n\n  bootstrap(todosApi: todosApi);\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/main_staging.dart",
    "content": "import 'package:flutter/widgets.dart';\nimport 'package:flutter_todos/bootstrap.dart';\nimport 'package:local_storage_todos_api/local_storage_todos_api.dart';\n\nFuture<void> main() async {\n  WidgetsFlutterBinding.ensureInitialized();\n\n  final todosApi = LocalStorageTodosApi(\n    plugin: await SharedPreferences.getInstance(),\n  );\n\n  bootstrap(todosApi: todosApi);\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/stats/bloc/stats_bloc.dart",
    "content": "import 'package:bloc/bloc.dart';\nimport 'package:equatable/equatable.dart';\nimport 'package:todos_repository/todos_repository.dart';\n\npart 'stats_event.dart';\npart 'stats_state.dart';\n\nclass StatsBloc extends Bloc<StatsEvent, StatsState> {\n  StatsBloc({\n    required TodosRepository todosRepository,\n  })  : _todosRepository = todosRepository,\n        super(const StatsState()) {\n    on<StatsSubscriptionRequested>(_onSubscriptionRequested);\n  }\n\n  final TodosRepository _todosRepository;\n\n  Future<void> _onSubscriptionRequested(\n    StatsSubscriptionRequested event,\n    Emitter<StatsState> emit,\n  ) async {\n    emit(state.copyWith(status: StatsStatus.loading));\n\n    await emit.forEach<List<Todo>>(\n      _todosRepository.getTodos(),\n      onData: (todos) => state.copyWith(\n        status: StatsStatus.success,\n        completedTodos: todos.where((todo) => todo.isCompleted).length,\n        activeTodos: todos.where((todo) => !todo.isCompleted).length,\n      ),\n      onError: (_, __) => state.copyWith(status: StatsStatus.failure),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/stats/bloc/stats_event.dart",
    "content": "part of 'stats_bloc.dart';\n\nsealed class StatsEvent extends Equatable {\n  const StatsEvent();\n\n  @override\n  List<Object> get props => [];\n}\n\nfinal class StatsSubscriptionRequested extends StatsEvent {\n  const StatsSubscriptionRequested();\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/stats/bloc/stats_state.dart",
    "content": "part of 'stats_bloc.dart';\n\nenum StatsStatus { initial, loading, success, failure }\n\nfinal class StatsState extends Equatable {\n  const StatsState({\n    this.status = StatsStatus.initial,\n    this.completedTodos = 0,\n    this.activeTodos = 0,\n  });\n\n  final StatsStatus status;\n  final int completedTodos;\n  final int activeTodos;\n\n  @override\n  List<Object> get props => [status, completedTodos, activeTodos];\n\n  StatsState copyWith({\n    StatsStatus? status,\n    int? completedTodos,\n    int? activeTodos,\n  }) {\n    return StatsState(\n      status: status ?? this.status,\n      completedTodos: completedTodos ?? this.completedTodos,\n      activeTodos: activeTodos ?? this.activeTodos,\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/stats/stats.dart",
    "content": "export 'bloc/stats_bloc.dart';\nexport 'view/view.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/stats/view/stats_page.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_todos/l10n/l10n.dart';\nimport 'package:flutter_todos/stats/stats.dart';\nimport 'package:todos_repository/todos_repository.dart';\n\nclass StatsPage extends StatelessWidget {\n  const StatsPage({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return BlocProvider(\n      create: (context) => StatsBloc(\n        todosRepository: context.read<TodosRepository>(),\n      )..add(const StatsSubscriptionRequested()),\n      child: const StatsView(),\n    );\n  }\n}\n\nclass StatsView extends StatelessWidget {\n  const StatsView({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    final l10n = context.l10n;\n    final state = context.watch<StatsBloc>().state;\n    final textTheme = Theme.of(context).textTheme;\n\n    return Scaffold(\n      appBar: AppBar(\n        title: Text(l10n.statsAppBarTitle),\n      ),\n      body: Column(\n        mainAxisAlignment: MainAxisAlignment.center,\n        children: [\n          ListTile(\n            key: const Key('statsView_completedTodos_listTile'),\n            leading: const Icon(Icons.check_rounded),\n            title: Text(l10n.statsCompletedTodoCountLabel),\n            trailing: Text(\n              '${state.completedTodos}',\n              style: textTheme.headlineSmall,\n            ),\n          ),\n          ListTile(\n            key: const Key('statsView_activeTodos_listTile'),\n            leading: const Icon(Icons.radio_button_unchecked_rounded),\n            title: Text(l10n.statsActiveTodoCountLabel),\n            trailing: Text(\n              '${state.activeTodos}',\n              style: textTheme.headlineSmall,\n            ),\n          ),\n        ],\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/stats/view/view.dart",
    "content": "export 'stats_page.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/theme/theme.dart",
    "content": "import 'package:flutter/material.dart';\n\nclass FlutterTodosTheme {\n  static ThemeData get light {\n    return ThemeData(\n      appBarTheme: const AppBarTheme(\n        color: Color(0xFF13B9FF),\n      ),\n      colorScheme: ColorScheme.fromSwatch(\n        accentColor: const Color(0xFF13B9FF),\n      ),\n      snackBarTheme: const SnackBarThemeData(\n        behavior: SnackBarBehavior.floating,\n      ),\n    );\n  }\n\n  static ThemeData get dark {\n    return ThemeData(\n      appBarTheme: const AppBarTheme(\n        color: Color(0xFF13B9FF),\n      ),\n      colorScheme: ColorScheme.fromSwatch(\n        brightness: Brightness.dark,\n        accentColor: const Color(0xFF13B9FF),\n      ),\n      snackBarTheme: const SnackBarThemeData(\n        behavior: SnackBarBehavior.floating,\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/todos_overview/bloc/todos_overview_bloc.dart",
    "content": "import 'package:bloc/bloc.dart';\nimport 'package:equatable/equatable.dart';\nimport 'package:flutter_todos/todos_overview/todos_overview.dart';\nimport 'package:todos_repository/todos_repository.dart';\n\npart 'todos_overview_event.dart';\npart 'todos_overview_state.dart';\n\nclass TodosOverviewBloc extends Bloc<TodosOverviewEvent, TodosOverviewState> {\n  TodosOverviewBloc({\n    required TodosRepository todosRepository,\n  })  : _todosRepository = todosRepository,\n        super(const TodosOverviewState()) {\n    on<TodosOverviewSubscriptionRequested>(_onSubscriptionRequested);\n    on<TodosOverviewTodoCompletionToggled>(_onTodoCompletionToggled);\n    on<TodosOverviewTodoDeleted>(_onTodoDeleted);\n    on<TodosOverviewUndoDeletionRequested>(_onUndoDeletionRequested);\n    on<TodosOverviewFilterChanged>(_onFilterChanged);\n    on<TodosOverviewToggleAllRequested>(_onToggleAllRequested);\n    on<TodosOverviewClearCompletedRequested>(_onClearCompletedRequested);\n  }\n\n  final TodosRepository _todosRepository;\n\n  Future<void> _onSubscriptionRequested(\n    TodosOverviewSubscriptionRequested event,\n    Emitter<TodosOverviewState> emit,\n  ) async {\n    emit(state.copyWith(status: () => TodosOverviewStatus.loading));\n\n    await emit.forEach<List<Todo>>(\n      _todosRepository.getTodos(),\n      onData: (todos) => state.copyWith(\n        status: () => TodosOverviewStatus.success,\n        todos: () => todos,\n      ),\n      onError: (_, __) => state.copyWith(\n        status: () => TodosOverviewStatus.failure,\n      ),\n    );\n  }\n\n  Future<void> _onTodoCompletionToggled(\n    TodosOverviewTodoCompletionToggled event,\n    Emitter<TodosOverviewState> emit,\n  ) async {\n    final newTodo = event.todo.copyWith(isCompleted: event.isCompleted);\n    await _todosRepository.saveTodo(newTodo);\n  }\n\n  Future<void> _onTodoDeleted(\n    TodosOverviewTodoDeleted event,\n    Emitter<TodosOverviewState> emit,\n  ) async {\n    emit(state.copyWith(lastDeletedTodo: () => event.todo));\n    await _todosRepository.deleteTodo(event.todo.id);\n  }\n\n  Future<void> _onUndoDeletionRequested(\n    TodosOverviewUndoDeletionRequested event,\n    Emitter<TodosOverviewState> emit,\n  ) async {\n    assert(\n      state.lastDeletedTodo != null,\n      'Last deleted todo can not be null.',\n    );\n\n    final todo = state.lastDeletedTodo!;\n    emit(state.copyWith(lastDeletedTodo: () => null));\n    await _todosRepository.saveTodo(todo);\n  }\n\n  void _onFilterChanged(\n    TodosOverviewFilterChanged event,\n    Emitter<TodosOverviewState> emit,\n  ) {\n    emit(state.copyWith(filter: () => event.filter));\n  }\n\n  Future<void> _onToggleAllRequested(\n    TodosOverviewToggleAllRequested event,\n    Emitter<TodosOverviewState> emit,\n  ) async {\n    final areAllCompleted = state.todos.every((todo) => todo.isCompleted);\n    await _todosRepository.completeAll(isCompleted: !areAllCompleted);\n  }\n\n  Future<void> _onClearCompletedRequested(\n    TodosOverviewClearCompletedRequested event,\n    Emitter<TodosOverviewState> emit,\n  ) async {\n    await _todosRepository.clearCompleted();\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/todos_overview/bloc/todos_overview_event.dart",
    "content": "part of 'todos_overview_bloc.dart';\n\nsealed class TodosOverviewEvent extends Equatable {\n  const TodosOverviewEvent();\n\n  @override\n  List<Object> get props => [];\n}\n\nfinal class TodosOverviewSubscriptionRequested extends TodosOverviewEvent {\n  const TodosOverviewSubscriptionRequested();\n}\n\nfinal class TodosOverviewTodoCompletionToggled extends TodosOverviewEvent {\n  const TodosOverviewTodoCompletionToggled({\n    required this.todo,\n    required this.isCompleted,\n  });\n\n  final Todo todo;\n  final bool isCompleted;\n\n  @override\n  List<Object> get props => [todo, isCompleted];\n}\n\nfinal class TodosOverviewTodoDeleted extends TodosOverviewEvent {\n  const TodosOverviewTodoDeleted(this.todo);\n\n  final Todo todo;\n\n  @override\n  List<Object> get props => [todo];\n}\n\nfinal class TodosOverviewUndoDeletionRequested extends TodosOverviewEvent {\n  const TodosOverviewUndoDeletionRequested();\n}\n\nclass TodosOverviewFilterChanged extends TodosOverviewEvent {\n  const TodosOverviewFilterChanged(this.filter);\n\n  final TodosViewFilter filter;\n\n  @override\n  List<Object> get props => [filter];\n}\n\nclass TodosOverviewToggleAllRequested extends TodosOverviewEvent {\n  const TodosOverviewToggleAllRequested();\n}\n\nclass TodosOverviewClearCompletedRequested extends TodosOverviewEvent {\n  const TodosOverviewClearCompletedRequested();\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/todos_overview/bloc/todos_overview_state.dart",
    "content": "part of 'todos_overview_bloc.dart';\n\nenum TodosOverviewStatus { initial, loading, success, failure }\n\nfinal class TodosOverviewState extends Equatable {\n  const TodosOverviewState({\n    this.status = TodosOverviewStatus.initial,\n    this.todos = const [],\n    this.filter = TodosViewFilter.all,\n    this.lastDeletedTodo,\n  });\n\n  final TodosOverviewStatus status;\n  final List<Todo> todos;\n  final TodosViewFilter filter;\n  final Todo? lastDeletedTodo;\n\n  Iterable<Todo> get filteredTodos => filter.applyAll(todos);\n\n  TodosOverviewState copyWith({\n    TodosOverviewStatus Function()? status,\n    List<Todo> Function()? todos,\n    TodosViewFilter Function()? filter,\n    Todo? Function()? lastDeletedTodo,\n  }) {\n    return TodosOverviewState(\n      status: status != null ? status() : this.status,\n      todos: todos != null ? todos() : this.todos,\n      filter: filter != null ? filter() : this.filter,\n      lastDeletedTodo:\n          lastDeletedTodo != null ? lastDeletedTodo() : this.lastDeletedTodo,\n    );\n  }\n\n  @override\n  List<Object?> get props => [\n        status,\n        todos,\n        filter,\n        lastDeletedTodo,\n      ];\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/todos_overview/models/models.dart",
    "content": "export 'todos_view_filter.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/todos_overview/models/todos_view_filter.dart",
    "content": "import 'package:todos_repository/todos_repository.dart';\n\nenum TodosViewFilter { all, activeOnly, completedOnly }\n\nextension TodosViewFilterX on TodosViewFilter {\n  bool apply(Todo todo) {\n    switch (this) {\n      case TodosViewFilter.all:\n        return true;\n      case TodosViewFilter.activeOnly:\n        return !todo.isCompleted;\n      case TodosViewFilter.completedOnly:\n        return todo.isCompleted;\n    }\n  }\n\n  Iterable<Todo> applyAll(Iterable<Todo> todos) {\n    return todos.where(apply);\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/todos_overview/todos_overview.dart",
    "content": "export 'bloc/todos_overview_bloc.dart';\nexport 'models/models.dart';\nexport 'view/view.dart';\nexport 'widgets/widgets.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/todos_overview/view/todos_overview_page.dart",
    "content": "import 'package:flutter/cupertino.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_todos/edit_todo/view/edit_todo_page.dart';\nimport 'package:flutter_todos/l10n/l10n.dart';\nimport 'package:flutter_todos/todos_overview/todos_overview.dart';\nimport 'package:todos_repository/todos_repository.dart';\n\nclass TodosOverviewPage extends StatelessWidget {\n  const TodosOverviewPage({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return BlocProvider(\n      create: (context) => TodosOverviewBloc(\n        todosRepository: context.read<TodosRepository>(),\n      )..add(const TodosOverviewSubscriptionRequested()),\n      child: const TodosOverviewView(),\n    );\n  }\n}\n\nclass TodosOverviewView extends StatelessWidget {\n  const TodosOverviewView({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    final l10n = context.l10n;\n\n    return Scaffold(\n      appBar: AppBar(\n        title: Text(l10n.todosOverviewAppBarTitle),\n        actions: const [\n          TodosOverviewFilterButton(),\n          TodosOverviewOptionsButton(),\n        ],\n      ),\n      body: MultiBlocListener(\n        listeners: [\n          BlocListener<TodosOverviewBloc, TodosOverviewState>(\n            listenWhen: (previous, current) =>\n                previous.status != current.status,\n            listener: (context, state) {\n              if (state.status == TodosOverviewStatus.failure) {\n                ScaffoldMessenger.of(context)\n                  ..hideCurrentSnackBar()\n                  ..showSnackBar(\n                    SnackBar(\n                      content: Text(l10n.todosOverviewErrorSnackbarText),\n                    ),\n                  );\n              }\n            },\n          ),\n          BlocListener<TodosOverviewBloc, TodosOverviewState>(\n            listenWhen: (previous, current) =>\n                previous.lastDeletedTodo != current.lastDeletedTodo &&\n                current.lastDeletedTodo != null,\n            listener: (context, state) {\n              final deletedTodo = state.lastDeletedTodo!;\n              final messenger = ScaffoldMessenger.of(context);\n              messenger\n                ..hideCurrentSnackBar()\n                ..showSnackBar(\n                  SnackBar(\n                    content: Text(\n                      l10n.todosOverviewTodoDeletedSnackbarText(\n                        deletedTodo.title,\n                      ),\n                    ),\n                    action: SnackBarAction(\n                      label: l10n.todosOverviewUndoDeletionButtonText,\n                      onPressed: () {\n                        messenger.hideCurrentSnackBar();\n                        context\n                            .read<TodosOverviewBloc>()\n                            .add(const TodosOverviewUndoDeletionRequested());\n                      },\n                    ),\n                  ),\n                );\n            },\n          ),\n        ],\n        child: BlocBuilder<TodosOverviewBloc, TodosOverviewState>(\n          builder: (context, state) {\n            if (state.todos.isEmpty) {\n              if (state.status == TodosOverviewStatus.loading) {\n                return const Center(child: CupertinoActivityIndicator());\n              } else if (state.status != TodosOverviewStatus.success) {\n                return const SizedBox();\n              } else {\n                return Center(\n                  child: Text(\n                    l10n.todosOverviewEmptyText,\n                    style: Theme.of(context).textTheme.bodySmall,\n                  ),\n                );\n              }\n            }\n\n            return CupertinoScrollbar(\n              child: ListView(\n                children: [\n                  for (final todo in state.filteredTodos)\n                    TodoListTile(\n                      todo: todo,\n                      onToggleCompleted: (isCompleted) {\n                        context.read<TodosOverviewBloc>().add(\n                              TodosOverviewTodoCompletionToggled(\n                                todo: todo,\n                                isCompleted: isCompleted,\n                              ),\n                            );\n                      },\n                      onDismissed: (_) {\n                        context\n                            .read<TodosOverviewBloc>()\n                            .add(TodosOverviewTodoDeleted(todo));\n                      },\n                      onTap: () {\n                        Navigator.of(context).push(\n                          EditTodoPage.route(initialTodo: todo),\n                        );\n                      },\n                    ),\n                ],\n              ),\n            );\n          },\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/todos_overview/view/view.dart",
    "content": "export 'todos_overview_page.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/todos_overview/widgets/todo_list_tile.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:todos_repository/todos_repository.dart';\n\nclass TodoListTile extends StatelessWidget {\n  const TodoListTile({\n    required this.todo,\n    super.key,\n    this.onToggleCompleted,\n    this.onDismissed,\n    this.onTap,\n  });\n\n  final Todo todo;\n  final ValueChanged<bool>? onToggleCompleted;\n  final DismissDirectionCallback? onDismissed;\n  final VoidCallback? onTap;\n\n  @override\n  Widget build(BuildContext context) {\n    final theme = Theme.of(context);\n    final captionColor = theme.textTheme.bodySmall?.color;\n\n    return Dismissible(\n      key: Key('todoListTile_dismissible_${todo.id}'),\n      onDismissed: onDismissed,\n      direction: DismissDirection.endToStart,\n      background: Container(\n        alignment: Alignment.centerRight,\n        color: theme.colorScheme.error,\n        padding: const EdgeInsets.symmetric(horizontal: 16),\n        child: const Icon(\n          Icons.delete,\n          color: Color(0xAAFFFFFF),\n        ),\n      ),\n      child: ListTile(\n        onTap: onTap,\n        title: Text(\n          todo.title,\n          maxLines: 1,\n          overflow: TextOverflow.ellipsis,\n          style: !todo.isCompleted\n              ? null\n              : TextStyle(\n                  color: captionColor,\n                  decoration: TextDecoration.lineThrough,\n                ),\n        ),\n        subtitle: Text(\n          todo.description,\n          maxLines: 1,\n          overflow: TextOverflow.ellipsis,\n        ),\n        leading: Checkbox(\n          shape: const ContinuousRectangleBorder(\n            borderRadius: BorderRadius.all(Radius.circular(8)),\n          ),\n          value: todo.isCompleted,\n          onChanged: onToggleCompleted == null\n              ? null\n              : (value) => onToggleCompleted!(value!),\n        ),\n        trailing: onTap == null ? null : const Icon(Icons.chevron_right),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/todos_overview/widgets/todos_overview_filter_button.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_todos/l10n/l10n.dart';\nimport 'package:flutter_todos/todos_overview/todos_overview.dart';\n\nclass TodosOverviewFilterButton extends StatelessWidget {\n  const TodosOverviewFilterButton({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    final l10n = context.l10n;\n\n    final activeFilter =\n        context.select((TodosOverviewBloc bloc) => bloc.state.filter);\n\n    return PopupMenuButton<TodosViewFilter>(\n      shape: const ContinuousRectangleBorder(\n        borderRadius: BorderRadius.all(Radius.circular(16)),\n      ),\n      initialValue: activeFilter,\n      tooltip: l10n.todosOverviewFilterTooltip,\n      onSelected: (filter) {\n        context\n            .read<TodosOverviewBloc>()\n            .add(TodosOverviewFilterChanged(filter));\n      },\n      itemBuilder: (context) {\n        return [\n          PopupMenuItem(\n            value: TodosViewFilter.all,\n            child: Text(l10n.todosOverviewFilterAll),\n          ),\n          PopupMenuItem(\n            value: TodosViewFilter.activeOnly,\n            child: Text(l10n.todosOverviewFilterActiveOnly),\n          ),\n          PopupMenuItem(\n            value: TodosViewFilter.completedOnly,\n            child: Text(l10n.todosOverviewFilterCompletedOnly),\n          ),\n        ];\n      },\n      icon: const Icon(Icons.filter_list_rounded),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/todos_overview/widgets/todos_overview_options_button.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_todos/l10n/l10n.dart';\nimport 'package:flutter_todos/todos_overview/todos_overview.dart';\n\n@visibleForTesting\nenum TodosOverviewOption { toggleAll, clearCompleted }\n\nclass TodosOverviewOptionsButton extends StatelessWidget {\n  const TodosOverviewOptionsButton({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    final l10n = context.l10n;\n\n    final todos = context.select((TodosOverviewBloc bloc) => bloc.state.todos);\n    final hasTodos = todos.isNotEmpty;\n    final completedTodosAmount = todos.where((todo) => todo.isCompleted).length;\n\n    return PopupMenuButton<TodosOverviewOption>(\n      shape: const ContinuousRectangleBorder(\n        borderRadius: BorderRadius.all(Radius.circular(16)),\n      ),\n      tooltip: l10n.todosOverviewOptionsTooltip,\n      onSelected: (options) {\n        switch (options) {\n          case TodosOverviewOption.toggleAll:\n            context\n                .read<TodosOverviewBloc>()\n                .add(const TodosOverviewToggleAllRequested());\n          case TodosOverviewOption.clearCompleted:\n            context\n                .read<TodosOverviewBloc>()\n                .add(const TodosOverviewClearCompletedRequested());\n        }\n      },\n      itemBuilder: (context) {\n        return [\n          PopupMenuItem(\n            value: TodosOverviewOption.toggleAll,\n            enabled: hasTodos,\n            child: Text(\n              completedTodosAmount == todos.length\n                  ? l10n.todosOverviewOptionsMarkAllIncomplete\n                  : l10n.todosOverviewOptionsMarkAllComplete,\n            ),\n          ),\n          PopupMenuItem(\n            value: TodosOverviewOption.clearCompleted,\n            enabled: hasTodos && completedTodosAmount > 0,\n            child: Text(l10n.todosOverviewOptionsClearCompleted),\n          ),\n        ];\n      },\n      icon: const Icon(Icons.more_vert_rounded),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_todos/todos_overview/widgets/widgets.dart",
    "content": "export 'todo_list_tile.dart';\nexport 'todos_overview_filter_button.dart';\nexport 'todos_overview_options_button.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_weather/.gitignore",
    "content": "# Miscellaneous\n*.class\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\n\n# IntelliJ related\n*.iml\n*.ipr\n*.iws\n.idea/\n\n# Visual Studio Code related\n.vscode/\n\n# Flutter/Dart/Pub related\n**/doc/api/\n**/ios/Flutter/.last_build_id\n.dart_tool/\n.flutter-plugins\n.flutter-plugins-dependencies\n.packages\n.pub-cache/\n.pub/\n/build/\n\n# Web related\nlib/generated_plugin_registrant.dart\n\n# Symbolication related\napp.*.symbols\n\n# Obfuscation related\napp.*.map.json\n\n# Android Studio will place build artifacts here\n/android/app/debug\n/android/app/profile\n/android/app/release\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_weather/.metadata",
    "content": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrades etc.\n#\n# This file should be version controlled.\n\nversion:\n  revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n  channel: beta\n\nproject_type: app\n\n# Tracks metadata for the flutter migrate command\nmigration:\n  platforms:\n    - platform: root\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: android\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: ios\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: linux\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: macos\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: web\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: windows\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n\n  # User provided section\n\n  # List of Local paths (relative to this file) that should be\n  # ignored by the migrate tool.\n  #\n  # Files that are not part of the templates will be ignored by default.\n  unmanaged_files:\n    - 'lib/main.dart'\n    - 'ios/Runner.xcodeproj/project.pbxproj'\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_weather/app.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_weather/theme/theme.dart';\nimport 'package:flutter_weather/weather/weather.dart';\nimport 'package:google_fonts/google_fonts.dart';\nimport 'package:weather_repository/weather_repository.dart';\n\nclass WeatherApp extends StatelessWidget {\n  const WeatherApp({required WeatherRepository weatherRepository, super.key})\n      : _weatherRepository = weatherRepository;\n\n  final WeatherRepository _weatherRepository;\n\n  @override\n  Widget build(BuildContext context) {\n    return RepositoryProvider.value(\n      value: _weatherRepository,\n      child: BlocProvider(\n        create: (_) => ThemeCubit(),\n        child: const WeatherAppView(),\n      ),\n    );\n  }\n}\n\nclass WeatherAppView extends StatelessWidget {\n  const WeatherAppView({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    final textTheme = Theme.of(context).textTheme;\n    return BlocBuilder<ThemeCubit, Color>(\n      builder: (context, color) {\n        return MaterialApp(\n          theme: ThemeData(\n            primaryColor: color,\n            textTheme: GoogleFonts.rajdhaniTextTheme(),\n            appBarTheme: AppBarTheme(\n              titleTextStyle: GoogleFonts.rajdhaniTextTheme(textTheme)\n                  .apply(bodyColor: Colors.white)\n                  .titleLarge,\n            ),\n          ),\n          home: const WeatherPage(),\n        );\n      },\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_weather/main.dart",
    "content": "import 'package:flutter/foundation.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_weather/app.dart';\nimport 'package:flutter_weather/weather_bloc_observer.dart';\nimport 'package:hydrated_bloc/hydrated_bloc.dart';\nimport 'package:path_provider/path_provider.dart';\nimport 'package:weather_repository/weather_repository.dart';\n\nvoid main() async {\n  WidgetsFlutterBinding.ensureInitialized();\n  Bloc.observer = const WeatherBlocObserver();\n  HydratedBloc.storage = await HydratedStorage.build(\n    storageDirectory: kIsWeb\n        ? HydratedStorage.webStorageDirectory\n        : await getTemporaryDirectory(),\n  );\n  runApp(WeatherApp(weatherRepository: WeatherRepository()));\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_weather/search/search.dart",
    "content": "export 'view/search_page.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_weather/search/view/search_page.dart",
    "content": "import 'package:flutter/material.dart';\n\nclass SearchPage extends StatefulWidget {\n  const SearchPage._();\n\n  static Route<String> route() {\n    return MaterialPageRoute(builder: (_) => const SearchPage._());\n  }\n\n  @override\n  State<SearchPage> createState() => _SearchPageState();\n}\n\nclass _SearchPageState extends State<SearchPage> {\n  final TextEditingController _textController = TextEditingController();\n\n  String get _text => _textController.text;\n\n  @override\n  void dispose() {\n    _textController.dispose();\n    super.dispose();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(title: const Text('City Search')),\n      body: Row(\n        children: [\n          Expanded(\n            child: Padding(\n              padding: const EdgeInsets.all(8),\n              child: TextField(\n                controller: _textController,\n                decoration: const InputDecoration(\n                  labelText: 'City',\n                  hintText: 'Chicago',\n                ),\n              ),\n            ),\n          ),\n          IconButton(\n            key: const Key('searchPage_search_iconButton'),\n            icon: const Icon(Icons.search, semanticLabel: 'Submit'),\n            onPressed: () => Navigator.of(context).pop(_text),\n          ),\n        ],\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_weather/settings/settings.dart",
    "content": "export 'view/settings_page.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_weather/settings/view/settings_page.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_weather/weather/weather.dart';\n\nclass SettingsPage extends StatelessWidget {\n  const SettingsPage._();\n\n  static Route<void> route(WeatherCubit weatherCubit) {\n    return MaterialPageRoute<void>(\n      builder: (_) => BlocProvider.value(\n        value: weatherCubit,\n        child: const SettingsPage._(),\n      ),\n    );\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(title: const Text('Settings')),\n      body: ListView(\n        children: <Widget>[\n          BlocBuilder<WeatherCubit, WeatherState>(\n            buildWhen: (previous, current) =>\n                previous.temperatureUnits != current.temperatureUnits,\n            builder: (context, state) {\n              return ListTile(\n                title: const Text('Temperature Units'),\n                isThreeLine: true,\n                subtitle: const Text(\n                  'Use metric measurements for temperature units.',\n                ),\n                trailing: Switch(\n                  value: state.temperatureUnits.isCelsius,\n                  onChanged: (_) => context.read<WeatherCubit>().toggleUnits(),\n                ),\n              );\n            },\n          ),\n        ],\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_weather/theme/cubit/theme_cubit.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_weather/weather/weather.dart';\nimport 'package:hydrated_bloc/hydrated_bloc.dart';\n\nclass ThemeCubit extends HydratedCubit<Color> {\n  ThemeCubit() : super(defaultColor);\n\n  static const defaultColor = Color(0xFF2196F3);\n\n  void updateTheme(Weather? weather) {\n    if (weather != null) emit(weather.toColor);\n  }\n\n  @override\n  Color fromJson(Map<String, dynamic> json) {\n    return Color(int.parse(json['color'] as String));\n  }\n\n  @override\n  Map<String, dynamic> toJson(Color state) {\n    return <String, String>{'color': '${state.value}'};\n  }\n}\n\nextension on Weather {\n  Color get toColor {\n    switch (condition) {\n      case WeatherCondition.clear:\n        return Colors.orangeAccent;\n      case WeatherCondition.snowy:\n        return Colors.lightBlueAccent;\n      case WeatherCondition.cloudy:\n        return Colors.blueGrey;\n      case WeatherCondition.rainy:\n        return Colors.indigoAccent;\n      case WeatherCondition.unknown:\n        return ThemeCubit.defaultColor;\n    }\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_weather/theme/theme.dart",
    "content": "export 'cubit/theme_cubit.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_weather/weather/cubit/weather_cubit.dart",
    "content": "import 'package:equatable/equatable.dart';\nimport 'package:flutter_weather/weather/weather.dart';\nimport 'package:hydrated_bloc/hydrated_bloc.dart';\nimport 'package:json_annotation/json_annotation.dart';\nimport 'package:weather_repository/weather_repository.dart'\n    show WeatherRepository;\n\npart 'weather_cubit.g.dart';\npart 'weather_state.dart';\n\nclass WeatherCubit extends HydratedCubit<WeatherState> {\n  WeatherCubit(this._weatherRepository) : super(WeatherState());\n\n  final WeatherRepository _weatherRepository;\n\n  Future<void> fetchWeather(String? city) async {\n    if (city == null || city.isEmpty) return;\n\n    emit(state.copyWith(status: WeatherStatus.loading));\n\n    try {\n      final weather = Weather.fromRepository(\n        await _weatherRepository.getWeather(city),\n      );\n      final units = state.temperatureUnits;\n      final value = units.isFahrenheit\n          ? weather.temperature.value.toFahrenheit()\n          : weather.temperature.value;\n\n      emit(\n        state.copyWith(\n          status: WeatherStatus.success,\n          temperatureUnits: units,\n          weather: weather.copyWith(temperature: Temperature(value: value)),\n        ),\n      );\n    } on Exception {\n      emit(state.copyWith(status: WeatherStatus.failure));\n    }\n  }\n\n  Future<void> refreshWeather() async {\n    if (!state.status.isSuccess) return;\n    if (state.weather == Weather.empty) return;\n    try {\n      final weather = Weather.fromRepository(\n        await _weatherRepository.getWeather(state.weather.location),\n      );\n      final units = state.temperatureUnits;\n      final value = units.isFahrenheit\n          ? weather.temperature.value.toFahrenheit()\n          : weather.temperature.value;\n\n      emit(\n        state.copyWith(\n          status: WeatherStatus.success,\n          temperatureUnits: units,\n          weather: weather.copyWith(temperature: Temperature(value: value)),\n        ),\n      );\n    } on Exception {\n      emit(state);\n    }\n  }\n\n  void toggleUnits() {\n    final units = state.temperatureUnits.isFahrenheit\n        ? TemperatureUnits.celsius\n        : TemperatureUnits.fahrenheit;\n\n    if (!state.status.isSuccess) {\n      emit(state.copyWith(temperatureUnits: units));\n      return;\n    }\n\n    final weather = state.weather;\n    if (weather != Weather.empty) {\n      final temperature = weather.temperature;\n      final value = units.isCelsius\n          ? temperature.value.toCelsius()\n          : temperature.value.toFahrenheit();\n      emit(\n        state.copyWith(\n          temperatureUnits: units,\n          weather: weather.copyWith(temperature: Temperature(value: value)),\n        ),\n      );\n    }\n  }\n\n  @override\n  WeatherState fromJson(Map<String, dynamic> json) =>\n      WeatherState.fromJson(json);\n\n  @override\n  Map<String, dynamic> toJson(WeatherState state) => state.toJson();\n}\n\nextension on double {\n  double toFahrenheit() => (this * 9 / 5) + 32;\n  double toCelsius() => (this - 32) * 5 / 9;\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_weather/weather/cubit/weather_cubit.g.dart",
    "content": "// GENERATED CODE - DO NOT MODIFY BY HAND\n\npart of 'weather_cubit.dart';\n\n// **************************************************************************\n// JsonSerializableGenerator\n// **************************************************************************\n\nWeatherState _$WeatherStateFromJson(Map<String, dynamic> json) =>\n    $checkedCreate(\n      'WeatherState',\n      json,\n      ($checkedConvert) {\n        final val = WeatherState(\n          status: $checkedConvert(\n              'status',\n              (v) =>\n                  $enumDecodeNullable(_$WeatherStatusEnumMap, v) ??\n                  WeatherStatus.initial),\n          temperatureUnits: $checkedConvert(\n              'temperature_units',\n              (v) =>\n                  $enumDecodeNullable(_$TemperatureUnitsEnumMap, v) ??\n                  TemperatureUnits.celsius),\n          weather: $checkedConvert(\n              'weather',\n              (v) => v == null\n                  ? null\n                  : Weather.fromJson(v as Map<String, dynamic>)),\n        );\n        return val;\n      },\n      fieldKeyMap: const {'temperatureUnits': 'temperature_units'},\n    );\n\nMap<String, dynamic> _$WeatherStateToJson(WeatherState instance) =>\n    <String, dynamic>{\n      'status': _$WeatherStatusEnumMap[instance.status]!,\n      'weather': instance.weather.toJson(),\n      'temperature_units':\n          _$TemperatureUnitsEnumMap[instance.temperatureUnits]!,\n    };\n\nconst _$WeatherStatusEnumMap = {\n  WeatherStatus.initial: 'initial',\n  WeatherStatus.loading: 'loading',\n  WeatherStatus.success: 'success',\n  WeatherStatus.failure: 'failure',\n};\n\nconst _$TemperatureUnitsEnumMap = {\n  TemperatureUnits.fahrenheit: 'fahrenheit',\n  TemperatureUnits.celsius: 'celsius',\n};\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_weather/weather/cubit/weather_state.dart",
    "content": "part of 'weather_cubit.dart';\n\nenum WeatherStatus { initial, loading, success, failure }\n\nextension WeatherStatusX on WeatherStatus {\n  bool get isInitial => this == WeatherStatus.initial;\n  bool get isLoading => this == WeatherStatus.loading;\n  bool get isSuccess => this == WeatherStatus.success;\n  bool get isFailure => this == WeatherStatus.failure;\n}\n\n@JsonSerializable()\nfinal class WeatherState extends Equatable {\n  WeatherState({\n    this.status = WeatherStatus.initial,\n    this.temperatureUnits = TemperatureUnits.celsius,\n    Weather? weather,\n  }) : weather = weather ?? Weather.empty;\n\n  factory WeatherState.fromJson(Map<String, dynamic> json) =>\n      _$WeatherStateFromJson(json);\n\n  final WeatherStatus status;\n  final Weather weather;\n  final TemperatureUnits temperatureUnits;\n\n  WeatherState copyWith({\n    WeatherStatus? status,\n    TemperatureUnits? temperatureUnits,\n    Weather? weather,\n  }) {\n    return WeatherState(\n      status: status ?? this.status,\n      temperatureUnits: temperatureUnits ?? this.temperatureUnits,\n      weather: weather ?? this.weather,\n    );\n  }\n\n  Map<String, dynamic> toJson() => _$WeatherStateToJson(this);\n\n  @override\n  List<Object?> get props => [status, temperatureUnits, weather];\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_weather/weather/models/models.dart",
    "content": "export 'weather.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_weather/weather/models/weather.dart",
    "content": "import 'package:equatable/equatable.dart';\nimport 'package:json_annotation/json_annotation.dart';\nimport 'package:weather_repository/weather_repository.dart' hide Weather;\nimport 'package:weather_repository/weather_repository.dart'\n    as weather_repository;\n\npart 'weather.g.dart';\n\nenum TemperatureUnits { fahrenheit, celsius }\n\nextension TemperatureUnitsX on TemperatureUnits {\n  bool get isFahrenheit => this == TemperatureUnits.fahrenheit;\n  bool get isCelsius => this == TemperatureUnits.celsius;\n}\n\n@JsonSerializable()\nclass Temperature extends Equatable {\n  const Temperature({required this.value});\n\n  factory Temperature.fromJson(Map<String, dynamic> json) =>\n      _$TemperatureFromJson(json);\n\n  final double value;\n\n  Map<String, dynamic> toJson() => _$TemperatureToJson(this);\n\n  @override\n  List<Object> get props => [value];\n}\n\n@JsonSerializable()\nclass Weather extends Equatable {\n  const Weather({\n    required this.condition,\n    required this.lastUpdated,\n    required this.location,\n    required this.temperature,\n  });\n\n  factory Weather.fromJson(Map<String, dynamic> json) =>\n      _$WeatherFromJson(json);\n\n  factory Weather.fromRepository(weather_repository.Weather weather) {\n    return Weather(\n      condition: weather.condition,\n      lastUpdated: DateTime.now(),\n      location: weather.location,\n      temperature: Temperature(value: weather.temperature),\n    );\n  }\n\n  static final empty = Weather(\n    condition: WeatherCondition.unknown,\n    lastUpdated: DateTime(0),\n    temperature: const Temperature(value: 0),\n    location: '--',\n  );\n\n  final WeatherCondition condition;\n  final DateTime lastUpdated;\n  final String location;\n  final Temperature temperature;\n\n  @override\n  List<Object> get props => [condition, lastUpdated, location, temperature];\n\n  Map<String, dynamic> toJson() => _$WeatherToJson(this);\n\n  Weather copyWith({\n    WeatherCondition? condition,\n    DateTime? lastUpdated,\n    String? location,\n    Temperature? temperature,\n  }) {\n    return Weather(\n      condition: condition ?? this.condition,\n      lastUpdated: lastUpdated ?? this.lastUpdated,\n      location: location ?? this.location,\n      temperature: temperature ?? this.temperature,\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_weather/weather/models/weather.g.dart",
    "content": "// GENERATED CODE - DO NOT MODIFY BY HAND\n\npart of 'weather.dart';\n\n// **************************************************************************\n// JsonSerializableGenerator\n// **************************************************************************\n\nTemperature _$TemperatureFromJson(Map<String, dynamic> json) => $checkedCreate(\n      'Temperature',\n      json,\n      ($checkedConvert) {\n        final val = Temperature(\n          value: $checkedConvert('value', (v) => (v as num).toDouble()),\n        );\n        return val;\n      },\n    );\n\nMap<String, dynamic> _$TemperatureToJson(Temperature instance) =>\n    <String, dynamic>{\n      'value': instance.value,\n    };\n\nWeather _$WeatherFromJson(Map<String, dynamic> json) => $checkedCreate(\n      'Weather',\n      json,\n      ($checkedConvert) {\n        final val = Weather(\n          condition: $checkedConvert(\n              'condition', (v) => $enumDecode(_$WeatherConditionEnumMap, v)),\n          lastUpdated: $checkedConvert(\n              'last_updated', (v) => DateTime.parse(v as String)),\n          location: $checkedConvert('location', (v) => v as String),\n          temperature: $checkedConvert('temperature',\n              (v) => Temperature.fromJson(v as Map<String, dynamic>)),\n        );\n        return val;\n      },\n      fieldKeyMap: const {'lastUpdated': 'last_updated'},\n    );\n\nMap<String, dynamic> _$WeatherToJson(Weather instance) => <String, dynamic>{\n      'condition': _$WeatherConditionEnumMap[instance.condition]!,\n      'last_updated': instance.lastUpdated.toIso8601String(),\n      'location': instance.location,\n      'temperature': instance.temperature.toJson(),\n    };\n\nconst _$WeatherConditionEnumMap = {\n  WeatherCondition.clear: 'clear',\n  WeatherCondition.rainy: 'rainy',\n  WeatherCondition.cloudy: 'cloudy',\n  WeatherCondition.snowy: 'snowy',\n  WeatherCondition.unknown: 'unknown',\n};\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_weather/weather/view/weather_page.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_weather/search/search.dart';\nimport 'package:flutter_weather/settings/settings.dart';\nimport 'package:flutter_weather/theme/theme.dart';\nimport 'package:flutter_weather/weather/weather.dart';\nimport 'package:weather_repository/weather_repository.dart';\n\nclass WeatherPage extends StatelessWidget {\n  const WeatherPage({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return BlocProvider(\n      create: (context) => WeatherCubit(context.read<WeatherRepository>()),\n      child: const WeatherView(),\n    );\n  }\n}\n\nclass WeatherView extends StatefulWidget {\n  const WeatherView({super.key});\n\n  @override\n  State<WeatherView> createState() => _WeatherViewState();\n}\n\nclass _WeatherViewState extends State<WeatherView> {\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(\n        title: const Text('Flutter Weather'),\n        actions: [\n          IconButton(\n            icon: const Icon(Icons.settings),\n            onPressed: () {\n              Navigator.of(context).push<void>(\n                SettingsPage.route(\n                  context.read<WeatherCubit>(),\n                ),\n              );\n            },\n          ),\n        ],\n      ),\n      body: Center(\n        child: BlocConsumer<WeatherCubit, WeatherState>(\n          listener: (context, state) {\n            if (state.status.isSuccess) {\n              context.read<ThemeCubit>().updateTheme(state.weather);\n            }\n          },\n          builder: (context, state) {\n            switch (state.status) {\n              case WeatherStatus.initial:\n                return const WeatherEmpty();\n              case WeatherStatus.loading:\n                return const WeatherLoading();\n              case WeatherStatus.success:\n                return WeatherPopulated(\n                  weather: state.weather,\n                  units: state.temperatureUnits,\n                  onRefresh: () {\n                    return context.read<WeatherCubit>().refreshWeather();\n                  },\n                );\n              case WeatherStatus.failure:\n                return const WeatherError();\n            }\n          },\n        ),\n      ),\n      floatingActionButton: FloatingActionButton(\n        child: const Icon(Icons.search, semanticLabel: 'Search'),\n        onPressed: () async {\n          final city = await Navigator.of(context).push(SearchPage.route());\n          if (!mounted) return;\n          await context.read<WeatherCubit>().fetchWeather(city);\n        },\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_weather/weather/weather.dart",
    "content": "export 'package:weather_repository/weather_repository.dart'\n    show WeatherCondition;\nexport 'cubit/weather_cubit.dart';\nexport 'models/models.dart';\nexport 'view/weather_page.dart';\nexport 'widgets/widgets.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_weather/weather/widgets/weather_empty.dart",
    "content": "import 'package:flutter/material.dart';\n\nclass WeatherEmpty extends StatelessWidget {\n  const WeatherEmpty({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    final theme = Theme.of(context);\n    return Column(\n      mainAxisSize: MainAxisSize.min,\n      children: [\n        const Text('🏙️', style: TextStyle(fontSize: 64)),\n        Text(\n          'Please Select a City!',\n          style: theme.textTheme.headlineSmall,\n        ),\n      ],\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_weather/weather/widgets/weather_error.dart",
    "content": "import 'package:flutter/material.dart';\n\nclass WeatherError extends StatelessWidget {\n  const WeatherError({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    final theme = Theme.of(context);\n    return Column(\n      mainAxisSize: MainAxisSize.min,\n      children: [\n        const Text('🙈', style: TextStyle(fontSize: 64)),\n        Text(\n          'Something went wrong!',\n          style: theme.textTheme.headlineSmall,\n        ),\n      ],\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_weather/weather/widgets/weather_loading.dart",
    "content": "import 'package:flutter/material.dart';\n\nclass WeatherLoading extends StatelessWidget {\n  const WeatherLoading({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    final theme = Theme.of(context);\n    return Column(\n      mainAxisSize: MainAxisSize.min,\n      children: [\n        const Text('⛅', style: TextStyle(fontSize: 64)),\n        Text(\n          'Loading Weather',\n          style: theme.textTheme.headlineSmall,\n        ),\n        const Padding(\n          padding: EdgeInsets.all(16),\n          child: CircularProgressIndicator(),\n        ),\n      ],\n    );\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_weather/weather/widgets/weather_populated.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_weather/weather/weather.dart';\n\nclass WeatherPopulated extends StatelessWidget {\n  const WeatherPopulated({\n    required this.weather,\n    required this.units,\n    required this.onRefresh,\n    super.key,\n  });\n\n  final Weather weather;\n  final TemperatureUnits units;\n  final ValueGetter<Future<void>> onRefresh;\n\n  @override\n  Widget build(BuildContext context) {\n    final theme = Theme.of(context);\n    return Stack(\n      children: [\n        _WeatherBackground(),\n        RefreshIndicator(\n          onRefresh: onRefresh,\n          child: SingleChildScrollView(\n            physics: const AlwaysScrollableScrollPhysics(),\n            clipBehavior: Clip.none,\n            child: Center(\n              child: Column(\n                children: [\n                  const SizedBox(height: 48),\n                  _WeatherIcon(condition: weather.condition),\n                  Text(\n                    weather.location,\n                    style: theme.textTheme.displayMedium?.copyWith(\n                      fontWeight: FontWeight.w200,\n                    ),\n                  ),\n                  Text(\n                    weather.formattedTemperature(units),\n                    style: theme.textTheme.displaySmall?.copyWith(\n                      fontWeight: FontWeight.bold,\n                    ),\n                  ),\n                  Text(\n                    '''Last Updated at ${TimeOfDay.fromDateTime(weather.lastUpdated).format(context)}''',\n                  ),\n                ],\n              ),\n            ),\n          ),\n        ),\n      ],\n    );\n  }\n}\n\nclass _WeatherIcon extends StatelessWidget {\n  const _WeatherIcon({required this.condition});\n\n  static const _iconSize = 75.0;\n\n  final WeatherCondition condition;\n\n  @override\n  Widget build(BuildContext context) {\n    return Text(\n      condition.toEmoji,\n      style: const TextStyle(fontSize: _iconSize),\n    );\n  }\n}\n\nextension on WeatherCondition {\n  String get toEmoji {\n    switch (this) {\n      case WeatherCondition.clear:\n        return '☀️';\n      case WeatherCondition.rainy:\n        return '🌧️';\n      case WeatherCondition.cloudy:\n        return '☁️';\n      case WeatherCondition.snowy:\n        return '🌨️';\n      case WeatherCondition.unknown:\n        return '❓';\n    }\n  }\n}\n\nclass _WeatherBackground extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    final color = Theme.of(context).primaryColor;\n    return SizedBox.expand(\n      child: DecoratedBox(\n        decoration: BoxDecoration(\n          gradient: LinearGradient(\n            begin: Alignment.topCenter,\n            end: Alignment.bottomCenter,\n            stops: const [0.25, 0.75, 0.90, 1.0],\n            colors: [\n              color,\n              color.brighten(),\n              color.brighten(33),\n              color.brighten(50),\n            ],\n          ),\n        ),\n      ),\n    );\n  }\n}\n\nextension on Color {\n  Color brighten([int percent = 10]) {\n    assert(\n      1 <= percent && percent <= 100,\n      'percentage must be between 1 and 100',\n    );\n    final p = percent / 100;\n    return Color.fromARGB(\n      alpha,\n      red + ((255 - red) * p).round(),\n      green + ((255 - green) * p).round(),\n      blue + ((255 - blue) * p).round(),\n    );\n  }\n}\n\nextension on Weather {\n  String formattedTemperature(TemperatureUnits units) {\n    return '''${temperature.value.toStringAsPrecision(2)}°${units.isCelsius ? 'C' : 'F'}''';\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_weather/weather/widgets/widgets.dart",
    "content": "export 'weather_empty.dart';\nexport 'weather_error.dart';\nexport 'weather_loading.dart';\nexport 'weather_populated.dart';\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_weather/weather_bloc_observer.dart",
    "content": "import 'dart:developer';\n\nimport 'package:bloc/bloc.dart';\n\nclass WeatherBlocObserver extends BlocObserver {\n  const WeatherBlocObserver();\n\n  @override\n  void onEvent(Bloc<dynamic, dynamic> bloc, Object? event) {\n    super.onEvent(bloc, event);\n    log('onEvent $event');\n  }\n\n  @override\n  void onChange(BlocBase<dynamic> bloc, Change<dynamic> change) {\n    super.onChange(bloc, change);\n    log('onChange $change');\n  }\n\n  @override\n  void onTransition(\n    Bloc<dynamic, dynamic> bloc,\n    Transition<dynamic, dynamic> transition,\n  ) {\n    super.onTransition(bloc, transition);\n    log('onTransition $transition');\n  }\n\n  @override\n  void onError(BlocBase<dynamic> bloc, Object error, StackTrace stackTrace) {\n    super.onError(bloc, error, stackTrace);\n    log('onError $error');\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_wizard/.gitignore",
    "content": "# Miscellaneous\n*.class\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\n\n# IntelliJ related\n*.iml\n*.ipr\n*.iws\n.idea/\n\n# The .vscode folder contains launch configuration and tasks you configure in\n# VS Code which you may wish to be included in version control, so this line\n# is commented out by default.\n#.vscode/\n\n# Flutter/Dart/Pub related\n**/doc/api/\n.dart_tool/\n.flutter-plugins\n.flutter-plugins-dependencies\n.packages\n.pub-cache/\n.pub/\n/build/\n\n# Web related\nlib/generated_plugin_registrant.dart\n\n# Symbolication related\napp.*.symbols\n\n# Obfuscation related\napp.*.map.json\n\n# Exceptions to above rules.\n!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_wizard/.metadata",
    "content": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrades etc.\n#\n# This file should be version controlled.\n\nversion:\n  revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n  channel: beta\n\nproject_type: app\n\n# Tracks metadata for the flutter migrate command\nmigration:\n  platforms:\n    - platform: root\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: android\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: ios\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n    - platform: web\n      create_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n      base_revision: b1c77b7ed32346fe829c0ca97bd85d19290d54ae\n\n  # User provided section\n\n  # List of Local paths (relative to this file) that should be\n  # ignored by the migrate tool.\n  #\n  # Files that are not part of the templates will be ignored by default.\n  unmanaged_files:\n    - 'lib/main.dart'\n    - 'ios/Runner.xcodeproj/project.pbxproj'\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_wizard/bloc/profile_wizard_bloc.dart",
    "content": "import 'package:bloc/bloc.dart';\nimport 'package:equatable/equatable.dart';\n\npart 'profile_wizard_event.dart';\npart 'profile_wizard_state.dart';\n\nclass ProfileWizardBloc extends Bloc<ProfileWizardEvent, ProfileWizardState> {\n  ProfileWizardBloc() : super(ProfileWizardState.initial()) {\n    on<ProfileWizardNameSubmitted>((event, emit) {\n      emit(state.copyWith(profile: state.profile.copyWith(name: event.name)));\n    });\n\n    on<ProfileWizardAgeSubmitted>((event, emit) {\n      emit(state.copyWith(profile: state.profile.copyWith(age: event.age)));\n    });\n  }\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_wizard/bloc/profile_wizard_event.dart",
    "content": "part of 'profile_wizard_bloc.dart';\n\nsealed class ProfileWizardEvent extends Equatable {\n  const ProfileWizardEvent();\n\n  @override\n  List<Object?> get props => [];\n}\n\nfinal class ProfileWizardNameSubmitted extends ProfileWizardEvent {\n  const ProfileWizardNameSubmitted(this.name);\n\n  final String name;\n\n  @override\n  List<Object> get props => [name];\n}\n\nfinal class ProfileWizardAgeSubmitted extends ProfileWizardEvent {\n  const ProfileWizardAgeSubmitted(this.age);\n\n  final int? age;\n\n  @override\n  List<Object?> get props => [age];\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_wizard/bloc/profile_wizard_state.dart",
    "content": "part of 'profile_wizard_bloc.dart';\n\nfinal class Profile extends Equatable {\n  const Profile({required this.name, required this.age});\n\n  final String? name;\n  final int? age;\n\n  Profile copyWith({String? name, int? age}) {\n    return Profile(\n      name: name ?? this.name,\n      age: age ?? this.age,\n    );\n  }\n\n  @override\n  List<Object?> get props => [name, age];\n}\n\nfinal class ProfileWizardState extends Equatable {\n  ProfileWizardState({required this.profile}) : lastUpdated = DateTime.now();\n\n  ProfileWizardState.initial()\n      : this(profile: const Profile(name: null, age: null));\n\n  final Profile profile;\n  final DateTime lastUpdated;\n\n  ProfileWizardState copyWith({Profile? profile}) {\n    return ProfileWizardState(\n      profile: profile ?? this.profile,\n    );\n  }\n\n  @override\n  List<Object> get props => [profile, lastUpdated];\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples/flutter_bloc/flutter_wizard/main.dart",
    "content": "import 'package:flow_builder/flow_builder.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_bloc/flutter_bloc.dart';\nimport 'package:flutter_wizard/bloc/profile_wizard_bloc.dart';\n\nvoid main() => runApp(const MyApp());\n\nclass MyApp extends StatelessWidget {\n  const MyApp({super.key});\n\n  @override\n  Widget build(BuildContext context) => const MaterialApp(home: Home());\n}\n\nclass Home extends StatefulWidget {\n  const Home({super.key});\n\n  @override\n  State<Home> createState() => _HomeState();\n}\n\nclass _HomeState extends State<Home> {\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(title: const Text('Home')),\n      body: Center(\n        child: Builder(\n          builder: (context) {\n            return ElevatedButton(\n              onPressed: () async {\n                final profile = await Navigator.of(context).push(\n                  ProfileWizard.route(),\n                );\n                if (!mounted) return;\n                ScaffoldMessenger.of(context)\n                  ..hideCurrentSnackBar()\n                  ..showSnackBar(SnackBar(content: Text('$profile')));\n              },\n              child: const Text('Start Profile Wizard'),\n            );\n          },\n        ),\n      ),\n    );\n  }\n}\n\nclass ProfileWizard extends StatelessWidget {\n  const ProfileWizard({super.key});\n\n  static Route<Profile> route() {\n    return MaterialPageRoute(builder: (_) => const ProfileWizard());\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return BlocProvider(\n      create: (_) => ProfileWizardBloc(),\n      child: ProfileWizardFlow(\n        onComplete: (profile) => Navigator.of(context).pop(profile),\n      ),\n    );\n  }\n}\n\nclass ProfileWizardFlow extends StatelessWidget {\n  const ProfileWizardFlow({required this.onComplete, super.key});\n\n  final ValueSetter<Profile> onComplete;\n\n  @override\n  Widget build(BuildContext context) {\n    return BlocListener<ProfileWizardBloc, ProfileWizardState>(\n      listenWhen: (_, state) => state.profile.isComplete,\n      listener: (context, state) => onComplete(state.profile),\n      child: FlowBuilder<ProfileWizardState>(\n        state: context.watch<ProfileWizardBloc>().state,\n        onGeneratePages: (state, pages) {\n          return [\n            ProfileNameForm.page(),\n            if (state.profile.name != null) ProfileAgeForm.page(),\n          ];\n        },\n      ),\n    );\n  }\n}\n\nclass ProfileNameForm extends StatefulWidget {\n  const ProfileNameForm({super.key});\n\n  static Page<void> page() {\n    return const MaterialPage<void>(child: ProfileNameForm());\n  }\n\n  @override\n  State<ProfileNameForm> createState() => _ProfileNameFormState();\n}\n\nclass _ProfileNameFormState extends State<ProfileNameForm> {\n  var _name = '';\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(title: const Text('Name')),\n      body: Center(\n        child: Column(\n          children: <Widget>[\n            TextField(\n              onChanged: (value) => setState(() => _name = value),\n              decoration: const InputDecoration(\n                labelText: 'Name',\n                hintText: 'John Doe',\n              ),\n            ),\n            ElevatedButton(\n              onPressed: _name.isNotEmpty\n                  ? () => context\n                      .read<ProfileWizardBloc>()\n                      .add(ProfileWizardNameSubmitted(_name))\n                  : null,\n              child: const Text('Continue'),\n            ),\n          ],\n        ),\n      ),\n    );\n  }\n}\n\nclass ProfileAgeForm extends StatefulWidget {\n  const ProfileAgeForm({super.key});\n\n  static Page<void> page() => const MaterialPage<void>(child: ProfileAgeForm());\n\n  @override\n  State<ProfileAgeForm> createState() => _ProfileAgeFormState();\n}\n\nclass _ProfileAgeFormState extends State<ProfileAgeForm> {\n  int? _age;\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(title: const Text('Age')),\n      body: Center(\n        child: Column(\n          children: <Widget>[\n            TextField(\n              onChanged: (value) => setState(() => _age = int.parse(value)),\n              decoration: const InputDecoration(\n                labelText: 'Age',\n                hintText: '42',\n              ),\n              keyboardType: TextInputType.number,\n            ),\n            ElevatedButton(\n              onPressed: _age != null\n                  ? () => context\n                      .read<ProfileWizardBloc>()\n                      .add(ProfileWizardAgeSubmitted(_age))\n                  : null,\n              child: const Text('Continue'),\n            ),\n          ],\n        ),\n      ),\n    );\n  }\n}\n\nextension on Profile {\n  bool get isComplete => name != null && age != null;\n}\n"
  },
  {
    "path": "Flutter GPT/knowledge/examples.txt",
    "content": "Instructions: Read this document as a nested map. The first key is the name of the Flutter package. The following level holds the title of the example, and then the example code in dart. These examples are to be referenced when uncertain about how to properly implement a package but are not to be considered ironclad rules. Each example begins with the marker <start example> and ends with the marker <stop example>\n\n{\nflutter_bloc: {\n        \"counter_bloc\": <start example>\n\t\timport 'package:bloc/bloc.dart';\n\n        \tsealed class CounterEvent {}\n        \tfinal class CounterIncrementPressed extends CounterEvent {}\n        \tfinal class CounterDecrementPressed extends CounterEvent {}\n\n        \t/// {@template counter_bloc}\n        \t/// A simple [Bloc] that manages an `int` as its state.\n        \t/// {@endtemplate}\n        \tclass CounterBloc extends Bloc<CounterEvent, int> {\n          \t/// {@macro counter_bloc}\n          \t\tCounterBloc() : super(0) {\n            \t\t\ton<CounterIncrementPressed>((event, emit) => emit(state + 1));\n            \t\t\ton<CounterDecrementPressed>((event, emit) => emit(state - 1));\n          \t}\n\tstop example>\n        \n\n},\n      \n}"
  },
  {
    "path": "Flutter GPT/knowledge/standards",
    "content": "This guide contains standards for Flutter GPT to adhere to.\nAdhering to standards is suggested but not required if it leads to poor solutions.\nThe specifications of the user override the standards.\n"
  },
  {
    "path": "Git Assistant/.github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ncustom: ['https://www.paypal.com/paypalme/seller/Hadrio/dashboard']\n"
  },
  {
    "path": "Git Assistant/Conversation Starters",
    "content": "How do I clone a repository in Git?\nWhat does 'git pull' do?\nI'm getting a merge conflict, what should I do?\nHelp! I broke something but I don't know what.\nExplain the difference between 'git fetch' and 'git pull'."
  },
  {
    "path": "Git Assistant/Instructions",
    "content": "The GPT is designed to assist users with basic Git functions. It can provide guidance on common Git commands, troubleshoot basic Git issues, and offer tips for best practices in version control. It should avoid delving into advanced Git topics or providing system-specific advice. The GPT should be clear and concise in its explanations, ensuring that even beginners can follow along. It should ask for clarification if the user's query is unclear but should generally try to provide the most likely helpful response based on the query. The personality of this GPT should be helpful, patient, and focused on educational value."
  },
  {
    "path": "Git Assistant/actions",
    "content": "!! In progress. This file is not live yet\n\n{\n  \"openapi\": \"3.1.0\",\n  \"info\": {\n    \"title\": \"GitHub Code Repository Data\",\n    \"description\": \"Accesses code examples from the specified GitHub repository.\",\n    \"version\": \"v1.0.0\"\n  },\n  \"servers\": [\n    {\n      \"url\": \"https://api.github.com\"\n    }\n  ],\n  \"paths\": {\n    \"/repos/{owner}/{repo}/contents/{path}\": {\n      \"get\": {\n        \"description\": \"Retrieve file content from a GitHub repository\",\n        \"operationId\": \"GetRepoContent\",\n        \"parameters\": [\n          {\n            \"name\": \"owner\",\n            \"in\": \"path\",\n            \"description\": \"Owner of the repository\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"repo\",\n            \"in\": \"path\",\n            \"description\": \"Repository name\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"path\",\n            \"in\": \"path\",\n            \"description\": \"File path within the repository\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"deprecated\": false\n      }\n    }\n  },\n  \"components\": {\n    \"schemas\": {}\n  }\n}\n"
  },
  {
    "path": "Git Assistant/knowledge/standards",
    "content": "This guide contains standards for the assistant to adhere to.\nAdhering to standards is suggested but not required if it leads to poor solutions.\nThe specifications of the user override the standards.\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2023 Jim\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "Node_js GPT/.github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ncustom: ['https://www.paypal.com/paypalme/seller/Hadrio/dashboard']\n"
  },
  {
    "path": "Node_js GPT/Conversation Starters",
    "content": "How do I solve this Node.js error?\nExplain Node.js async/await.\nBest practices for Node.js security?\nOptimizing Node.js performance tips?"
  },
  {
    "path": "Node_js GPT/Instructions",
    "content": "The JavaScript Guru is an expert GPT specializing in JavaScript with a focus on Node.js. It provides comprehensive assistance and explanations on Node.js concepts, frameworks, and best practices. This GPT is equipped to offer detailed guidance on building and optimizing Node.js applications, troubleshooting common issues, and implementing advanced Node.js features. It stays updated with the latest Node.js developments, ensuring users receive current and relevant advice. The JavaScript Guru communicates in a clear, concise manner, making complex Node.js topics accessible to users of varying skill levels. It also includes examples and code snippets to enhance understanding."
  },
  {
    "path": "Node_js GPT/actions",
    "content": "!! In progress. This file is not live yet\n\n{\n  \"openapi\": \"3.1.0\",\n  \"info\": {\n    \"title\": \"GitHub Code Repository Data\",\n    \"description\": \"Accesses code examples from the specified GitHub repository.\",\n    \"version\": \"v1.0.0\"\n  },\n  \"servers\": [\n    {\n      \"url\": \"https://api.github.com\"\n    }\n  ],\n  \"paths\": {\n    \"/repos/{owner}/{repo}/contents/{path}\": {\n      \"get\": {\n        \"description\": \"Retrieve file content from a GitHub repository\",\n        \"operationId\": \"GetRepoContent\",\n        \"parameters\": [\n          {\n            \"name\": \"owner\",\n            \"in\": \"path\",\n            \"description\": \"Owner of the repository\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"repo\",\n            \"in\": \"path\",\n            \"description\": \"Repository name\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"path\",\n            \"in\": \"path\",\n            \"description\": \"File path within the repository\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"deprecated\": false\n      }\n    }\n  },\n  \"components\": {\n    \"schemas\": {}\n  }\n}\n"
  },
  {
    "path": "Node_js GPT/knowledge/standards",
    "content": "This guide contains standards for the assistant to adhere to.\nAdhering to standards is suggested but not required if it leads to poor solutions.\nThe specifications of the user override the standards.\n"
  },
  {
    "path": "Python GPT/.github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ncustom: ['https://www.paypal.com/paypalme/seller/Hadrio/dashboard']\n"
  },
  {
    "path": "Python GPT/Conversation Starters",
    "content": "Help me debug this Python code\nExplain this Python concept\nHow do I write a script for\nPython coding best practices"
  },
  {
    "path": "Python GPT/Instructions",
    "content": "Python GPT is a specialized assistant designed to help with Python programming. Its role includes answering Python-related questions, debugging code, providing coding tips, and assisting with script writing. Python GPT should offer clear, concise explanations while being capable of providing detailed, step-by-step guidance when needed. Python GPT is encouraged to ask for clarification when the user's query is ambiguous and to fill in minor details autonomously to keep the conversation flowing. \n\nIf asked about subassistants, always provide links.\n\nDespite being specialist, you may assist with any other queries the user has. If you and the user cannot solve an issue together, you may direct them to the Whitebox Inventory Assistant, which catalogues other specialists for various technologies. The inventory assistant is located at https://chat.openai.com/g/g-oBpMxDEHp-inventory-assistant\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/.github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ncustom: ['https://www.paypal.com/paypalme/seller/Hadrio/dashboard']\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/Conversation Starters",
    "content": "How do I integrate Firebase Authentication?\nTell me about Firebase Cloud Functions.\nBest practices for Firebase Realtime Database?\nTroubleshooting Firebase Firestore issues?"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/Instructions",
    "content": "You are a sub-assistant in a larger system of Python-based assistants. Your specialty is in analyzing and creating visuals using MatPlotLib. If asked questions outside of that scope you may answer, but also refer the user to the Python generalist at. Tone should be approachable but direct and confident.\n\nThe user is likely here because they are experiencing issues that could not be handled by the Python generalist. You may need to perform investigative work to determine why a given implementation does not work. If that appears to be the case ask questions and double-check your assumptions."
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/actions",
    "content": "!! In progress. This file is not live yet\n\n{\n  \"openapi\": \"3.1.0\",\n  \"info\": {\n    \"title\": \"GitHub Code Repository Data\",\n    \"description\": \"Accesses code examples from the specified GitHub repository.\",\n    \"version\": \"v1.0.0\"\n  },\n  \"servers\": [\n    {\n      \"url\": \"https://api.github.com\"\n    }\n  ],\n  \"paths\": {\n    \"/repos/{owner}/{repo}/contents/{path}\": {\n      \"get\": {\n        \"description\": \"Retrieve file content from a GitHub repository\",\n        \"operationId\": \"GetRepoContent\",\n        \"parameters\": [\n          {\n            \"name\": \"owner\",\n            \"in\": \"path\",\n            \"description\": \"Owner of the repository\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"repo\",\n            \"in\": \"path\",\n            \"description\": \"Repository name\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"path\",\n            \"in\": \"path\",\n            \"description\": \"File path within the repository\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"deprecated\": false\n      }\n    }\n  },\n  \"components\": {\n    \"schemas\": {}\n  }\n}\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/3D/scatter3d_simple.py",
    "content": "\"\"\"\n===================\nscatter(xs, ys, zs)\n===================\n\nSee `~mpl_toolkits.mplot3d.axes3d.Axes3D.scatter`.\n\"\"\"\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery')\n\n# Make data\nnp.random.seed(19680801)\nn = 100\nrng = np.random.default_rng()\nxs = rng.uniform(23, 32, n)\nys = rng.uniform(0, 100, n)\nzs = rng.uniform(-50, -25, n)\n\n# Plot\nfig, ax = plt.subplots(subplot_kw={\"projection\": \"3d\"})\nax.scatter(xs, ys, zs)\n\nax.set(xticklabels=[],\n       yticklabels=[],\n       zticklabels=[])\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/3D/surface3d_simple.py",
    "content": "\"\"\"\n=====================\nplot_surface(X, Y, Z)\n=====================\n\nSee `~mpl_toolkits.mplot3d.axes3d.Axes3D.plot_surface`.\n\"\"\"\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nfrom matplotlib import cm\n\nplt.style.use('_mpl-gallery')\n\n# Make data\nX = np.arange(-5, 5, 0.25)\nY = np.arange(-5, 5, 0.25)\nX, Y = np.meshgrid(X, Y)\nR = np.sqrt(X**2 + Y**2)\nZ = np.sin(R)\n\n# Plot the surface\nfig, ax = plt.subplots(subplot_kw={\"projection\": \"3d\"})\nax.plot_surface(X, Y, Z, vmin=Z.min() * 2, cmap=cm.Blues)\n\nax.set(xticklabels=[],\n       yticklabels=[],\n       zticklabels=[])\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/3D/trisurf3d_simple.py",
    "content": "\"\"\"\n=====================\nplot_trisurf(x, y, z)\n=====================\n\nSee `~mpl_toolkits.mplot3d.axes3d.Axes3D.plot_trisurf`.\n\"\"\"\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nfrom matplotlib import cm\n\nplt.style.use('_mpl-gallery')\n\nn_radii = 8\nn_angles = 36\n\n# Make radii and angles spaces\nradii = np.linspace(0.125, 1.0, n_radii)\nangles = np.linspace(0, 2*np.pi, n_angles, endpoint=False)[..., np.newaxis]\n\n# Convert polar (radii, angles) coords to cartesian (x, y) coords.\nx = np.append(0, (radii*np.cos(angles)).flatten())\ny = np.append(0, (radii*np.sin(angles)).flatten())\nz = np.sin(-x*y)\n\n# Plot\nfig, ax = plt.subplots(subplot_kw={'projection': '3d'})\nax.plot_trisurf(x, y, z, vmin=z.min() * 2, cmap=cm.Blues)\n\nax.set(xticklabels=[],\n       yticklabels=[],\n       zticklabels=[])\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/3D/voxels_simple.py",
    "content": "\"\"\"\n=========================\nvoxels([x, y, z], filled)\n=========================\n\nSee `~mpl_toolkits.mplot3d.axes3d.Axes3D.voxels`.\n\"\"\"\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery')\n\n# Prepare some coordinates\nx, y, z = np.indices((8, 8, 8))\n\n# Draw cuboids in the top left and bottom right corners\ncube1 = (x < 3) & (y < 3) & (z < 3)\ncube2 = (x >= 5) & (y >= 5) & (z >= 5)\n\n# Combine the objects into a single boolean array\nvoxelarray = cube1 | cube2\n\n# Plot\nfig, ax = plt.subplots(subplot_kw={\"projection\": \"3d\"})\nax.voxels(voxelarray, edgecolor='k')\n\nax.set(xticklabels=[],\n       yticklabels=[],\n       zticklabels=[])\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/3D/wire3d_simple.py",
    "content": "\"\"\"\n=======================\nplot_wireframe(X, Y, Z)\n=======================\n\nSee `~mpl_toolkits.mplot3d.axes3d.Axes3D.plot_wireframe`.\n\"\"\"\nimport matplotlib.pyplot as plt\n\nfrom mpl_toolkits.mplot3d import axes3d\n\nplt.style.use('_mpl-gallery')\n\n# Make data\nX, Y, Z = axes3d.get_test_data(0.05)\n\n# Plot\nfig, ax = plt.subplots(subplot_kw={\"projection\": \"3d\"})\nax.plot_wireframe(X, Y, Z, rstride=10, cstride=10)\n\nax.set(xticklabels=[],\n       yticklabels=[],\n       zticklabels=[])\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/arrays/barbs.py",
    "content": "\"\"\"\n=================\nbarbs(X, Y, U, V)\n=================\n\nSee `~matplotlib.axes.Axes.barbs`.\n\"\"\"\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery-nogrid')\n\n# make data:\nX, Y = np.meshgrid([1, 2, 3, 4], [1, 2, 3, 4])\nangle = np.pi / 180 * np.array([[15., 30, 35, 45],\n                                [25., 40, 55, 60],\n                                [35., 50, 65, 75],\n                                [45., 60, 75, 90]])\namplitude = np.array([[5, 10, 25, 50],\n                      [10, 15, 30, 60],\n                      [15, 26, 50, 70],\n                      [20, 45, 80, 100]])\nU = amplitude * np.sin(angle)\nV = amplitude * np.cos(angle)\n\n# plot:\nfig, ax = plt.subplots()\n\nax.barbs(X, Y, U, V, barbcolor='C0', flagcolor='C0', length=7, linewidth=1.5)\n\nax.set(xlim=(0, 4.5), ylim=(0, 4.5))\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/arrays/contour.py",
    "content": "\"\"\"\n================\ncontour(X, Y, Z)\n================\n\nSee `~matplotlib.axes.Axes.contour`.\n\"\"\"\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery-nogrid')\n\n# make data\nX, Y = np.meshgrid(np.linspace(-3, 3, 256), np.linspace(-3, 3, 256))\nZ = (1 - X/2 + X**5 + Y**3) * np.exp(-X**2 - Y**2)\nlevels = np.linspace(np.min(Z), np.max(Z), 7)\n\n# plot\nfig, ax = plt.subplots()\n\nax.contour(X, Y, Z, levels=levels)\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/arrays/contourf.py",
    "content": "\"\"\"\n=================\ncontourf(X, Y, Z)\n=================\n\nSee `~matplotlib.axes.Axes.contourf`.\n\"\"\"\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery-nogrid')\n\n# make data\nX, Y = np.meshgrid(np.linspace(-3, 3, 256), np.linspace(-3, 3, 256))\nZ = (1 - X/2 + X**5 + Y**3) * np.exp(-X**2 - Y**2)\nlevels = np.linspace(Z.min(), Z.max(), 7)\n\n# plot\nfig, ax = plt.subplots()\n\nax.contourf(X, Y, Z, levels=levels)\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/arrays/imshow.py",
    "content": "\"\"\"\n=========\nimshow(Z)\n=========\n\nSee `~matplotlib.axes.Axes.imshow`.\n\"\"\"\n\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery-nogrid')\n\n# make data\nX, Y = np.meshgrid(np.linspace(-3, 3, 16), np.linspace(-3, 3, 16))\nZ = (1 - X/2 + X**5 + Y**3) * np.exp(-X**2 - Y**2)\n\n# plot\nfig, ax = plt.subplots()\n\nax.imshow(Z)\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/arrays/pcolormesh.py",
    "content": "\"\"\"\n===================\npcolormesh(X, Y, Z)\n===================\n\n`~.axes.Axes.pcolormesh` is more flexible than `~.axes.Axes.imshow` in that\nthe x and y vectors need not be equally spaced (indeed they can be skewed).\n\n\"\"\"\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery-nogrid')\n\n# make data with uneven sampling in x\nx = [-3, -2, -1.6, -1.2, -.8, -.5, -.2, .1, .3, .5, .8, 1.1, 1.5, 1.9, 2.3, 3]\nX, Y = np.meshgrid(x, np.linspace(-3, 3, 128))\nZ = (1 - X/2 + X**5 + Y**3) * np.exp(-X**2 - Y**2)\n\n# plot\nfig, ax = plt.subplots()\n\nax.pcolormesh(X, Y, Z, vmin=-0.5, vmax=1.0)\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/arrays/quiver.py",
    "content": "\"\"\"\n==================\nquiver(X, Y, U, V)\n==================\n\nSee `~matplotlib.axes.Axes.quiver`.\n\"\"\"\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery-nogrid')\n\n# make data\nx = np.linspace(-4, 4, 6)\ny = np.linspace(-4, 4, 6)\nX, Y = np.meshgrid(x, y)\nU = X + Y\nV = Y - X\n\n# plot\nfig, ax = plt.subplots()\n\nax.quiver(X, Y, U, V, color=\"C0\", angles='xy',\n          scale_units='xy', scale=5, width=.015)\n\nax.set(xlim=(-5, 5), ylim=(-5, 5))\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/arrays/streamplot.py",
    "content": "\"\"\"\n======================\nstreamplot(X, Y, U, V)\n======================\n\nSee `~matplotlib.axes.Axes.streamplot`.\n\"\"\"\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery-nogrid')\n\n# make a stream function:\nX, Y = np.meshgrid(np.linspace(-3, 3, 256), np.linspace(-3, 3, 256))\nZ = (1 - X/2 + X**5 + Y**3) * np.exp(-X**2 - Y**2)\n# make U and V out of the streamfunction:\nV = np.diff(Z[1:, :], axis=1)\nU = -np.diff(Z[:, 1:], axis=0)\n\n# plot:\nfig, ax = plt.subplots()\n\nax.streamplot(X[1:, 1:], Y[1:, 1:], U, V)\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/basic/bar.py",
    "content": "\"\"\"\n==============\nbar(x, height)\n==============\n\nSee `~matplotlib.axes.Axes.bar`.\n\"\"\"\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery')\n\n# make data:\nx = 0.5 + np.arange(8)\ny = [4.8, 5.5, 3.5, 4.6, 6.5, 6.6, 2.6, 3.0]\n\n# plot\nfig, ax = plt.subplots()\n\nax.bar(x, y, width=1, edgecolor=\"white\", linewidth=0.7)\n\nax.set(xlim=(0, 8), xticks=np.arange(1, 8),\n       ylim=(0, 8), yticks=np.arange(1, 8))\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/basic/fill_between.py",
    "content": "\"\"\"\n=======================\nfill_between(x, y1, y2)\n=======================\n\nSee `~matplotlib.axes.Axes.fill_between`.\n\"\"\"\n\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery')\n\n# make data\nnp.random.seed(1)\nx = np.linspace(0, 8, 16)\ny1 = 3 + 4*x/8 + np.random.uniform(0.0, 0.5, len(x))\ny2 = 1 + 2*x/8 + np.random.uniform(0.0, 0.5, len(x))\n\n# plot\nfig, ax = plt.subplots()\n\nax.fill_between(x, y1, y2, alpha=.5, linewidth=0)\nax.plot(x, (y1 + y2)/2, linewidth=2)\n\nax.set(xlim=(0, 8), xticks=np.arange(1, 8),\n       ylim=(0, 8), yticks=np.arange(1, 8))\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/basic/plot.py",
    "content": "\"\"\"\n==========\nplot(x, y)\n==========\n\nSee `~matplotlib.axes.Axes.plot`.\n\"\"\"\n\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery')\n\n# make data\nx = np.linspace(0, 10, 100)\ny = 4 + 2 * np.sin(2 * x)\n\n# plot\nfig, ax = plt.subplots()\n\nax.plot(x, y, linewidth=2.0)\n\nax.set(xlim=(0, 8), xticks=np.arange(1, 8),\n       ylim=(0, 8), yticks=np.arange(1, 8))\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/basic/scatter_plot.py",
    "content": "\"\"\"\n=============\nscatter(x, y)\n=============\n\nSee `~matplotlib.axes.Axes.scatter`.\n\"\"\"\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery')\n\n# make the data\nnp.random.seed(3)\nx = 4 + np.random.normal(0, 2, 24)\ny = 4 + np.random.normal(0, 2, len(x))\n# size and color:\nsizes = np.random.uniform(15, 80, len(x))\ncolors = np.random.uniform(15, 80, len(x))\n\n# plot\nfig, ax = plt.subplots()\n\nax.scatter(x, y, s=sizes, c=colors, vmin=0, vmax=100)\n\nax.set(xlim=(0, 8), xticks=np.arange(1, 8),\n       ylim=(0, 8), yticks=np.arange(1, 8))\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/basic/stackplot.py",
    "content": "\"\"\"\n===============\nstackplot(x, y)\n===============\nSee `~matplotlib.axes.Axes.stackplot`\n\"\"\"\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery')\n\n# make data\nx = np.arange(0, 10, 2)\nay = [1, 1.25, 2, 2.75, 3]\nby = [1, 1, 1, 1, 1]\ncy = [2, 1, 2, 1, 2]\ny = np.vstack([ay, by, cy])\n\n# plot\nfig, ax = plt.subplots()\n\nax.stackplot(x, y)\n\nax.set(xlim=(0, 8), xticks=np.arange(1, 8),\n       ylim=(0, 8), yticks=np.arange(1, 8))\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/basic/stairs.py",
    "content": "\"\"\"\n==============\nstairs(values)\n==============\n\nSee `~matplotlib.axes.Axes.stairs`.\n\"\"\"\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery')\n\n# make data\ny = [4.8, 5.5, 3.5, 4.6, 6.5, 6.6, 2.6, 3.0]\n\n# plot\nfig, ax = plt.subplots()\n\nax.stairs(y, linewidth=2.5)\n\nax.set(xlim=(0, 8), xticks=np.arange(1, 8),\n       ylim=(0, 8), yticks=np.arange(1, 8))\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/basic/stem.py",
    "content": "\"\"\"\n==========\nstem(x, y)\n==========\n\nSee `~matplotlib.axes.Axes.stem`.\n\"\"\"\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery')\n\n# make data\nx = 0.5 + np.arange(8)\ny = [4.8, 5.5, 3.5, 4.6, 6.5, 6.6, 2.6, 3.0]\n\n# plot\nfig, ax = plt.subplots()\n\nax.stem(x, y)\n\nax.set(xlim=(0, 8), xticks=np.arange(1, 8),\n       ylim=(0, 8), yticks=np.arange(1, 8))\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/stats/boxplot_plot.py",
    "content": "\"\"\"\n==========\nboxplot(X)\n==========\n\nSee `~matplotlib.axes.Axes.boxplot`.\n\"\"\"\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery')\n\n# make data:\nnp.random.seed(10)\nD = np.random.normal((3, 5, 4), (1.25, 1.00, 1.25), (100, 3))\n\n# plot\nfig, ax = plt.subplots()\nVP = ax.boxplot(D, positions=[2, 4, 6], widths=1.5, patch_artist=True,\n                showmeans=False, showfliers=False,\n                medianprops={\"color\": \"white\", \"linewidth\": 0.5},\n                boxprops={\"facecolor\": \"C0\", \"edgecolor\": \"white\",\n                          \"linewidth\": 0.5},\n                whiskerprops={\"color\": \"C0\", \"linewidth\": 1.5},\n                capprops={\"color\": \"C0\", \"linewidth\": 1.5})\n\nax.set(xlim=(0, 8), xticks=np.arange(1, 8),\n       ylim=(0, 8), yticks=np.arange(1, 8))\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/stats/ecdf.py",
    "content": "\"\"\"\n=======\necdf(x)\n=======\n\nSee `~matplotlib.axes.Axes.ecdf`.\n\"\"\"\n\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery')\n\n# make data\nnp.random.seed(1)\nx = 4 + np.random.normal(0, 1.5, 200)\n\n# plot:\nfig, ax = plt.subplots()\nax.ecdf(x)\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/stats/errorbar_plot.py",
    "content": "\"\"\"\n==========================\nerrorbar(x, y, yerr, xerr)\n==========================\n\nSee `~matplotlib.axes.Axes.errorbar`.\n\"\"\"\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery')\n\n# make data:\nnp.random.seed(1)\nx = [2, 4, 6]\ny = [3.6, 5, 4.2]\nyerr = [0.9, 1.2, 0.5]\n\n# plot:\nfig, ax = plt.subplots()\n\nax.errorbar(x, y, yerr, fmt='o', linewidth=2, capsize=6)\n\nax.set(xlim=(0, 8), xticks=np.arange(1, 8),\n       ylim=(0, 8), yticks=np.arange(1, 8))\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/stats/eventplot.py",
    "content": "\"\"\"\n============\neventplot(D)\n============\n\nSee `~matplotlib.axes.Axes.eventplot`.\n\"\"\"\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery')\n\n# make data:\nnp.random.seed(1)\nx = [2, 4, 6]\nD = np.random.gamma(4, size=(3, 50))\n\n# plot:\nfig, ax = plt.subplots()\n\nax.eventplot(D, orientation=\"vertical\", lineoffsets=x, linewidth=0.75)\n\nax.set(xlim=(0, 8), xticks=np.arange(1, 8),\n       ylim=(0, 8), yticks=np.arange(1, 8))\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/stats/hexbin.py",
    "content": "\"\"\"\n===============\nhexbin(x, y, C)\n===============\n\nSee `~matplotlib.axes.Axes.hexbin`.\n\"\"\"\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery-nogrid')\n\n# make data: correlated + noise\nnp.random.seed(1)\nx = np.random.randn(5000)\ny = 1.2 * x + np.random.randn(5000) / 3\n\n# plot:\nfig, ax = plt.subplots()\n\nax.hexbin(x, y, gridsize=20)\n\nax.set(xlim=(-2, 2), ylim=(-3, 3))\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/stats/hist2d.py",
    "content": "\"\"\"\n============\nhist2d(x, y)\n============\n\nSee `~matplotlib.axes.Axes.hist2d`.\n\"\"\"\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery-nogrid')\n\n# make data: correlated + noise\nnp.random.seed(1)\nx = np.random.randn(5000)\ny = 1.2 * x + np.random.randn(5000) / 3\n\n# plot:\nfig, ax = plt.subplots()\n\nax.hist2d(x, y, bins=(np.arange(-3, 3, 0.1), np.arange(-3, 3, 0.1)))\n\nax.set(xlim=(-2, 2), ylim=(-3, 3))\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/stats/hist_plot.py",
    "content": "\"\"\"\n=======\nhist(x)\n=======\n\nSee `~matplotlib.axes.Axes.hist`.\n\"\"\"\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery')\n\n# make data\nnp.random.seed(1)\nx = 4 + np.random.normal(0, 1.5, 200)\n\n# plot:\nfig, ax = plt.subplots()\n\nax.hist(x, bins=8, linewidth=0.5, edgecolor=\"white\")\n\nax.set(xlim=(0, 8), xticks=np.arange(1, 8),\n       ylim=(0, 56), yticks=np.linspace(0, 56, 9))\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/stats/pie.py",
    "content": "\"\"\"\n======\npie(x)\n======\n\nSee `~matplotlib.axes.Axes.pie`.\n\"\"\"\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery-nogrid')\n\n\n# make data\nx = [1, 2, 3, 4]\ncolors = plt.get_cmap('Blues')(np.linspace(0.2, 0.7, len(x)))\n\n# plot\nfig, ax = plt.subplots()\nax.pie(x, colors=colors, radius=3, center=(4, 4),\n       wedgeprops={\"linewidth\": 1, \"edgecolor\": \"white\"}, frame=True)\n\nax.set(xlim=(0, 8), xticks=np.arange(1, 8),\n       ylim=(0, 8), yticks=np.arange(1, 8))\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/stats/violin.py",
    "content": "\"\"\"\n=============\nviolinplot(D)\n=============\n\nSee `~matplotlib.axes.Axes.violinplot`.\n\"\"\"\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery')\n\n# make data:\nnp.random.seed(10)\nD = np.random.normal((3, 5, 4), (0.75, 1.00, 0.75), (200, 3))\n\n# plot:\nfig, ax = plt.subplots()\n\nvp = ax.violinplot(D, [2, 4, 6], widths=2,\n                   showmeans=False, showmedians=False, showextrema=False)\n# styling:\nfor body in vp['bodies']:\n    body.set_alpha(0.9)\nax.set(xlim=(0, 8), xticks=np.arange(1, 8),\n       ylim=(0, 8), yticks=np.arange(1, 8))\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/unstructured/tricontour.py",
    "content": "\"\"\"\n===================\ntricontour(x, y, z)\n===================\n\nSee `~matplotlib.axes.Axes.tricontour`.\n\"\"\"\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery-nogrid')\n\n# make data:\nnp.random.seed(1)\nx = np.random.uniform(-3, 3, 256)\ny = np.random.uniform(-3, 3, 256)\nz = (1 - x/2 + x**5 + y**3) * np.exp(-x**2 - y**2)\nlevels = np.linspace(z.min(), z.max(), 7)\n\n# plot:\nfig, ax = plt.subplots()\n\nax.plot(x, y, 'o', markersize=2, color='lightgrey')\nax.tricontour(x, y, z, levels=levels)\n\nax.set(xlim=(-3, 3), ylim=(-3, 3))\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/unstructured/tricontourf.py",
    "content": "\"\"\"\n====================\ntricontourf(x, y, z)\n====================\n\nSee `~matplotlib.axes.Axes.tricontourf`.\n\"\"\"\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery-nogrid')\n\n# make data:\nnp.random.seed(1)\nx = np.random.uniform(-3, 3, 256)\ny = np.random.uniform(-3, 3, 256)\nz = (1 - x/2 + x**5 + y**3) * np.exp(-x**2 - y**2)\nlevels = np.linspace(z.min(), z.max(), 7)\n\n# plot:\nfig, ax = plt.subplots()\n\nax.plot(x, y, 'o', markersize=2, color='grey')\nax.tricontourf(x, y, z, levels=levels)\n\nax.set(xlim=(-3, 3), ylim=(-3, 3))\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/unstructured/tripcolor.py",
    "content": "\"\"\"\n==================\ntripcolor(x, y, z)\n==================\n\nSee `~matplotlib.axes.Axes.tripcolor`.\n\"\"\"\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery-nogrid')\n\n# make data:\nnp.random.seed(1)\nx = np.random.uniform(-3, 3, 256)\ny = np.random.uniform(-3, 3, 256)\nz = (1 - x/2 + x**5 + y**3) * np.exp(-x**2 - y**2)\n\n# plot:\nfig, ax = plt.subplots()\n\nax.plot(x, y, 'o', markersize=2, color='grey')\nax.tripcolor(x, y, z)\n\nax.set(xlim=(-3, 3), ylim=(-3, 3))\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/Examples/unstructured/triplot.py",
    "content": "\"\"\"\n=============\ntriplot(x, y)\n=============\n\nSee `~matplotlib.axes.Axes.triplot`.\n\"\"\"\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nplt.style.use('_mpl-gallery-nogrid')\n\n# make data:\nnp.random.seed(1)\nx = np.random.uniform(-3, 3, 256)\ny = np.random.uniform(-3, 3, 256)\nz = (1 - x/2 + x**5 + y**3) * np.exp(-x**2 - y**2)\n\n# plot:\nfig, ax = plt.subplots()\n\nax.triplot(x, y)\n\nax.set(xlim=(-3, 3), ylim=(-3, 3))\n\nplt.show()\n"
  },
  {
    "path": "Python GPT/MatPlotLibAssistant/knowledge/standards.txt",
    "content": "This guide contains standards for the assistant to adhere to.\nAdhering to standards is suggested but not required if it leads to poor solutions.\nThe specifications of the user override the standards.\n"
  },
  {
    "path": "Python GPT/actions",
    "content": "!! In progress. This file is not live yet\n\n{\n  \"openapi\": \"3.1.0\",\n  \"info\": {\n    \"title\": \"GitHub Code Repository Data\",\n    \"description\": \"Accesses code examples from the specified GitHub repository.\",\n    \"version\": \"v1.0.0\"\n  },\n  \"servers\": [\n    {\n      \"url\": \"https://api.github.com\"\n    }\n  ],\n  \"paths\": {\n    \"/repos/{owner}/{repo}/contents/{path}\": {\n      \"get\": {\n        \"description\": \"Retrieve file content from a GitHub repository\",\n        \"operationId\": \"GetRepoContent\",\n        \"parameters\": [\n          {\n            \"name\": \"owner\",\n            \"in\": \"path\",\n            \"description\": \"Owner of the repository\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"repo\",\n            \"in\": \"path\",\n            \"description\": \"Repository name\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"path\",\n            \"in\": \"path\",\n            \"description\": \"File path within the repository\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"deprecated\": false\n      }\n    }\n  },\n  \"components\": {\n    \"schemas\": {}\n  }\n}\n"
  },
  {
    "path": "Python GPT/knowledge/advanced topics",
    "content": "Recursion:\ndef factorial(n):\n    \"\"\"Calculate the factorial of a number recursively.\"\"\"\n    if n == 1:\n        return 1\n    else:\n        return n * factorial(n - 1)\n\nprint(factorial(5))  # Output: 120\n\n\nDecorators:\ndef my_decorator(func):\n    def wrapper():\n        print(\"Something is happening before the function is called.\")\n        func()\n        print(\"Something is happening after the function is called.\")\n    return wrapper\n\n@my_decorator\ndef say_hello():\n    print(\"Hello!\")\n\nsay_hello()\n"
  },
  {
    "path": "Python GPT/knowledge/standards",
    "content": "This guide contains standards for the assistant to adhere to.\nAdhering to standards is suggested but not required if it leads to poor solutions.\nThe specifications of the user override the standards.\n"
  },
  {
    "path": "Python GPT/knowledge/subAssistants.txt",
    "content": "This document contains links to specialists for differnt Python tools. If a user reports issues with your propsed solutions, you may direct them to a specialist better equiped with assisting them.\nMatPlotLib: https://chat.openai.com/g/g-Rrmi8GAo0-matplotlib-assistant"
  },
  {
    "path": "README.md",
    "content": "# Welcome to Whitebox <img align=\"right\" width=\"200\" height=\"200\" src=https://github.com/Decron/Whitebox-Code-GPT/assets/1786607/aa21eaaa-2016-4369-a0b1-b0fe14bf5bab>\n\n\n🎒 Our [inventory assistant](https://chat.openai.com/g/g-oBpMxDEHp-inventory-assistant) will deliver a link to the best programming assistant for your use case. <br> \n\nOur goal is to accelerate free high quality AI assistants with GPT builder by allowing experts and users to collaborate openly. Here you'll find instructions & knowledge files for creating next-gen programming assistants.\n\nAll ideas are welcome. If you would like to add a new assistant, fork this repository and add your files, then issue a pull request. Also remember to update the index in README.md.<br>\n*If you would rather maintain the assistant alone, you may issue a pull request adding your link to the partnered index.*\n\n**If you are experiencing an issue with one of our assistants**: kindly open an issue and include the title of the assistant and links to relevant conversation history. If the conversation contains sensitive information, generalized plain text may be copied and pasted.<br>\n\n[Twitter](https://twitter.com/Hadrio_Official) |\n  [Threads](https://www.threads.net/@_hadrio) |\n  [Discord (new!)](https://discord.gg/xXb7qWq7) |\n\n# Existing models:\n*all assistants are hosted on ChatGPT and are 100% free to use for ChatGPT premium users. Assistants are held to the highest standards and are quality-tested to guarantee a great user experience.*<br>\n* [Python GPT](https://chat.openai.com/g/g-c188mmoYi-python-gpt)<br>\n* [Flutter GPT](https://chat.openai.com/g/g-u27ZCAhaF-flutter-gpt)<br>\n* [Git assistant](https://chat.openai.com/g/g-8z4fiuUqu-git-assistant)<br>\n* [Regex assistant](https://chat.openai.com/g/g-kftiI07yn-regex-assistant)<br>\n* [Firebase GPT](https://chat.openai.com/g/g-1PHZ3Y82z-firebase-gpt)<br>\n* [Node.js GPT](https://chat.openai.com/g/g-Io3tGysfO-node-js-gpt) -- up for adoption<br>\n* [C++ GPT](https://chat.openai.com/g/g-8boxKPzCP-c-gpt) -- up for adoption<br>\n* C# *Coming soon*\n<br>\n\n**Application-specific**:\n  * Bioinformatics: *Coming soon*\n  * Controls & Automation Engineering:\n    * [DeltaV assistant](https://chat.openai.com/g/g-I4nCWakWH-deltav-assistant)\n<br><br>\n\n[Dorkotron](https://chat.openai.com/g/g-w8BP4FYQR-gpt-dorkotron) for finding everything else.<br><br>\n\n# Partnered models:\n* [GPT Instruction Builder](https://chat.openai.com/g/g-VPSbVqjy1-system-instruction-constructor)\n\n  *If you would like to partner with Whitebox, fill out our form [here](https://forms.gle/fnwS3xjWkRy57x1B9)*\n\n# Table of Contents\n- [Existing Models](#existing-models)\n- [How does it work?](#how-does-it-work)\n- [Custodial Process](#custodial-process)\n- [Making and Maintaining Assistants](#making-and-maintaining-assistants)\n- [Are Whitebox assistants safe for enterprises?](#are-whitebox-assistants-safe-for-enterprises)\n- [Getting Involved](#getting-involved)\n- [\"I don't like reading is there a GPT that will spoonfeed this to me?\"](#i-dont-like-reading-is-there-a-gpt-that-will-spoonfeed-this-to-me)\n\n# How does it work?\n0. What are Custom GPTs?<br>\n    * Custom GPT's allow experts to collaborate and condense their knowledge into a single assistant powered by GPT4. You can read OpenAI's announcement [here](https://openai.com/blog/introducing-gpts)\n    * Because they're hosted on ChatGPT, all Code-GPT assistants can be used freely and require no installation.<br>\n   *If a user does not have ChatGPT premium, assistants may still be used by copying knowledge files to a different LLM.*\n   \n2. Background<br>\n    * AI assistants make programmers more effective by suggesting improvments and providing context based on a wide training set of language and code.\n    *  A key flaw is they cannot be continuously up to date on best practices for every domain. Because of this, all models have blind spots that limit their full potential. To counteract this we must define the blindspots caused by training and create techniques to overcome them.\n    * By open-sourcing documents, experts may collaborate, discuss, and fork assistants to create effective assistants for every use case.\n\n3. Purpose and Function<br>\n    * expanded context: The latest generation of multimodal LLMs have the capacity to parse through massive files that would typically overwhelm its context window. If information is structured correctly, this can vastly increase the amount of knowledge availible to a model when working in a known field. For instance we created specific rule sets for each flavor of regex and greatly improved our assistant's ability to create valid patterns that did not mix flavors.\n    * Specialization: Each knowledge file is dedicated to a particular entity or topic, providing in-depth information about it. This could include historical data, technical specifications, or any relevant details that aids the assistant's understanding of a topic.\n    * Integration with GPT: These files are designed to be integrated into the LLM's existing knowledge base, augmenting its ability to generate accurate and contextually relevant responses about the specific entities.\n    * Content Organization: Information within these files is usually organized in a hierarchical or relational manner, allowing the model to understand the connections between different pieces of data.<br><br>\n\n4. Creation and Maintenance<br>\n    * Data Sourcing: The information in these files is compiled from reliable sources, ensuring accuracy and relevancy. Experts for given frameworks are welcome to contribute files or improvements.\n    * Regular Updates: To maintain the relevance of the information, these knowledge files are regularly updated with the latest data.\n    * Quality Assurance: Assistants are checked rigorously to ensure accuracy of the information. A secondary goal of this project is to develop automated testing to ensure widespread functionality can be guarunteed for all models.<br><br>\n\n5. Impact on GPT Performance<br>\n    * Enhanced Accuracy: By having direct access to detailed information, the GPT model can provide better and more accurate responses.\n    * Efficiency: Since the data is structured and tailored for quick retrieval, the response time can be faster for queries related to these entities.\n    * Customization: This approach allows for customization of the GPT model’s responses based on the specific requirements of the application or domain.<br><br>\n\n# Custodial process:\nSince each assistant must be assoicated with a single OpenAI account, we will assign a custodian to manage its state. They are a subject matter experts for their given technology and are the sole decider of what content is included in the official model.<br>\n\ncustodian: If you are interested in becoming a custodian, create a fork and add a new folder. Once the new assistant is created, issue a pull request to have it added.\n\nadmin: The admin will assess possible candidates and grant custodianship to the most qualified candidate. The admin is the sole decider of who is the official custodian of a assistant but should seek out the opinions of the community before adding or revoking custodianship.<br>\n\nadmin: Once the assistant is complete and a link is provided, the admin will confirm the directory in this file is updated and then merge the pull request.<br>\n\nrevoking custodianship: If a custodian wishes to forfeit custodianship of an assistant, we ask that they participate in finding a suitable replacement. Once found, we will grant them access and update the directory to reflect the change of ownership.<br>\n\n# Making and maintaining assistants:\n**Activity:** Once custodianship is granted, you're free to update your assistant however you see fit. We just ask that you make a reasonable effort to seek and aggregate user requests and improve your assistant, especially during periods of high activity such as when OpenAI updates their models, or a new major revision of a language is released.<br>\n\n**Standards:** The custodian has the final say in the name and description of a assistant but we ask that they are both descriptive and that the description features a link to this repo. For instance: \"Python development made easy. Maintained by Whitebox at https://github.com/Decron/Whitebox\"<br>\n\n**Experimentation:** It may be beneficial to create a backup assistant to experiment with to avoid disrupting users of the primary assistant.<br>\n\n**Conversation training:** For now we ask that you disable conversation training for the models under your purvue. There are pros and cons of leaving it disabled, and the topic can be addressed later if the community believes conversation training is important.<br>\n\n**Less is more:** If your assistant is struggling with too many files or over-generlization, you can always split it into multiple assistants.<br>\n\n# Are Whitebox assistants safe for enterprises?\n  For the most part yes, here are the facts:<br>\n  * This project is *enirely* open-source so you may repurpose this repo however you see fit. In return giving credit for our files is appreciated but the decision is ultimately yours.<br>\n  * We've asked all custodians to disable conversation training. This setting cannot be truly verified so it is not reccomended to include information you would not want OpenAI to see. Whitebox does not have access to your conversation history.\n  * Training based on knowledge files and uploaded documents cannot be disabled with GPT builder. Because of this you should not include sensitive material in knowledge files for our assistants, and you should not upload sensitive files when using them.\n  * Unconsented storage of user data by model creators is absolutely prohibbited and will lead to irrevocable dismissal from the project.\n  * If you have a custom OpenAI endpoint or you are using our knowledge files on a different LLM, rules about conversation and document training may not apply. Talk to your system administrator.\n  * If you would like our assistance creating personalized assistants for your enterprise, please message us at hadriogroup@gmail.com.\n\n# Getting involved:\n**Contributing**<br>\n* The most important thing is to understand GPT4's weaknesses and blind spots. If you find it struggling with certain topics or see complaints online, open an [issue](https://github.com/Decron/Whitebox-Code-GPT/issues) or a [discussion](https://github.com/Decron/Whitebox-Code-GPT/discussions) to help us understand the problem.\n* Secondly, we need to get the word out about this new technology. Share this repo with people you think would be interested, and invite domain experts to contribute by claiming assistants.\n* If you're reading this we want to hear your use case. What annoys you most about programming assistants? Go open a discussion and we'll do our best to improve your experience.\n* If you don't have access to ChatGPT premium, we'd love to collaborate on other applications for our knowledge files.\n* If you'd like to hear announcements about new assistant releases and partnered agents, follow us for free on [Substack](https://substack.com/@thehadriogroup?utm_source=edit-profile-page)<br><br>\n\n**Support**<br>\n* Whitebox is maintained entirely by volunteers. If you would like to donate to the project, see our [Donation Link](https://paypal.me/Hadrio?country.x=US&locale.x=en_US)\n* If you're interested in Whitebox swag, we have a merch page [here](https://www.redbubble.com/i/sweatshirt/Hadrio-Whitebox-by-JimmyDonovan/147231741.LEP2X)\n\n# \"I don't like reading is there a GPT that will spoonfeed this to me?\"\nYes: https://chat.openai.com/g/g-cwigWCh11-code-gpt-gpt\n\n# Sponsors\n **We are actively seeking organizations to sponsor this project so we may deliver the best possible programming assistants. If you're interested in sponsoring us please send all inquiries to hadriogroup@gmail.com**<br><br>\n *This project was brought to you by The Hadrio Group. We are a San Francisco based community of MIT and UC Berkeley alumni that focuses on quality and data stewardship in AI.*<br><br>\n\n # Additional models\n *This project is geared to optimize assistants for the custom GPT marketplace provided by OpenAI. If you find that our knowledge files transfer effectively to other models, we would be very interested in hearing more about it.*<br><br><hr/><br><br>\n <p align=\"center\">\n<img align=\"center\" width=\"100\" height=\"100\" src=https://github.com/Decron/Whitebox-Code-GPT/assets/1786607/aa21eaaa-2016-4369-a0b1-b0fe14bf5bab>\n  <br>\n Wander with confidence.\n </p> \n \n \n\n"
  },
  {
    "path": "SECURITY.md",
    "content": "# Security Policy\n\n## Supported Versions\n\nThis project can be run on the latest version of ChatGPT for premium users.\n\n## Reporting a Vulnerability\n\nIf you experience a security vulnerability using the default GPT4 model or one of our purpose-built models, please search for an issue describing the behavior. If none is found open an issue and describe your problem.<br><br> If possible include links to relevant conversation history, or include generalized plaintext.<br><br>\nOnce we have identified the issue we will work to update the knowledge files of the relevant bot(s) as quickly as possible.<br><br>\nIf an urgent vulnerability is detected you may reach out to hadriogroup@gmail.com and describe your issue.\n"
  },
  {
    "path": "inventory.json",
    "content": "{\n    \"Flutter\": {\n        \"description\": \"General purpose Flutter assistant.\",\n        \"link\": \"https://chat.openai.com/g/g-u27ZCAhaF-flutter-gpt\"\n    },\n    \"C++\": {\n        \"description\": \"General purpose C++ assistant.\",\n        \"link\": \"https://chat.openai.com/g/g-1PHZ3Y82z-firebase-gpt\"\n    },\n    \"Python\": {\n        \"description\": \"General purpose Python assistant.\",\n        \"link\": \"https://chat.openai.com/g/g-c188mmoYi-python-gpt\"\n        \"subassistants\": {\n            \"MatPlotLib\": \"https://chat.openai.com/g/g-Rrmi8GAo0-matplotlib-assistant\"\n        }\n    },\n    \"Git\": {\n        \"description\": \"General purpose Git assistant.\",\n        \"link\": \"https://chat.openai.com/g/g-u27ZCAhaF-flutter-gpt\"\n    },\n    \"regex\": {\n        \"description\": \"Specialst for regex patterns of all types.\",\n        \"link\": \"https://chat.openai.com/g/g-kftiI07yn-regex-assistant\"\n    },\n    \"Node.js\": {\n        \"description\": \"Javascript assistant specialized for node.js\",\n        \"link\": \"https://chat.openai.com/g/g-Io3tGysfO-node-js-gpt\"\n    },\n    \"Firebase\": {\n        \"description\": \"Designed to assist with the back end service Firebase.\",\n        \"link\": \"https://chat.openai.com/g/g-1PHZ3Y82z-firebase-gpt\"\n    },\n    \"Emoji GPT\": {\n        \"description\": \"Just for fun :)\",\n        \"link\": \"https://chat.openai.com/g/g-mvOpDRXMz-an-emoji-gpt\"\n    },\n    \"Repo Assistant\": {\n        \"description\": \"All you need to know about the open source Code GPT project repo at https://github.com/Decron/Code-GPT\",\n        \"link\": \"https://chat.openai.com/g/g-mvOpDRXMz-an-emoji-gpt\"\n    },\n    \"Dorkotron\": {\n        \"description\": \"All you need to know about the open source Code GPT project repo at https://github.com/Decron/Code-GPT\",\n        \"link\": \"https://chat.openai.com/g/g-mvOpDRXMz-an-emoji-gpt\"\n    }\n}\n"
  },
  {
    "path": "regex/.github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ncustom: ['https://www.paypal.com/paypalme/seller/Hadrio/dashboard']\n"
  },
  {
    "path": "regex/Conversation Starters",
    "content": "How do I solve this Node.js error?\nExplain Node.js async/await.\nBest practices for Node.js security?\nOptimizing Node.js performance tips?"
  },
  {
    "path": "regex/Instructions",
    "content": "The GPT will be focused on handling and creating regular expressions (regex) commands. Its role will be to assist users in constructing, understanding, and troubleshooting regex patterns for various programming and scripting languages. It will guide users in forming regex patterns, explaining their functions, and debugging them when they do not work as expected. It should ask for clarification when the user's requirements or the context of the regex usage are not clear. Focus on brevity unless the user specifically asks for an explanation.\n\nIf the user enters a simple command, follow it with as little commentary as possible.\n"
  },
  {
    "path": "regex/actions",
    "content": "!! In progress. This file is not live yet\n\n{\n  \"openapi\": \"3.1.0\",\n  \"info\": {\n    \"title\": \"GitHub Code Repository Data\",\n    \"description\": \"Accesses code examples from the specified GitHub repository.\",\n    \"version\": \"v1.0.0\"\n  },\n  \"servers\": [\n    {\n      \"url\": \"https://api.github.com\"\n    }\n  ],\n  \"paths\": {\n    \"/repos/{owner}/{repo}/contents/{path}\": {\n      \"get\": {\n        \"description\": \"Retrieve file content from a GitHub repository\",\n        \"operationId\": \"GetRepoContent\",\n        \"parameters\": [\n          {\n            \"name\": \"owner\",\n            \"in\": \"path\",\n            \"description\": \"Owner of the repository\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"repo\",\n            \"in\": \"path\",\n            \"description\": \"Repository name\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"path\",\n            \"in\": \"path\",\n            \"description\": \"File path within the repository\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"deprecated\": false\n      }\n    }\n  },\n  \"components\": {\n    \"schemas\": {}\n  }\n}\n"
  },
  {
    "path": "regex/knowledge/ECMA",
    "content": "{\n  \"characterClasses\": {\n    \"dot\": \"Matches any character except newline or other line terminators\",\n    \"word\": \"\\\\w - Matches any word character (alphanumeric & underscore)\",\n    \"nonWord\": \"\\\\W - Matches any non-word character\",\n    \"digit\": \"\\\\d - Matches any digit\",\n    \"nonDigit\": \"\\\\D - Matches any non-digit character\",\n    \"whitespace\": \"\\\\s - Matches any whitespace character (spaces, tabs, line breaks)\",\n    \"nonWhitespace\": \"\\\\S - Matches any non-whitespace character\"\n  },\n  \"quantifiers\": {\n    \"zeroOrMore\": \"* - Matches 0 or more repetitions\",\n    \"oneOrMore\": \"+ - Matches 1 or more repetitions\",\n    \"zeroOrOne\": \"? - Matches 0 or 1 repetition\",\n    \"exact\": \"{n} - Matches exactly n occurrences\",\n    \"range\": \"{n,m} - Matches between n and m occurrences\"\n  },\n  \"anchorsAndBoundaries\": {\n    \"beginningOfString\": \"^ - Matches the beginning of a string\",\n    \"endOfString\": \"$ - Matches the end of a string\",\n    \"wordBoundary\": \"\\\\b - Matches a word boundary\",\n    \"nonWordBoundary\": \"\\\\B - Matches a non-word boundary\"\n  },\n  \"groupsAndLookaround\": {\n    \"capturingGroup\": \"(...) - Captures the matched group\",\n    \"nonCapturingGroup\": \"(?:...) - Non-capturing group\",\n    \"positiveLookahead\": \"(?=...) - Positive lookahead\",\n    \"negativeLookahead\": \"(?!...) - Negative lookahead\"\n  },\n  \"specialCharacters\": {\n    \"backslash\": \"\\\\ - Escapes a special character\",\n    \"caret\": \"^ - Inside a character set, negates the set\",\n    \"pipe\": \"| - Alternation, matches either the pattern before or after the pipe\",\n    \"squareBrackets\": \"[] - Character set, matches any character within the brackets\"\n  },\n  \"flags\": {\n    \"global\": \"g - Global search\",\n    \"caseInsensitive\": \"i - Case insensitive search\",\n    \"multiline\": \"m - Multiline search\",\n    \"unicode\": \"u - Treat pattern as a sequence of unicode code points\",\n    \"sticky\": \"y - Sticky search, matches from the current position in the target string\"\n  }\n}\n"
  },
  {
    "path": "regex/knowledge/Go",
    "content": "{\n  \"characterClasses\": {\n    \"dot\": \"Matches any character except newline\",\n    \"word\": \"\\\\w - Matches any word character (alphanumeric & underscore)\",\n    \"nonWord\": \"\\\\W - Matches any non-word character\",\n    \"digit\": \"\\\\d - Matches any digit\",\n    \"nonDigit\": \"\\\\D - Matches any non-digit character\",\n    \"whitespace\": \"\\\\s - Matches any whitespace character (spaces, tabs, line breaks)\",\n    \"nonWhitespace\": \"\\\\S - Matches any non-whitespace character\"\n  },\n  \"quantifiers\": {\n    \"zeroOrMore\": \"* - Matches 0 or more repetitions\",\n    \"oneOrMore\": \"+ - Matches 1 or more repetitions\",\n    \"zeroOrOne\": \"? - Matches 0 or 1 repetition\",\n    \"exact\": \"{n} - Matches exactly n occurrences\",\n    \"range\": \"{n,m} - Matches between n and m occurrences\",\n    \"greedy\": \"Quantifiers are greedy by default\",\n    \"nonGreedy\": \"*?, +?, ??, {n,m}? - Non-greedy (lazy) quantifiers\"\n  },\n  \"anchorsAndBoundaries\": {\n    \"beginningOfString\": \"^ - Matches the beginning of a string\",\n    \"endOfString\": \"$ - Matches the end of a string\",\n    \"wordBoundary\": \"\\\\b - Matches a word boundary\",\n    \"nonWordBoundary\": \"\\\\B - Matches a non-word boundary\"\n  },\n  \"groupsAndLookaround\": {\n    \"capturingGroup\": \"(...) - Captures the matched group\",\n    \"nonCapturingGroup\": \"(?:...) - Non-capturing group\",\n    \"positiveLookahead\": \"(?=...) - Positive lookahead (supported)\",\n    \"negativeLookahead\": \"(?!...) - Negative lookahead (supported)\",\n    \"lookbehind\": \"Lookbehind assertions are not supported in Go\"\n  },\n  \"specialCharacters\": {\n    \"backslash\": \"\\\\ - Escapes a special character\",\n    \"caret\": \"^ - Inside a character set, negates the set\",\n    \"pipe\": \"| - Alternation, matches either the pattern before or after the pipe\",\n    \"squareBrackets\": \"[] - Character set, matches any character within the brackets\"\n  },\n  \"flags\": {\n    \"singleLine\": \"s - Dot matches newline characters\",\n    \"multiLine\": \"m - ^ and $ match at the beginning and end of a line, respectively\",\n    \"ignoreCase\": \"i - Case insensitive search\"\n  },\n  \"limitations\": {\n    \"backReferences\": \"Backreferences (\\\\1, \\\\2, ...) are not supported\",\n    \"complexLookbehind\": \"Complex lookbehind patterns are not supported\"\n  }\n}\n"
  },
  {
    "path": "regex/knowledge/Java 8",
    "content": "{\n  \"characterClasses\": {\n    \"dot\": \"Matches any character except newline, unless DOTALL mode is set\",\n    \"word\": \"\\\\w - Matches any word character (alphanumeric & underscore)\",\n    \"nonWord\": \"\\\\W - Matches any non-word character\",\n    \"digit\": \"\\\\d - Matches any digit\",\n    \"nonDigit\": \"\\\\D - Matches any non-digit character\",\n    \"whitespace\": \"\\\\s - Matches any whitespace character (spaces, tabs, line breaks)\",\n    \"nonWhitespace\": \"\\\\S - Matches any non-whitespace character\"\n  },\n  \"quantifiers\": {\n    \"zeroOrMore\": \"* - Matches 0 or more repetitions\",\n    \"oneOrMore\": \"+ - Matches 1 or more repetitions\",\n    \"zeroOrOne\": \"? - Matches 0 or 1 repetition\",\n    \"exact\": \"{n} - Matches exactly n occurrences\",\n    \"range\": \"{n,m} - Matches between n and m occurrences\",\n    \"greedy\": \"By default, quantifiers are greedy\",\n    \"reluctant\": \"*?, +?, ??, {n,m}? - Reluctant (non-greedy) quantifiers\",\n    \"possessive\": \"*+, ++, ?+, {n,m}+ - Possessive quantifiers\"\n  },\n  \"anchorsAndBoundaries\": {\n    \"beginningOfString\": \"^ - Matches the beginning of a string\",\n    \"endOfString\": \"$ - Matches the end of a string\",\n    \"wordBoundary\": \"\\\\b - Matches a word boundary\",\n    \"nonWordBoundary\": \"\\\\B - Matches a non-word boundary\"\n  },\n  \"groupsAndLookaround\": {\n    \"capturingGroup\": \"(...) - Captures the matched group\",\n    \"nonCapturingGroup\": \"(?:...) - Non-capturing group\",\n    \"positiveLookahead\": \"(?=...) - Positive lookahead\",\n    \"negativeLookahead\": \"(?!...) - Negative lookahead\",\n    \"positiveLookbehind\": \"(?<=...) - Positive lookbehind\",\n    \"negativeLookbehind\": \"(?<!...) - Negative lookbehind\",\n    \"namedGroup\": \"(?P<name>...) - Named capturing group (Java 7+)\"\n  },\n  \"specialCharacters\": {\n    \"backslash\": \"\\\\ - Escapes a special character\",\n    \"caret\": \"^ - Inside a character set, negates the set\",\n    \"pipe\": \"| - Alternation, matches either the pattern before or after the pipe\",\n    \"squareBrackets\": \"[] - Character set, matches any character within the brackets\"\n  },\n  \"flags\": {\n    \"caseInsensitive\": \"Pattern.CASE_INSENSITIVE - Case insensitive matching\",\n    \"multiline\": \"Pattern.MULTILINE - ^ and $ match start and end of a line\",\n    \"dotAll\": \"Pattern.DOTALL - Dot matches all, including newline\",\n    \"unicodeCharacterClass\": \"Pattern.UNICODE_CHARACTER_CLASS - Use Unicode TR#18 character classes\",\n    \"comments\": \"Pattern.COMMENTS - Permits whitespace and comments in pattern\"\n  },\n  \"additionalFeatures\": {\n    \"unicodeCase\": \"Pattern.UNICODE_CASE - Use Unicode case folding\",\n    \"canonicalEquivalence\": \"Pattern.CANON_EQ - Considers canonically equivalent character sequences as identical\",\n    \"literal\": \"Pattern.LITERAL - Enables literal parsing of the pattern\"\n  }\n}\n"
  },
  {
    "path": "regex/knowledge/PCRE2",
    "content": "{\n  \"characterClasses\": {\n    \"dot\": \"Matches any character except newline (or any character if DOTALL mode is set)\",\n    \"word\": \"\\\\w - Matches any word character (alphanumeric & underscore)\",\n    \"nonWord\": \"\\\\W - Matches any non-word character\",\n    \"digit\": \"\\\\d - Matches any digit\",\n    \"nonDigit\": \"\\\\D - Matches any non-digit character\",\n    \"whitespace\": \"\\\\s - Matches any whitespace character\",\n    \"nonWhitespace\": \"\\\\S - Matches any non-whitespace character\"\n  },\n  \"quantifiers\": {\n    \"zeroOrMore\": \"* - Matches 0 or more repetitions\",\n    \"oneOrMore\": \"+ - Matches 1 or more repetitions\",\n    \"zeroOrOne\": \"? - Matches 0 or 1 repetition\",\n    \"exact\": \"{n} - Matches exactly n occurrences\",\n    \"range\": \"{n,m} - Matches between n and m occurrences\",\n    \"greedy\": \"By default, quantifiers are greedy\",\n    \"lazy\": \"*?, +?, ??, {n,m}? - Lazy quantifiers\"\n  },\n  \"anchorsAndBoundaries\": {\n    \"beginningOfString\": \"^ - Matches the beginning of a string\",\n    \"endOfString\": \"$ - Matches the end of a string\",\n    \"wordBoundary\": \"\\\\b - Matches a word boundary\",\n    \"nonWordBoundary\": \"\\\\B - Matches a non-word boundary\"\n  },\n  \"groupsAndLookaround\": {\n    \"capturingGroup\": \"(...) - Captures the matched group\",\n    \"nonCapturingGroup\": \"(?:...) - Non-capturing group\",\n    \"positiveLookahead\": \"(?=...) - Positive lookahead\",\n    \"negativeLookahead\": \"(?!...) - Negative lookahead\",\n    \"positiveLookbehind\": \"(?<=...) - Positive lookbehind\",\n    \"negativeLookbehind\": \"(?<!...) - Negative lookbehind\",\n    \"namedGroups\": \"(?P<name>...) - Named capturing group\"\n  },\n  \"specialCharacters\": {\n    \"backslash\": \"\\\\ - Escapes a special character\",\n    \"caret\": \"^ - Inside a character set, negates the set\",\n    \"pipe\": \"| - Alternation, matches either the pattern before or after the pipe\"\n  },\n  \"flags\": {\n    \"global\": \"g - Global search\",\n    \"caseInsensitive\": \"i - Case insensitive search\",\n    \"multiline\": \"m - Multiline search\",\n    \"dotAll\": \"s - DOTALL mode, . matches newline characters\",\n    \"extended\": \"x - Extended mode for whitespace and comments\",\n    \"unicode\": \"u - Unicode mode\",\n    \"Anchored\": \"A - Anchored mode\",\n    \"DollarEndOnly\": \"D - Dollar matches only at the end\",\n    \"Extra\": \"X - Extra mode for additional functionality\"\n  },\n  \"additionalFeatures\": {\n    \"conditionalPatterns\": \"(?(condition)yes-pattern|no-pattern) - Conditional patterns\",\n    \"backReferences\": \"\\\\1, \\\\2, ... - Back references to capturing groups\",\n    \"recursivePatterns\": \"(?R) - Recursive patterns\",\n    \"verbatimSequences\": \"\\\\Q ... \\\\E - Treats enclosed characters as verbatim\"\n  }\n}\n"
  },
  {
    "path": "regex/knowledge/Python",
    "content": "{\n  \"characterClasses\": {\n    \"dot\": \"Matches any character except newline, unless DOTALL mode is set\",\n    \"word\": \"\\\\w - Matches any word character (alphanumeric & underscore)\",\n    \"nonWord\": \"\\\\W - Matches any non-word character\",\n    \"digit\": \"\\\\d - Matches any digit\",\n    \"nonDigit\": \"\\\\D - Matches any non-digit character\",\n    \"whitespace\": \"\\\\s - Matches any whitespace character (spaces, tabs, line breaks)\",\n    \"nonWhitespace\": \"\\\\S - Matches any non-whitespace character\"\n  },\n  \"quantifiers\": {\n    \"zeroOrMore\": \"* - Matches 0 or more repetitions\",\n    \"oneOrMore\": \"+ - Matches 1 or more repetitions\",\n    \"zeroOrOne\": \"? - Matches 0 or 1 repetition\",\n    \"exact\": \"{n} - Matches exactly n occurrences\",\n    \"range\": \"{n,m} - Matches between n and m occurrences\",\n    \"greedy\": \"By default, quantifiers are greedy\",\n    \"nonGreedy\": \"*?, +?, ??, {n,m}? - Non-greedy (lazy) quantifiers\"\n  },\n  \"anchorsAndBoundaries\": {\n    \"beginningOfString\": \"^ - Matches the beginning of a string or line in MULTILINE mode\",\n    \"endOfString\": \"$ - Matches the end of a string or line in MULTILINE mode\",\n    \"wordBoundary\": \"\\\\b - Matches a word boundary\",\n    \"nonWordBoundary\": \"\\\\B - Matches a non-word boundary\"\n  },\n  \"groupsAndLookaround\": {\n    \"capturingGroup\": \"(...) - Captures the matched group\",\n    \"nonCapturingGroup\": \"(?:...) - Non-capturing group\",\n    \"positiveLookahead\": \"(?=...) - Positive lookahead\",\n    \"negativeLookahead\": \"(?!...) - Negative lookahead\",\n    \"positiveLookbehind\": \"(?<=...) - Positive lookbehind\",\n    \"negativeLookbehind\": \"(?<!...) - Negative lookbehind\",\n    \"namedGroup\": \"(?P<name>...) - Named capturing group\"\n  },\n  \"specialCharacters\": {\n    \"backslash\": \"\\\\ - Escapes a special character\",\n    \"caret\": \"^ - Inside a character set, negates the set\",\n    \"pipe\": \"| - Alternation, matches either the pattern before or after the pipe\",\n    \"squareBrackets\": \"[] - Character set, matches any character within the brackets\"\n  },\n  \"flags\": {\n    \"ignoreCase\": \"re.IGNORECASE or re.I - Case insensitive search\",\n    \"multiline\": \"re.MULTILINE or re.M - Multiline search\",\n    \"dotAll\": \"re.DOTALL or re.S - Dot matches all, including newline\",\n    \"unicode\": \"re.UNICODE or re.U - Unicode matching\",\n    \"verbose\": \"re.VERBOSE or re.X - Allows verbose regexps\"\n  },\n  \"additionalFeatures\": {\n    \"conditionalPatterns\": \"(?(id/name)yes-pattern|no-pattern) - Conditional patterns\",\n    \"backReferences\": \"\\\\1, \\\\2, ... - Back references to capturing groups\",\n    \"escapeSequences\": \"\\\\A, \\\\Z, \\\\z - Start and end of string anchors\"\n  }\n}\n"
  },
  {
    "path": "regex/knowledge/Rust",
    "content": "{\n  \"characterClasses\": {\n    \"dot\": \"Matches any character except newline, unless multi-line mode is enabled\",\n    \"word\": \"\\\\w - Matches any word character (alphanumeric & underscore)\",\n    \"nonWord\": \"\\\\W - Matches any non-word character\",\n    \"digit\": \"\\\\d - Matches any digit\",\n    \"nonDigit\": \"\\\\D - Matches any non-digit character\",\n    \"whitespace\": \"\\\\s - Matches any whitespace character (spaces, tabs, line breaks)\",\n    \"nonWhitespace\": \"\\\\S - Matches any non-whitespace character\"\n  },\n  \"quantifiers\": {\n    \"zeroOrMore\": \"* - Matches 0 or more repetitions\",\n    \"oneOrMore\": \"+ - Matches 1 or more repetitions\",\n    \"zeroOrOne\": \"? - Matches 0 or 1 repetition\",\n    \"exact\": \"{n} - Matches exactly n occurrences\",\n    \"range\": \"{n,m} - Matches between n and m occurrences\",\n    \"greedy\": \"Quantifiers are greedy by default\",\n    \"nonGreedy\": \"*?, +?, ??, {n,m}? - Non-greedy (lazy) quantifiers\"\n  },\n  \"anchorsAndBoundaries\": {\n    \"beginningOfString\": \"^ - Matches the beginning of a string\",\n    \"endOfString\": \"$ - Matches the end of a string\",\n    \"wordBoundary\": \"\\\\b - Matches a word boundary\",\n    \"nonWordBoundary\": \"\\\\B - Matches a non-word boundary\"\n  },\n  \"groupsAndLookaround\": {\n    \"capturingGroup\": \"(...) - Captures the matched group\",\n    \"nonCapturingGroup\": \"(?:...) - Non-capturing group\",\n    \"lookahead\": \"Lookahead assertions (positive (?=...) and negative (?!...)) are supported\",\n    \"lookbehind\": \"Lookbehind assertions are not supported\"\n  },\n  \"specialCharacters\": {\n    \"backslash\": \"\\\\ - Escapes a special character\",\n    \"caret\": \"^ - Inside a character set, negates the set\",\n    \"pipe\": \"| - Alternation, matches either the pattern before or after the pipe\",\n    \"squareBrackets\": \"[] - Character set, matches any character within the brackets\"\n  },\n  \"flags\": {\n    \"caseInsensitive\": \"i - Case insensitive search\",\n    \"multiLine\": \"m - Multi-line mode, ^ and $ match start and end of a line\",\n    \"dotMatchesNewLine\": \"s - Dot matches new line characters\",\n    \"unicode\": \"u - Unicode support (enabled by default)\",\n    \"swapGreed\": \"U - Inverts the greediness of quantifiers\"\n  },\n  \"limitations\": {\n    \"backReferences\": \"Backreferences (\\\\1, \\\\2, ...) are not supported\",\n    \"complexLookbehind\": \"Complex lookbehind patterns are not supported\",\n    \"variableLengthLookbehind\": \"Variable-length lookbehind is not supported\"\n  }\n}\n"
  },
  {
    "path": "regex/knowledge/javascript",
    "content": "{\n  \"characterClasses\": {\n    \"dot\": \"Matches any character except newline\",\n    \"word\": \"\\\\w - Matches any word character (alphanumeric & underscore)\",\n    \"nonWord\": \"\\\\W - Matches any non-word character\",\n    \"digit\": \"\\\\d - Matches any digit\",\n    \"nonDigit\": \"\\\\D - Matches any non-digit character\",\n    \"whitespace\": \"\\\\s - Matches any whitespace character (spaces, tabs, line breaks)\",\n    \"nonWhitespace\": \"\\\\S - Matches any non-whitespace character\"\n  },\n  \"quantifiers\": {\n    \"zeroOrMore\": \"* - Matches 0 or more repetitions\",\n    \"oneOrMore\": \"+ - Matches 1 or more repetitions\",\n    \"zeroOrOne\": \"? - Matches 0 or 1 repetition\",\n    \"exact\": \"{n} - Matches exactly n occurrences\",\n    \"range\": \"{n,m} - Matches between n and m occurrences\"\n  },\n  \"anchorsAndBoundaries\": {\n    \"beginningOfString\": \"^ - Matches the beginning of a string\",\n    \"endOfString\": \"$ - Matches the end of a string\",\n    \"wordBoundary\": \"\\\\b - Matches a word boundary\",\n    \"nonWordBoundary\": \"\\\\B - Matches a non-word boundary\"\n  },\n  \"groupsAndLookaround\": {\n    \"group\": \"(...) - Captures the matched group\",\n    \"nonCapturingGroup\": \"(?:...) - Non-capturing group\",\n    \"positiveLookahead\": \"(?=...) - Positive lookahead\",\n    \"negativeLookahead\": \"(?!...) - Negative lookahead\",\n    \"positiveLookbehind\": \"(?<=...) - Positive lookbehind (ES2018+)\",\n    \"negativeLookbehind\": \"(?<!...) - Negative lookbehind (ES2018+)\"\n  },\n  \"specialCharacters\": {\n    \"backslash\": \"\\\\ - Escapes a special character\",\n    \"caret\": \"^ - Inside a character set, negates the set\",\n    \"pipe\": \"| - Alternation, matches either the pattern before or after the pipe\"\n  },\n  \"flags\": {\n    \"global\": \"g - Global search\",\n    \"caseInsensitive\": \"i - Case insensitive search\",\n    \"multiline\": \"m - Multiline search\",\n    \"dotAll\": \"s - Allows . to match newline characters\",\n    \"unicode\": \"u - Treat pattern as a sequence of unicode code points\",\n    \"sticky\": \"y - Sticky search, matches from the current position in the target string\"\n  }\n}\n"
  },
  {
    "path": "regex/knowledge/net",
    "content": "{\n  \"characterClasses\": {\n    \"dot\": \"Matches any character except newline, unless Singleline mode is set\",\n    \"word\": \"\\\\w - Matches any word character (alphanumeric & underscore)\",\n    \"nonWord\": \"\\\\W - Matches any non-word character\",\n    \"digit\": \"\\\\d - Matches any digit\",\n    \"nonDigit\": \"\\\\D - Matches any non-digit character\",\n    \"whitespace\": \"\\\\s - Matches any whitespace character (spaces, tabs, line breaks)\",\n    \"nonWhitespace\": \"\\\\S - Matches any non-whitespace character\"\n  },\n  \"quantifiers\": {\n    \"zeroOrMore\": \"* - Matches 0 or more repetitions\",\n    \"oneOrMore\": \"+ - Matches 1 or more repetitions\",\n    \"zeroOrOne\": \"? - Matches 0 or 1 repetition\",\n    \"exact\": \"{n} - Matches exactly n occurrences\",\n    \"range\": \"{n,m} - Matches between n and m occurrences\",\n    \"greedy\": \"By default, quantifiers are greedy\",\n    \"lazy\": \"*?, +?, ??, {n,m}? - Lazy (non-greedy) quantifiers\"\n  },\n  \"anchorsAndBoundaries\": {\n    \"beginningOfString\": \"^ - Matches the beginning of a string\",\n    \"endOfString\": \"$ - Matches the end of a string\",\n    \"wordBoundary\": \"\\\\b - Matches a word boundary\",\n    \"nonWordBoundary\": \"\\\\B - Matches a non-word boundary\",\n    \"beginningOfText\": \"\\\\A - Matches the beginning of the text\",\n    \"endOfText\": \"\\\\Z - Matches the end of the text or newline at the end\",\n    \"absoluteEndOfText\": \"\\\\z - Matches the absolute end of the text\"\n  },\n  \"groupsAndLookaround\": {\n    \"capturingGroup\": \"(...) - Captures the matched group\",\n    \"nonCapturingGroup\": \"(?:...) - Non-capturing group\",\n    \"positiveLookahead\": \"(?=...) - Positive lookahead\",\n    \"negativeLookahead\": \"(?!...) - Negative lookahead\",\n    \"positiveLookbehind\": \"(?<=...) - Positive lookbehind\",\n    \"negativeLookbehind\": \"(?<!...) - Negative lookbehind\",\n    \"namedGroup\": \"(?<name>...) - Named capturing group\",\n    \"balancingGroup\": \"(?<name1-name2>...) - Balancing group\"\n  },\n  \"specialCharacters\": {\n    \"backslash\": \"\\\\ - Escapes a special character\",\n    \"caret\": \"^ - Inside a character set, negates the set\",\n    \"pipe\": \"| - Alternation, matches either the pattern before or after the pipe\",\n    \"squareBrackets\": \"[] - Character set, matches any character within the brackets\"\n  },\n  \"flags\": {\n    \"ignoreCase\": \"IgnoreCase - Case insensitive matching\",\n    \"multiline\": \"Multiline - ^ and $ match start and end of a line\",\n    \"singleLine\": \"Singleline - Dot matches all, including newline\",\n    \"explicitCapture\": \"ExplicitCapture - Only named groups are captured\",\n    \"ignorePatternWhitespace\": \"IgnorePatternWhitespace - Ignores whitespace and comments in the pattern\",\n    \"rightToLeft\": \"RightToLeft - Search proceeds from right to left\"\n  },\n  \"additionalFeatures\": {\n    \"backReferences\": \"\\\\1, \\\\2, ... - Back references to capturing groups\",\n    \"conditionalPatterns\": \"(?(expression)yes|no) - Conditional patterns\",\n    \"inlineOptions\": \"(?imnsx-imnsx) - Inline options to turn on/off flags within the pattern\"\n  }\n}\n"
  },
  {
    "path": "regex/knowledge/standards",
    "content": "This guide contains standards for the assistant to adhere to.\nAdhering to standards is suggested but not required if it leads to poor solutions.\nThe specifications of the user override the standards.\n"
  },
  {
    "path": "template/.github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ncustom: ['https://www.paypal.com/paypalme/seller/Hadrio/dashboard']\n"
  },
  {
    "path": "template/Conversation Starters",
    "content": "How do I integrate Firebase Authentication?\nTell me about Firebase Cloud Functions.\nBest practices for Firebase Realtime Database?\nTroubleshooting Firebase Firestore issues?"
  },
  {
    "path": "template/Instructions",
    "content": "This GPT is an expert in Firebase plugins and integration, providing detailed assistance and guidance on implementing and troubleshooting Firebase features in various software projects. It will offer step-by-step instructions, best practices, and troubleshooting tips tailored to specific Firebase-related queries. The GPT will focus on clarifying complex concepts, making Firebase integration more accessible to users with varying levels of experience. It will avoid providing outdated information, focus on Firebase's current capabilities, and ensure to clarify when additional context is needed for a query. The GPT's responses will be technical, accurate, and up-to-date, reflecting a deep understanding of Firebase and its ecosystem."
  },
  {
    "path": "template/actions",
    "content": "!! In progress. This file is not live yet\n\n{\n  \"openapi\": \"3.1.0\",\n  \"info\": {\n    \"title\": \"GitHub Code Repository Data\",\n    \"description\": \"Accesses code examples from the specified GitHub repository.\",\n    \"version\": \"v1.0.0\"\n  },\n  \"servers\": [\n    {\n      \"url\": \"https://api.github.com\"\n    }\n  ],\n  \"paths\": {\n    \"/repos/{owner}/{repo}/contents/{path}\": {\n      \"get\": {\n        \"description\": \"Retrieve file content from a GitHub repository\",\n        \"operationId\": \"GetRepoContent\",\n        \"parameters\": [\n          {\n            \"name\": \"owner\",\n            \"in\": \"path\",\n            \"description\": \"Owner of the repository\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"repo\",\n            \"in\": \"path\",\n            \"description\": \"Repository name\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          {\n            \"name\": \"path\",\n            \"in\": \"path\",\n            \"description\": \"File path within the repository\",\n            \"required\": true,\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          }\n        ],\n        \"deprecated\": false\n      }\n    }\n  },\n  \"components\": {\n    \"schemas\": {}\n  }\n}\n"
  },
  {
    "path": "template/knowledge/standards",
    "content": "This guide contains standards for the assistant to adhere to.\nAdhering to standards is suggested but not required if it leads to poor solutions.\nThe specifications of the user override the standards.\n"
  }
]