master 06b429fcd3a3 cached
98 files
289.3 KB
78.8k tokens
277 symbols
1 requests
Download .txt
Showing preview only (316K chars total). Download the full file or copy to clipboard to get everything.
Repository: dreamsoftin/flutter_wordpress
Branch: master
Commit: 06b429fcd3a3
Files: 98
Total size: 289.3 KB

Directory structure:
gitextract_x59_vvxd/

├── .gitignore
├── .idea/
│   ├── codeStyles/
│   │   └── Project.xml
│   ├── dictionaries/
│   │   └── suraj.xml
│   ├── libraries/
│   │   ├── Dart_Packages.xml
│   │   ├── Dart_SDK.xml
│   │   └── Flutter_Plugins.xml
│   ├── modules.xml
│   ├── vcs.xml
│   └── workspace.xml
├── .metadata
├── CHANGELOG.md
├── LICENSE
├── README.md
├── example/
│   ├── .flutter-plugins-dependencies
│   ├── .gitignore
│   ├── .metadata
│   ├── README.md
│   ├── analysis_options.yaml
│   ├── android/
│   │   ├── .gitignore
│   │   ├── app/
│   │   │   ├── build.gradle
│   │   │   └── src/
│   │   │       ├── debug/
│   │   │       │   └── AndroidManifest.xml
│   │   │       ├── main/
│   │   │       │   ├── AndroidManifest.xml
│   │   │       │   ├── kotlin/
│   │   │       │   │   └── com/
│   │   │       │   │       └── example/
│   │   │       │   │           └── example/
│   │   │       │   │               └── MainActivity.kt
│   │   │       │   └── res/
│   │   │       │       ├── drawable/
│   │   │       │       │   └── launch_background.xml
│   │   │       │       ├── drawable-v21/
│   │   │       │       │   └── launch_background.xml
│   │   │       │       ├── values/
│   │   │       │       │   └── styles.xml
│   │   │       │       └── values-night/
│   │   │       │           └── styles.xml
│   │   │       └── profile/
│   │   │           └── AndroidManifest.xml
│   │   ├── build.gradle
│   │   ├── gradle/
│   │   │   └── wrapper/
│   │   │       └── gradle-wrapper.properties
│   │   ├── gradle.properties
│   │   └── settings.gradle
│   ├── ios/
│   │   ├── .gitignore
│   │   ├── Flutter/
│   │   │   ├── AppFrameworkInfo.plist
│   │   │   ├── Debug.xcconfig
│   │   │   ├── Flutter.podspec
│   │   │   └── Release.xcconfig
│   │   ├── Podfile
│   │   ├── Runner/
│   │   │   ├── AppDelegate.h
│   │   │   ├── AppDelegate.m
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets/
│   │   │   │   ├── AppIcon.appiconset/
│   │   │   │   │   └── Contents.json
│   │   │   │   └── LaunchImage.imageset/
│   │   │   │       ├── Contents.json
│   │   │   │       └── README.md
│   │   │   ├── Base.lproj/
│   │   │   │   ├── LaunchScreen.storyboard
│   │   │   │   └── Main.storyboard
│   │   │   ├── Info.plist
│   │   │   ├── Runner-Bridging-Header.h
│   │   │   └── main.m
│   │   ├── Runner.xcodeproj/
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace/
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcshareddata/
│   │   │   │       ├── IDEWorkspaceChecks.plist
│   │   │   │       └── WorkspaceSettings.xcsettings
│   │   │   └── xcshareddata/
│   │   │       └── xcschemes/
│   │   │           └── Runner.xcscheme
│   │   └── Runner.xcworkspace/
│   │       ├── contents.xcworkspacedata
│   │       └── xcshareddata/
│   │           ├── IDEWorkspaceChecks.plist
│   │           └── WorkspaceSettings.xcsettings
│   ├── lib/
│   │   ├── display_posts.dart
│   │   ├── generated_plugin_registrant.dart
│   │   ├── login.dart
│   │   ├── main.dart
│   │   └── post_page.dart
│   ├── pubspec.yaml
│   └── test/
│       └── widget_test.dart
├── flutter_wordpress.iml
├── lib/
│   ├── constants.dart
│   ├── flutter_wordpress.dart
│   ├── requests/
│   │   ├── params_category_list.dart
│   │   ├── params_comment_list.dart
│   │   ├── params_media_list.dart
│   │   ├── params_page_list.dart
│   │   ├── params_post_list.dart
│   │   ├── params_tag_list.dart
│   │   └── params_user_list.dart
│   └── schemas/
│       ├── avatar_urls.dart
│       ├── capabilities.dart
│       ├── category.dart
│       ├── comment.dart
│       ├── comment_hierarchy.dart
│       ├── content.dart
│       ├── excerpt.dart
│       ├── fetch_user_result.dart
│       ├── guid.dart
│       ├── jwt_response.dart
│       ├── labels.dart
│       ├── links.dart
│       ├── media.dart
│       ├── page.dart
│       ├── post.dart
│       ├── post_statuses.dart
│       ├── post_types.dart
│       ├── settings.dart
│       ├── tag.dart
│       ├── taxonomies.dart
│       ├── title.dart
│       ├── user.dart
│       └── wordpress_error.dart
└── pubspec.yaml

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
.DS_Store
.dart_tool/

.packages
.pub/

build/
ios/.generated/
ios/Flutter/Generated.xcconfig
ios/Runner/GeneratedPluginRegistrant.*


================================================
FILE: .idea/codeStyles/Project.xml
================================================
<component name="ProjectCodeStyleConfiguration">
  <code_scheme name="Project" version="173">
    <Objective-C-extensions>
      <file>
        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Import" />
        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Macro" />
        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Typedef" />
        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Enum" />
        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Constant" />
        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Global" />
        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Struct" />
        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="FunctionPredecl" />
        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Function" />
      </file>
      <class>
        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Property" />
        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Synthesize" />
        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InitMethod" />
        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="StaticMethod" />
        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InstanceMethod" />
        <option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="DeallocMethod" />
      </class>
      <extensions>
        <pair source="cpp" header="h" fileNamingConvention="NONE" />
        <pair source="c" header="h" fileNamingConvention="NONE" />
      </extensions>
    </Objective-C-extensions>
  </code_scheme>
</component>

================================================
FILE: .idea/dictionaries/suraj.xml
================================================
<component name="ProjectDictionaryState">
  <dictionary name="suraj">
    <words>
      <w>wordpress</w>
    </words>
  </dictionary>
</component>

================================================
FILE: .idea/libraries/Dart_Packages.xml
================================================
<component name="libraryTable">
  <library name="Dart Packages" type="DartPackagesLibraryType">
    <properties>
      <option name="packageNameToDirsMap">
        <entry key="archive">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/archive-2.0.11/lib" />
            </list>
          </value>
        </entry>
        <entry key="args">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/args-1.5.2/lib" />
            </list>
          </value>
        </entry>
        <entry key="async">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/async-2.4.0/lib" />
            </list>
          </value>
        </entry>
        <entry key="boolean_selector">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/boolean_selector-1.0.5/lib" />
            </list>
          </value>
        </entry>
        <entry key="charcode">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/charcode-1.1.2/lib" />
            </list>
          </value>
        </entry>
        <entry key="collection">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/collection-1.14.11/lib" />
            </list>
          </value>
        </entry>
        <entry key="convert">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/convert-2.1.1/lib" />
            </list>
          </value>
        </entry>
        <entry key="crypto">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/crypto-2.1.3/lib" />
            </list>
          </value>
        </entry>
        <entry key="csslib">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/csslib-0.16.1/lib" />
            </list>
          </value>
        </entry>
        <entry key="cupertino_icons">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/cupertino_icons-0.1.3/lib" />
            </list>
          </value>
        </entry>
        <entry key="flutter">
          <value>
            <list>
              <option value="C:/flutter/packages/flutter/lib" />
            </list>
          </value>
        </entry>
        <entry key="flutter_html">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_html-0.9.9/lib" />
            </list>
          </value>
        </entry>
        <entry key="flutter_test">
          <value>
            <list>
              <option value="C:/flutter/packages/flutter_test/lib" />
            </list>
          </value>
        </entry>
        <entry key="html">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/html-0.14.0+3/lib" />
            </list>
          </value>
        </entry>
        <entry key="http">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/http-0.12.0+4/lib" />
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/http-0.12.0+1/lib" />
            </list>
          </value>
        </entry>
        <entry key="http_parser">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/http_parser-3.1.4/lib" />
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/http_parser-3.1.3/lib" />
            </list>
          </value>
        </entry>
        <entry key="image">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/image-2.1.4/lib" />
            </list>
          </value>
        </entry>
        <entry key="matcher">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/matcher-0.12.6/lib" />
            </list>
          </value>
        </entry>
        <entry key="meta">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/meta-1.1.8/lib" />
            </list>
          </value>
        </entry>
        <entry key="path">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/path-1.6.4/lib" />
            </list>
          </value>
        </entry>
        <entry key="pedantic">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/pedantic-1.8.0+1/lib" />
            </list>
          </value>
        </entry>
        <entry key="petitparser">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/petitparser-2.4.0/lib" />
            </list>
          </value>
        </entry>
        <entry key="quiver">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/quiver-2.0.5/lib" />
            </list>
          </value>
        </entry>
        <entry key="sky_engine">
          <value>
            <list>
              <option value="C:/flutter/bin/cache/pkg/sky_engine/lib" />
            </list>
          </value>
        </entry>
        <entry key="source_span">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/source_span-1.5.5/lib" />
            </list>
          </value>
        </entry>
        <entry key="stack_trace">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/stack_trace-1.9.3/lib" />
            </list>
          </value>
        </entry>
        <entry key="stream_channel">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/stream_channel-2.0.0/lib" />
            </list>
          </value>
        </entry>
        <entry key="string_scanner">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/string_scanner-1.0.5/lib" />
            </list>
          </value>
        </entry>
        <entry key="term_glyph">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/term_glyph-1.1.0/lib" />
            </list>
          </value>
        </entry>
        <entry key="test_api">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/test_api-0.2.11/lib" />
            </list>
          </value>
        </entry>
        <entry key="typed_data">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/typed_data-1.1.6/lib" />
            </list>
          </value>
        </entry>
        <entry key="vector_math">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/vector_math-2.0.8/lib" />
            </list>
          </value>
        </entry>
        <entry key="xml">
          <value>
            <list>
              <option value="C:/flutter/.pub-cache/hosted/pub.dartlang.org/xml-3.5.0/lib" />
            </list>
          </value>
        </entry>
      </option>
    </properties>
    <CLASSES>
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/archive-2.0.11/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/args-1.5.2/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/async-2.4.0/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/boolean_selector-1.0.5/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/charcode-1.1.2/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/collection-1.14.11/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/convert-2.1.1/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/crypto-2.1.3/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/csslib-0.16.1/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/cupertino_icons-0.1.3/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_html-0.9.9/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/html-0.14.0+3/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/http-0.12.0+1/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/http-0.12.0+4/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/http_parser-3.1.3/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/http_parser-3.1.4/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/image-2.1.4/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/matcher-0.12.6/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/meta-1.1.8/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/path-1.6.4/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/pedantic-1.8.0+1/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/petitparser-2.4.0/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/quiver-2.0.5/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/source_span-1.5.5/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/stack_trace-1.9.3/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/stream_channel-2.0.0/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/string_scanner-1.0.5/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/term_glyph-1.1.0/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/test_api-0.2.11/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/typed_data-1.1.6/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/vector_math-2.0.8/lib" />
      <root url="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/xml-3.5.0/lib" />
      <root url="file://C:/flutter/bin/cache/pkg/sky_engine/lib" />
      <root url="file://C:/flutter/packages/flutter/lib" />
      <root url="file://C:/flutter/packages/flutter_test/lib" />
    </CLASSES>
    <JAVADOC />
    <SOURCES />
  </library>
</component>

================================================
FILE: .idea/libraries/Dart_SDK.xml
================================================
<component name="libraryTable">
  <library name="Dart SDK">
    <CLASSES>
      <root url="file://C:/flutter/bin/cache/dart-sdk/lib/async" />
      <root url="file://C:/flutter/bin/cache/dart-sdk/lib/cli" />
      <root url="file://C:/flutter/bin/cache/dart-sdk/lib/collection" />
      <root url="file://C:/flutter/bin/cache/dart-sdk/lib/convert" />
      <root url="file://C:/flutter/bin/cache/dart-sdk/lib/core" />
      <root url="file://C:/flutter/bin/cache/dart-sdk/lib/developer" />
      <root url="file://C:/flutter/bin/cache/dart-sdk/lib/ffi" />
      <root url="file://C:/flutter/bin/cache/dart-sdk/lib/html" />
      <root url="file://C:/flutter/bin/cache/dart-sdk/lib/indexed_db" />
      <root url="file://C:/flutter/bin/cache/dart-sdk/lib/io" />
      <root url="file://C:/flutter/bin/cache/dart-sdk/lib/isolate" />
      <root url="file://C:/flutter/bin/cache/dart-sdk/lib/js" />
      <root url="file://C:/flutter/bin/cache/dart-sdk/lib/js_util" />
      <root url="file://C:/flutter/bin/cache/dart-sdk/lib/math" />
      <root url="file://C:/flutter/bin/cache/dart-sdk/lib/mirrors" />
      <root url="file://C:/flutter/bin/cache/dart-sdk/lib/svg" />
      <root url="file://C:/flutter/bin/cache/dart-sdk/lib/typed_data" />
      <root url="file://C:/flutter/bin/cache/dart-sdk/lib/wasm" />
      <root url="file://C:/flutter/bin/cache/dart-sdk/lib/web_audio" />
      <root url="file://C:/flutter/bin/cache/dart-sdk/lib/web_gl" />
      <root url="file://C:/flutter/bin/cache/dart-sdk/lib/web_sql" />
    </CLASSES>
    <JAVADOC />
    <SOURCES />
  </library>
</component>

================================================
FILE: .idea/libraries/Flutter_Plugins.xml
================================================
<component name="libraryTable">
  <library name="Flutter Plugins" type="FlutterPluginsLibraryType">
    <CLASSES />
    <JAVADOC />
    <SOURCES />
  </library>
</component>

================================================
FILE: .idea/modules.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="ProjectModuleManager">
    <modules>
      <module fileurl="file://$PROJECT_DIR$/flutter_wordpress.iml" filepath="$PROJECT_DIR$/flutter_wordpress.iml" />
    </modules>
  </component>
</project>


================================================
FILE: .idea/vcs.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="VcsDirectoryMappings">
    <mapping directory="" vcs="Git" />
  </component>
</project>

================================================
FILE: .idea/workspace.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="CMakeSettings">
    <configurations>
      <configuration PROFILE_NAME="Debug" CONFIG_NAME="Debug" />
    </configurations>
  </component>
  <component name="ChangeListManager">
    <list default="true" id="73f4dbd7-3b98-4a12-b0ae-5e3c44fac77c" name="Default Changelist" comment="CreateUser Added!!!">
      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
    </list>
    <ignored path="$PROJECT_DIR$/.dart_tool/" />
    <ignored path="$PROJECT_DIR$/.idea/" />
    <ignored path="$PROJECT_DIR$/.pub/" />
    <ignored path="$PROJECT_DIR$/build/" />
    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
    <option name="TRACKING_ENABLED" value="true" />
    <option name="SHOW_DIALOG" value="false" />
    <option name="HIGHLIGHT_CONFLICTS" value="true" />
    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
    <option name="LAST_RESOLUTION" value="IGNORE" />
  </component>
  <component name="FUSProjectUsageTrigger">
    <session id="-603339889">
      <usages-collector id="statistics.lifecycle.project">
        <counts>
          <entry key="project.closed" value="15" />
          <entry key="project.open.time.1" value="1" />
          <entry key="project.open.time.18" value="1" />
          <entry key="project.open.time.24" value="1" />
          <entry key="project.open.time.29" value="1" />
          <entry key="project.open.time.40" value="1" />
          <entry key="project.open.time.42" value="1" />
          <entry key="project.open.time.45" value="1" />
          <entry key="project.open.time.46" value="1" />
          <entry key="project.open.time.51" value="2" />
          <entry key="project.open.time.52" value="1" />
          <entry key="project.open.time.53" value="1" />
          <entry key="project.open.time.55" value="1" />
          <entry key="project.open.time.59" value="4" />
          <entry key="project.open.time.64" value="1" />
          <entry key="project.opened" value="18" />
        </counts>
      </usages-collector>
      <usages-collector id="statistics.file.extensions.open">
        <counts>
          <entry key="dart" value="337" />
          <entry key="gitignore" value="1" />
          <entry key="gradle" value="1" />
          <entry key="iml" value="1" />
          <entry key="md" value="11" />
          <entry key="metadata" value="1" />
          <entry key="packages" value="1" />
          <entry key="xml" value="2" />
          <entry key="yaml" value="14" />
        </counts>
      </usages-collector>
      <usages-collector id="statistics.file.types.open">
        <counts>
          <entry key="Dart" value="337" />
          <entry key="Groovy" value="1" />
          <entry key="IDEA_MODULE" value="1" />
          <entry key="Markdown" value="9" />
          <entry key="PLAIN_TEXT" value="5" />
          <entry key="XML" value="2" />
          <entry key="YAML" value="14" />
        </counts>
      </usages-collector>
      <usages-collector id="statistics.file.extensions.edit">
        <counts>
          <entry key="dart" value="46855" />
          <entry key="md" value="399" />
          <entry key="xml" value="22" />
          <entry key="yaml" value="175" />
        </counts>
      </usages-collector>
      <usages-collector id="statistics.file.types.edit">
        <counts>
          <entry key="Dart" value="46855" />
          <entry key="Markdown" value="399" />
          <entry key="XML" value="22" />
          <entry key="YAML" value="175" />
        </counts>
      </usages-collector>
    </session>
  </component>
  <component name="FileEditorManager">
    <leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
      <file leaf-file-name="login.dart" pinned="false" current-in-tab="true">
        <entry file="file://$PROJECT_DIR$/example/lib/login.dart">
          <provider selected="true" editor-type-id="text-editor">
            <state relative-caret-position="100">
              <caret line="45" lean-forward="true" selection-start-line="45" selection-end-line="45" />
              <folding>
                <element signature="e#0#39#0" expanded="true" />
              </folding>
            </state>
          </provider>
        </entry>
      </file>
      <file leaf-file-name="display_posts.dart" pinned="false" current-in-tab="false">
        <entry file="file://$PROJECT_DIR$/example/lib/display_posts.dart">
          <provider selected="true" editor-type-id="text-editor">
            <state relative-caret-position="144">
              <caret line="363" column="30" lean-forward="true" selection-start-line="363" selection-start-column="30" selection-end-line="363" selection-end-column="30" />
              <folding>
                <element signature="e#0#39#0" expanded="true" />
                <element signature="e#1127#1174#0" />
                <element signature="e#1220#1826#0" />
                <element signature="e#1977#2583#0" />
                <element signature="e#2680#3020#0" />
                <element signature="e#3119#3480#0" />
                <element signature="e#3666#3858#0" />
                <element signature="e#3909#4110#0" />
                <element signature="e#4182#4394#0" />
                <element signature="e#4546#4901#0" />
                <element signature="e#4931#5144#0" />
              </folding>
            </state>
          </provider>
        </entry>
      </file>
      <file leaf-file-name="flutter_wordpress.dart" pinned="false" current-in-tab="false">
        <entry file="file://$PROJECT_DIR$/lib/flutter_wordpress.dart">
          <provider selected="true" editor-type-id="text-editor">
            <state relative-caret-position="200">
              <caret line="659" column="43" selection-start-line="659" selection-start-column="43" selection-end-line="659" selection-end-column="43" />
              <folding>
                <element signature="e#21968#22524#0" />
                <element signature="e#22693#23654#0" />
              </folding>
            </state>
          </provider>
        </entry>
      </file>
      <file leaf-file-name="user.dart" pinned="false" current-in-tab="false">
        <entry file="file://$PROJECT_DIR$/lib/schemas/user.dart">
          <provider selected="true" editor-type-id="text-editor">
            <state relative-caret-position="-4884">
              <caret line="129" column="6" selection-start-line="129" selection-start-column="6" selection-end-line="129" selection-end-column="6" />
            </state>
          </provider>
        </entry>
      </file>
    </leaf>
  </component>
  <component name="FileTemplateManagerImpl">
    <option name="RECENT_TEMPLATES">
      <list>
        <option value="Dart File" />
      </list>
    </option>
  </component>
  <component name="FindInProjectRecents">
    <findStrings>
      <find>FetchUsersResult</find>
      <find>fontVariationSettings</find>
      <find>jwt</find>
      <find>createPo</find>
      <find>createPost</find>
      <find>dynamic</find>
      <find>meta</find>
      <find>updatePost</find>
      <find>fetchPosts</find>
      <find>_onValidUser</find>
      <find>me</find>
      <find>then</find>
      <find>comment</find>
      <find>createComment</find>
      <find>updatepost</find>
      <find>userid</find>
      <find>user.id</find>
      <find>user</find>
      <find>&gt;= 200 &amp;&amp; response.statusCode &lt; 300</find>
      <find>deletePst</find>
      <find>update user with</find>
      <find>deleteUser</find>
      <find>fetchUsers</find>
      <find>createuser</find>
      <find>deleteComment</find>
      <find>updatePOst</find>
      <find>updateUser</find>
      <find>role</find>
      <find>createUser</find>
      <find>create</find>
    </findStrings>
    <replaceStrings>
      <replace>import</replace>
      <replace>this.</replace>
      <replace>,</replace>
      <replace>;</replace>
      <replace>:'${}',</replace>
      <replace>if(this.\</replace>
      <replace>final</replace>
      <replace>set</replace>
      <replace>:</replace>
    </replaceStrings>
    <dirStrings>
      <dir>E:\DSI\2019\Flutter\flutter_wordpress\lib\schemas</dir>
    </dirStrings>
  </component>
  <component name="Git.Settings">
    <option name="PREVIOUS_COMMIT_AUTHORS">
      <list>
        <option value="ymakarim &lt;ymakarim@gmail.com&gt;" />
        <option value="Yahya Makarim &lt;ymakarim@gmail.com&gt;" />
      </list>
    </option>
    <option name="ROOT_SYNC" value="DONT_SYNC" />
    <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
  </component>
  <component name="IdeDocumentHistory">
    <option name="CHANGED_PATHS">
      <list>
        <option value="$PROJECT_DIR$/lib/schemas/categories.dart" />
        <option value="$PROJECT_DIR$/lib/schemas/tags.dart" />
        <option value="$PROJECT_DIR$/lib/schemas/post_statuses.dart" />
        <option value="$PROJECT_DIR$/lib/schemas/labels.dart" />
        <option value="$PROJECT_DIR$/lib/schemas/capabilities.dart" />
        <option value="$PROJECT_DIR$/lib/schemas/settings.dart" />
        <option value="$PROJECT_DIR$/lib/schemas/auth_error.dart" />
        <option value="$PROJECT_DIR$/lib/schemas/request_error.dart" />
        <option value="$PROJECT_DIR$/lib/schemas/error.dart" />
        <option value="$PROJECT_DIR$/lib/schemas/jwt_response.dart" />
        <option value="$PROJECT_DIR$/lib/schemas/users.dart" />
        <option value="$PROJECT_DIR$/lib/schemas/category.dart" />
        <option value="$PROJECT_DIR$/lib/schemas/comments.dart" />
        <option value="$PROJECT_DIR$/lib/schemas/pages.dart" />
        <option value="$PROJECT_DIR$/lib/schemas/post_types.dart" />
        <option value="$PROJECT_DIR$/lib/schemas/tag.dart" />
        <option value="$PROJECT_DIR$/lib/schemas/taxonomies.dart" />
        <option value="$PROJECT_DIR$/lib/requests/post_request.dart" />
        <option value="$PROJECT_DIR$/lib/requests/request.dart" />
        <option value="$PROJECT_DIR$/lib/requests/request_post.dart" />
        <option value="$PROJECT_DIR$/lib/requests/params_post.dart" />
        <option value="$PROJECT_DIR$/lib/schemas/wordpress_error.dart" />
        <option value="$PROJECT_DIR$/lib/parameters.dart" />
        <option value="$PROJECT_DIR$/lib/requests/params_comment_list.dart" />
        <option value="$PROJECT_DIR$/lib/requests/params_category_list.dart" />
        <option value="$PROJECT_DIR$/lib/requests/params_tag_list.dart" />
        <option value="$PROJECT_DIR$/lib/requests/params_post_list.dart" />
        <option value="$PROJECT_DIR$/lib/requests/params_page_list.dart" />
        <option value="$PROJECT_DIR$/lib/requests/params_user_list.dart" />
        <option value="$PROJECT_DIR$/lib/schemas/content.dart" />
        <option value="$PROJECT_DIR$/lib/schemas/excerpt.dart" />
        <option value="$PROJECT_DIR$/lib/schemas/guid.dart" />
        <option value="$PROJECT_DIR$/lib/schemas/title.dart" />
        <option value="$PROJECT_DIR$/README.md" />
        <option value="$PROJECT_DIR$/example/pubspec.yaml" />
        <option value="$PROJECT_DIR$/lib/requests/params_media_list.dart" />
        <option value="$PROJECT_DIR$/lib/constants.dart" />
        <option value="$PROJECT_DIR$/lib/schemas/links.dart" />
        <option value="$PROJECT_DIR$/lib/schemas/media.dart" />
        <option value="$PROJECT_DIR$/lib/schemas/comment.dart" />
        <option value="$PROJECT_DIR$/lib/schemas/post.dart" />
        <option value="$PROJECT_DIR$/lib/schemas/comment_hierarchy.dart" />
        <option value="$PROJECT_DIR$/example/lib/post_page.dart" />
        <option value="$PROJECT_DIR$/example/README.md" />
        <option value="$PROJECT_DIR$/pubspec.yaml" />
        <option value="$PROJECT_DIR$/example/android/app/build.gradle" />
        <option value="$PROJECT_DIR$/example/lib/main.dart" />
        <option value="$PROJECT_DIR$/lib/schemas/user.dart" />
        <option value="$PROJECT_DIR$/lib/flutter_wordpress.dart" />
        <option value="$PROJECT_DIR$/example/lib/display_posts.dart" />
        <option value="$PROJECT_DIR$/example/lib/login.dart" />
      </list>
    </option>
  </component>
  <component name="ProjectFrameBounds" extendedState="6">
    <option name="x" value="85" />
    <option name="y" value="25" />
    <option name="width" value="1750" />
    <option name="height" value="970" />
  </component>
  <component name="ProjectView">
    <navigator currentView="ProjectPane" proportions="" version="1">
      <foldersAlwaysOnTop value="true" />
    </navigator>
    <panes>
      <pane id="AndroidView">
        <subPane>
          <expand>
            <path>
              <item name="flutter_wordpress" type="1abcf292:AndroidViewProjectNode" />
              <item name="flutter_wordpress" type="e9137016:NonAndroidModuleNode" />
            </path>
          </expand>
          <select />
        </subPane>
      </pane>
      <pane id="PackagesPane" />
      <pane id="ProjectPane">
        <subPane>
          <expand>
            <path>
              <item name="flutter_wordpress" type="b2602c69:ProjectViewProjectNode" />
              <item name="flutter_wordpress" type="462c0819:PsiDirectoryNode" />
            </path>
            <path>
              <item name="flutter_wordpress" type="b2602c69:ProjectViewProjectNode" />
              <item name="flutter_wordpress" type="462c0819:PsiDirectoryNode" />
              <item name="lib" type="462c0819:PsiDirectoryNode" />
            </path>
          </expand>
          <select />
        </subPane>
      </pane>
      <pane id="Scope" />
    </panes>
  </component>
  <component name="PropertiesComponent">
    <property name="dart.analysis.tool.window.force.activate" value="false" />
    <property name="io.flutter.reload.alreadyRun" value="true" />
    <property name="last_opened_file_path" value="$PROJECT_DIR$" />
    <property name="settings.editor.selected.configurable" value="vcs.Git" />
    <property name="show.migrate.to.gradle.popup" value="false" />
  </component>
  <component name="RunDashboard">
    <option name="ruleStates">
      <list>
        <RuleState>
          <option name="name" value="ConfigurationTypeDashboardGroupingRule" />
        </RuleState>
        <RuleState>
          <option name="name" value="StatusDashboardGroupingRule" />
        </RuleState>
      </list>
    </option>
  </component>
  <component name="RunManager">
    <configuration name="main.dart" type="FlutterRunConfigurationType" factoryName="Flutter">
      <option name="filePath" value="$PROJECT_DIR$/example/lib/main.dart" />
    </configuration>
  </component>
  <component name="SvnConfiguration">
    <configuration />
  </component>
  <component name="TaskManager">
    <task active="true" id="Default" summary="Default task">
      <changelist id="73f4dbd7-3b98-4a12-b0ae-5e3c44fac77c" name="Default Changelist" comment="" />
      <created>1549864063234</created>
      <option name="number" value="Default" />
      <option name="presentableId" value="Default" />
      <updated>1549864063234</updated>
    </task>
    <task id="LOCAL-00001" summary="PostUpdate Added!">
      <created>1586516766033</created>
      <option name="number" value="00001" />
      <option name="presentableId" value="LOCAL-00001" />
      <option name="project" value="LOCAL" />
      <updated>1586516766033</updated>
    </task>
    <task id="LOCAL-00002" summary="PostDelete Added!">
      <created>1587208860611</created>
      <option name="number" value="00002" />
      <option name="presentableId" value="LOCAL-00002" />
      <option name="project" value="LOCAL" />
      <updated>1587208860611</updated>
    </task>
    <task id="LOCAL-00003" summary="CommentDelete Added!">
      <created>1587209299445</created>
      <option name="number" value="00003" />
      <option name="presentableId" value="LOCAL-00003" />
      <option name="project" value="LOCAL" />
      <updated>1587209299445</updated>
    </task>
    <task id="LOCAL-00004" summary="UserDelete Added!">
      <created>1587209498939</created>
      <option name="number" value="00004" />
      <option name="presentableId" value="LOCAL-00004" />
      <option name="project" value="LOCAL" />
      <updated>1587209498939</updated>
    </task>
    <task id="LOCAL-00005" summary="updateComment Added!">
      <created>1587210411959</created>
      <option name="number" value="00005" />
      <option name="presentableId" value="LOCAL-00005" />
      <option name="project" value="LOCAL" />
      <updated>1587210411959</updated>
    </task>
    <task id="LOCAL-00006" summary="updateUser Added!">
      <created>1587210912739</created>
      <option name="number" value="00006" />
      <option name="presentableId" value="LOCAL-00006" />
      <option name="project" value="LOCAL" />
      <updated>1587210912739</updated>
    </task>
    <task id="LOCAL-00007" summary="Create, Update and Delete Comment. Create, Update and Delete Post. Update and Delete User.">
      <created>1587236306886</created>
      <option name="number" value="00007" />
      <option name="presentableId" value="LOCAL-00007" />
      <option name="project" value="LOCAL" />
      <updated>1587236306886</updated>
    </task>
    <task id="LOCAL-00008" summary="Final Touches!!">
      <created>1587236473336</created>
      <option name="number" value="00008" />
      <option name="presentableId" value="LOCAL-00008" />
      <option name="project" value="LOCAL" />
      <updated>1587236473336</updated>
    </task>
    <task id="LOCAL-00009" summary="CreateUser Added!!!">
      <created>1587501064903</created>
      <option name="number" value="00009" />
      <option name="presentableId" value="LOCAL-00009" />
      <option name="project" value="LOCAL" />
      <updated>1587501064903</updated>
    </task>
    <option name="localTasksCounter" value="10" />
    <servers />
  </component>
  <component name="ToolWindowManager">
    <frame x="-7" y="-7" width="1550" height="838" extended-state="6" />
    <editor active="true" />
    <layout>
      <window_info anchor="bottom" id="Android Profiler" order="11" show_stripe_button="false" />
      <window_info id="Build Variants" order="6" side_tool="true" />
      <window_info anchor="bottom" id="Event Log" order="4" side_tool="true" />
      <window_info anchor="bottom" id="Dart Analysis" order="9" weight="0.32907802" />
      <window_info anchor="right" id="Flutter Outline" order="1" weight="0.3295302" />
      <window_info anchor="bottom" id="Logcat" order="10" />
      <window_info id="Capture Tool" order="3" />
      <window_info id="Designer" order="2" />
      <window_info id="Structure" order="4" side_tool="true" />
      <window_info anchor="right" id="Device File Explorer" order="5" side_tool="true" weight="0.3295302" />
      <window_info anchor="bottom" id="Debug" order="2" weight="0.32909605" />
      <window_info anchor="bottom" id="TODO" order="1" />
      <window_info anchor="right" id="Palette&#9;" order="3" />
      <window_info id="Image Layers" order="0" />
      <window_info anchor="right" id="Capture Analysis" order="4" />
      <window_info anchor="bottom" id="Flutter Performance" order="5" side_tool="true" />
      <window_info anchor="bottom" id="Run" order="0" visible="true" weight="0.43502825" />
      <window_info anchor="bottom" id="Version Control" order="6" />
      <window_info anchor="bottom" id="Terminal" order="3" weight="0.32909605" />
      <window_info id="Captures" order="7" side_tool="true" />
      <window_info content_ui="combo" id="Project" order="5" visible="true" weight="0.24161074" />
      <window_info anchor="right" id="Android WiFi ADB" order="6" />
      <window_info anchor="right" id="Theme Preview" order="0" />
      <window_info id="Favorites" order="1" side_tool="true" />
      <window_info anchor="right" id="Flutter Inspector" order="6" weight="0.3295302" />
      <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
      <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
      <window_info anchor="bottom" id="Find" order="7" weight="0.32907802" />
      <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
      <window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
      <window_info anchor="right" auto_hide="true" x="0" y="0" width="337" height="638" id="Documentation" order="2" side_tool="true" type="SLIDING" weight="0.3295302" />
      <window_info active="true" anchor="bottom" id="Messages" order="8" visible="true" weight="0.32768363" />
      <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
      <window_info anchor="bottom" id="Message" order="0" />
    </layout>
    <layout-to-restore>
      <window_info anchor="bottom" id="Dart Analysis" order="9" weight="0.32907802" />
      <window_info anchor="right" id="Device File Explorer" order="5" side_tool="true" weight="0.3295302" />
      <window_info anchor="right" id="Capture Analysis" order="4" />
      <window_info content_ui="combo" id="Project" order="5" visible="true" weight="0.24161074" />
      <window_info active="true" anchor="bottom" id="Run" order="0" visible="true" weight="0.32907802" />
      <window_info anchor="right" id="Theme Preview" order="0" />
      <window_info anchor="right" id="Flutter Inspector" order="6" weight="0.3295302" />
      <window_info id="Captures" order="7" side_tool="true" />
      <window_info anchor="right" id="Flutter Outline" order="1" weight="0.3295302" />
      <window_info id="Structure" order="4" side_tool="true" />
      <window_info anchor="bottom" id="TODO" order="1" />
      <window_info id="Favorites" order="1" side_tool="true" />
      <window_info id="Build Variants" order="6" side_tool="true" />
      <window_info id="Image Layers" order="0" />
      <window_info id="Designer" order="2" />
      <window_info anchor="bottom" id="Debug" order="2" />
      <window_info anchor="right" auto_hide="true" x="0" y="0" width="337" height="638" id="Documentation" order="2" side_tool="true" type="SLIDING" weight="0.3295302" />
      <window_info anchor="right" id="Palette&#9;" order="3" />
      <window_info anchor="bottom" id="Terminal" order="3" />
      <window_info anchor="bottom" id="Event Log" order="4" side_tool="true" />
      <window_info anchor="bottom" id="Flutter Performance" order="5" side_tool="true" />
      <window_info anchor="bottom" id="Version Control" order="6" />
      <window_info id="Capture Tool" order="3" />
      <window_info anchor="bottom" id="Find" order="7" weight="0.32907802" />
      <window_info anchor="bottom" id="Messages" order="8" weight="0.32907802" />
      <window_info anchor="bottom" id="Logcat" order="10" />
      <window_info anchor="bottom" id="Android Profiler" order="11" show_stripe_button="false" />
    </layout-to-restore>
  </component>
  <component name="VcsContentAnnotationSettings">
    <option name="myLimit" value="2678400000" />
  </component>
  <component name="VcsManagerConfiguration">
    <MESSAGE value="PostUpdate Added!" />
    <MESSAGE value="PostDelete Added!" />
    <MESSAGE value="CommentDelete Added!" />
    <MESSAGE value="UserDelete Added!" />
    <MESSAGE value="updateComment Added!" />
    <MESSAGE value="updateUser Added!" />
    <MESSAGE value="Create, Update and Delete Comment. Create, Update and Delete Post. Update and Delete User." />
    <MESSAGE value="Final Touches!!" />
    <MESSAGE value="CreateUser Added!!!" />
    <option name="LAST_COMMIT_MESSAGE" value="CreateUser Added!!!" />
  </component>
  <component name="editorHistoryManager">
    <entry file="file://$PROJECT_DIR$/lib/schemas/category.dart" />
    <entry file="file://$PROJECT_DIR$/lib/requests/request.dart" />
    <entry file="file://$PROJECT_DIR$/.metadata">
      <provider selected="true" editor-type-id="text-editor">
        <state />
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/lib/parameters.dart" />
    <entry file="file://C:/Flutter/flutter/packages/flutter/lib/src/widgets/text.dart" />
    <entry file="file://$PROJECT_DIR$/lib/requests/params_comment_list.dart" />
    <entry file="file://$PROJECT_DIR$/lib/requests/params_category_list.dart" />
    <entry file="file://$PROJECT_DIR$/lib/requests/params_tag_list.dart" />
    <entry file="file://$PROJECT_DIR$/lib/requests/params_page_list.dart" />
    <entry file="file://$PROJECT_DIR$/lib/requests/params_user_list.dart" />
    <entry file="file://$PROJECT_DIR$/lib/schemas/avatar_urls.dart" />
    <entry file="file://$PROJECT_DIR$/lib/schemas/content.dart" />
    <entry file="file://$PROJECT_DIR$/lib/schemas/excerpt.dart" />
    <entry file="file://$PROJECT_DIR$/lib/schemas/guid.dart" />
    <entry file="file://$PROJECT_DIR$/lib/schemas/title.dart" />
    <entry file="file://C:/Flutter/flutter/bin/cache/dart-sdk/lib/internal/cast.dart" />
    <entry file="file://$PROJECT_DIR$/lib/schemas/post_statuses.dart" />
    <entry file="file://$PROJECT_DIR$/lib/schemas/post_types.dart" />
    <entry file="file://$PROJECT_DIR$/lib/schemas/taxonomies.dart" />
    <entry file="file://$PROJECT_DIR$/lib/schemas/capabilities.dart" />
    <entry file="file://$PROJECT_DIR$/CHANGELOG.md">
      <provider selected="true" editor-type-id="text-editor">
        <state />
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/README.md">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="2244">
          <caret line="132" column="3" lean-forward="true" selection-start-line="132" selection-start-column="3" selection-end-line="132" selection-end-column="3" />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/example/pubspec.yaml">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="170">
          <caret line="19" column="22" selection-start-line="19" selection-start-column="22" selection-end-line="19" selection-end-column="22" />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/lib/schemas/wordpress_error.dart" />
    <entry file="file://$PROJECT_DIR$/lib/requests/params_post_list.dart" />
    <entry file="file://$PROJECT_DIR$/lib/schemas/media.dart" />
    <entry file="file://$PROJECT_DIR$/lib/schemas/links.dart" />
    <entry file="file://$PROJECT_DIR$/lib/requests/params_media_list.dart" />
    <entry file="file://$PROJECT_DIR$/lib/schemas/comment.dart" />
    <entry file="file://$PROJECT_DIR$/lib/schemas/comment_hierarchy.dart" />
    <entry file="file://C:/Flutter/flutter/packages/flutter/lib/src/widgets/framework.dart" />
    <entry file="file://$PROJECT_DIR$/example/README.md">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="150">
          <caret line="6" selection-start-line="6" selection-end-line="6" />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/lib/schemas/fetch_user_result.dart">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="150">
          <caret line="6" column="2" selection-start-line="6" selection-start-column="2" selection-end-line="6" selection-end-column="2" />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/example/build/app/intermediates/incremental/mergeDebugResources/merged.dir/values/values.xml">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="-2124">
          <caret line="177" column="50" selection-start-line="177" selection-start-column="50" selection-end-line="177" selection-end-column="50" />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/example/android/local.properties">
      <provider selected="true" editor-type-id="text-editor">
        <state />
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/example/android/build.gradle">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="200">
          <caret line="8" column="5" lean-forward="true" selection-start-line="8" selection-start-column="5" selection-end-line="8" selection-end-column="5" />
        </state>
      </provider>
    </entry>
    <entry file="file://C:/flutter/bin/cache/pkg/sky_engine/lib/async/future.dart">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="15875">
          <caret line="639" column="12" selection-start-line="639" selection-start-column="12" selection-end-line="639" selection-end-column="12" />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/pubspec.yaml">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="100">
          <caret line="4" column="8" lean-forward="true" selection-start-line="4" selection-start-column="8" selection-end-line="4" selection-end-column="8" />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/lib/constants.dart">
      <provider selected="true" editor-type-id="text-editor">
        <state>
          <caret column="6" selection-start-column="6" selection-end-column="6" />
        </state>
      </provider>
    </entry>
    <entry file="file://C:/flutter/bin/cache/pkg/sky_engine/lib/convert/json.dart">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="93">
          <caret line="150" column="10" selection-start-line="150" selection-start-column="10" selection-end-line="150" selection-end-column="10" />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/lib/schemas/jwt_response.dart">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="168">
          <caret line="9" column="14" selection-start-line="9" selection-start-column="14" selection-end-line="9" selection-end-column="14" />
        </state>
      </provider>
    </entry>
    <entry file="file://C:/flutter/.pub-cache/hosted/pub.dartlang.org/meta-1.1.8/lib/meta.dart">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="100">
          <caret line="334" column="24" selection-start-line="334" selection-start-column="24" selection-end-line="334" selection-end-column="24" />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/example/lib/main.dart">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="25">
          <caret line="7" column="19" selection-start-line="7" selection-start-column="19" selection-end-line="7" selection-end-column="19" />
          <folding>
            <element signature="e#0#39#0" expanded="true" />
          </folding>
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/example/android/app/build.gradle">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="175">
          <caret line="39" column="30" selection-start-line="39" selection-start-column="30" selection-end-line="39" selection-end-column="30" />
        </state>
      </provider>
    </entry>
    <entry file="file://C:/flutter/bin/cache/pkg/sky_engine/lib/_http/http.dart">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="69">
          <caret line="1967" column="15" selection-start-line="1967" selection-start-column="15" selection-end-line="1967" selection-end-column="15" />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/example/lib/post_page.dart">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="200">
          <caret line="10" column="11" lean-forward="true" selection-start-line="10" selection-start-column="11" selection-end-line="10" selection-end-column="11" />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/lib/schemas/post.dart">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="100">
          <caret line="17" column="13" selection-start-line="17" selection-start-column="13" selection-end-line="17" selection-end-column="13" />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/lib/schemas/user.dart">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="-4884">
          <caret line="129" column="6" selection-start-line="129" selection-start-column="6" selection-end-line="129" selection-end-column="6" />
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/example/lib/display_posts.dart">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="144">
          <caret line="363" column="30" lean-forward="true" selection-start-line="363" selection-start-column="30" selection-end-line="363" selection-end-column="30" />
          <folding>
            <element signature="e#0#39#0" expanded="true" />
            <element signature="e#1127#1174#0" />
            <element signature="e#1220#1826#0" />
            <element signature="e#1977#2583#0" />
            <element signature="e#2680#3020#0" />
            <element signature="e#3119#3480#0" />
            <element signature="e#3666#3858#0" />
            <element signature="e#3909#4110#0" />
            <element signature="e#4182#4394#0" />
            <element signature="e#4546#4901#0" />
            <element signature="e#4931#5144#0" />
          </folding>
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/lib/flutter_wordpress.dart">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="200">
          <caret line="659" column="43" selection-start-line="659" selection-start-column="43" selection-end-line="659" selection-end-column="43" />
          <folding>
            <element signature="e#21968#22524#0" />
            <element signature="e#22693#23654#0" />
          </folding>
        </state>
      </provider>
    </entry>
    <entry file="file://$PROJECT_DIR$/example/lib/login.dart">
      <provider selected="true" editor-type-id="text-editor">
        <state relative-caret-position="100">
          <caret line="45" lean-forward="true" selection-start-line="45" selection-end-line="45" />
          <folding>
            <element signature="e#0#39#0" expanded="true" />
          </folding>
        </state>
      </provider>
    </entry>
  </component>
</project>

================================================
FILE: .metadata
================================================
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled and should not be manually edited.

version:
  revision: 5391447fae6209bb21a89e6a5a6583cac1af9b4b
  channel: stable

project_type: package


================================================
FILE: CHANGELOG.md
================================================
## [0.3.0-nullsafety.0] - Type Safety

* Added type safety

## [0.2.1] - 26/04/2020
* Custom post types

## [0.2.0] - 21/04/2020
* Create, Update and Delete Comments
* Create, Update and Delete Posts
* Update and Delete Users

## [0.1.4] - 27/02/2019
* Updated homepage URL

## [0.1.3] - 26/02/2019
* Update example. Update post fetching to include author, comments. Add fetching comments as a hierarchy.

## [0.1.2] - 16/02/2019
* Add fetch categories, tags, pages. Add create post, comments.

## [0.1.1] - 14/02/2019

* Update README.md. Add fetch users list, fetch comments list.
* Implemented authorization function and fetching of Posts with parameters

## [0.1.0] - Added Models

* Created model classes for Wordpress REST API and implemented user authentication function using JWT authentication system.


## [0.0.1] - TODO: Init.

* Under Development. Nothing works now.


================================================
FILE: LICENSE
================================================
The MIT License (MIT)

Copyright (c) 2018 Sachin Ganesh

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

================================================
FILE: README.md
================================================
# Flutter Wordpress

[pub.dev](https://pub.dev/packages/flutter_wordpress)

This library uses [WordPress REST API V2](https://developer.wordpress.org/rest-api/) to provide a way for your application to interact with your WordPress website.

[Tutorial - by Ritesh Sharma](https://medium.com/flutter-community/building-flutter-apps-with-wordpress-backend-part-1-e56414a4a79b)

## Screenshots

<img src='https://raw.githubusercontent.com/dreamsoftin/flutter_wordpress/master/example/images/screenshots/posts.png' height='400'>

## Requirements

For authentication and usage of administrator level REST APIs, you need to use either of the two popular authentication plugins in your WordPress site:

1. [Application Passwords](https://wordpress.org/plugins/application-passwords/)
2. [JWT Authentication for WP REST API](https://wordpress.org/plugins/jwt-authentication-for-wp-rest-api/) <strong>(recommended)</strong>

## Getting Started

### 1. Import library

#### First:

Find your pubspec.yaml in the root of your project and add flutter_wordpress: ^0.2.0 under dependencies:

#### Second:

```dart
import 'package:flutter_wordpress/flutter_wordpress.dart' as wp;
```

### 2. Instantiate WordPress class

```dart
wp.WordPress wordPress;

// adminName and adminKey is needed only for admin level APIs
wordPress = wp.WordPress(
  baseUrl: 'http://localhost',
  authenticator: wp.WordPressAuthenticator.JWT,
  adminName: '',
  adminKey: '',
);
```

### 3. Authenticate User

```dart
Future<wp.User> response = wordPress.authenticateUser(
  username: 'ChiefEditor',
  password: 'chiefeditor@123',
);

response.then((user) {
  createPost(user);
}).catchError((err) {
  print('Failed to fetch user: $err');
});
```

### 4. Fetch Posts

```dart
Future<List<wp.Post>> posts = wordPress.fetchPosts(
  postParams: wp.ParamsPostList(
    context: wp.WordPressContext.view,
    pageNum: 1,
    perPage: 20,
    order: wp.Order.desc,
    orderBy: wp.PostOrderBy.date,
  ),
  fetchAuthor: true,
  fetchFeaturedMedia: true,
  fetchComments: true,
  postType: 'post'
);
```

### 5. Fetch Users

```dart
Future<List<wp.User>> users = wordPress.fetchUsers(
  params: wp.ParamsUserList(
    context: wp.WordPressContext.view,
    pageNum: 1,
    perPage: 30,
    order: wp.Order.asc,
    orderBy: wp.UsersOrderBy.name,
    roles: ['subscriber'],
  ),
);
```

### 6. Fetch Comments

```dart
Future<List<wp.Comment>> comments = wordPress.fetchComments(
  params: wp.ParamsCommentList(
    context: wp.WordPressContext.view,
    pageNum: 1,
    perPage: 30,
    includePostIDs: [1],
  ),
);
```

### 7. Create User

```dart
Future<void> createUser({@required String email, @required String username, @required String password, @required List<String> roles}) async {
    await widget.wordPress.createUser(
      user: wp.User(
        email: email,
        password: password,
        username: username,
        roles: roles
      )
    ).then((p) {
      print('User created successfully ${p}');
    }).catchError((err) {
      print('Failed to create user: $err');
    });
  }
```

### 8. Create Post

```dart
  void createPost({@required wp.User user}) {
    final post = widget.wordPress.createPost(
      post: new wp.Post(
        title: 'First post as a Chief Editor',
        content: 'Blah! blah! blah!',
        excerpt: 'Discussion about blah!',
        authorID: user.id,
        commentStatus: wp.PostCommentStatus.open,
        pingStatus: wp.PostPingStatus.closed,
        status: wp.PostPageStatus.publish,
        format: wp.PostFormat.standard,
        sticky: true,
      ),
    );

    post.then((p) {
      print('Post created successfully with ID: ${p.id}');
    }).catchError((err) {
      print('Failed to create post: $err');
    });
  }
```

### 9. create Comment

```dart
  void createComment({@required int userId, @required int postId}) {
    final comment = widget.wordPress.createComment(
      comment: new wp.Comment(
        author: userId,
        post: postId,
        content: "First!",
        parent: 0,
      ),
    );

    comment.then((c) {
      print('Comment successfully posted with ID: ${c.id}');
    }).catchError((err) {
      print('Failed to comment: $err');
    });
  }
```

### 10. Update Comment

```dart
Future<void> updateComment({@required int id, @required int postId, @required wp.User user}) async {
    await widget.wordPress.updateComment(
      comment: new wp.Comment(
        content: "Comment Updated2!",
        author: user.id,
        post: postId,
      ),
      id: id,
    ).then((c) {
      print('Comment updated successfully "$c"');
    }).catchError((err) {
      print('Failed to update Comment: $err');
    });
  }
```

### 11. Update Post

```dart
Future<void> updatePost({@required int id, @required int userId}) async {
    await widget.wordPress.updatePost(
      post: new wp.Post(
        title: 'First post as a Chief Editor',
        content: 'Blah! blah! blah!',
        excerpt: 'Discussion about blah!',
        authorID: userId,
        commentStatus: wp.PostCommentStatus.open,
        pingStatus: wp.PostPingStatus.closed,
        status: wp.PostPageStatus.publish,
        format: wp.PostFormat.standard,
        sticky: true,
      ),
      id: id, //
    ).then((p) {
      print('Post updated successfully with ID ${p}');
    }).catchError((err) {
      print('Failed to update post: $err');
    });
  }
```

### 12. Update User

```dart
Future<void> updateUser({@required int id, @required String username, @required String email}) async {
    await widget.wordPress.updateUser(
      user: new wp.User(
        description: "This is description for this user",
        username: username,
        id: id,
        email: email
      ),
      id: id,
    ).then((u) {
      print('User updated successfully $u');
    }).catchError((err) {
      print('Failed to update User: $err');
    });
  }
```


### 13. Delete Comment

```dart
Future<void> deleteComment({@required int id}) async {
    await widget.wordPress.deleteComment(id: id).then((c) {
      print('Comment Deleted successfully: $c');
    }).catchError((err) {
      print('Failed to Delete comment: $err');
    });
  }
```

### 14. Delete Post

```dart
  Future<void> deletePost({@required int id}) async {
    await widget.wordPress.deletePost(id: id).then((p) {
      print('Post Deleted successfully: $p');
    }).catchError((err) {
      print('Failed to Delete post: $err');
    });
  }
```

### 15. Delete User

```dart
  Future<void> deleteUser({@required int id, @required int reassign}) async {
    await widget.wordPress.deleteUser(id: id, reassign: reassign).then((u) {
      print('User Deleted successfully: $u');
    }).catchError((err) {
      print('Failed to Delete user: $err');
    });
  }
```

### 16. Upload Media

```dart
  uploadMedia(File image) async {
  var media = await wordPress.uploadMedia(image).then((m) {
    print('Media uploaded successfully: $m');
  }).catchError((err) {
    print('Failed to upload Media: $err');
  });
  int mediaID = media['id'];  
}
```

## Future Work

1. Implementing OAuth 2.0 authentication.

## Contributors
- [Suraj Shettigar](https://github.com/SurajShettigar)
- [Sachin Ganesh](https://github.com/SachinGanesh)
- [Harm-Jan Roskam](https://github.com/harmjanr)
- [Yahya Makarim](https://github.com/ymakarim)
- [Garv Maggu](https://github.com/GarvMaggu)


================================================
FILE: example/.flutter-plugins-dependencies
================================================
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"video_player_avfoundation","path":"/Users/ritheshsalyan/Developer/DevTools/flutter/.pub-cache/hosted/pub.dartlang.org/video_player_avfoundation-2.3.0/","dependencies":[]},{"name":"wakelock","path":"/Users/ritheshsalyan/Developer/DevTools/flutter/.pub-cache/hosted/pub.dartlang.org/wakelock-0.6.1+1/","dependencies":[]},{"name":"webview_flutter_wkwebview","path":"/Users/ritheshsalyan/Developer/DevTools/flutter/.pub-cache/hosted/pub.dartlang.org/webview_flutter_wkwebview-2.7.1/","dependencies":[]}],"android":[{"name":"video_player_android","path":"/Users/ritheshsalyan/Developer/DevTools/flutter/.pub-cache/hosted/pub.dartlang.org/video_player_android-2.3.0/","dependencies":[]},{"name":"wakelock","path":"/Users/ritheshsalyan/Developer/DevTools/flutter/.pub-cache/hosted/pub.dartlang.org/wakelock-0.6.1+1/","dependencies":[]},{"name":"webview_flutter_android","path":"/Users/ritheshsalyan/Developer/DevTools/flutter/.pub-cache/hosted/pub.dartlang.org/webview_flutter_android-2.8.3/","dependencies":[]}],"macos":[{"name":"wakelock_macos","path":"/Users/ritheshsalyan/Developer/DevTools/flutter/.pub-cache/hosted/pub.dartlang.org/wakelock_macos-0.4.0/","dependencies":[]}],"linux":[],"windows":[],"web":[{"name":"video_player_web","path":"/Users/ritheshsalyan/Developer/DevTools/flutter/.pub-cache/hosted/pub.dartlang.org/video_player_web-2.0.7/","dependencies":[]},{"name":"wakelock_web","path":"/Users/ritheshsalyan/Developer/DevTools/flutter/.pub-cache/hosted/pub.dartlang.org/wakelock_web-0.4.0/","dependencies":[]}]},"dependencyGraph":[{"name":"video_player","dependencies":["video_player_android","video_player_avfoundation","video_player_web"]},{"name":"video_player_android","dependencies":[]},{"name":"video_player_avfoundation","dependencies":[]},{"name":"video_player_web","dependencies":[]},{"name":"wakelock","dependencies":["wakelock_macos","wakelock_web"]},{"name":"wakelock_macos","dependencies":[]},{"name":"wakelock_web","dependencies":[]},{"name":"webview_flutter","dependencies":["webview_flutter_android","webview_flutter_wkwebview"]},{"name":"webview_flutter_android","dependencies":[]},{"name":"webview_flutter_wkwebview","dependencies":[]}],"date_created":"2022-02-23 10:31:39.189036","version":"2.8.1"}

================================================
FILE: example/.gitignore
================================================
# Miscellaneous
*.class
*.lock
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
*flutter_export_environment*

# IntelliJ related
*.iml
*.ipr
*.iws
.idea/

# Visual Studio Code related
.vscode/

# Flutter/Dart/Pub related
**/doc/api/
.dart_tool/
.flutter-plugins
.packages
.pub-cache/
.pub/
build/

# Android related
**/android/**/gradle-wrapper.jar
**/android/.gradle
**/android/captures/
**/android/gradlew
**/android/gradlew.bat
**/android/local.properties
**/android/**/GeneratedPluginRegistrant.java

# iOS/XCode related
**/ios/**/*.mode1v3
**/ios/**/*.mode2v3
**/ios/**/*.moved-aside
**/ios/**/*.pbxuser
**/ios/**/*.perspectivev3
**/ios/**/*sync/
**/ios/**/.sconsign.dblite
**/ios/**/.tags*
**/ios/**/.vagrant/
**/ios/**/DerivedData/
**/ios/**/Icon?
**/ios/**/Pods/
**/ios/**/.symlinks/
**/ios/**/profile
**/ios/**/xcuserdata
**/ios/.generated/
**/ios/Flutter/App.framework
**/ios/Flutter/Flutter.framework
**/ios/Flutter/Generated.xcconfig
**/ios/Flutter/app.flx
**/ios/Flutter/app.zip
**/ios/Flutter/flutter_assets/
**/ios/ServiceDefinitions.json
**/ios/Runner/GeneratedPluginRegistrant.*

# Exceptions to above rules.
!**/ios/**/default.mode1v3
!**/ios/**/default.mode2v3
!**/ios/**/default.pbxuser
!**/ios/**/default.perspectivev3
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages


================================================
FILE: example/.metadata
================================================
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled and should not be manually edited.

version:
  revision: 5391447fae6209bb21a89e6a5a6583cac1af9b4b
  channel: stable

project_type: app


================================================
FILE: example/README.md
================================================
# Flutter Wordpress Example
Basic login, displaying posts and comments have been implemented in this example flutter app.

## Screenshots
<img src='images/screenshots/login.png' height='400'>
<img src='images/screenshots/posts.png' height='400'>
<img src='images/screenshots/post_comments.png' height='400'>






================================================
FILE: example/analysis_options.yaml
================================================
# This file configures the analyzer, which statically analyzes Dart code to
# check for errors, warnings, and lints.
#
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
# invoked from the command line by running `flutter analyze`.

# The following line activates a set of recommended lints for Flutter apps,
# packages, and plugins designed to encourage good coding practices.
include: package:flutter_lints/flutter.yaml

linter:
  # The lint rules applied to this project can be customized in the
  # section below to disable rules from the `package:flutter_lints/flutter.yaml`
  # included above or to enable additional rules. A list of all available lints
  # and their documentation is published at
  # https://dart-lang.github.io/linter/lints/index.html.
  #
  # Instead of disabling a lint rule for the entire project in the
  # section below, it can also be suppressed for a single line of code
  # or a specific dart file by using the `// ignore: name_of_lint` and
  # `// ignore_for_file: name_of_lint` syntax on the line or in the file
  # producing the lint.
  rules:
    # avoid_print: false  # Uncomment to disable the `avoid_print` rule
    # prefer_single_quotes: true  # Uncomment to enable the `prefer_single_quotes` rule

# Additional information about this file can be found at
# https://dart.dev/guides/language/analysis-options


================================================
FILE: example/android/.gitignore
================================================
gradle-wrapper.jar
/.gradle
/captures/
/gradlew
/gradlew.bat
/local.properties
GeneratedPluginRegistrant.java

# Remember to never publicly share your keystore.
# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
key.properties
**/*.keystore
**/*.jks


================================================
FILE: example/android/app/build.gradle
================================================
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
    localPropertiesFile.withReader('UTF-8') { reader ->
        localProperties.load(reader)
    }
}

def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
    throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}

def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
    flutterVersionCode = '1'
}

def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
    flutterVersionName = '1.0'
}

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"

android {
    compileSdkVersion flutter.compileSdkVersion

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = '1.8'
    }

    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }

    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId "com.example.example"
        minSdkVersion 19//flutter.minSdkVersion
        targetSdkVersion flutter.targetSdkVersion
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
    }

    buildTypes {
        release {
            // TODO: Add your own signing config for the release build.
            // Signing with the debug keys for now, so `flutter run --release` works.
            signingConfig signingConfigs.debug
        }
    }
}

flutter {
    source '../..'
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}


================================================
FILE: example/android/app/src/debug/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.example">
    <!-- Flutter needs it to communicate with the running application
         to allow setting breakpoints, to provide hot reload, etc.
    -->
    <uses-permission android:name="android.permission.INTERNET"/>
</manifest>


================================================
FILE: example/android/app/src/main/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.example">
   <application
        android:label="example"
        android:name="${applicationName}"
        android:icon="@mipmap/ic_launcher">
        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
            <!-- Specifies an Android theme to apply to this Activity as soon as
                 the Android process has started. This theme is visible to the user
                 while the Flutter UI initializes. After that, this theme continues
                 to determine the Window background behind the Flutter UI. -->
            <meta-data
              android:name="io.flutter.embedding.android.NormalTheme"
              android:resource="@style/NormalTheme"
              />
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
        <!-- Don't delete the meta-data below.
             This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
        <meta-data
            android:name="flutterEmbedding"
            android:value="2" />
    </application>
</manifest>


================================================
FILE: example/android/app/src/main/kotlin/com/example/example/MainActivity.kt
================================================
package com.example.example

import io.flutter.embedding.android.FlutterActivity

class MainActivity: FlutterActivity() {
}


================================================
FILE: example/android/app/src/main/res/drawable/launch_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@android:color/white" />

    <!-- You can insert your own image assets here -->
    <!-- <item>
        <bitmap
            android:gravity="center"
            android:src="@mipmap/launch_image" />
    </item> -->
</layer-list>


================================================
FILE: example/android/app/src/main/res/drawable-v21/launch_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="?android:colorBackground" />

    <!-- You can insert your own image assets here -->
    <!-- <item>
        <bitmap
            android:gravity="center"
            android:src="@mipmap/launch_image" />
    </item> -->
</layer-list>


================================================
FILE: example/android/app/src/main/res/values/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
    <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
        <!-- Show a splash screen on the activity. Automatically removed when
             Flutter draws its first frame -->
        <item name="android:windowBackground">@drawable/launch_background</item>
    </style>
    <!-- Theme applied to the Android Window as soon as the process has started.
         This theme determines the color of the Android Window while your
         Flutter UI initializes, as well as behind your Flutter UI while its
         running.

         This Theme is only used starting with V2 of Flutter's Android embedding. -->
    <style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
        <item name="android:windowBackground">?android:colorBackground</item>
    </style>
</resources>


================================================
FILE: example/android/app/src/main/res/values-night/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
    <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
        <!-- Show a splash screen on the activity. Automatically removed when
             Flutter draws its first frame -->
        <item name="android:windowBackground">@drawable/launch_background</item>
    </style>
    <!-- Theme applied to the Android Window as soon as the process has started.
         This theme determines the color of the Android Window while your
         Flutter UI initializes, as well as behind your Flutter UI while its
         running.

         This Theme is only used starting with V2 of Flutter's Android embedding. -->
    <style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
        <item name="android:windowBackground">?android:colorBackground</item>
    </style>
</resources>


================================================
FILE: example/android/app/src/profile/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.example">
    <!-- Flutter needs it to communicate with the running application
         to allow setting breakpoints, to provide hot reload, etc.
    -->
    <uses-permission android:name="android.permission.INTERNET"/>
</manifest>


================================================
FILE: example/android/build.gradle
================================================
buildscript {
    ext.kotlin_version = '1.6.10'
    repositories {
        google()
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:4.1.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

rootProject.buildDir = '../build'
subprojects {
    project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
    project.evaluationDependsOn(':app')
}

task clean(type: Delete) {
    delete rootProject.buildDir
}


================================================
FILE: example/android/gradle/wrapper/gradle-wrapper.properties
================================================
#Fri Jun 23 08:50:38 CEST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip


================================================
FILE: example/android/gradle.properties
================================================
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true


================================================
FILE: example/android/settings.gradle
================================================
include ':app'

def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
def properties = new Properties()

assert localPropertiesFile.exists()
localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }

def flutterSdkPath = properties.getProperty("flutter.sdk")
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"


================================================
FILE: example/ios/.gitignore
================================================
**/dgph
*.mode1v3
*.mode2v3
*.moved-aside
*.pbxuser
*.perspectivev3
**/*sync/
.sconsign.dblite
.tags*
**/.vagrant/
**/DerivedData/
Icon?
**/Pods/
**/.symlinks/
profile
xcuserdata
**/.generated/
Flutter/App.framework
Flutter/Flutter.framework
Flutter/Flutter.podspec
Flutter/Generated.xcconfig
Flutter/ephemeral/
Flutter/app.flx
Flutter/app.zip
Flutter/flutter_assets/
Flutter/flutter_export_environment.sh
ServiceDefinitions.json
Runner/GeneratedPluginRegistrant.*

# Exceptions to above rules.
!default.mode1v3
!default.mode2v3
!default.pbxuser
!default.perspectivev3


================================================
FILE: example/ios/Flutter/AppFrameworkInfo.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>CFBundleDevelopmentRegion</key>
  <string>en</string>
  <key>CFBundleExecutable</key>
  <string>App</string>
  <key>CFBundleIdentifier</key>
  <string>io.flutter.flutter.app</string>
  <key>CFBundleInfoDictionaryVersion</key>
  <string>6.0</string>
  <key>CFBundleName</key>
  <string>App</string>
  <key>CFBundlePackageType</key>
  <string>FMWK</string>
  <key>CFBundleShortVersionString</key>
  <string>1.0</string>
  <key>CFBundleSignature</key>
  <string>????</string>
  <key>CFBundleVersion</key>
  <string>1.0</string>
  <key>MinimumOSVersion</key>
  <string>8.0</string>
</dict>
</plist>


================================================
FILE: example/ios/Flutter/Debug.xcconfig
================================================
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Generated.xcconfig"


================================================
FILE: example/ios/Flutter/Flutter.podspec
================================================
#
# NOTE: This podspec is NOT to be published. It is only used as a local source!
#

Pod::Spec.new do |s|
  s.name             = 'Flutter'
  s.version          = '1.0.0'
  s.summary          = 'High-performance, high-fidelity mobile apps.'
  s.description      = <<-DESC
Flutter provides an easy and productive way to build and deploy high-performance mobile apps for Android and iOS.
                       DESC
  s.homepage         = 'https://flutter.io'
  s.license          = { :type => 'MIT' }
  s.author           = { 'Flutter Dev Team' => 'flutter-dev@googlegroups.com' }
  s.source           = { :git => 'https://github.com/flutter/engine', :tag => s.version.to_s }
  s.ios.deployment_target = '8.0'
  s.vendored_frameworks = 'Flutter.framework'
end


================================================
FILE: example/ios/Flutter/Release.xcconfig
================================================
#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig"


================================================
FILE: example/ios/Podfile
================================================
# Uncomment this line to define a global platform for your project
# platform :ios, '9.0'

# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'

project 'Runner', {
  'Debug' => :debug,
  'Profile' => :release,
  'Release' => :release,
}

def flutter_root
  generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
  unless File.exist?(generated_xcode_build_settings_path)
    raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
  end

  File.foreach(generated_xcode_build_settings_path) do |line|
    matches = line.match(/FLUTTER_ROOT\=(.*)/)
    return matches[1].strip if matches
  end
  raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
end

require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)

flutter_ios_podfile_setup

target 'Runner' do
  flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
end

post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
  end
end


================================================
FILE: example/ios/Runner/AppDelegate.h
================================================
#import <Flutter/Flutter.h>
#import <UIKit/UIKit.h>

@interface AppDelegate : FlutterAppDelegate

@end


================================================
FILE: example/ios/Runner/AppDelegate.m
================================================
#include "AppDelegate.h"
#include "GeneratedPluginRegistrant.h"

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  [GeneratedPluginRegistrant registerWithRegistry:self];
  // Override point for customization after application launch.
  return [super application:application didFinishLaunchingWithOptions:launchOptions];
}

@end


================================================
FILE: example/ios/Runner/AppDelegate.swift
================================================
import UIKit
import Flutter

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    GeneratedPluginRegistrant.register(with: self)
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}


================================================
FILE: example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
================================================
{
  "images" : [
    {
      "size" : "20x20",
      "idiom" : "iphone",
      "filename" : "Icon-App-20x20@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "20x20",
      "idiom" : "iphone",
      "filename" : "Icon-App-20x20@3x.png",
      "scale" : "3x"
    },
    {
      "size" : "29x29",
      "idiom" : "iphone",
      "filename" : "Icon-App-29x29@1x.png",
      "scale" : "1x"
    },
    {
      "size" : "29x29",
      "idiom" : "iphone",
      "filename" : "Icon-App-29x29@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "29x29",
      "idiom" : "iphone",
      "filename" : "Icon-App-29x29@3x.png",
      "scale" : "3x"
    },
    {
      "size" : "40x40",
      "idiom" : "iphone",
      "filename" : "Icon-App-40x40@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "40x40",
      "idiom" : "iphone",
      "filename" : "Icon-App-40x40@3x.png",
      "scale" : "3x"
    },
    {
      "size" : "60x60",
      "idiom" : "iphone",
      "filename" : "Icon-App-60x60@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "60x60",
      "idiom" : "iphone",
      "filename" : "Icon-App-60x60@3x.png",
      "scale" : "3x"
    },
    {
      "size" : "20x20",
      "idiom" : "ipad",
      "filename" : "Icon-App-20x20@1x.png",
      "scale" : "1x"
    },
    {
      "size" : "20x20",
      "idiom" : "ipad",
      "filename" : "Icon-App-20x20@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "29x29",
      "idiom" : "ipad",
      "filename" : "Icon-App-29x29@1x.png",
      "scale" : "1x"
    },
    {
      "size" : "29x29",
      "idiom" : "ipad",
      "filename" : "Icon-App-29x29@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "40x40",
      "idiom" : "ipad",
      "filename" : "Icon-App-40x40@1x.png",
      "scale" : "1x"
    },
    {
      "size" : "40x40",
      "idiom" : "ipad",
      "filename" : "Icon-App-40x40@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "76x76",
      "idiom" : "ipad",
      "filename" : "Icon-App-76x76@1x.png",
      "scale" : "1x"
    },
    {
      "size" : "76x76",
      "idiom" : "ipad",
      "filename" : "Icon-App-76x76@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "83.5x83.5",
      "idiom" : "ipad",
      "filename" : "Icon-App-83.5x83.5@2x.png",
      "scale" : "2x"
    },
    {
      "size" : "1024x1024",
      "idiom" : "ios-marketing",
      "filename" : "Icon-App-1024x1024@1x.png",
      "scale" : "1x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}


================================================
FILE: example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
================================================
{
  "images" : [
    {
      "idiom" : "universal",
      "filename" : "LaunchImage.png",
      "scale" : "1x"
    },
    {
      "idiom" : "universal",
      "filename" : "LaunchImage@2x.png",
      "scale" : "2x"
    },
    {
      "idiom" : "universal",
      "filename" : "LaunchImage@3x.png",
      "scale" : "3x"
    }
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  }
}


================================================
FILE: example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
================================================
# Launch Screen Assets

You can customize the launch screen with your own desired assets by replacing the image files in this directory.

You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.

================================================
FILE: example/ios/Runner/Base.lproj/LaunchScreen.storyboard
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
    </dependencies>
    <scenes>
        <!--View Controller-->
        <scene sceneID="EHf-IW-A2E">
            <objects>
                <viewController id="01J-lp-oVM" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/>
                        <viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <subviews>
                            <imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
                            </imageView>
                        </subviews>
                        <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
                        <constraints>
                            <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/>
                            <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/>
                        </constraints>
                    </view>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
            </objects>
            <point key="canvasLocation" x="53" y="375"/>
        </scene>
    </scenes>
    <resources>
        <image name="LaunchImage" width="168" height="185"/>
    </resources>
</document>


================================================
FILE: example/ios/Runner/Base.lproj/Main.storyboard
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
    <dependencies>
        <deployment identifier="iOS"/>
        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
    </dependencies>
    <scenes>
        <!--Flutter View Controller-->
        <scene sceneID="tne-QT-ifu">
            <objects>
                <viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">
                    <layoutGuides>
                        <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
                        <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
                    </layoutGuides>
                    <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
                        <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
                        <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                        <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
                    </view>
                </viewController>
                <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
            </objects>
        </scene>
    </scenes>
</document>


================================================
FILE: example/ios/Runner/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>CFBundleDevelopmentRegion</key>
	<string>en</string>
	<key>CFBundleExecutable</key>
	<string>$(EXECUTABLE_NAME)</string>
	<key>CFBundleIdentifier</key>
	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
	<key>CFBundleInfoDictionaryVersion</key>
	<string>6.0</string>
	<key>CFBundleName</key>
	<string>example</string>
	<key>CFBundlePackageType</key>
	<string>APPL</string>
	<key>CFBundleShortVersionString</key>
	<string>$(FLUTTER_BUILD_NAME)</string>
	<key>CFBundleSignature</key>
	<string>????</string>
	<key>CFBundleVersion</key>
	<string>$(FLUTTER_BUILD_NUMBER)</string>
	<key>LSRequiresIPhoneOS</key>
	<true/>
	<key>UILaunchStoryboardName</key>
	<string>LaunchScreen</string>
	<key>UIMainStoryboardFile</key>
	<string>Main</string>
	<key>UISupportedInterfaceOrientations</key>
	<array>
		<string>UIInterfaceOrientationPortrait</string>
		<string>UIInterfaceOrientationLandscapeLeft</string>
		<string>UIInterfaceOrientationLandscapeRight</string>
	</array>
	<key>UISupportedInterfaceOrientations~ipad</key>
	<array>
		<string>UIInterfaceOrientationPortrait</string>
		<string>UIInterfaceOrientationPortraitUpsideDown</string>
		<string>UIInterfaceOrientationLandscapeLeft</string>
		<string>UIInterfaceOrientationLandscapeRight</string>
	</array>
	<key>UIViewControllerBasedStatusBarAppearance</key>
	<false/>
</dict>
</plist>


================================================
FILE: example/ios/Runner/Runner-Bridging-Header.h
================================================
#import "GeneratedPluginRegistrant.h"


================================================
FILE: example/ios/Runner/main.m
================================================
#import <Flutter/Flutter.h>
#import <UIKit/UIKit.h>
#import "AppDelegate.h"

int main(int argc, char* argv[]) {
  @autoreleasepool {
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
  }
}


================================================
FILE: example/ios/Runner.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
	archiveVersion = 1;
	classes = {
	};
	objectVersion = 46;
	objects = {

/* Begin PBXBuildFile section */
		1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
		3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
		9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; };
		978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; };
		97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; };
		97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
		97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
		97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
/* End PBXBuildFile section */

/* Begin PBXCopyFilesBuildPhase section */
		9705A1C41CF9048500538489 /* Embed Frameworks */ = {
			isa = PBXCopyFilesBuildPhase;
			buildActionMask = 2147483647;
			dstPath = "";
			dstSubfolderSpec = 10;
			files = (
			);
			name = "Embed Frameworks";
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXCopyFilesBuildPhase section */

/* Begin PBXFileReference section */
		1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
		1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
		3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
		7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
		7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
		7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
		9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
		9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
		97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
		97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
		97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
		97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
		97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
		97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
		97C146EB1CF9000F007C117D /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
		9740EEB11CF90186004384FC /* Flutter */ = {
			isa = PBXGroup;
			children = (
				3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
				9740EEB21CF90195004384FC /* Debug.xcconfig */,
				7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
				9740EEB31CF90195004384FC /* Generated.xcconfig */,
			);
			name = Flutter;
			sourceTree = "<group>";
		};
		97C146E51CF9000F007C117D = {
			isa = PBXGroup;
			children = (
				9740EEB11CF90186004384FC /* Flutter */,
				97C146F01CF9000F007C117D /* Runner */,
				97C146EF1CF9000F007C117D /* Products */,
				CF3B75C9A7D2FA2A4C99F110 /* Frameworks */,
			);
			sourceTree = "<group>";
		};
		97C146EF1CF9000F007C117D /* Products */ = {
			isa = PBXGroup;
			children = (
				97C146EE1CF9000F007C117D /* Runner.app */,
			);
			name = Products;
			sourceTree = "<group>";
		};
		97C146F01CF9000F007C117D /* Runner */ = {
			isa = PBXGroup;
			children = (
				7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */,
				7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */,
				97C146FA1CF9000F007C117D /* Main.storyboard */,
				97C146FD1CF9000F007C117D /* Assets.xcassets */,
				97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
				97C147021CF9000F007C117D /* Info.plist */,
				97C146F11CF9000F007C117D /* Supporting Files */,
				1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
				1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
			);
			path = Runner;
			sourceTree = "<group>";
		};
		97C146F11CF9000F007C117D /* Supporting Files */ = {
			isa = PBXGroup;
			children = (
				97C146F21CF9000F007C117D /* main.m */,
			);
			name = "Supporting Files";
			sourceTree = "<group>";
		};
/* End PBXGroup section */

/* Begin PBXNativeTarget section */
		97C146ED1CF9000F007C117D /* Runner */ = {
			isa = PBXNativeTarget;
			buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
			buildPhases = (
				9740EEB61CF901F6004384FC /* Run Script */,
				97C146EA1CF9000F007C117D /* Sources */,
				97C146EB1CF9000F007C117D /* Frameworks */,
				97C146EC1CF9000F007C117D /* Resources */,
				9705A1C41CF9048500538489 /* Embed Frameworks */,
				3B06AD1E1E4923F5004D2608 /* Thin Binary */,
			);
			buildRules = (
			);
			dependencies = (
			);
			name = Runner;
			productName = Runner;
			productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
			productType = "com.apple.product-type.application";
		};
/* End PBXNativeTarget section */

/* Begin PBXProject section */
		97C146E61CF9000F007C117D /* Project object */ = {
			isa = PBXProject;
			attributes = {
				LastUpgradeCheck = 0910;
				ORGANIZATIONNAME = "The Chromium Authors";
				TargetAttributes = {
					97C146ED1CF9000F007C117D = {
						CreatedOnToolsVersion = 7.3.1;
					};
				};
			};
			buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
			compatibilityVersion = "Xcode 3.2";
			developmentRegion = English;
			hasScannedForEncodings = 0;
			knownRegions = (
				en,
				Base,
			);
			mainGroup = 97C146E51CF9000F007C117D;
			productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
			projectDirPath = "";
			projectRoot = "";
			targets = (
				97C146ED1CF9000F007C117D /* Runner */,
			);
		};
/* End PBXProject section */

/* Begin PBXResourcesBuildPhase section */
		97C146EC1CF9000F007C117D /* Resources */ = {
			isa = PBXResourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
				3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
				9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */,
				97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
				97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXResourcesBuildPhase section */

/* Begin PBXShellScriptBuildPhase section */
		3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			inputPaths = (
			);
			name = "Thin Binary";
			outputPaths = (
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
		};
		9740EEB61CF901F6004384FC /* Run Script */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			inputPaths = (
			);
			name = "Run Script";
			outputPaths = (
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
		};
/* End PBXShellScriptBuildPhase section */

/* Begin PBXSourcesBuildPhase section */
		97C146EA1CF9000F007C117D /* Sources */ = {
			isa = PBXSourcesBuildPhase;
			buildActionMask = 2147483647;
			files = (
				978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */,
				97C146F31CF9000F007C117D /* main.m in Sources */,
				1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXSourcesBuildPhase section */

/* Begin PBXVariantGroup section */
		97C146FA1CF9000F007C117D /* Main.storyboard */ = {
			isa = PBXVariantGroup;
			children = (
				97C146FB1CF9000F007C117D /* Base */,
			);
			name = Main.storyboard;
			sourceTree = "<group>";
		};
		97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
			isa = PBXVariantGroup;
			children = (
				97C147001CF9000F007C117D /* Base */,
			);
			name = LaunchScreen.storyboard;
			sourceTree = "<group>";
		};
/* End PBXVariantGroup section */

/* Begin XCBuildConfiguration section */
		249021D3217E4FDB00AE95B9 /* Profile */ = {
			isa = XCBuildConfiguration;
			baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_COMMA = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				ENABLE_NS_ASSERTIONS = NO;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
				MTL_ENABLE_DEBUG_INFO = NO;
				SDKROOT = iphoneos;
				TARGETED_DEVICE_FAMILY = "1,2";
				VALIDATE_PRODUCT = YES;
			};
			name = Profile;
		};
		249021D4217E4FDB00AE95B9 /* Profile */ = {
			isa = XCBuildConfiguration;
			baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
				DEVELOPMENT_TEAM = S8QB4VV633;
				ENABLE_BITCODE = NO;
				FRAMEWORK_SEARCH_PATHS = (
					"$(inherited)",
					"$(PROJECT_DIR)/Flutter",
				);
				INFOPLIST_FILE = Runner/Info.plist;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
				LIBRARY_SEARCH_PATHS = (
					"$(inherited)",
					"$(PROJECT_DIR)/Flutter",
				);
				PRODUCT_BUNDLE_IDENTIFIER = com.example.example;
				PRODUCT_NAME = "$(TARGET_NAME)";
				VERSIONING_SYSTEM = "apple-generic";
			};
			name = Profile;
		};
		97C147031CF9000F007C117D /* Debug */ = {
			isa = XCBuildConfiguration;
			baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_COMMA = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = dwarf;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				ENABLE_TESTABILITY = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_DYNAMIC_NO_PIC = NO;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_OPTIMIZATION_LEVEL = 0;
				GCC_PREPROCESSOR_DEFINITIONS = (
					"DEBUG=1",
					"$(inherited)",
				);
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
				MTL_ENABLE_DEBUG_INFO = YES;
				ONLY_ACTIVE_ARCH = YES;
				SDKROOT = iphoneos;
				TARGETED_DEVICE_FAMILY = "1,2";
			};
			name = Debug;
		};
		97C147041CF9000F007C117D /* Release */ = {
			isa = XCBuildConfiguration;
			baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
			buildSettings = {
				ALWAYS_SEARCH_USER_PATHS = NO;
				CLANG_ANALYZER_NONNULL = YES;
				CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
				CLANG_CXX_LIBRARY = "libc++";
				CLANG_ENABLE_MODULES = YES;
				CLANG_ENABLE_OBJC_ARC = YES;
				CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
				CLANG_WARN_BOOL_CONVERSION = YES;
				CLANG_WARN_COMMA = YES;
				CLANG_WARN_CONSTANT_CONVERSION = YES;
				CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
				CLANG_WARN_EMPTY_BODY = YES;
				CLANG_WARN_ENUM_CONVERSION = YES;
				CLANG_WARN_INFINITE_RECURSION = YES;
				CLANG_WARN_INT_CONVERSION = YES;
				CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
				CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
				CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
				CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
				CLANG_WARN_STRICT_PROTOTYPES = YES;
				CLANG_WARN_SUSPICIOUS_MOVE = YES;
				CLANG_WARN_UNREACHABLE_CODE = YES;
				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
				"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
				COPY_PHASE_STRIP = NO;
				DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
				ENABLE_NS_ASSERTIONS = NO;
				ENABLE_STRICT_OBJC_MSGSEND = YES;
				GCC_C_LANGUAGE_STANDARD = gnu99;
				GCC_NO_COMMON_BLOCKS = YES;
				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
				GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
				GCC_WARN_UNDECLARED_SELECTOR = YES;
				GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
				GCC_WARN_UNUSED_FUNCTION = YES;
				GCC_WARN_UNUSED_VARIABLE = YES;
				IPHONEOS_DEPLOYMENT_TARGET = 8.0;
				MTL_ENABLE_DEBUG_INFO = NO;
				SDKROOT = iphoneos;
				TARGETED_DEVICE_FAMILY = "1,2";
				VALIDATE_PRODUCT = YES;
			};
			name = Release;
		};
		97C147061CF9000F007C117D /* Debug */ = {
			isa = XCBuildConfiguration;
			baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
				ENABLE_BITCODE = NO;
				FRAMEWORK_SEARCH_PATHS = (
					"$(inherited)",
					"$(PROJECT_DIR)/Flutter",
				);
				INFOPLIST_FILE = Runner/Info.plist;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
				LIBRARY_SEARCH_PATHS = (
					"$(inherited)",
					"$(PROJECT_DIR)/Flutter",
				);
				PRODUCT_BUNDLE_IDENTIFIER = com.example.example;
				PRODUCT_NAME = "$(TARGET_NAME)";
				VERSIONING_SYSTEM = "apple-generic";
			};
			name = Debug;
		};
		97C147071CF9000F007C117D /* Release */ = {
			isa = XCBuildConfiguration;
			baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
			buildSettings = {
				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
				CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
				ENABLE_BITCODE = NO;
				FRAMEWORK_SEARCH_PATHS = (
					"$(inherited)",
					"$(PROJECT_DIR)/Flutter",
				);
				INFOPLIST_FILE = Runner/Info.plist;
				LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
				LIBRARY_SEARCH_PATHS = (
					"$(inherited)",
					"$(PROJECT_DIR)/Flutter",
				);
				PRODUCT_BUNDLE_IDENTIFIER = com.example.example;
				PRODUCT_NAME = "$(TARGET_NAME)";
				VERSIONING_SYSTEM = "apple-generic";
			};
			name = Release;
		};
/* End XCBuildConfiguration section */

/* Begin XCConfigurationList section */
		97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				97C147031CF9000F007C117D /* Debug */,
				97C147041CF9000F007C117D /* Release */,
				249021D3217E4FDB00AE95B9 /* Profile */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
		97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
			isa = XCConfigurationList;
			buildConfigurations = (
				97C147061CF9000F007C117D /* Debug */,
				97C147071CF9000F007C117D /* Release */,
				249021D4217E4FDB00AE95B9 /* Profile */,
			);
			defaultConfigurationIsVisible = 0;
			defaultConfigurationName = Release;
		};
/* End XCConfigurationList section */
	};
	rootObject = 97C146E61CF9000F007C117D /* Project object */;
}


================================================
FILE: example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
   version = "1.0">
   <FileRef
      location = "group:Runner.xcodeproj">
   </FileRef>
</Workspace>


================================================
FILE: example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>IDEDidComputeMac32BitWarning</key>
	<true/>
</dict>
</plist>


================================================
FILE: example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>PreviewsEnabled</key>
	<false/>
</dict>
</plist>


================================================
FILE: example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
   LastUpgradeVersion = "0910"
   version = "1.3">
   <BuildAction
      parallelizeBuildables = "YES"
      buildImplicitDependencies = "YES">
      <BuildActionEntries>
         <BuildActionEntry
            buildForTesting = "YES"
            buildForRunning = "YES"
            buildForProfiling = "YES"
            buildForArchiving = "YES"
            buildForAnalyzing = "YES">
            <BuildableReference
               BuildableIdentifier = "primary"
               BlueprintIdentifier = "97C146ED1CF9000F007C117D"
               BuildableName = "Runner.app"
               BlueprintName = "Runner"
               ReferencedContainer = "container:Runner.xcodeproj">
            </BuildableReference>
         </BuildActionEntry>
      </BuildActionEntries>
   </BuildAction>
   <TestAction
      buildConfiguration = "Debug"
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      language = ""
      shouldUseLaunchSchemeArgsEnv = "YES">
      <Testables>
      </Testables>
      <MacroExpansion>
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "97C146ED1CF9000F007C117D"
            BuildableName = "Runner.app"
            BlueprintName = "Runner"
            ReferencedContainer = "container:Runner.xcodeproj">
         </BuildableReference>
      </MacroExpansion>
      <AdditionalOptions>
      </AdditionalOptions>
   </TestAction>
   <LaunchAction
      buildConfiguration = "Debug"
      selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
      selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
      language = ""
      launchStyle = "0"
      useCustomWorkingDirectory = "NO"
      ignoresPersistentStateOnLaunch = "NO"
      debugDocumentVersioning = "YES"
      debugServiceExtension = "internal"
      allowLocationSimulation = "YES">
      <BuildableProductRunnable
         runnableDebuggingMode = "0">
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "97C146ED1CF9000F007C117D"
            BuildableName = "Runner.app"
            BlueprintName = "Runner"
            ReferencedContainer = "container:Runner.xcodeproj">
         </BuildableReference>
      </BuildableProductRunnable>
      <AdditionalOptions>
      </AdditionalOptions>
   </LaunchAction>
   <ProfileAction
      buildConfiguration = "Profile"
      shouldUseLaunchSchemeArgsEnv = "YES"
      savedToolIdentifier = ""
      useCustomWorkingDirectory = "NO"
      debugDocumentVersioning = "YES">
      <BuildableProductRunnable
         runnableDebuggingMode = "0">
         <BuildableReference
            BuildableIdentifier = "primary"
            BlueprintIdentifier = "97C146ED1CF9000F007C117D"
            BuildableName = "Runner.app"
            BlueprintName = "Runner"
            ReferencedContainer = "container:Runner.xcodeproj">
         </BuildableReference>
      </BuildableProductRunnable>
   </ProfileAction>
   <AnalyzeAction
      buildConfiguration = "Debug">
   </AnalyzeAction>
   <ArchiveAction
      buildConfiguration = "Release"
      revealArchiveInOrganizer = "YES">
   </ArchiveAction>
</Scheme>


================================================
FILE: example/ios/Runner.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
   version = "1.0">
   <FileRef
      location = "group:Runner.xcodeproj">
   </FileRef>
</Workspace>


================================================
FILE: example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>IDEDidComputeMac32BitWarning</key>
	<true/>
</dict>
</plist>


================================================
FILE: example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>PreviewsEnabled</key>
	<false/>
</dict>
</plist>


================================================
FILE: example/lib/display_posts.dart
================================================
import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter_wordpress/flutter_wordpress.dart' as wp;

import 'post_page.dart';

class PostListPage extends StatelessWidget {
  final wp.WordPress wordPress;
  final wp.User user;

  PostListPage({Key key, @required this.wordPress, this.user});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Posts"),
      ),
      body: Center(
        child: PostsBuilder(
          wordPress: wordPress,
          user: user,
        ),
      ),
    );
  }
}

class PostsBuilder extends StatefulWidget {
  final wp.WordPress wordPress;
  final wp.User user;

  PostsBuilder({Key key, @required this.wordPress, this.user});

  @override
  PostsBuilderState createState() => PostsBuilderState();
}

class PostsBuilderState extends State<PostsBuilder> {
  final paddingCardsList = EdgeInsets.symmetric(vertical: 4.0, horizontal: 8.0);
  final padding_4 = EdgeInsets.all(4.0);
  final padding_8 = EdgeInsets.all(8.0);
  final padding_16 = EdgeInsets.all(16.0);

  Future<List<wp.Post>> posts;

  @override
  void initState() {
    super.initState();

    fetchPosts();
  }

  void createPost({@required wp.User user}) {
    final post = widget.wordPress.createPost(
      post: new wp.Post(
        title: 'First post as a Chief Editor',
        content: 'Blah! blah! blah!',
        excerpt: 'Discussion about blah!',
        authorID: user.id,
        commentStatus: wp.PostCommentStatus.open,
        pingStatus: wp.PostPingStatus.closed,
        status: wp.PostPageStatus.publish,
        format: wp.PostFormat.standard,
        sticky: true,
      ),
    );

    post.then((p) {
      print('Post created successfully with ID: ${p.id}');
    }).catchError((err) {
      print('Failed to create post: $err');
    });
  }

//  yahya

  Future<void> createUser({@required String email, @required String username, @required String password, @required List<String> roles}) async {
    await widget.wordPress.createUser(
      user: wp.User(
        email: email,
        password: password,
        username: username,
        roles: roles
      )
    ).then((p) {
      print('User created successfully ${p}');
    }).catchError((err) {
      print('Failed to create user: $err');
    });
  }

//  =====================
//  UPDATE START
//  =====================

  Future<void> updatePost({@required int id, @required int userId}) async {
    await widget.wordPress.updatePost(
      post: new wp.Post(
        title: 'First post as a Chief Editor',
        content: 'Blah! blah! blah!',
        excerpt: 'Discussion about blah!',
        authorID: userId,
        commentStatus: wp.PostCommentStatus.open,
        pingStatus: wp.PostPingStatus.closed,
        status: wp.PostPageStatus.publish,
        format: wp.PostFormat.standard,
        sticky: true,
      ),
      id: id, //
    ).then((p) {
      print('Post updated successfully with ID ${p}');
    }).catchError((err) {
      print('Failed to update post: $err');
    });
  }

  Future<void> updateComment({@required int id, @required int postId, @required wp.User user}) async {
    await widget.wordPress.updateComment(
      comment: new wp.Comment(
        content: "Comment Updated2!",
        author: user.id,
        post: postId,
      ),
      id: id,
    ).then((c) {
      print('Comment updated successfully "$c"');
    }).catchError((err) {
      print('Failed to update Comment: $err');
    });
  }

  Future<void> updateUser({@required int id, @required String username, @required String email}) async {
    await widget.wordPress.updateUser(
      user: new wp.User(
        description: "This is description for this user",
        username: username,
        id: id,
        email: email
      ),
      id: id,
    ).then((u) {
      print('User updated successfully $u');
    }).catchError((err) {
      print('Failed to update User: $err');
    });
  }

//  =====================
//  UPDATE END
//  =====================

//  =====================
//  DELETE START
//  =====================

  Future<void> deletePost({@required int id}) async {
    await widget.wordPress.deletePost(id: id).then((p) {
      print('Post Deleted successfully: $p');
    }).catchError((err) {
      print('Failed to Delete post: $err');
    });
  }

  Future<void> deleteComment({@required int id}) async {
    await widget.wordPress.deleteComment(id: id).then((c) {
      print('Comment Deleted successfully: $c');
    }).catchError((err) {
      print('Failed to Delete comment: $err');
    });
  }

  Future<void> deleteUser({@required int id, @required int reassign}) async {
    await widget.wordPress.deleteUser(id: id, reassign: reassign).then((u) {
      print('User Deleted successfully: $u');
    }).catchError((err) {
      print('Failed to Delete user: $err');
    });
  }

//  =====================
//  DELETE END
//  =====================

//  end yahya

  void createComment({@required int userId, @required int postId}) {
    final comment = widget.wordPress.createComment(
      comment: new wp.Comment(
        author: userId,
        post: postId,
        content: "First!",
        parent: 0,
      ),
    );

    comment.then((c) {
      print('Comment successfully posted with ID: ${c.id}');
    }).catchError((err) {
      print('Failed to comment: $err');
    });
  }

  Future<void> fetchPosts() {
    setState(() {
      posts = widget.wordPress.fetchPosts(
        postParams: wp.ParamsPostList(perPage: 1),
        fetchAuthor: true,
        fetchFeaturedMedia: true,
      );
    });
    return posts;
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder<List<wp.Post>>(
      future: posts,
      builder: (context, snapshot) {
        if (snapshot.hasData) {
          return RefreshIndicator(
            child: ListView.builder(
              itemBuilder: (context, i) {
                int id = snapshot.data[i].id;
                String title = snapshot.data[i].title.rendered;
                String author = snapshot.data[i].author.name;
                String content = snapshot.data[i].content.rendered;
                wp.Media featuredMedia = snapshot.data[i].featuredMedia;

                return Padding(
                  padding: paddingCardsList,
                  child: GestureDetector(
                    onTap: () {
                      openPostPage(snapshot.data[i]);
                    },
                    child: _buildPostCard(
                      author: author,
                      title: title,
                      content: content,
                      featuredMedia: featuredMedia,
                      id : id,
                    ),
                  ),
                );
              },
              itemCount: snapshot.data.length,
            ),
            onRefresh: fetchPosts,
          );
        } else if (snapshot.hasError) {
          return Text(
            snapshot.error.toString(),
            style: TextStyle(color: Colors.red),
          );
        }

        return CircularProgressIndicator(
          valueColor: AlwaysStoppedAnimation(Colors.blue),
        );
      },
    );
  }

  Widget _buildPostCard({
    String author,
    String title,
    String content,
    wp.Media featuredMedia,
    int id,
  }) {
    return Card(
      color: Colors.white,
      child: Column(
        mainAxisAlignment: MainAxisAlignment.start,
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Padding(
            padding: EdgeInsets.symmetric(horizontal: 8.0, vertical: 4.0),
            child: Text(
              title,
              style: Theme.of(context).textTheme.headline6,
            ),
          ),
          _buildFeaturedMedia(featuredMedia),
          featuredMedia == null
              ? Divider()
              : SizedBox(
                  width: 0,
                  height: 0,
                ),
          Padding(
            padding: EdgeInsets.symmetric(vertical: 0.0, horizontal: 8.0),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              mainAxisAlignment: MainAxisAlignment.start,
              children: <Widget>[
                Text(
                  author,
                  style: TextStyle(
                    fontWeight: FontWeight.w200,
                  ),
                ),
                ElevatedButton.icon(
                  onPressed: () {
                    createComment(postId: 1, userId: 1);
                  },
                  icon: Icon(Icons.settings),
                  label: Text(
                    "Create New Comment",
                  ),
                ),
                ElevatedButton.icon(
                  onPressed: () {
                    updateComment(user: widget.user, id: 1, postId: 1);
                  },
                  icon: Icon(Icons.settings),
                  label: Text(
                    "Update Comment with ID #1",
                  ),
                ),
                ElevatedButton.icon(
                  onPressed: () {
                    deleteComment(id: 1);
                  },
                  icon: Icon(Icons.settings),
                  label: Text(
                    "Delete Comment with ID #1",
                  ),
                ),
                ElevatedButton.icon(
                  onPressed: () {
                    updatePost(userId: widget.user.id, id: 1);
                  },
                  icon: Icon(Icons.settings, color: Colors.white),
                  label: Text(
                    "Update Post with ID #1",
                    style: TextStyle(color: Colors.white),
                  ),
                ),
                ElevatedButton.icon(
                  onPressed: () {
                    deletePost(id: 1);
                  },
                  icon: Icon(Icons.delete, color: Colors.white),
                  label: Text(
                    "Delete Post with ID #1",
                    style: TextStyle(color: Colors.white),
                  ),
                ),
                ElevatedButton.icon(
                  onPressed: () {
                    createPost(user: widget.user);
                  },
                  icon: Icon(Icons.add_circle, color: Colors.white,),
                  label: Text(
                    "Create New Post",
                    style: TextStyle(color: Colors.white),
                  ),
                ),
                ElevatedButton.icon(
                  onPressed: () {
                    createUser(roles: ["subscriber"], username: "myUserName", password: "123", email: "myEmail@domain.com");
                  },
                  icon: Icon(Icons.add_circle, color: Colors.white,),
                  label: Text(
                    "Create New User",
                    style: TextStyle(color: Colors.white),
                  ),
                ),
                ElevatedButton.icon(
                  onPressed: () {
                    updateUser(id: 1, email: "newuser@gmaill.com", username: "newuser");
                  },
                  icon: Icon(Icons.settings, color: Colors.white,),
                  label: Text(
                    "Update User with ID #1",
                    style: TextStyle(color: Colors.white),
                  ),
                ),
                ElevatedButton.icon(
                  onPressed: () {
                    deleteUser(id: 1, reassign: 1);
                  },
                  icon: Icon(Icons.delete, color: Colors.white,),
                  label: Text(
                    "Delete User with ID #1",
                    style: TextStyle(color: Colors.white),
                  ),
                )
              ],
            ),
          ),
        ],
      ),
    );
  }

  Widget _buildFeaturedMedia(wp.Media featuredMedia) {
    if (featuredMedia == null) {
      return SizedBox(
        width: 0.0,
        height: 0.0,
      );
    }
    String imgSource = featuredMedia.mediaDetails.sizes.mediumLarge.sourceUrl;
    imgSource = imgSource.replaceAll('localhost', '192.168.6.165');
    return Center(
      child: Image.network(
        imgSource,
        fit: BoxFit.cover,
      ),
    );
  }

  void openPostPage(wp.Post post) {
    print('OnTapped');
    Navigator.push(
      context,
      MaterialPageRoute(builder: (context) {
        return SinglePostPage(
          wordPress: widget.wordPress,
          post: post,
        );
      }),
    );
  }
}


================================================
FILE: example/lib/generated_plugin_registrant.dart
================================================
//
// Generated file. Do not edit.
//

// ignore_for_file: directives_ordering
// ignore_for_file: lines_longer_than_80_chars

import 'package:video_player_web/video_player_web.dart';
import 'package:wakelock_web/wakelock_web.dart';

import 'package:flutter_web_plugins/flutter_web_plugins.dart';

// ignore: public_member_api_docs
void registerPlugins(Registrar registrar) {
  VideoPlayerPlugin.registerWith(registrar);
  WakelockWeb.registerWith(registrar);
  registrar.registerMessageHandler();
}


================================================
FILE: example/lib/login.dart
================================================
import 'package:flutter/material.dart';
import 'package:flutter_wordpress/flutter_wordpress.dart' as wp;

import 'display_posts.dart';

const PADDING_16 = EdgeInsets.all(16.0);
const PADDING_8 = EdgeInsets.all(8.0);

class LoginPage extends StatefulWidget {
  @override
  LoginPageState createState() => LoginPageState();
}

class LoginPageState extends State<LoginPage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(
          "Login",
          style: TextStyle(fontWeight: FontWeight.w300),
        ),
        centerTitle: true,
      ),
      body: LoginFields(),
    );
  }
}

class LoginFields extends StatefulWidget {
  @override
  LoginFieldsState createState() => LoginFieldsState();
}

class LoginFieldsState extends State<LoginFields> {
  String _username;
  String _password;
  bool _isDetailValid = true;
  bool _isValidating = false;

  @override
  void initState() {
    super.initState();
    _username = 'YOUR_USERNAME';
    _password = 'YOUR_PASSWORD';
  }

  @override
  Widget build(BuildContext context) {
    return Center(
        child: SingleChildScrollView(
      child: Container(
        padding: PADDING_16,
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            Padding(
              padding: PADDING_8,
              child: _buildFormField(
                icon: Icon(Icons.person),
                labelText: "Username",
                hintText: "Username",
                initialText: _username,
                onChanged: _onUsernameChanged,
              ),
            ),
            Padding(
              padding: PADDING_8,
              child: _buildFormField(
                icon: Icon(Icons.lock),
                labelText: "Password",
                hintText: "Password",
                initialText: _password,
                obscureText: true,
                onChanged: _onPasswordChanged,
              ),
            ),
            _isDetailValid
                ? SizedBox(
                    width: 0.0,
                    height: 0.0,
                  )
                : Padding(
                    padding: PADDING_8,
                    child: Text(
                      "Invalid Username / Password",
                      style: TextStyle(
                        color: Colors.red,
                      ),
                    ),
                  ),
            ElevatedButton(
              onPressed: _isValidating ? () {} : _validateUser,
              child: Padding(
                padding: PADDING_8,
                child: _isValidating
                    ? CircularProgressIndicator(
                        valueColor: AlwaysStoppedAnimation(Colors.white),
                      )
                    : Text('Login'),
              ),
            ),
          ],
        ),
      ),
    ));
  }

  Widget _buildFormField({
    Icon icon,
    String labelText,
    String hintText,
    String initialText,
    TextInputType inputType = TextInputType.text,
    bool obscureText = false,
    onChanged,
  }) {
    return TextField(
      decoration: InputDecoration(
        icon: icon,
        labelText: labelText,
        hintText: hintText,
        border: OutlineInputBorder(
          borderRadius: BorderRadius.circular(4.0),
        ),
      ),
      controller: TextEditingController(text: initialText),
      keyboardType: inputType,
      obscureText: obscureText,
      onChanged: onChanged,
    );
  }

  void _onUsernameChanged(String value) {
    _username = value;
  }

  void _onPasswordChanged(String value) {
    _password = value;
  }

  void _validateUser() {
    setState(() {
      _isValidating = true;
    });

    wp.WordPress wordPress = new wp.WordPress(
      baseUrl: 'YOUR WEBSITE URL',
      authenticator: wp.WordPressAuthenticator.JWT,
      adminName: '',
      adminKey: '',
    );

    final response =
        wordPress.authenticateUser(username: _username, password: _password);

    response.then((user) {
      setState(() {
        _isDetailValid = true;
        _isValidating = false;

        _onValidUser(wordPress, user);
      });
    }).catchError((err) {
      print(err.toString());
      setState(() {
        _isDetailValid = false;
        _isValidating = false;
      });
    });
  }

  void _onValidUser(wp.WordPress wordPress, wp.User user) {
    Navigator.pushReplacement(
      context,
      MaterialPageRoute(
        builder: (context) => PostListPage(
          wordPress: wordPress,
          user: user,
        ),
      ),
    );
  }
}


================================================
FILE: example/lib/main.dart
================================================
import 'package:flutter/material.dart';
import 'login.dart';

void main() {
  runApp(WordPressApp());
}

class WordPressApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'WordPress Demo',
      theme: ThemeData.light(),
      home: LoginPage(),
    );
  }
}

================================================
FILE: example/lib/post_page.dart
================================================
import 'package:flutter/material.dart';
import 'package:flutter_html/flutter_html.dart';
import 'package:flutter_wordpress/flutter_wordpress.dart' as wp;

class SinglePostPage extends StatelessWidget {
  final wp.WordPress wordPress;
  final wp.Post post;

  SinglePostPage({Key key, @required this.wordPress, @required this.post});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(post.title.rendered),
      ),
      body: Padding(
        padding: EdgeInsets.all(8.0),
        child: PostWithComments(wordPress: wordPress, post: post),
      ),
    );
  }
}

class PostWithComments extends StatefulWidget {
  final wp.WordPress wordPress;
  final wp.Post post;

  PostWithComments({@required this.wordPress, @required this.post});

  @override
  PostWithCommentsState createState() => PostWithCommentsState();
}

class PostWithCommentsState extends State<PostWithComments> {
  String _content;

  Future<List<wp.CommentHierarchy>> _comments;

  @override
  void initState() {
    super.initState();

    _content = widget.post.content.rendered;
    _content = _content.replaceAll('localhost', '192.168.6.165');

    fetchComments();
  }

  void fetchComments() {
    setState(() {
      _comments = widget.wordPress.fetchCommentsAsHierarchy(
          params: wp.ParamsCommentList(
        includePostIDs: [widget.post.id],
      ));
    });
  }

  @override
  Widget build(BuildContext context) {
    return CustomScrollView(
      slivers: <Widget>[
        SliverList(
          delegate: SliverChildListDelegate(
            [
              Html(
                data: _content,
                // blockSpacing: 0.0,
              ),
              Divider(),
              Row(
                children: <Widget>[
                  Icon(Icons.comment),
                  Text('Comments'),
                ],
              ),
              Divider(),
            ],
          ),
        ),
        FutureBuilder(
          future: _comments,
          builder: (context, snapshot) {
            return SliverList(
              delegate: _buildCommentsSection(snapshot),
            );
          },
        ),
      ],
    );
  }

  SliverChildDelegate _buildCommentsSection(
      AsyncSnapshot<List<wp.CommentHierarchy>> snapshot) {
    if (snapshot.hasData) {
      return _buildComments(snapshot.data);
    } else if (snapshot.hasError) {
      return SliverChildListDelegate([
        Text(
          'Error fetching comments: ${snapshot.error.toString()}',
          style: TextStyle(
            color: Colors.red,
          ),
        )
      ]);
    }

    return SliverChildListDelegate(
      [
        Center(
          child: CircularProgressIndicator(
            valueColor: AlwaysStoppedAnimation(Colors.blue),
          ),
        ),
      ],
    );
  }

  SliverChildBuilderDelegate _buildComments(
      List<wp.CommentHierarchy> comments) {
    return SliverChildBuilderDelegate(
      (BuildContext context, int i) {
        if (comments == null || comments.length == 0) {
          return Center(
            child: Padding(
              padding: EdgeInsets.all(8.0),
              child: Text(
                'No comments',
                style: Theme.of(context).textTheme.bodyText1,
              ),
            ),
          );
        }

        if (i % 2 != 0) {
          return Divider();
        }
        return _buildCommentTile(comments[(i / 2).ceil()]);
      },
      childCount:
          comments == null || comments.length == 0 ? 1 : comments.length * 2,
    );
  }

  Widget _buildCommentTile(wp.CommentHierarchy root) {
    if (root.children == null) {
      return Padding(
        padding: EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Html(
              data: root.comment.content.rendered,
              // blockSpacing: 0.0,
            ),
            Text(
              root.comment.authorName,
              style: TextStyle(
                color: Colors.grey,
                fontWeight: FontWeight.w300,
              ),
            ),
          ],
        ),
      );
    } else {
      return ExpansionTile(
        title: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Html(
              data: root.comment.content.rendered,
              // blockSpacing: 0.0,
            ),
            Text(
              root.comment.authorName,
              style: TextStyle(
                color: Colors.grey,
                fontWeight: FontWeight.w300,
              ),
            ),
          ],
        ),
        children: root.children.map((c) {
          return Padding(
            padding: EdgeInsets.only(left: 16.0),
            child: _buildCommentTile(c),
          );
        }).toList(),
      );
    }
  }
}


================================================
FILE: example/pubspec.yaml
================================================
name: flutter_wordpress_example
description: Wordpress API testing example.

# The following defines the version and build number for your application.
# A version number is three numbers separated by dots, like 1.2.43
# followed by an optional build number separated by a +.
# Both the version and the builder number may be overridden in flutter
# build by specifying --build-name and --build-number, respectively.
# Read more about versioning at semver.org.
version: 1.0.0+1
publish_to: none

environment:
  sdk: ">=2.0.0-dev.68.0 <3.0.0"

dependencies:
  flutter_wordpress:
    path: ../
  flutter:
    sdk: flutter
  flutter_html: ^2.2.1

  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^1.0.4

dev_dependencies:
  flutter_test:
    sdk: flutter


# For information on the generic Dart part of this file, see the
# following page: https://www.dartlang.org/tools/pub/pubspec

# The following section is specific to Flutter.
flutter:

  # The following line ensures that the Material Icons font is
  # included with your application, so that you can use the icons in
  # the material Icons class.
  uses-material-design: true

  # To add assets to your application, add an assets section, like this:
  # assets:
  #  - images/a_dot_burr.jpeg
  #  - images/a_dot_ham.jpeg

  # An image asset can refer to one or more resolution-specific "variants", see
  # https://flutter.io/assets-and-images/#resolution-aware.

  # For details regarding adding assets from package dependencies, see
  # https://flutter.io/assets-and-images/#from-packages

  # To add custom fonts to your application, add a fonts section here,
  # in this "flutter" section. Each entry in this list should have a
  # "family" key with the font family name, and a "fonts" key with a
  # list giving the asset and other descriptors for the font. For
  # example:
  # fonts:
  #   - family: Schyler
  #     fonts:
  #       - asset: fonts/Schyler-Regular.ttf
  #       - asset: fonts/Schyler-Italic.ttf
  #         style: italic
  #   - family: Trajan Pro
  #     fonts:
  #       - asset: fonts/TrajanPro.ttf
  #       - asset: fonts/TrajanPro_Bold.ttf
  #         weight: 700
  #
  # For details regarding fonts from package dependencies,
  # see https://flutter.io/custom-fonts/#from-packages


================================================
FILE: example/test/widget_test.dart
================================================
// This is a basic Flutter widget test.
//
// To perform an interaction with a widget in your test, use the WidgetTester
// utility that Flutter provides. For example, you can send tap and scroll
// gestures. You can also use WidgetTester to find child widgets in the widget
// tree, read text, and verify that the values of widget properties are correct.

import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';

import 'package:flutter_wordpress_example/main.dart';

void main() {
  testWidgets('Counter increments smoke test', (WidgetTester tester) async {
    // Build our app and trigger a frame.
    await tester.pumpWidget(WordPressApp());

    // Verify that our counter starts at 0.
    expect(find.text('0'), findsOneWidget);
    expect(find.text('1'), findsNothing);

    // Tap the '+' icon and trigger a frame.
    await tester.tap(find.byIcon(Icons.add));
    await tester.pump();

    // Verify that our counter has incremented.
    expect(find.text('0'), findsNothing);
    expect(find.text('1'), findsOneWidget);
  });
}


================================================
FILE: flutter_wordpress.iml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
  <component name="FacetManager">
    <facet type="android" name="Android">
      <configuration>
        <option name="ALLOW_USER_CONFIGURATION" value="false" />
      </configuration>
    </facet>
  </component>
  <component name="NewModuleRootManager" inherit-compiler-output="true">
    <exclude-output />
    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/lib" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
      <sourceFolder url="file://$MODULE_DIR$/gen" isTestSource="false" generated="true" />
      <excludeFolder url="file://$MODULE_DIR$/.dart_tool" />
      <excludeFolder url="file://$MODULE_DIR$/.idea" />
      <excludeFolder url="file://$MODULE_DIR$/.pub" />
      <excludeFolder url="file://$MODULE_DIR$/build" />
      <excludeFolder url="file://$MODULE_DIR$/example/.dart_tool" />
      <excludeFolder url="file://$MODULE_DIR$/example/.pub" />
      <excludeFolder url="file://$MODULE_DIR$/example/build" />
    </content>
    <orderEntry type="jdk" jdkName="Android API 28 Platform" jdkType="Android SDK" />
    <orderEntry type="sourceFolder" forTests="false" />
    <orderEntry type="library" name="Dart SDK" level="project" />
    <orderEntry type="library" name="Flutter Plugins" level="project" />
    <orderEntry type="library" name="Dart Packages" level="project" />
  </component>
</module>

================================================
FILE: lib/constants.dart
================================================
const URL_JWT_BASE = '/wp-json/jwt-auth/v1';
const URL_WP_BASE = '/wp-json/wp/v2';

const URL_JWT_TOKEN = '$URL_JWT_BASE/token';
const URL_JWT_TOKEN_VALIDATE = '$URL_JWT_BASE/token/validate';

const URL_CATEGORIES = '$URL_WP_BASE/categories';
const URL_COMMENTS = '$URL_WP_BASE/comments';
const URL_MEDIA = '$URL_WP_BASE/media';
const URL_PAGES = '$URL_WP_BASE/pages';
const URL_POSTS = '$URL_WP_BASE/posts';
const URL_TAGS = '$URL_WP_BASE/tags';
const URL_USERS = '$URL_WP_BASE/users';
const URL_USER_ME = '$URL_WP_BASE/users/me';

enum WordPressAuthenticator {
  JWT,
  ApplicationPasswords,
}
enum WordPressContext { view, embed, edit }

enum Order {
  asc,
  desc,
}

enum PostOrderBy {
  author,
  date,
  id,
  include,
  modified,
  parent,
  relevance,
  slug,
  title,
}
enum PostPageStatus {
  publish,
  future,
  draft,
  pending,
  private,
}
enum PostCommentStatus {
  open,
  closed,
}
enum PostPingStatus {
  open,
  closed,
}
enum PostFormat {
  standard,
  aside,
  chat,
  gallery,
  link,
  image,
  quote,
  status,
  video,
  audio,
}

enum UserOrderBy {
  id,
  include,
  name,
  registered_date,
  slug,
  email,
  url,
}

enum CommentOrderBy {
  date,
  date_gmt,
  id,
  include,
  post,
  parent,
  type,
}
enum CommentStatus {
  all,
  approve,
  hold,
  spam,
  trash,
}
enum CommentType {
  comment,
  //TODO: Add all comment types
}

enum CategoryTagOrderBy {
  id,
  include,
  name,
  slug,
  term_group,
  description,
  count,
}

enum PageOrderBy {
  author,
  date,
  id,
  include,
  modified,
  parent,
  relevance,
  slug,
  title,
  menu_order,
}

enum MediaOrderBy {
  author,
  date,
  id,
  include,
  modified,
  parent,
  relevance,
  slug,
  title,
}
enum MediaStatus {
  inherit,
  publish,
  future,
  draft,
  pending,
  private,
}
enum MediaType {
  image,
  video,
  audio,
  application,
}

/// Converts an enum string to enum value name.
String enumStringToName(String enumString) {
  return enumString.split('.')[1];
}

/// Formats a list of [items] to a comma(,) separated string to pass it as a
/// URL parameter.
String listToUrlString<T>(List<T> items) {
  if (items.length == 0) return '';

  return items.join(',');
}

/// Formats a [Map] of parameters to a string of URL friendly parameters.
String constructUrlParams(Map<String, String> params) {
  StringBuffer p = new StringBuffer('/?');
  params.forEach((key, value) {
    if (value != '') {
      p.write('$key=$value');
      p.write('&');
    }
  });
  return p.toString();
}


================================================
FILE: lib/flutter_wordpress.dart
================================================
/// This library uses [WordPress REST API V2](https://developer.wordpress.org/rest-api/)
/// to provide a way for your application to interact with your WordPress website.
///
/// We use terminologies similar to the [WordPress REST API](https://developer.wordpress.org/rest-api/)
///
/// For authentication and usage of administrator level APIs, we have implemented
/// two popular authentication plugins:
///
/// 1. [Application Passwords](https://wordpress.org/plugins/application-passwords/)
/// 2. [JWT Authentication for WP REST API](https://wordpress.org/plugins/jwt-authentication-for-wp-rest-api/)
library flutter_wordpress;

import 'dart:convert';
import 'dart:io';

import 'package:http/http.dart' as http;

import 'constants.dart';
import 'requests/params_category_list.dart';
import 'requests/params_comment_list.dart';
import 'requests/params_media_list.dart';
import 'requests/params_page_list.dart';
import 'requests/params_post_list.dart';
import 'requests/params_tag_list.dart';
import 'requests/params_user_list.dart';
import 'schemas/category.dart';
import 'schemas/comment.dart';
import 'schemas/comment_hierarchy.dart';
import 'schemas/fetch_user_result.dart';
import 'schemas/jwt_response.dart';
import 'schemas/media.dart';
import 'schemas/page.dart';
import 'schemas/post.dart';
import 'schemas/tag.dart';
import 'schemas/user.dart';
import 'schemas/wordpress_error.dart';

export 'constants.dart';
export 'requests/params_category_list.dart';
export 'requests/params_comment_list.dart';
export 'requests/params_media_list.dart';
export 'requests/params_page_list.dart';
export 'requests/params_post_list.dart';
export 'requests/params_tag_list.dart';
export 'requests/params_user_list.dart';
export 'schemas/avatar_urls.dart';
export 'schemas/category.dart';
export 'schemas/comment.dart';
export 'schemas/comment_hierarchy.dart';
export 'schemas/content.dart';
export 'schemas/excerpt.dart';
export 'schemas/fetch_user_result.dart';
export 'schemas/guid.dart';
export 'schemas/jwt_response.dart';
export 'schemas/labels.dart';
export 'schemas/links.dart';
export 'schemas/media.dart';
export 'schemas/page.dart';
export 'schemas/post.dart';
export 'schemas/settings.dart';
export 'schemas/tag.dart';
export 'schemas/title.dart';
export 'schemas/user.dart';
export 'schemas/wordpress_error.dart';

/// All WordPress related functionality are defined under this class.
class WordPress {
  late String _baseUrl;
  late WordPressAuthenticator _authenticator;

  String _token = "";
  Map<String, String> _urlHeader = {
    'Authorization': '',
  };

  /// If [WordPressAuthenticator.ApplicationPasswords] is used as an authenticator,
  /// [adminName] and [adminKey] is necessary for authentication.
  /// https://wordpress.org/plugins/application-passwords/
  WordPress({
    required String baseUrl,
    required WordPressAuthenticator authenticator,
    String? adminName,
    String? adminKey,
  }) {
    this._baseUrl = baseUrl.endsWith('/')
        ? baseUrl.substring(0, baseUrl.length - 1)
        : baseUrl;

    this._authenticator = authenticator;

    if (adminName != null && adminKey != null) {
      switch (this._authenticator) {
        case WordPressAuthenticator.ApplicationPasswords:
          String str = '$adminName:$adminKey';
          String base64 = base64Encode(utf8.encode(str));
          _urlHeader['Authorization'] = 'Basic $base64';
          break;
        case WordPressAuthenticator.JWT:
          //TODO: Implement JWT Admin authentication
          break;
      }
    }
  }

  /// This returns a [User] object when a user with valid [username] and [password]
  /// has been successfully authenticated.
  ///
  /// In case of an error, a [WordPressError] object is thrown.
  Future<User> authenticateUser({
    required username,
    required password,
  }) async {
    if (_authenticator == WordPressAuthenticator.ApplicationPasswords) {
      return _authenticateViaAP(username, password);
    } else if (_authenticator == WordPressAuthenticator.JWT) {
      return _authenticateViaJWT(username, password);
    } else
      return fetchUser(username: username);
  }

  Future<User> _authenticateViaAP(username, password) async {
    return fetchUser(username: username);
  }

  Future<User> _authenticateViaJWT(String username, String password) async {
    final body = {
      'username': username,
      'password': password,
    };

    final response = await http.post(
      Uri.parse(_baseUrl + URL_JWT_TOKEN),
      body: body,
    );

    if (response.statusCode >= 200 && response.statusCode < 300) {
      JWTResponse authResponse = JWTResponse.fromJson(
        json.decode(response.body),
      );
      _token = authResponse.token!;
      _urlHeader['Authorization'] = 'Bearer ${authResponse.token}';

      return fetchUser(email: authResponse.userEmail);
    } else {
      try {
        throw new WordPressError.fromJson(json.decode(response.body));
      } catch (e) {
        throw new WordPressError(message: response.body);
      }
    }
  }

  String getToken() {
    return _token;
  }

  Future<User> authenticateViaToken(String token) async {
    _urlHeader['Authorization'] = 'Bearer ${token}';

    final response = await http.post(
      Uri.parse(_baseUrl + URL_JWT_TOKEN_VALIDATE),
      headers: _urlHeader,
    );

    if (response.statusCode >= 200 && response.statusCode < 300) {
      return fetchMeUser();
    } else {
      throw new WordPressError(message: response.body);
    }
  }

  /// This returns a [User] object if the user with [id], [email] or [username]
  /// exists. Otherwise throws [WordPressError].
  ///
  /// Only one parameter is enough to search for the user.
  ///
  /// In case of an error, a [WordPressError] object is thrown.
  Future<User> fetchUser({
    int? id,
    String? email,
    String? username,
  }) async {
    final StringBuffer url = new StringBuffer(_baseUrl + URL_USERS);
    final Map<String, String> params = {
      'search': '',
    };
    if (id != null) {
      params['search'] = '$id';
    } else if (email != null)
      params['search'] = email;
    else if (username != null) params['search'] = username;

    url.write(constructUrlParams(params));

    final response = await http.get(
      Uri.parse(url.toString()),
      headers: _urlHeader,
    );

    if (response.statusCode >= 200 && response.statusCode < 300) {
      final jsonStr = json.decode(response.body);
      if (jsonStr.length == 0)
        throw new WordPressError(
            code: 'wp_empty_list', message: "No users found");

      return User.fromJson(jsonStr[0]);
    } else {
      try {
        WordPressError err = WordPressError.fromJson(
          json.decode(response.body),
        );
        throw err;
      } catch (e) {
        throw new WordPressError(message: response.body);
      }
    }
  }

  /// This returns the me [User] object with the current token. Otherwise throws [WordPressError].
  ///
  /// In case of an error, a [WordPressError] object is thrown.
  Future<User> fetchMeUser() async {
    final response = await http.get(
      Uri.parse(_baseUrl + URL_USER_ME),
      headers: _urlHeader,
    );

    if (response.statusCode >= 200 && response.statusCode < 300) {
      final jsonStr = json.decode(response.body);
      if (jsonStr.length == 0)
        throw new WordPressError(
            code: 'wp_empty_user', message: "No user found");
      return User.fromJson(jsonStr);
    } else {
      try {
        WordPressError err =
            WordPressError.fromJson(json.decode(response.body));
        throw err;
      } catch (e) {
        throw new WordPressError(message: response.body);
      }
    }
  }

  /// This returns a list of [Post] based on the filter parameters
  /// specified through [ParamsPostList] object. By default it returns only
  /// [ParamsPostList.perPage] number of posts in page [ParamsPostList.pageNum].
  ///
  /// [fetchAuthor], [fetchComments], [fetchCategories], [fetchTags],
  /// [fetchFeaturedMedia] and [fetchAttachments] will fetch and set [Post.author],
  /// [Post.comments], [Post.categories], [Post.tags], [Post.featuredMedia] and
  /// [Post.attachments] respectively. If they are non-existent, their values will
  /// null.
  ///
  /// (**Note:** *Set only those fetch boolean parameters which you need because
  /// the more information to fetch, the longer it will take to return all Posts*)
  ///
  /// [fetchAll] will make as many API requests as is needed to get all posts.
  /// This may take a while.
  ///
  /// In case of an error, a [WordPressError] object is thrown.
  Future<List<Post>> fetchPosts(
      {required ParamsPostList postParams,
      bool fetchAuthor = false,
      bool fetchComments = false,
      Order orderComments = Order.desc,
      CommentOrderBy orderCommentsBy = CommentOrderBy.date,
      bool fetchCategories = false,
      bool fetchTags = false,
      bool fetchFeaturedMedia = false,
      bool fetchAttachments = false,
      String postType = "posts",
      bool fetchAll = false}) async {
    int bulkBatchNum = 100;

    if (fetchAll) {
      postParams = postParams.copyWith(perPage: bulkBatchNum);
    }

    Map<int, User> authorsByID = {};
    Map<int, int> authorIDForPostIDs = {};
    Map<int, Post> postsByID = {};
    Map<int, List<Comment>> commentsForPostIDs = {};
    Map<int, int> featuredMediaIDForPostIDs = {};
    Map<int, Media> featuredMediaByID = {};
    Map<int, Category> categoriesByID = {};
    Map<int, Tag> tagsByID = {};
    Map<int, List<Media>> attachmentsForPostIDs = {};

    /// This function fetches post information such as author, comments, categories,
    /// tags, featuredMedia and attachments.
    var _postPrep = ({
      required Post post,
      bool setAuthor = false,
      bool setComments = false,
      bool setCategories = false,
      bool setTags = false,
      bool setFeaturedMedia = false,
      bool setAttachments = false,
    }) async {
      if (setAuthor && post.id != null && post.authorID != null) {
        authorIDForPostIDs[post.id!] = post.authorID!;
      }
      if (setComments && post.id != null) {
        commentsForPostIDs[post.id!] = [];
      }
      if (setCategories) {
        post.categoryIDs
            ?.forEach((id) => categoriesByID[id] = Category(id: id));
      }
      if (setTags) {
        post.tagIDs?.forEach((id) => tagsByID[id] = Tag(id: id));
      }
      if (setFeaturedMedia && post.id != null && post.featuredMediaID != null) {
        featuredMediaIDForPostIDs[post.id!] = post.featuredMediaID!;
      }
      if (setAttachments && post.id != null) {
        attachmentsForPostIDs[post.id!] = [];
      }
      return post;
    };

    final StringBuffer url =
        new StringBuffer(_baseUrl + URL_WP_BASE + "/" + postType);

    url.write(postParams.toString());

    final response =
        await http.get(Uri.parse(url.toString()), headers: _urlHeader);

    if (response.statusCode >= 200 && response.statusCode < 300) {
      final list = json.decode(response.body);

      for (final post in list) {
        var pt = await _postPrep(
          post: Post.fromJson(post),
          setAuthor: fetchAuthor,
          setComments: fetchComments,
          setFeaturedMedia: fetchFeaturedMedia,
          setCategories: fetchCategories,
          setAttachments: fetchAttachments,
        );
        if (pt.id != null) postsByID[pt.id!] = pt;
      }

      var pids = postsByID.keys.toList();

      //handler to fetch authors
      var handleGettingAuthors = ({bool setAuthor = false}) async {
        if (setAuthor) {
          var aids = authorIDForPostIDs.values.toList();
          FetchUsersResult authResult =
              await fetchUsers(params: ParamsUserList(includeUserIDs: aids));
          authorsByID = Map.fromIterable(authResult.users,
              key: (u) => u.id, value: (u) => u);
          if (authResult.users.length != authResult.totalUsers &&
              authResult.totalUsers != null) {
            var stride = authResult.users.length;
            var numOfCalls = (authResult.totalUsers! / stride) + 1;
            for (var i = 2; i <= numOfCalls; i++) {
              FetchUsersResult result = await fetchUsers(
                  params: ParamsUserList(
                includeUserIDs: aids,
                pageNum: i,
                perPage: stride,
              ));
              result.users.forEach((u) {
                if (u.id != null) authorsByID[u.id!] = u;
              });
            }
          }
        }
      };

      //handler to fetch comments
      var handleGettingComments = ({bool setComments = false}) async {
        if (setComments) {
          List<Comment> comments = await this.fetchComments(
              params: ParamsCommentList(
            includePostIDs: pids,
            order: orderComments,
            orderBy: orderCommentsBy,
            perPage: bulkBatchNum,
            pageNum: 1,
          ));
          if (comments.length != 0) {
            comments.forEach((comment) {
              commentsForPostIDs[comment.post]?.add(comment);
            });
            var i = 2;
            while (comments.length == bulkBatchNum) {
              comments = await this.fetchComments(
                  params: ParamsCommentList(
                includePostIDs: pids,
                order: orderComments,
                orderBy: orderCommentsBy,
                perPage: bulkBatchNum,
                pageNum: i,
              ));
              comments.forEach((comment) {
                commentsForPostIDs[comment.post]?.add(comment);
              });
              i += 1;
            }
          }
        }
      };

      //handler to fetch categories
      var handleGettingCategories = ({bool setCategories = false}) async {
        if (setCategories) {
          var cids = categoriesByID.keys.toList();
          List<Category> categories = await this.fetchCategories(
              params: ParamsCategoryList(
            includeCategoryIDs: cids,
            perPage: bulkBatchNum,
            pageNum: 1,
          ));
          if (categories.length != 0) {
            categories.forEach((cat) {
              if (cat.id != null) categoriesByID[cat.id!] = cat;
            });
            var i = 2;
            while (categories.length == bulkBatchNum) {
              categories = await this.fetchCategories(
                  params: ParamsCategoryList(
                includeCategoryIDs: cids,
                perPage: bulkBatchNum,
                pageNum: i,
              ));
              categories.forEach((cat) {
                if (cat.id != null) categoriesByID[cat.id!] = cat;
              });
              i += 1;
            }
          }
        }
      };

      //handler to fetch tags
      var handleGettingTags = ({bool setTags = false}) async {
        var tids = tagsByID.keys.toList();
        if (setTags) {
          List<Tag> tags = await this.fetchTags(
              params: ParamsTagList(
            includeTagIDs: tids,
            perPage: bulkBatchNum,
            pageNum: 1,
          ));
          if (tags.length != 0) {
            tags.forEach((tag) {
              if (tag.id != null) tagsByID[tag.id!] = tag;
            });
            var i = 2;
            while (tags.length == bulkBatchNum) {
              tags = await this.fetchTags(
                  params: ParamsTagList(
                includeTagIDs: tids,
                perPage: bulkBatchNum,
                pageNum: i,
              ));
              tags.forEach((tag) {
                if (tag.id != null) tagsByID[tag.id!] = tag;
              });
              i += 1;
            }
          }
        }
      };

      //handler to fetch featured media
      var handleGettingFeaturedMedia = ({bool setFeaturedMedia = false}) async {
        if (setFeaturedMedia) {
          var fids = featuredMediaIDForPostIDs.values.toList();
          List<Media> media = await this.fetchMediaList(
            params: ParamsMediaList(
                includeMediaIDs: fids, perPage: bulkBatchNum, pageNum: 1),
          );
          if (media.length != 0) {
            media.forEach((fm) {
              if (fm.id != null) featuredMediaByID[fm.id!] = fm;
            });
            var i = 2;
            while (media.length == bulkBatchNum) {
              media = await this.fetchMediaList(
                params: ParamsMediaList(
                  includeMediaIDs: fids,
                  perPage: bulkBatchNum,
                  pageNum: i,
                ),
              );
              media.forEach((fm) {
                if (fm.id != null) featuredMediaByID[fm.id!] = fm;
              });
              i += 1;
            }
          }
        }
      };

      //handler to fetch attachments
      var handleGettingAttachments = ({bool setAttachments = false}) async {
        if (setAttachments) {
          List<Media> attachments = await this.fetchMediaList(
            params: ParamsMediaList(
              includeParentIDs: pids,
              perPage: bulkBatchNum,
              pageNum: 1,
            ),
          );
          if (attachments.length != 0) {
            attachments.forEach((attachment) {
              attachmentsForPostIDs[attachment.post]?.add(attachment);
            });
            var i = 2;
            while (attachments.length == bulkBatchNum) {
              attachments = await this.fetchMediaList(
                params: ParamsMediaList(
                  includeParentIDs: pids,
                  perPage: bulkBatchNum,
                  pageNum: i,
                ),
              );
              attachments.forEach((attachment) {
                attachmentsForPostIDs[attachment.post]?.add(attachment);
              });
              i += 1;
            }
          }
        }
      };

      await Future.wait([
        handleGettingAuthors(setAuthor: fetchAuthor),
        handleGettingComments(setComments: fetchComments),
        handleGettingCategories(setCategories: fetchCategories),
        handleGettingTags(setTags: fetchTags),
        handleGettingFeaturedMedia(setFeaturedMedia: fetchFeaturedMedia),
        handleGettingAttachments(setAttachments: fetchAttachments),
      ]);

      //fill posts
      postsByID.values.forEach((post) {
        //handle Author
        if (fetchAuthor) {
          post.author = authorsByID[post.authorID];
        }
        //handle comments
        if (fetchComments) {
          post.comments = commentsForPostIDs[post.id];
          post.commentsHierarchy = [];
          if (post.comments != null) {
            post.comments?.forEach((comment) {
              if (comment.parent == 0)
                post.commentsHierarchy?.add(
                    _commentHierarchyBuilder(post.comments ?? [], comment));
            });
          }
        }
        //handle categories
        if (fetchCategories) {
          post.categories = [];
          post.categoryIDs?.forEach((catid) {
            if (categoriesByID[catid] != null)
              post.categories?.add(categoriesByID[catid]!);
          });
        }
        //handle tags
        if (fetchTags) {
          post.tags = [];
          post.tagIDs?.forEach((id) {
            if (tagsByID[id] != null) post.tags?.add(tagsByID[id]!);
          });
        }
        //handle featured media
        if (fetchFeaturedMedia) {
          post.featuredMedia =
              featuredMediaByID[featuredMediaIDForPostIDs[post.id]];
        }
        //handle attachments
        if (fetchAttachments) {
          post.attachments = attachmentsForPostIDs[post.id];
        }
      });

      if (fetchAll && response.headers["x-wp-totalpages"] != null) {
        final totalPages = int.parse(response.headers["x-wp-totalpages"]!);

        for (int i = postParams.pageNum + 1; i <= totalPages; ++i) {
          (await fetchPosts(
            postParams: postParams.copyWith(pageNum: i),
            fetchAuthor: fetchAuthor,
            fetchComments: fetchComments,
            orderComments: orderComments,
            orderCommentsBy: orderCommentsBy,
            fetchCategories: fetchCategories,
            fetchTags: fetchTags,
            fetchFeaturedMedia: fetchFeaturedMedia,
            fetchAttachments: fetchAttachments,
          ))
              .forEach((p) {
            if (p.id != null) postsByID[p.id!] = p;
          });
        }
      }

      return postsByID.values.toList();
    } else {
      try {
        WordPressError err =
            WordPressError.fromJson(json.decode(response.body));
        throw err;
      } catch (e) {
        throw new WordPressError(message: response.body);
      }
    }
  }

  ///This recursive function builds the hierarchy of comments for the given post
  ///and comment. Only parent comments (direct comments to post) need to be
  ///supplied.
  CommentHierarchy _commentHierarchyBuilder(
    List<Comment> commentList,
    Comment comment,
  ) {
    final childComments = commentList.where((ele) =>
        ele.id != comment.id && ele.parent != 0 && ele.parent == comment.id);

    if (childComments.length == 0) {
      return new CommentHierarchy(comment: comment);
    } else {
      List<CommentHierarchy> children = [];
      childComments.forEach((c) {
        children.add(_commentHierarchyBuilder(commentList, c));
      });
      return new CommentHierarchy(
        comment: comment,
        children: children,
      );
    }
  }

  /// This returns a list of [Page] based on the filter parameters
  /// specified through [ParamsPageList] object. By default it returns only
  /// [ParamsPageList.perPage] number of pages in page [ParamsPageList.pageNum].
  ///
  /// In case of an error, a [WordPressError] object is thrown.
  Future<List<Page>> fetchPages({required ParamsPageList params}) async {
    final StringBuffer url = new StringBuffer(_baseUrl + URL_PAGES);

    url.write(params.toString());

    final response =
        await http.get(Uri.parse(url.toString()), headers: _urlHeader);

    if (response.statusCode >= 200 && response.statusCode < 300) {
      List<Page> pages = [];
      final list = json.decode(response.body);
      list.forEach((page) {
        pages.add(Page.fromJson(page));
      });
      return pages;
    } else {
      try {
        WordPressError err =
            WordPressError.fromJson(json.decode(response.body));
        throw err;
      } catch (e) {
        throw new WordPressError(message: response.body);
      }
    }
  }

  /// This returns an object FetchUsersResult based on the filter parameters
  /// specified through [ParamsUserList] object. By default it returns only
  /// [ParamsUserList.perPage] number of users in page [ParamsUserList.pageNum].
  ///
  /// In case of an error, a [WordPressError] object is thrown.
  Future<FetchUsersResult> fetchUsers({required ParamsUserList params}) async {
    final StringBuffer url = new StringBuffer(_baseUrl + URL_USERS);

    url.write(params.toString());

    return _doUsersFetch(url);
  }

  /// This returns an object FetchUsersResult as defined by the input, based on the filter parameters
  /// specified through [ParamsUserList] object. The url it fetches to is defined by the input [String] path. By default it returns only
  /// [ParamsUserList.perPage] number of users in page [ParamsUserList.pageNum].
  ///
  /// In case of an error, a [WordPressError] object is thrown.
  Future<FetchUsersResult> fetchCustomUsers({
    required String path,
    required ParamsUserList params,
  }) async {
    final StringBuffer url = new StringBuffer(_baseUrl + path);
    url.write(params.toString());

    return _doUsersFetch(url);
  }

  Future<FetchUsersResult> _doUsersFetch(StringBuffer url) async {
    final response = await http.get(
      Uri.parse(url.toString()),
      headers: _urlHeader,
    );

    if (response.statusCode >= 200 && response.statusCode < 300) {
      List<User> users = [];
      final list = json.decode(response.body);
      int totalUsers = int.parse(response.headers['x-wp-total']!);

      list.forEach((user) {
        users.add(User.fromJson(user));
      });
      return FetchUsersResult(users, totalUsers);
    } else {
      try {
        WordPressError err =
            WordPressError.fromJson(json.decode(response.body));
        throw err;
      } catch (e) {
        throw new WordPressError(message: response.body);
      }
    }
  }

  /// This returns a list of [Comment] based on the filter parameters
  /// specified through [ParamsCommentList] object. By default it returns only
  /// [ParamsCommentList.perPage] number of comments in page [ParamsCommentList.pageNum].
  ///
  /// In case of an error, a [WordPressError] object is thrown.
  Future<List<Comment>> fetchComments({
    required ParamsCommentList params,
  }) async {
    final StringBuffer url = new StringBuffer(_baseUrl + URL_COMMENTS);

    url.write(params.toString());

    final response = await http.get(
      Uri.parse(url.toString()),
      headers: _urlHeader,
    );

    if (response.statusCode >= 200 && response.statusCode < 300) {
      List<Comment> comments = [];
      final list = json.decode(response.body);
      list.forEach((comment) {
        comments.add(Comment.fromJson(comment));
      });
      return comments;
    } else {
      try {
        WordPressError err =
            WordPressError.fromJson(json.decode(response.body));
        throw err;
      } catch (e) {
        throw new WordPressError(message: response.body);
      }
    }
  }

  /// This returns a list of [CommentHierarchy] based on the filter parameters
  /// specified through [ParamsCommentList] object. The list returned has all
  /// parent comments (i.e. comments directed towards posts) with
  /// [CommentHierarchy.children] containing the replies to that comment.
  ///
  /// In case of an error, a [WordPressError] object is thrown.
  Future<List<CommentHierarchy>> fetchCommentsAsHierarchy({
    required ParamsCommentList params,
  }) async {
    final StringBuffer url = new StringBuffer(_baseUrl + URL_COMMENTS);

    url.write(params.toString());

    final response = await http.get(
      Uri.parse(url.toString()),
      headers: _urlHeader,
    );

    if (response.statusCode >= 200 && response.statusCode < 300) {
      List<Comment> comments = [];
      List<CommentHierarchy> commentsHierarchy = [];
      final list = json.decode(response.body);
      list.forEach((comment) {
        comments.add(Comment.fromJson(comment));
      });

      comments.forEach((comment) {
        if (comment.parent == 0)
          commentsHierarchy.add(_commentHierarchyBuilder(comments, comment));
      });
      return commentsHierarchy;
    } else {
      try {
        WordPressError err =
            WordPressError.fromJson(json.decode(response.body));
        throw err;
      } catch (e) {
        throw new WordPressError(message: response.body);
      }
    }
  }

  /// This returns a list of [Category] based on the filter parameters
  /// specified through [ParamsCategoryList] object. By default it returns only
  /// [ParamsCategoryList.perPage] number of categories in page [ParamsCategoryList.pageNum].
  ///
  /// In case of an error, a [WordPressError] object is thrown.
  Future<List<Category>> fetchCategories({
    required ParamsCategoryList params,
    bool fetchAll = false,
  }) async {
    if (fetchAll) {
      params = params.copyWith(perPage: 100);
    }

    final StringBuffer url = new StringBuffer(_baseUrl + URL_CATEGORIES);

    url.write(params.toString());

    final response = await http.get(
      Uri.parse(url.toString()),
      headers: _urlHeader,
    );

    if (response.statusCode >= 200 && response.statusCode < 300) {
      List<Category> categories = [];
      final list = json.decode(response.body);
      list.forEach((category) {
        categories.add(Category.fromJson(category));
      });

      if (fetchAll && response.headers["x-wp-totalpages"] != null) {
        final totalPages = int.parse(response.headers["x-wp-totalpages"]!);

        for (int i = params.pageNum + 1; i <= totalPages; ++i) {
          categories.addAll(
              await fetchCategories(params: params.copyWith(pageNum: i)));
        }
      }

      return categories;
    } else {
      try {
        WordPressError err =
            WordPressError.fromJson(json.decode(response.body));
        throw err;
      } catch (e) {
        throw new WordPressError(message: response.body);
      }
    }
  }

  /// This returns a list of [Tag] based on the filter parameters
  /// specified through [ParamsTagList] object. By default it returns only
  /// [ParamsTagList.perPage] number of tags in page [ParamsTagList.pageNum].
  ///
  /// In case of an error, a [WordPressError] object is thrown.
  Future<List<Tag>> fetchTags({required ParamsTagList params}) async {
    final StringBuffer url = new StringBuffer(_baseUrl + URL_TAGS);

    url.write(params.toString());

    final response = await http.get(
      Uri.parse(url.toString()),
      headers: _urlHeader,
    );

    if (response.statusCode >= 200 && response.statusCode < 300) {
      List<Tag> tags = [];
      final list = json.decode(response.body);
      list.forEach((tag) {
        tags.add(Tag.fromJson(tag));
      });
      return tags;
    } else {
      try {
        WordPressError err =
            WordPressError.fromJson(json.decode(response.body));
        throw err;
      } catch (e) {
        throw new WordPressError(message: response.body);
      }
    }
  }

  /// This returns a list of [Media] based on the filter parameters
  /// specified through [ParamsMediaList] object. By default it returns only
  /// [ParamsMediaList.perPage] number of tags in page [ParamsMediaList.pageNum].
  ///
  /// In case of an error, a [WordPressError] object is thrown.
  Future<List<Media>> fetchMediaList({required ParamsMediaList params}) async {
    final StringBuffer url = new StringBuffer(_baseUrl + URL_MEDIA);

    url.write(params.toString());

    final response = await http.get(
      Uri.parse(url.toString()),
      headers: _urlHeader,
    );

    if (response.statusCode >= 200 && response.statusCode < 300) {
      List<Media> media = [];
      final list = json.decode(response.body);
      list.forEach((m) {
        media.add(Media.fromJson(m));
      });
      return media;
    } else {
      try {
        WordPressError err =
            WordPressError.fromJson(json.decode(response.body));
        throw err;
      } catch (e) {
        throw new WordPressError(message: response.body);
      }
    }
  }

  /// This is used to create a [Post] in the site. Before this method can be called,
  /// [User] creating the post needs to be authenticated first by calling
  /// [WordPress.authenticateUser]. On success, the [Post] object is returned containing
  /// post information.
  ///
  /// In case of an error, a [WordPressError] object is thrown.
  ///
  ///

  Future<Post> createPost({required Post post}) async {
    final StringBuffer url = new StringBuffer(_baseUrl + URL_POSTS);

    final response = await http.post(
      Uri.parse(url.toString()),
      headers: _urlHeader,
      body: post.toJson(),
    );

    if (response.statusCode >= 200 && response.statusCode < 300) {
      return Post.fromJson(json.decode(response.body));
    } else {
      try {
        WordPressError err =
            WordPressError.fromJson(json.decode(response.body));
        throw err;
      } catch (e) {
        throw new WordPressError(message: response.body);
      }
    }
  }

//  yahya - @mymakarim

  Future<dynamic> uploadMedia(File image) async {
    final StringBuffer url = new StringBuffer(_baseUrl + URL_MEDIA);
    var file = image.readAsBytesSync();
    final response = await http.post(
      Uri.parse(url.toString()),
      headers: {
        "Content-Type": "image/png",
        "Content-Disposition": "form-data; filename=firstIg.png",
        "Authorization": "${_urlHeader['Authorization']}"
      },
      body: file,
    );

    if (response.statusCode >= 200 && response.statusCode < 300) {
      return json.decode(response.body);
    } else {
      try {
        WordPressError err =
            WordPressError.fromJson(json.decode(response.body));
        throw err;
      } catch (e) {
        throw new WordPressError(message: response.body);
      }
    }
  }

// uploadMedia function added by: @GarvMaggu

  Future<bool> createUser({required User user}) async {
    final StringBuffer url = new StringBuffer(_baseUrl + URL_USERS);

    HttpClient httpClient = new HttpClient();
    HttpClientRequest request =
        await httpClient.postUrl(Uri.parse(url.toString()));
    request.headers
        .set(HttpHeaders.contentTypeHeader, "application/json; charset=UTF-8");
    request.headers.set(HttpHeaders.acceptHeader, "application/json");
    request.headers.set('Authorization', "${_urlHeader['Authorization']}");

    request.add(utf8.encode(json.encode(user.toJson())));
    HttpClientResponse response = await request.close();

    if (response.statusCode >= 200 && response.statusCode < 300) {
      return true;
    } else {
      response.transform(utf8.decoder).listen((contents) {
        try {
          WordPressError err = WordPressError.fromJson(json.decode(contents));
          throw err;
        } catch (e) {
          throw new WordPressError(message: contents);
        }
      });
    }

    return false;
  }

//  =====================
//  UPDATE START
//  =====================

  Future<bool> updatePost({required int id, required Post post}) async {
    final StringBuffer url = new StringBuffer(_baseUrl + URL_POSTS + '/$id');

    HttpClient httpClient = new HttpClient();
    HttpClientRequest request =
        await httpClient.postUrl(Uri.parse(url.toString()));
    request.headers
        .set(HttpHeaders.contentTypeHeader, "application/json; charset=UTF-8");
    request.headers.set(HttpHeaders.acceptHeader, "application/json");
    request.headers.set('Authorization', "${_urlHeader['Authorization']}");

    request.add(utf8.encode(json.encode(post.toJson())));
    HttpClientResponse response = await request.close();

    if (response.statusCode >= 200 && response.statusCode < 300) {
      return true;
    } else {
      response.transform(utf8.decoder).listen((contents) {
        try {
          WordPressError err = WordPressError.fromJson(json.decode(contents));
          throw err;
        } catch (e) {
          throw new WordPressError(message: contents);
        }
      });
    }
    return false;
  }

  Future<bool> updateComment(
      {required int id, required Comment comment}) async {
    final StringBuffer url = new StringBuffer(_baseUrl + URL_COMMENTS + '/$id');

    HttpClient httpClient = new HttpClient();
    HttpClientRequest request =
        await httpClient.postUrl(Uri.parse(url.toString()));
    request.headers
        .set(HttpHeaders.contentTypeHeader, "application/json; charset=UTF-8");
    request.headers.set(HttpHeaders.acceptHeader, "application/json");
    request.headers.set('Authorization', "${_urlHeader['Authorization']}");

    request.add(utf8.encode(json.encode(comment.toJson())));
    HttpClientResponse response = await request.close();

    if (response.statusCode >= 200 && response.statusCode < 300) {
      return true;
    } else {
      response.transform(utf8.decoder).listen((contents) {
        try {
          WordPressError err = WordPressError.fromJson(json.decode(contents));
          throw err;
        } catch (e) {
          throw new WordPressError(message: contents);
        }
      });
    }
    return false;
  }

  Future<bool> updateUser({required int id, required User user}) async {
    final StringBuffer url = new StringBuffer(_baseUrl + URL_USERS + '/$id');

    HttpClient httpClient = new HttpClient();
    HttpClientRequest request =
        await httpClient.postUrl(Uri.parse(url.toString()));
    request.headers
        .set(HttpHeaders.contentTypeHeader, "application/json; charset=UTF-8");
    request.headers.set(HttpHeaders.acceptHeader, "application/json");
    request.headers.set('Authorization', "${_urlHeader['Authorization']}");

    request.add(utf8.encode(json.encode(user.toJson())));
    HttpClientResponse response = await request.close();

    if (response.statusCode >= 200 && response.statusCode < 300) {
      return true;
    } else {
      response.transform(utf8.decoder).listen((contents) {
        try {
          WordPressError err = WordPressError.fromJson(json.decode(contents));
          throw err;
        } catch (e) {
          throw new WordPressError(message: contents);
        }
      });
    }
    return false;
  }

//  =====================
//  UPDATE END
//  =====================

//  =====================
//  DELETE START
//  =====================

  Future<bool> deletePost({required int id}) async {
    final StringBuffer url = new StringBuffer(_baseUrl + URL_POSTS + '/$id');

    HttpClient httpClient = new HttpClient();
    HttpClientRequest request =
        await httpClient.deleteUrl(Uri.parse(url.toString()));
    request.headers
        .set(HttpHeaders.contentTypeHeader, "application/json; charset=UTF-8");
    request.headers.set(HttpHeaders.acceptHeader, "application/json");
    request.headers.set('Authorization', "${_urlHeader['Authorization']}");

    HttpClientResponse response = await request.close();

    if (response.statusCode >= 200 && response.statusCode < 300) {
      return true;
    } else {
      response.transform(utf8.decoder).listen((contents) {
        try {
          WordPressError err = WordPressError.fromJson(json.decode(contents));
          throw err;
        } catch (e) {
          throw new WordPressError(message: contents);
        }
      });
    }
    return false;
  }

  Future<bool> deleteComment({required int id}) async {
    final StringBuffer url = new StringBuffer(_baseUrl + URL_COMMENTS + '/$id');

    HttpClient httpClient = new HttpClient();
    HttpClientRequest request =
        await httpClient.deleteUrl(Uri.parse(url.toString()));
    request.headers
        .set(HttpHeaders.contentTypeHeader, "application/json; charset=UTF-8");
    request.headers.set(HttpHeaders.acceptHeader, "application/json");
    request.headers.set('Authorization', "${_urlHeader['Authorization']}");

    HttpClientResponse response = await request.close();

    if (response.statusCode >= 200 && response.statusCode < 300) {
      return true;
    } else {
      response.transform(utf8.decoder).listen((contents) {
        try {
          WordPressError err = WordPressError.fromJson(json.decode(contents));
          throw err;
        } catch (e) {
          throw new WordPressError(message: contents);
        }
      });
    }
    return false;
  }

  Future<bool> deleteUser({
    required int id,
    required int reassign,
  }) async {
    final StringBuffer url = new StringBuffer(_baseUrl + URL_USERS + '/$id');

    HttpClient httpClient = new HttpClient();
    HttpClientRequest request =
        await httpClient.deleteUrl(Uri.parse(url.toString()));
    request.headers
        .set(HttpHeaders.contentTypeHeader, "application/json; charset=UTF-8");
    request.headers.set(HttpHeaders.acceptHeader, "application/json");
    request.headers.set('Authorization', "${_urlHeader['Authorization']}");

    request
        .add(utf8.encode(json.encode({"reassign": reassign, "force": true})));
    HttpClientResponse response = await request.close();

    if (response.statusCode >= 200 && response.statusCode < 300) {
      return true;
    } else {
      response.transform(utf8.decoder).listen((contents) {
        try {
          WordPressError err = WordPressError.fromJson(json.decode(contents));
          throw err;
        } catch (e) {
          throw new WordPressError(message: contents);
        }
      });
    }
    return false;
  }

//  =====================
//  UPDATE END
//  =====================

//  end yahya - @mymakarim

  /// This is used to create a [Comment] for a [Post]. Before this method can be called,
  /// [User] writing the comment needs to be authenticated first by calling
  /// [WordPress.authenticateUser]. On success, the [Comment] object is returned containing
  /// comment information.
  ///
  /// In case of an error, a [WordPressError] object is thrown.
  Future<Comment> createComment({required Comment comment}) async {
    final StringBuffer url = new StringBuffer(_baseUrl + URL_COMMENTS);

    final response = await http.post(
      Uri.parse(url.toString()),
      headers: _urlHeader,
      body: comment.toJson(),
    );

    if (response.statusCode >= 200 && response.statusCode < 300) {
      return Comment.fromJson(json.decode(response.body));
    } else {
      try {
        WordPressError err =
            WordPressError.fromJson(json.decode(response.body));
        throw err;
      } catch (e) {
        throw new WordPressError(message: response.body);
      }
    }
  }
}


================================================
FILE: lib/requests/params_category_list.dart
================================================
import 'package:flutter_wordpress/constants.dart';

/// This class holds all arguments which can be used to filter Categories when using
/// [WordPress.fetchCategories] method.
///
/// [List Categories' Arguments](https://developer.wordpress.org/rest-api/reference/categories/#list-categories)
class ParamsCategoryList {
  final WordPressContext context;
  final int pageNum;
  final int perPage;
  final String searchQuery;
  final List<int> excludeCategoryIDs;
  final List<int> includeCategoryIDs;
  final Order order;
  final CategoryTagOrderBy orderBy;
  final bool hideEmpty;
  final int? parent;
  final int? post;
  final String slug;

  ParamsCategoryList({
    this.context = WordPressContext.view,
    this.pageNum = 1,
    this.perPage = 10,
    this.searchQuery = '',
    this.excludeCategoryIDs = const [],
    this.includeCategoryIDs = const [],
    this.order = Order.asc,
    this.orderBy = CategoryTagOrderBy.name,
    this.hideEmpty = false,
    this.parent,
    this.post,
    this.slug = '',
  });

  Map<String, String> toMap() {
    return {
      'context': '${enumStringToName(this.context.toString())}',
      'page': '${this.pageNum}',
      'per_page': '${this.perPage}',
      'search': '${this.searchQuery}',
      'exclude': '${listToUrlString(this.excludeCategoryIDs)}',
      'include': '${listToUrlString(this.includeCategoryIDs)}',
      'order': '${enumStringToName(this.order.toString())}',
      'orderby': '${enumStringToName(this.orderBy.toString())}',
      'hide_empty': '${this.hideEmpty}',
      'parent': '${this.parent == null ? '' : this.parent}',
      'post': '${this.post == null ? '' : this.post}',
      'slug': '${this.slug}',
    };
  }

  ParamsCategoryList copyWith({
    int? pageNum,
    int? perPage
  }) {
    return ParamsCategoryList(
      context: context,
      order: order,
      orderBy: orderBy,
      pageNum: pageNum ?? this.pageNum,
      perPage: perPage ?? this.perPage,
      searchQuery: searchQuery,
      slug: slug,
      excludeCategoryIDs: excludeCategoryIDs,
      hideEmpty: hideEmpty,
      includeCategoryIDs: includeCategoryIDs,
      parent: parent,
      post: post
    );
  }

  @override
  String toString() {
    return constructUrlParams(toMap());
  }
}


================================================
FILE: lib/requests/params_comment_list.dart
================================================
import 'package:flutter_wordpress/constants.dart';

/// This class holds all arguments which can be used to filter comments when using
/// [WordPress.fetchComments] method.
///
/// [List Comments' Arguments](https://developer.wordpress.org/rest-api/reference/comments/#list-comments)
class ParamsCommentList {
  final WordPressContext context;
  final int pageNum;
  final int perPage;
  final String searchQuery;
  final String afterDate;
  final List<int> includeAuthorIDs;
  final List<int> excludeAuthorIDs;
  final String authorEmail;
  final String beforeDate;
  final List<int> excludeCommentIDs;
  final List<int> includeCommentIDs;
  final int? offset;
  final Order order;
  final CommentOrderBy orderBy;
  final List<int> includeParentIDs;
  final List<int> excludeParentIDs;
  final List<int> includePostIDs;
  final CommentStatus commentStatus;
  final CommentType commentType;
  final String postPassword;

  ParamsCommentList({
    this.context = WordPressContext.view,
    this.pageNum = 1,
    this.perPage = 10,
    this.searchQuery = '',
    this.afterDate = '',
    this.includeAuthorIDs = const [],
    this.excludeAuthorIDs = const [],
    this.authorEmail = '',
    this.beforeDate = '',
    this.excludeCommentIDs = const [],
    this.includeCommentIDs = const [],
    this.offset,
    this.order = Order.desc,
    this.orderBy = CommentOrderBy.date_gmt,
    this.includeParentIDs = const [],
    this.excludeParentIDs = const [],
    this.includePostIDs = const [],
    this.commentStatus = CommentStatus.approve,
    this.commentType = CommentType.comment,
    this.postPassword = '',
  });

  Map<String, String> toMap() {
    return {
      'context': '${enumStringToName(this.context.toString())}',
      'page': '${this.pageNum}',
      'per_page': '${this.perPage}',
      'search': '${this.searchQuery}',
      'after': '${this.afterDate}',
      'author': '${listToUrlString(this.includeAuthorIDs)}',
      'author_exclude': '${listToUrlString(this.excludeAuthorIDs)}',
      'author_email': '${this.authorEmail}',
      'before': '${this.beforeDate}',
      'exclude': '${listToUrlString(excludeCommentIDs)}',
      'include': '${listToUrlString(includeCommentIDs)}',
      'offset': '${this.offset == null ? '' : this.offset}',
      'order': '${enumStringToName(this.order.toString())}',
      'orderby': '${enumStringToName(this.orderBy.toString())}',
      'parent': '${listToUrlString(this.includeParentIDs)}',
      'parent_exclude': '${listToUrlString(this.excludeParentIDs)}',
      'post': '${listToUrlString(this.includePostIDs)}',
      'status': '${enumStringToName(this.commentStatus.toString())}',
      'type': '${enumStringToName(this.commentType.toString())}',
      'password': '${this.postPassword}',
    };
  }

  @override
  String toString() {
    return constructUrlParams(toMap());
  }
}


================================================
FILE: lib/requests/params_media_list.dart
================================================
import 'package:flutter_wordpress/constants.dart';

/// This class holds all arguments which can be used to filter media when using
/// [WordPress.fetchMediaList] method.
///
/// [List Media Arguments](https://developer.wordpress.org/rest-api/reference/media/#list-media)
class ParamsMediaList {
  final WordPressContext context;
  final int pageNum;
  final int perPage;
  final String searchQuery;
  final String afterDate;
  final List<int> includeAuthorIDs;
  final List<int> excludeAuthorIDs;
  final String beforeDate;
  final List<int> excludeMediaIDs;
  final List<int> includeMediaIDs;
  final int? offset;
  final Order order;
  final MediaOrderBy orderBy;
  final List<int> includeParentIDs;
  final List<int> excludeParentIDs;
  final String slug;
  final MediaStatus mediaStatus;
  final MediaType? mediaType;
  final String mimeType;

  ParamsMediaList({
    this.context = WordPressContext.view,
    this.pageNum = 1,
    this.perPage = 10,
    this.searchQuery = '',
    this.afterDate = '',
    this.includeAuthorIDs = const [],
    this.excludeAuthorIDs = const [],
    this.beforeDate = '',
    this.excludeMediaIDs = const [],
    this.includeMediaIDs = const [],
    this.offset,
    this.order = Order.desc,
    this.orderBy = MediaOrderBy.date,
    this.excludeParentIDs = const [],
    this.includeParentIDs = const [],
    this.slug = '',
    this.mediaStatus = MediaStatus.inherit,
    this.mediaType,
    this.mimeType = '',
  });

  Map<String, String> toMap() {
    return {
      'context': '${enumStringToName(this.context.toString())}',
      'page': '${this.pageNum}',
      'per_page': '${this.perPage}',
      'search': '${this.searchQuery}',
 
Download .txt
gitextract_x59_vvxd/

├── .gitignore
├── .idea/
│   ├── codeStyles/
│   │   └── Project.xml
│   ├── dictionaries/
│   │   └── suraj.xml
│   ├── libraries/
│   │   ├── Dart_Packages.xml
│   │   ├── Dart_SDK.xml
│   │   └── Flutter_Plugins.xml
│   ├── modules.xml
│   ├── vcs.xml
│   └── workspace.xml
├── .metadata
├── CHANGELOG.md
├── LICENSE
├── README.md
├── example/
│   ├── .flutter-plugins-dependencies
│   ├── .gitignore
│   ├── .metadata
│   ├── README.md
│   ├── analysis_options.yaml
│   ├── android/
│   │   ├── .gitignore
│   │   ├── app/
│   │   │   ├── build.gradle
│   │   │   └── src/
│   │   │       ├── debug/
│   │   │       │   └── AndroidManifest.xml
│   │   │       ├── main/
│   │   │       │   ├── AndroidManifest.xml
│   │   │       │   ├── kotlin/
│   │   │       │   │   └── com/
│   │   │       │   │       └── example/
│   │   │       │   │           └── example/
│   │   │       │   │               └── MainActivity.kt
│   │   │       │   └── res/
│   │   │       │       ├── drawable/
│   │   │       │       │   └── launch_background.xml
│   │   │       │       ├── drawable-v21/
│   │   │       │       │   └── launch_background.xml
│   │   │       │       ├── values/
│   │   │       │       │   └── styles.xml
│   │   │       │       └── values-night/
│   │   │       │           └── styles.xml
│   │   │       └── profile/
│   │   │           └── AndroidManifest.xml
│   │   ├── build.gradle
│   │   ├── gradle/
│   │   │   └── wrapper/
│   │   │       └── gradle-wrapper.properties
│   │   ├── gradle.properties
│   │   └── settings.gradle
│   ├── ios/
│   │   ├── .gitignore
│   │   ├── Flutter/
│   │   │   ├── AppFrameworkInfo.plist
│   │   │   ├── Debug.xcconfig
│   │   │   ├── Flutter.podspec
│   │   │   └── Release.xcconfig
│   │   ├── Podfile
│   │   ├── Runner/
│   │   │   ├── AppDelegate.h
│   │   │   ├── AppDelegate.m
│   │   │   ├── AppDelegate.swift
│   │   │   ├── Assets.xcassets/
│   │   │   │   ├── AppIcon.appiconset/
│   │   │   │   │   └── Contents.json
│   │   │   │   └── LaunchImage.imageset/
│   │   │   │       ├── Contents.json
│   │   │   │       └── README.md
│   │   │   ├── Base.lproj/
│   │   │   │   ├── LaunchScreen.storyboard
│   │   │   │   └── Main.storyboard
│   │   │   ├── Info.plist
│   │   │   ├── Runner-Bridging-Header.h
│   │   │   └── main.m
│   │   ├── Runner.xcodeproj/
│   │   │   ├── project.pbxproj
│   │   │   ├── project.xcworkspace/
│   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   └── xcshareddata/
│   │   │   │       ├── IDEWorkspaceChecks.plist
│   │   │   │       └── WorkspaceSettings.xcsettings
│   │   │   └── xcshareddata/
│   │   │       └── xcschemes/
│   │   │           └── Runner.xcscheme
│   │   └── Runner.xcworkspace/
│   │       ├── contents.xcworkspacedata
│   │       └── xcshareddata/
│   │           ├── IDEWorkspaceChecks.plist
│   │           └── WorkspaceSettings.xcsettings
│   ├── lib/
│   │   ├── display_posts.dart
│   │   ├── generated_plugin_registrant.dart
│   │   ├── login.dart
│   │   ├── main.dart
│   │   └── post_page.dart
│   ├── pubspec.yaml
│   └── test/
│       └── widget_test.dart
├── flutter_wordpress.iml
├── lib/
│   ├── constants.dart
│   ├── flutter_wordpress.dart
│   ├── requests/
│   │   ├── params_category_list.dart
│   │   ├── params_comment_list.dart
│   │   ├── params_media_list.dart
│   │   ├── params_page_list.dart
│   │   ├── params_post_list.dart
│   │   ├── params_tag_list.dart
│   │   └── params_user_list.dart
│   └── schemas/
│       ├── avatar_urls.dart
│       ├── capabilities.dart
│       ├── category.dart
│       ├── comment.dart
│       ├── comment_hierarchy.dart
│       ├── content.dart
│       ├── excerpt.dart
│       ├── fetch_user_result.dart
│       ├── guid.dart
│       ├── jwt_response.dart
│       ├── labels.dart
│       ├── links.dart
│       ├── media.dart
│       ├── page.dart
│       ├── post.dart
│       ├── post_statuses.dart
│       ├── post_types.dart
│       ├── settings.dart
│       ├── tag.dart
│       ├── taxonomies.dart
│       ├── title.dart
│       ├── user.dart
│       └── wordpress_error.dart
└── pubspec.yaml
Download .txt
SYMBOL INDEX (277 symbols across 38 files)

FILE: example/lib/display_posts.dart
  class PostListPage (line 8) | class PostListPage extends StatelessWidget {
    method build (line 15) | Widget build(BuildContext context)
  class PostsBuilder (line 30) | class PostsBuilder extends StatefulWidget {
    method createState (line 37) | PostsBuilderState createState()
  class PostsBuilderState (line 40) | class PostsBuilderState extends State<PostsBuilder> {
    method initState (line 49) | void initState()
    method createPost (line 55) | void createPost({@required wp.User user})
    method createUser (line 79) | Future<void> createUser({@required String email, @required String user...
    method updatePost (line 98) | Future<void> updatePost({@required int id, @required int userId})
    method updateComment (line 119) | Future<void> updateComment({@required int id, @required int postId, @r...
    method updateUser (line 134) | Future<void> updateUser({@required int id, @required String username, ...
    method deletePost (line 158) | Future<void> deletePost({@required int id})
    method deleteComment (line 166) | Future<void> deleteComment({@required int id})
    method deleteUser (line 174) | Future<void> deleteUser({@required int id, @required int reassign})
    method createComment (line 188) | void createComment({@required int userId, @required int postId})
    method fetchPosts (line 205) | Future<void> fetchPosts()
    method build (line 217) | Widget build(BuildContext context)
    method _buildPostCard (line 265) | Widget _buildPostCard({
    method _buildFeaturedMedia (line 399) | Widget _buildFeaturedMedia(wp.Media featuredMedia)
    method openPostPage (line 416) | void openPostPage(wp.Post post)

FILE: example/lib/generated_plugin_registrant.dart
  function registerPlugins (line 14) | void registerPlugins(Registrar registrar)

FILE: example/lib/login.dart
  class LoginPage (line 9) | class LoginPage extends StatefulWidget {
    method createState (line 11) | LoginPageState createState()
  class LoginPageState (line 14) | class LoginPageState extends State<LoginPage> {
    method build (line 16) | Widget build(BuildContext context)
  class LoginFields (line 30) | class LoginFields extends StatefulWidget {
    method createState (line 32) | LoginFieldsState createState()
  class LoginFieldsState (line 35) | class LoginFieldsState extends State<LoginFields> {
    method initState (line 42) | void initState()
    method build (line 49) | Widget build(BuildContext context)
    method _buildFormField (line 110) | Widget _buildFormField({
    method _onUsernameChanged (line 135) | void _onUsernameChanged(String value)
    method _onPasswordChanged (line 139) | void _onPasswordChanged(String value)
    method _validateUser (line 143) | void _validateUser()
    method _onValidUser (line 174) | void _onValidUser(wp.WordPress wordPress, wp.User user)

FILE: example/lib/main.dart
  function main (line 4) | void main()
  class WordPressApp (line 8) | class WordPressApp extends StatelessWidget {
    method build (line 10) | Widget build(BuildContext context)

FILE: example/lib/post_page.dart
  class SinglePostPage (line 5) | class SinglePostPage extends StatelessWidget {
    method build (line 12) | Widget build(BuildContext context)
  class PostWithComments (line 25) | class PostWithComments extends StatefulWidget {
    method createState (line 32) | PostWithCommentsState createState()
  class PostWithCommentsState (line 35) | class PostWithCommentsState extends State<PostWithComments> {
    method initState (line 41) | void initState()
    method fetchComments (line 50) | void fetchComments()
    method build (line 60) | Widget build(BuildContext context)
    method _buildCommentsSection (line 93) | SliverChildDelegate _buildCommentsSection(
    method _buildComments (line 119) | SliverChildBuilderDelegate _buildComments(
    method _buildCommentTile (line 145) | Widget _buildCommentTile(wp.CommentHierarchy root)

FILE: example/test/widget_test.dart
  function main (line 13) | void main()

FILE: lib/constants.dart
  type WordPressAuthenticator (line 16) | enum WordPressAuthenticator {
  type WordPressContext (line 20) | enum WordPressContext { view, embed, edit }
  type Order (line 22) | enum Order {
  type PostOrderBy (line 27) | enum PostOrderBy {
  type PostPageStatus (line 38) | enum PostPageStatus {
  type PostCommentStatus (line 45) | enum PostCommentStatus {
  type PostPingStatus (line 49) | enum PostPingStatus {
  type PostFormat (line 53) | enum PostFormat {
  type UserOrderBy (line 66) | enum UserOrderBy {
  type CommentOrderBy (line 76) | enum CommentOrderBy {
  type CommentStatus (line 85) | enum CommentStatus {
  type CommentType (line 92) | enum CommentType {
  type CategoryTagOrderBy (line 97) | enum CategoryTagOrderBy {
  type PageOrderBy (line 107) | enum PageOrderBy {
  type MediaOrderBy (line 120) | enum MediaOrderBy {
  type MediaStatus (line 131) | enum MediaStatus {
  type MediaType (line 139) | enum MediaType {
  function enumStringToName (line 147) | String enumStringToName(String enumString)
  function listToUrlString (line 153) | String listToUrlString<T>(List<T> items)
  function constructUrlParams (line 160) | String constructUrlParams(Map<String, String> params)

FILE: lib/flutter_wordpress.dart
  class WordPress (line 67) | class WordPress {
    method authenticateUser (line 109) | Future<User> authenticateUser({
    method _authenticateViaAP (line 121) | Future<User> _authenticateViaAP(username, password)
    method _authenticateViaJWT (line 125) | Future<User> _authenticateViaJWT(String username, String password)
    method getToken (line 153) | String getToken()
    method authenticateViaToken (line 157) | Future<User> authenticateViaToken(String token)
    method fetchUser (line 178) | Future<User> fetchUser({
    method fetchMeUser (line 222) | Future<User> fetchMeUser()
    method fetchPosts (line 262) | Future<List<Post>> fetchPosts(
    method _commentHierarchyBuilder (line 622) | CommentHierarchy _commentHierarchyBuilder(
    method fetchPages (line 648) | Future<List<Page>> fetchPages({required ParamsPageList params})
    method fetchUsers (line 679) | Future<FetchUsersResult> fetchUsers({required ParamsUserList params})
    method fetchCustomUsers (line 692) | Future<FetchUsersResult> fetchCustomUsers({
    method _doUsersFetch (line 702) | Future<FetchUsersResult> _doUsersFetch(StringBuffer url)
    method fetchComments (line 733) | Future<List<Comment>> fetchComments({
    method fetchCommentsAsHierarchy (line 769) | Future<List<CommentHierarchy>> fetchCommentsAsHierarchy({
    method fetchCategories (line 810) | Future<List<Category>> fetchCategories({
    method fetchTags (line 860) | Future<List<Tag>> fetchTags({required ParamsTagList params})
    method fetchMediaList (line 893) | Future<List<Media>> fetchMediaList({required ParamsMediaList params})
    method createPost (line 930) | Future<Post> createPost({required Post post})
    method uploadMedia (line 954) | Future<dynamic> uploadMedia(File image)
    method createUser (line 982) | Future<bool> createUser({required User user})
    method updatePost (line 1016) | Future<bool> updatePost({required int id, required Post post})
    method updateComment (line 1045) | Future<bool> updateComment(
    method updateUser (line 1075) | Future<bool> updateUser({required int id, required User user})
    method deletePost (line 1112) | Future<bool> deletePost({required int id})
    method deleteComment (line 1140) | Future<bool> deleteComment({required int id})
    method deleteUser (line 1168) | Future<bool> deleteUser({
    method createComment (line 1213) | Future<Comment> createComment({required Comment comment})

FILE: lib/requests/params_category_list.dart
  class ParamsCategoryList (line 7) | class ParamsCategoryList {
    method toMap (line 36) | Map<String, String> toMap()
    method copyWith (line 53) | ParamsCategoryList copyWith({
    method toString (line 74) | String toString()

FILE: lib/requests/params_comment_list.dart
  class ParamsCommentList (line 7) | class ParamsCommentList {
    method toMap (line 52) | Map<String, String> toMap()
    method toString (line 78) | String toString()

FILE: lib/requests/params_media_list.dart
  class ParamsMediaList (line 7) | class ParamsMediaList {
    method toMap (line 50) | Map<String, String> toMap()
    method toString (line 76) | String toString()

FILE: lib/requests/params_page_list.dart
  class ParamsPageList (line 7) | class ParamsPageList {
    method toMap (line 48) | Map<String, String> toMap()
    method toString (line 72) | String toString()

FILE: lib/requests/params_post_list.dart
  class ParamsPostList (line 7) | class ParamsPostList {
    method toMap (line 52) | Map<String, String> toMap()
    method copyWith (line 77) | ParamsPostList copyWith({
    method toString (line 106) | String toString()

FILE: lib/requests/params_tag_list.dart
  class ParamsTagList (line 7) | class ParamsTagList {
    method toMap (line 34) | Map<String, String> toMap()
    method toString (line 51) | String toString()

FILE: lib/requests/params_user_list.dart
  class ParamsUserList (line 7) | class ParamsUserList {
    method toMap (line 34) | Map<String, String> toMap()
    method toString (line 51) | String toString()

FILE: lib/schemas/avatar_urls.dart
  class AvatarUrls (line 1) | class AvatarUrls {
    method toJson (line 18) | Map<String, dynamic> toJson()

FILE: lib/schemas/capabilities.dart
  class Capabilities (line 1) | class Capabilities {
    method toJson (line 66) | Map<String, dynamic> toJson()

FILE: lib/schemas/category.dart
  class Category (line 3) | class Category {
    method toJson (line 38) | Map<String, dynamic> toJson()

FILE: lib/schemas/comment.dart
  class Comment (line 11) | class Comment {
    method toJson (line 101) | Map<String, dynamic> toJson()
    method toString (line 121) | String toString()

FILE: lib/schemas/comment_hierarchy.dart
  class CommentHierarchy (line 4) | class CommentHierarchy {
    method toString (line 17) | String toString()

FILE: lib/schemas/content.dart
  class Content (line 1) | class Content {
    method toJson (line 16) | Map<String, dynamic> toJson()

FILE: lib/schemas/excerpt.dart
  class Excerpt (line 1) | class Excerpt {
    method toJson (line 14) | Map<String, dynamic> toJson()

FILE: lib/schemas/fetch_user_result.dart
  class FetchUsersResult (line 3) | class FetchUsersResult {

FILE: lib/schemas/guid.dart
  class Guid (line 1) | class Guid {
    method toJson (line 10) | Map<String, dynamic> toJson()

FILE: lib/schemas/jwt_response.dart
  class JWTResponse (line 1) | class JWTResponse {
    method toJson (line 21) | Map<String, dynamic> toJson()

FILE: lib/schemas/labels.dart
  class Labels (line 1) | class Labels {
    method toJson (line 132) | Map<String, dynamic> toJson()

FILE: lib/schemas/links.dart
  class Links (line 1) | class Links {
    method toJson (line 181) | Map<String, dynamic> toJson()
  class Self (line 225) | class Self {
    method toJson (line 234) | Map<String, dynamic> toJson()
  class Collection (line 243) | class Collection {
    method toJson (line 252) | Map<String, dynamic> toJson()
  class About (line 261) | class About {
    method toJson (line 270) | Map<String, dynamic> toJson()
  class Author (line 279) | class Author {
    method toJson (line 293) | Map<String, dynamic> toJson()
  class Replies (line 305) | class Replies {
    method toJson (line 319) | Map<String, dynamic> toJson()
  class Archives (line 331) | class Archives {
    method toJson (line 340) | Map<String, dynamic> toJson()
  class VersionHistory (line 349) | class VersionHistory {
    method toJson (line 363) | Map<String, dynamic> toJson()
  class WpPostType (line 375) | class WpPostType {
    method toJson (line 384) | Map<String, dynamic> toJson()
  class PredecessorVersion (line 393) | class PredecessorVersion {
    method toJson (line 407) | Map<String, dynamic> toJson()
  class WpFeaturedmedia (line 420) | class WpFeaturedmedia {
    method toJson (line 434) | Map<String, dynamic> toJson()
  class WpAttachment (line 446) | class WpAttachment {
    method toJson (line 455) | Map<String, dynamic> toJson()
  class WpTerm (line 464) | class WpTerm {
    method toJson (line 481) | Map<String, dynamic> toJson()
  class WpActionPublish (line 496) | class WpActionPublish {
    method toJson (line 505) | Map<String, dynamic> toJson()
  class WpActionUnfilteredHtml (line 514) | class WpActionUnfilteredHtml {
    method toJson (line 523) | Map<String, dynamic> toJson()
  class WpActionSticky (line 532) | class WpActionSticky {
    method toJson (line 541) | Map<String, dynamic> toJson()
  class WpActionAssignAuthor (line 550) | class WpActionAssignAuthor {
    method toJson (line 559) | Map<String, dynamic> toJson()
  class WpActionCreateCategories (line 568) | class WpActionCreateCategories {
    method toJson (line 577) | Map<String, dynamic> toJson()
  class WpActionAssignCategories (line 586) | class WpActionAssignCategories {
    method toJson (line 595) | Map<String, dynamic> toJson()
  class WpActionCreateTags (line 604) | class WpActionCreateTags {
    method toJson (line 613) | Map<String, dynamic> toJson()
  class WpActionAssignTags (line 622) | class WpActionAssignTags {
    method toJson (line 631) | Map<String, dynamic> toJson()
  class WpItems (line 640) | class WpItems {
    method toJson (line 649) | Map<String, dynamic> toJson()
  class Up (line 658) | class Up {
    method toJson (line 675) | Map<String, dynamic> toJson()
  class InReplyTo (line 690) | class InReplyTo {
    method toJson (line 704) | Map<String, dynamic> toJson()
  class Children (line 716) | class Children {
    method toJson (line 725) | Map<String, dynamic> toJson()
  class Curies (line 734) | class Curies {
    method toJson (line 751) | Map<String, dynamic> toJson()

FILE: lib/schemas/media.dart
  class Media (line 5) | class Media {
    method toJson (line 96) | Map<String, dynamic> toJson()
  class Description (line 130) | class Description {
    method toJson (line 144) | Map<String, dynamic> toJson()
  class Caption (line 154) | class Caption {
    method toJson (line 168) | Map<String, dynamic> toJson()
  class MediaDetails (line 178) | class MediaDetails {
    method toJson (line 203) | Map<String, dynamic> toJson()
  class Sizes (line 216) | class Sizes {
    method toJson (line 249) | Map<String, dynamic> toJson()
  class Thumbnail (line 263) | class Thumbnail {
    method toJson (line 286) | Map<String, dynamic> toJson()
  class Medium (line 299) | class Medium {
    method toJson (line 322) | Map<String, dynamic> toJson()
  class MediumLarge (line 335) | class MediumLarge {
    method toJson (line 358) | Map<String, dynamic> toJson()
  class Large (line 371) | class Large {
    method toJson (line 394) | Map<String, dynamic> toJson()
  class PostThumbnail (line 407) | class PostThumbnail {
    method toJson (line 430) | Map<String, dynamic> toJson()
  class Full (line 443) | class Full {
    method toJson (line 466) | Map<String, dynamic> toJson()
  class ImageMeta (line 479) | class ImageMeta {
    method toJson (line 520) | Map<String, dynamic> toJson()

FILE: lib/schemas/page.dart
  class Page (line 7) | class Page {
    method toJson (line 89) | Map<String, dynamic> toJson()

FILE: lib/schemas/post.dart
  class Post (line 19) | class Post {
    method toJson (line 186) | Map<String, dynamic> toJson()
    method toString (line 211) | String toString()

FILE: lib/schemas/post_statuses.dart
  class PostStatuses (line 3) | class PostStatuses {
    method toJson (line 33) | Map<String, dynamic> toJson()
  class Publish (line 47) | class Publish {
    method toJson (line 79) | Map<String, dynamic> toJson()
  class Future (line 95) | class Future {
    method toJson (line 127) | Map<String, dynamic> toJson()
  class Draft (line 143) | class Draft {
    method toJson (line 175) | Map<String, dynamic> toJson()
  class Pending (line 191) | class Pending {
    method toJson (line 223) | Map<String, dynamic> toJson()
  class Private (line 239) | class Private {
    method toJson (line 271) | Map<String, dynamic> toJson()
  class Trash (line 287) | class Trash {
    method toJson (line 319) | Map<String, dynamic> toJson()

FILE: lib/schemas/post_types.dart
  class PostTypes (line 5) | class PostTypes {
    method toJson (line 31) | Map<String, dynamic> toJson()
  class PostTypePost (line 43) | class PostTypePost {
    method toJson (line 89) | Map<String, dynamic> toJson()
  class Supports (line 108) | class Supports {
    method toJson (line 146) | Map<String, dynamic> toJson()
  class PostTypePage (line 164) | class PostTypePage {
    method toJson (line 210) | Map<String, dynamic> toJson()
  class Attachment (line 229) | class Attachment {
    method toJson (line 275) | Map<String, dynamic> toJson()
  class WpBlock (line 294) | class WpBlock {
    method toJson (line 340) | Map<String, dynamic> toJson()

FILE: lib/schemas/settings.dart
  class Settings (line 1) | class Settings {
    method toJson (line 54) | Map<String, dynamic> toJson()

FILE: lib/schemas/tag.dart
  class Tag (line 3) | class Tag {
    method toJson (line 35) | Map<String, dynamic> toJson()

FILE: lib/schemas/taxonomies.dart
  class Taxonomies (line 5) | class Taxonomies {
    method toJson (line 23) | Map<String, dynamic> toJson()
  class TaxonomyCategory (line 33) | class TaxonomyCategory {
    method toJson (line 79) | Map<String, dynamic> toJson()
  class Visibility (line 98) | class Visibility {
    method toJson (line 124) | Map<String, dynamic> toJson()
  class TaxonomyPostTag (line 138) | class TaxonomyPostTag {
    method toJson (line 184) | Map<String, dynamic> toJson()

FILE: lib/schemas/title.dart
  class Title (line 1) | class Title {
    method toJson (line 12) | Map<String, dynamic> toJson()

FILE: lib/schemas/user.dart
  class User (line 4) | class User {
    method toJson (line 85) | Map<String, dynamic> toJson()
    method toString (line 113) | String toString()
  class UserCapabilities (line 118) | class UserCapabilities {
    method toJson (line 312) | Map<String, dynamic> toJson()
  class UserExtraCapabilities (line 382) | class UserExtraCapabilities {
    method toJson (line 391) | Map<String, dynamic> toJson()

FILE: lib/schemas/wordpress_error.dart
  class WordPressError (line 2) | class WordPressError {
    method toJson (line 19) | Map<String, dynamic> toJson()
    method toString (line 30) | String toString()
  class Data (line 35) | class Data {
    method toJson (line 44) | Map<String, dynamic> toJson()
Condensed preview — 98 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (317K chars).
[
  {
    "path": ".gitignore",
    "chars": 133,
    "preview": ".DS_Store\n.dart_tool/\n\n.packages\n.pub/\n\nbuild/\nios/.generated/\nios/Flutter/Generated.xcconfig\nios/Runner/GeneratedPlugin"
  },
  {
    "path": ".idea/codeStyles/Project.xml",
    "chars": 1775,
    "preview": "<component name=\"ProjectCodeStyleConfiguration\">\n  <code_scheme name=\"Project\" version=\"173\">\n    <Objective-C-extension"
  },
  {
    "path": ".idea/dictionaries/suraj.xml",
    "chars": 146,
    "preview": "<component name=\"ProjectDictionaryState\">\n  <dictionary name=\"suraj\">\n    <words>\n      <w>wordpress</w>\n    </words>\n  "
  },
  {
    "path": ".idea/libraries/Dart_Packages.xml",
    "chars": 10954,
    "preview": "<component name=\"libraryTable\">\n  <library name=\"Dart Packages\" type=\"DartPackagesLibraryType\">\n    <properties>\n      <"
  },
  {
    "path": ".idea/libraries/Dart_SDK.xml",
    "chars": 1592,
    "preview": "<component name=\"libraryTable\">\n  <library name=\"Dart SDK\">\n    <CLASSES>\n      <root url=\"file://C:/flutter/bin/cache/d"
  },
  {
    "path": ".idea/libraries/Flutter_Plugins.xml",
    "chars": 173,
    "preview": "<component name=\"libraryTable\">\n  <library name=\"Flutter Plugins\" type=\"FlutterPluginsLibraryType\">\n    <CLASSES />\n    "
  },
  {
    "path": ".idea/modules.xml",
    "chars": 275,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"ProjectModuleManager\">\n    <modules>\n   "
  },
  {
    "path": ".idea/vcs.xml",
    "chars": 167,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"VcsDirectoryMappings\">\n    <mapping dire"
  },
  {
    "path": ".idea/workspace.xml",
    "chars": 34994,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n  <component name=\"CMakeSettings\">\n    <configurations>\n   "
  },
  {
    "path": ".metadata",
    "chars": 309,
    "preview": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrade"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 879,
    "preview": "## [0.3.0-nullsafety.0] - Type Safety\n\n* Added type safety\n\n## [0.2.1] - 26/04/2020\n* Custom post types\n\n## [0.2.0] - 21"
  },
  {
    "path": "LICENSE",
    "chars": 1079,
    "preview": "The MIT License (MIT)\n\nCopyright (c) 2018 Sachin Ganesh\n\nPermission is hereby granted, free of charge, to any person obt"
  },
  {
    "path": "README.md",
    "chars": 7354,
    "preview": "# Flutter Wordpress\n\n[pub.dev](https://pub.dev/packages/flutter_wordpress)\n\nThis library uses [WordPress REST API V2](ht"
  },
  {
    "path": "example/.flutter-plugins-dependencies",
    "chars": 2334,
    "preview": "{\"info\":\"This is a generated file; do not edit or check into version control.\",\"plugins\":{\"ios\":[{\"name\":\"video_player_a"
  },
  {
    "path": "example/.gitignore",
    "chars": 1323,
    "preview": "# Miscellaneous\n*.class\n*.lock\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\n*flutter_export_environment*"
  },
  {
    "path": "example/.metadata",
    "chars": 305,
    "preview": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrade"
  },
  {
    "path": "example/README.md",
    "chars": 312,
    "preview": "# Flutter Wordpress Example\nBasic login, displaying posts and comments have been implemented in this example flutter app"
  },
  {
    "path": "example/analysis_options.yaml",
    "chars": 1453,
    "preview": "# This file configures the analyzer, which statically analyzes Dart code to\n# check for errors, warnings, and lints.\n#\n#"
  },
  {
    "path": "example/android/.gitignore",
    "chars": 285,
    "preview": "gradle-wrapper.jar\n/.gradle\n/captures/\n/gradlew\n/gradlew.bat\n/local.properties\nGeneratedPluginRegistrant.java\n\n# Remembe"
  },
  {
    "path": "example/android/app/build.gradle",
    "chars": 1961,
    "preview": "def localProperties = new Properties()\ndef localPropertiesFile = rootProject.file('local.properties')\nif (localPropertie"
  },
  {
    "path": "example/android/app/src/debug/AndroidManifest.xml",
    "chars": 327,
    "preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.example.example\">\n    <!-- Flutter"
  },
  {
    "path": "example/android/app/src/main/AndroidManifest.xml",
    "chars": 1667,
    "preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.example.example\">\n   <application\n"
  },
  {
    "path": "example/android/app/src/main/kotlin/com/example/example/MainActivity.kt",
    "chars": 124,
    "preview": "package com.example.example\n\nimport io.flutter.embedding.android.FlutterActivity\n\nclass MainActivity: FlutterActivity() "
  },
  {
    "path": "example/android/app/src/main/res/drawable/launch_background.xml",
    "chars": 434,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Modify this file to customize your launch splash screen -->\n<layer-list xmln"
  },
  {
    "path": "example/android/app/src/main/res/drawable-v21/launch_background.xml",
    "chars": 438,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Modify this file to customize your launch splash screen -->\n<layer-list xmln"
  },
  {
    "path": "example/android/app/src/main/res/values/styles.xml",
    "chars": 985,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- Theme applied to the Android Window while the process is sta"
  },
  {
    "path": "example/android/app/src/main/res/values-night/styles.xml",
    "chars": 984,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- Theme applied to the Android Window while the process is sta"
  },
  {
    "path": "example/android/app/src/profile/AndroidManifest.xml",
    "chars": 327,
    "preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.example.example\">\n    <!-- Flutter"
  },
  {
    "path": "example/android/build.gradle",
    "chars": 592,
    "preview": "buildscript {\n    ext.kotlin_version = '1.6.10'\n    repositories {\n        google()\n        mavenCentral()\n    }\n\n    de"
  },
  {
    "path": "example/android/gradle/wrapper/gradle-wrapper.properties",
    "chars": 231,
    "preview": "#Fri Jun 23 08:50:38 CEST 2017\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER"
  },
  {
    "path": "example/android/gradle.properties",
    "chars": 82,
    "preview": "org.gradle.jvmargs=-Xmx1536M\nandroid.useAndroidX=true\nandroid.enableJetifier=true\n"
  },
  {
    "path": "example/android/settings.gradle",
    "chars": 462,
    "preview": "include ':app'\n\ndef localPropertiesFile = new File(rootProject.projectDir, \"local.properties\")\ndef properties = new Prop"
  },
  {
    "path": "example/ios/.gitignore",
    "chars": 569,
    "preview": "**/dgph\n*.mode1v3\n*.mode2v3\n*.moved-aside\n*.pbxuser\n*.perspectivev3\n**/*sync/\n.sconsign.dblite\n.tags*\n**/.vagrant/\n**/De"
  },
  {
    "path": "example/ios/Flutter/AppFrameworkInfo.plist",
    "chars": 773,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "example/ios/Flutter/Debug.xcconfig",
    "chars": 107,
    "preview": "#include? \"Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig\"\n#include \"Generated.xcconfig\"\n"
  },
  {
    "path": "example/ios/Flutter/Flutter.podspec",
    "chars": 758,
    "preview": "#\n# NOTE: This podspec is NOT to be published. It is only used as a local source!\n#\n\nPod::Spec.new do |s|\n  s.name      "
  },
  {
    "path": "example/ios/Flutter/Release.xcconfig",
    "chars": 109,
    "preview": "#include? \"Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig\"\n#include \"Generated.xcconfig\"\n"
  },
  {
    "path": "example/ios/Podfile",
    "chars": 1312,
    "preview": "# Uncomment this line to define a global platform for your project\n# platform :ios, '9.0'\n\n# CocoaPods analytics sends n"
  },
  {
    "path": "example/ios/Runner/AppDelegate.h",
    "chars": 103,
    "preview": "#import <Flutter/Flutter.h>\n#import <UIKit/UIKit.h>\n\n@interface AppDelegate : FlutterAppDelegate\n\n@end\n"
  },
  {
    "path": "example/ios/Runner/AppDelegate.m",
    "chars": 424,
    "preview": "#include \"AppDelegate.h\"\n#include \"GeneratedPluginRegistrant.h\"\n\n@implementation AppDelegate\n\n- (BOOL)application:(UIApp"
  },
  {
    "path": "example/ios/Runner/AppDelegate.swift",
    "chars": 404,
    "preview": "import UIKit\nimport Flutter\n\n@UIApplicationMain\n@objc class AppDelegate: FlutterAppDelegate {\n  override func applicatio"
  },
  {
    "path": "example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 2519,
    "preview": "{\n  \"images\" : [\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@2x.png\",\n   "
  },
  {
    "path": "example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json",
    "chars": 391,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"LaunchImage.png\",\n      \"scale\" : \"1x\"\n    },\n  "
  },
  {
    "path": "example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md",
    "chars": 336,
    "preview": "# Launch Screen Assets\n\nYou can customize the launch screen with your own desired assets by replacing the image files in"
  },
  {
    "path": "example/ios/Runner/Base.lproj/LaunchScreen.storyboard",
    "chars": 2377,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
  },
  {
    "path": "example/ios/Runner/Base.lproj/Main.storyboard",
    "chars": 1605,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
  },
  {
    "path": "example/ios/Runner/Info.plist",
    "chars": 1505,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "example/ios/Runner/Runner-Bridging-Header.h",
    "chars": 38,
    "preview": "#import \"GeneratedPluginRegistrant.h\"\n"
  },
  {
    "path": "example/ios/Runner/main.m",
    "chars": 226,
    "preview": "#import <Flutter/Flutter.h>\n#import <UIKit/UIKit.h>\n#import \"AppDelegate.h\"\n\nint main(int argc, char* argv[]) {\n  @autor"
  },
  {
    "path": "example/ios/Runner.xcodeproj/project.pbxproj",
    "chars": 19185,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "chars": 152,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Runner.xcodepr"
  },
  {
    "path": "example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "chars": 238,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
    "chars": 226,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme",
    "chars": 3331,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0910\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "example/ios/Runner.xcworkspace/contents.xcworkspacedata",
    "chars": 152,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Runner.xcodepr"
  },
  {
    "path": "example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
    "chars": 238,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
    "chars": 226,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "example/lib/display_posts.dart",
    "chars": 12530,
    "preview": "import 'dart:async';\n\nimport 'package:flutter/material.dart';\nimport 'package:flutter_wordpress/flutter_wordpress.dart' "
  },
  {
    "path": "example/lib/generated_plugin_registrant.dart",
    "chars": 500,
    "preview": "//\n// Generated file. Do not edit.\n//\n\n// ignore_for_file: directives_ordering\n// ignore_for_file: lines_longer_than_80_"
  },
  {
    "path": "example/lib/login.dart",
    "chars": 4663,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_wordpress/flutter_wordpress.dart' as wp;\n\nimport 'displa"
  },
  {
    "path": "example/lib/main.dart",
    "chars": 366,
    "preview": "import 'package:flutter/material.dart';\nimport 'login.dart';\n\nvoid main() {\n  runApp(WordPressApp());\n}\n\nclass WordPress"
  },
  {
    "path": "example/lib/post_page.dart",
    "chars": 4903,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_html/flutter_html.dart';\nimport 'package:flutter_wordpre"
  },
  {
    "path": "example/pubspec.yaml",
    "chars": 2362,
    "preview": "name: flutter_wordpress_example\ndescription: Wordpress API testing example.\n\n# The following defines the version and bui"
  },
  {
    "path": "example/test/widget_test.dart",
    "chars": 1071,
    "preview": "// This is a basic Flutter widget test.\n//\n// To perform an interaction with a widget in your test, use the WidgetTester"
  },
  {
    "path": "flutter_wordpress.iml",
    "chars": 1483,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module type=\"JAVA_MODULE\" version=\"4\">\n  <component name=\"FacetManager\">\n    <fa"
  },
  {
    "path": "lib/constants.dart",
    "chars": 2495,
    "preview": "const URL_JWT_BASE = '/wp-json/jwt-auth/v1';\nconst URL_WP_BASE = '/wp-json/wp/v2';\n\nconst URL_JWT_TOKEN = '$URL_JWT_BASE"
  },
  {
    "path": "lib/flutter_wordpress.dart",
    "chars": 40975,
    "preview": "/// This library uses [WordPress REST API V2](https://developer.wordpress.org/rest-api/)\n/// to provide a way for your a"
  },
  {
    "path": "lib/requests/params_category_list.dart",
    "chars": 2246,
    "preview": "import 'package:flutter_wordpress/constants.dart';\n\n/// This class holds all arguments which can be used to filter Categ"
  },
  {
    "path": "lib/requests/params_comment_list.dart",
    "chars": 2846,
    "preview": "import 'package:flutter_wordpress/constants.dart';\n\n/// This class holds all arguments which can be used to filter comme"
  },
  {
    "path": "lib/requests/params_media_list.dart",
    "chars": 2640,
    "preview": "import 'package:flutter_wordpress/constants.dart';\n\n/// This class holds all arguments which can be used to filter media"
  },
  {
    "path": "lib/requests/params_page_list.dart",
    "chars": 2497,
    "preview": "import 'package:flutter_wordpress/constants.dart';\n\n/// This class holds all arguments which can be used to filter pages"
  },
  {
    "path": "lib/requests/params_post_list.dart",
    "chars": 3427,
    "preview": "import 'package:flutter_wordpress/constants.dart';\n\n/// This class holds all arguments which can be used to filter posts"
  },
  {
    "path": "lib/requests/params_tag_list.dart",
    "chars": 1626,
    "preview": "import 'package:flutter_wordpress/constants.dart';\n\n/// This class holds all arguments which can be used to filter Tags "
  },
  {
    "path": "lib/requests/params_user_list.dart",
    "chars": 1623,
    "preview": "import 'package:flutter_wordpress/constants.dart';\n\n/// This class holds all arguments which can be used to filter users"
  },
  {
    "path": "lib/schemas/avatar_urls.dart",
    "chars": 461,
    "preview": "class AvatarUrls {\n  String? s24;\n  String? s48;\n  String? s96;\n\n  AvatarUrls({\n    this.s24,\n    this.s48,\n    this.s96"
  },
  {
    "path": "lib/schemas/capabilities.dart",
    "chars": 2871,
    "preview": "class Capabilities {\n  String? manageTerms;\n  String? editTerms;\n  String? deleteTerms;\n  String? assignTerms;\n  String?"
  },
  {
    "path": "lib/schemas/category.dart",
    "chars": 1153,
    "preview": "import 'links.dart';\n\nclass Category {\n  int? id;\n  int? count;\n  String? description;\n  String? link;\n  String? name;\n "
  },
  {
    "path": "lib/schemas/comment.dart",
    "chars": 3391,
    "preview": "import 'package:flutter_wordpress/constants.dart';\n\nimport 'avatar_urls.dart';\nimport 'content.dart';\nimport 'links.dart"
  },
  {
    "path": "lib/schemas/comment_hierarchy.dart",
    "chars": 394,
    "preview": "import 'comment.dart';\n\n/// This class is used to store comments as a hierarchy.\nclass CommentHierarchy {\n  /// Parent c"
  },
  {
    "path": "lib/schemas/content.dart",
    "chars": 593,
    "preview": "class Content {\n  String? raw;\n  String? rendered;\n  bool? protected;\n  int? blockVersion;\n\n  Content({this.rendered});\n"
  },
  {
    "path": "lib/schemas/excerpt.dart",
    "chars": 483,
    "preview": "class Excerpt {\n  String? raw;\n  String? rendered;\n  bool? protected;\n\n  Excerpt({this.rendered});\n\n  Excerpt.fromJson(M"
  },
  {
    "path": "lib/schemas/fetch_user_result.dart",
    "chars": 216,
    "preview": "import 'user.dart';\n\nclass FetchUsersResult {\n  List<User> users = const [];\n  int? totalUsers;\n\n  FetchUsersResult(List"
  },
  {
    "path": "lib/schemas/guid.dart",
    "chars": 354,
    "preview": "class Guid {\n  String? rendered;\n  String? raw;\n\n  Guid.fromJson(Map<String, dynamic> json) {\n    rendered = json['rende"
  },
  {
    "path": "lib/schemas/jwt_response.dart",
    "chars": 732,
    "preview": "class JWTResponse {\n  String? token;\n  String? userEmail;\n  String? userNicename;\n  String? userDisplayName;\n\n  JWTRespo"
  },
  {
    "path": "lib/schemas/labels.dart",
    "chars": 5893,
    "preview": "class Labels {\n  String? name;\n  String? singularName;\n  String? searchItems;\n  String? popularItems;\n  String? allItems"
  },
  {
    "path": "lib/schemas/links.dart",
    "chars": 18175,
    "preview": "class Links {\n  List<Self>? self;\n  List<Collection>? collection;\n  List<About>? about;\n  List<Author>? author;\n  List<R"
  },
  {
    "path": "lib/schemas/media.dart",
    "chars": 12352,
    "preview": "import 'guid.dart';\nimport 'links.dart';\nimport 'title.dart';\n\nclass Media {\n  int? id;\n  String? date;\n  String? dateGm"
  },
  {
    "path": "lib/schemas/page.dart",
    "chars": 3221,
    "preview": "import 'content.dart';\nimport 'excerpt.dart';\nimport 'guid.dart';\nimport 'links.dart';\nimport 'title.dart';\n\nclass Page "
  },
  {
    "path": "lib/schemas/post.dart",
    "chars": 6268,
    "preview": "import 'package:flutter_wordpress/constants.dart';\n\nimport 'category.dart';\nimport 'comment.dart';\nimport 'comment_hiera"
  },
  {
    "path": "lib/schemas/post_statuses.dart",
    "chars": 7819,
    "preview": "import 'links.dart';\n\nclass PostStatuses {\n  Publish? publish;\n  Future? future;\n  Draft? draft;\n  Pending? pending;\n  P"
  },
  {
    "path": "lib/schemas/post_types.dart",
    "chars": 9425,
    "preview": "import 'capabilities.dart';\nimport 'labels.dart';\nimport 'links.dart';\n\nclass PostTypes {\n  PostTypePost? post;\n  PostTy"
  },
  {
    "path": "lib/schemas/settings.dart",
    "chars": 2136,
    "preview": "class Settings {\n  String? title;\n  String? description;\n  String? url;\n  String? email;\n  String? timezone;\n  String? d"
  },
  {
    "path": "lib/schemas/tag.dart",
    "chars": 1039,
    "preview": "import 'links.dart';\n\nclass Tag {\n  int? id;\n  int? count;\n  String? description;\n  String? link;\n  String? name;\n  Stri"
  },
  {
    "path": "lib/schemas/taxonomies.dart",
    "chars": 5324,
    "preview": "import 'capabilities.dart';\nimport 'labels.dart';\nimport 'links.dart';\n\nclass Taxonomies {\n  TaxonomyCategory? category;"
  },
  {
    "path": "lib/schemas/title.dart",
    "chars": 375,
    "preview": "class Title {\n  String? raw;\n  String? rendered;\n\n  Title({this.rendered});\n\n  Title.fromJson(Map<String, dynamic> json)"
  },
  {
    "path": "lib/schemas/user.dart",
    "chars": 11963,
    "preview": "import 'avatar_urls.dart';\nimport 'links.dart';\n\nclass User {\n  int? id;\n  String? username;\n  String? name;\n  String? f"
  },
  {
    "path": "lib/schemas/wordpress_error.dart",
    "chars": 1074,
    "preview": "/// All API related errors are thrown as an object of this class.\nclass WordPressError {\n  String? code;\n  String? messa"
  },
  {
    "path": "pubspec.yaml",
    "chars": 560,
    "preview": "name: flutter_wordpress\ndescription: This library uses WordPress REST-API-V2 to provide a way for your application to\n  "
  }
]

About this extraction

This page contains the full source code of the dreamsoftin/flutter_wordpress GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 98 files (289.3 KB), approximately 78.8k tokens, and a symbol index with 277 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!