[
  {
    "path": ".gitignore",
    "content": ".DS_Store\n.atom/\n.dart_tool/\n.idea\n.vscode/\n.packages\n.pub/\nbuild/\nios/.generated/\npackages\n.flutter-plugins\n"
  },
  {
    "path": ".metadata",
    "content": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrades etc.\n#\n# This file should be version controlled and should not be manually edited.\n\nversion:\n  revision: b397406561f5e7a9c94e28f58d9e49fca0dd58b7\n  channel: beta\n"
  },
  {
    "path": "README.md",
    "content": "**This is a demo app designed with Material Design.\nIt's created by using [Flutter](https://flutter.io/).**  \n\n#### Google Play:  \nhttps://play.google.com/store/apps/details?id=com.eajy.flutterdemo  \n  \n![image](https://github.com/Eajy/flutter_demo/blob/master/android/pictures/1.png)\n\n![image](https://github.com/Eajy/flutter_demo/blob/master/android/pictures/2.png)\n\n![image](https://github.com/Eajy/flutter_demo/blob/master/android/pictures/3.png)\n  \n---  \n\n#### Open Source Licenses:  \n    Copyright 2018 Eajy  \n      \n    Licensed under the Apache License, Version 2.0.\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n    \n       http://www.apache.org/licenses/LICENSE-2.0\n    \n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n[_**- Designed by Eajy in China.**_](https://sites.google.com/view/eajy)"
  },
  {
    "path": "android/.gitignore",
    "content": "*.iml\n*.class\n.gradle\n/local.properties\n/key.properties\n/.idea/workspace.xml\n/.idea/libraries\n.DS_Store\n/build\n/captures\nGeneratedPluginRegistrant.java\n"
  },
  {
    "path": "android/app/build.gradle",
    "content": "def localProperties = new Properties()\ndef localPropertiesFile = rootProject.file('local.properties')\nif (localPropertiesFile.exists()) {\n    localPropertiesFile.withReader('UTF-8') { reader ->\n        localProperties.load(reader)\n    }\n}\n\ndef flutterRoot = localProperties.getProperty('flutter.sdk')\nif (flutterRoot == null) {\n    throw new GradleException(\"Flutter SDK not found. Define location with flutter.sdk in the local.properties file.\")\n}\n\napply plugin: 'com.android.application'\napply from: \"$flutterRoot/packages/flutter_tools/gradle/flutter.gradle\"\n\ndef keystorePropertiesFile = rootProject.file(\"key.properties\")\ndef keystoreProperties = new Properties()\nkeystoreProperties.load(new FileInputStream(keystorePropertiesFile))\n\nandroid {\n    compileSdkVersion 28\n\n    lintOptions {\n        disable 'InvalidPackage'\n    }\n\n    defaultConfig {\n        applicationId \"com.eajy.flutterdemo\"\n        minSdkVersion 21\n        targetSdkVersion 28\n        versionCode 3\n        versionName \"1.2\"\n        testInstrumentationRunner \"android.support.test.runner.AndroidJUnitRunner\"\n    }\n\n    signingConfigs {\n        release {\n            keyAlias keystoreProperties['keyAlias']\n            keyPassword keystoreProperties['keyPassword']\n            storeFile file(keystoreProperties['storeFile'])\n            storePassword keystoreProperties['storePassword']\n        }\n    }\n\n    buildTypes {\n        release {\n            signingConfig signingConfigs.release\n        }\n    }\n}\n\nflutter {\n    source '../..'\n}\n\ndependencies {\n    testImplementation 'junit:junit:4.12'\n    androidTestImplementation 'com.android.support.test:runner:1.0.2'\n    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'\n}\n"
  },
  {
    "path": "android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.eajy.flutterdemo\">\n\n    <!-- The INTERNET permission is required for development. Specifically,\n         flutter needs it to communicate with the running application\n         to allow setting breakpoints, to provide hot reload, etc.\n    -->\n    <uses-permission android:name=\"android.permission.INTERNET\"/>\n\n    <!-- io.flutter.app.FlutterApplication is an android.app.Application that\n         calls FlutterMain.startInitialization(this); in its onCreate method.\n         In most cases you can leave this as-is, but you if you want to provide\n         additional functionality it is fine to subclass or reimplement\n         FlutterApplication and put your custom class here. -->\n    <application\n        android:name=\"io.flutter.app.FlutterApplication\"\n        android:label=\"Flutter Demo\"\n        android:icon=\"@mipmap/ic_launcher\">\n        <activity\n            android:name=\".MainActivity\"\n            android:launchMode=\"singleTop\"\n            android:theme=\"@style/LaunchTheme\"\n            android:configChanges=\"orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density\"\n            android:hardwareAccelerated=\"true\"\n            android:windowSoftInputMode=\"adjustResize\">\n            <!-- This keeps the window background of the activity showing\n                 until Flutter renders its first frame. It can be removed if\n                 there is no splash screen (such as the default splash screen\n                 defined in @style/LaunchTheme). -->\n            <meta-data\n                android:name=\"io.flutter.app.android.SplashScreenUntilFirstFrame\"\n                android:value=\"true\" />\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\"/>\n                <category android:name=\"android.intent.category.LAUNCHER\"/>\n            </intent-filter>\n        </activity>\n    </application>\n</manifest>\n"
  },
  {
    "path": "android/app/src/main/java/com/eajy/flutterdemo/MainActivity.java",
    "content": "package com.eajy.flutterdemo;\n\nimport android.content.Intent;\nimport android.content.pm.PackageInfo;\nimport android.content.pm.PackageManager;\nimport android.net.Uri;\nimport android.os.Bundle;\nimport android.widget.Toast;\n\nimport io.flutter.app.FlutterActivity;\nimport io.flutter.plugin.common.MethodCall;\nimport io.flutter.plugin.common.MethodChannel;\nimport io.flutter.plugins.GeneratedPluginRegistrant;\n\npublic class MainActivity extends FlutterActivity {\n\n    private static final String CHANNEL = \"com.eajy.flutterdemo/android\";\n\n    private static final String SHARE_CONTENT = \"A beautiful app designed with Material Design by using Flutter. \\nhttps://play.google.com/store/apps/details?id=com.eajy.flutterdemo \\n- Designed by Eajy in China\";\n    private static final String EMAIL_ADDRESS = \"mailto:eajy.zhangxiao@gmail.com\";\n    private static final String EMAIL_SUBJECT = \"Feedback:FlutterDemo\";\n\n    @Override\n    protected void onCreate(Bundle savedInstanceState) {\n        super.onCreate(savedInstanceState);\n        GeneratedPluginRegistrant.registerWith(this);\n\n        new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler(\n                new MethodChannel.MethodCallHandler() {\n                    @Override\n                    public void onMethodCall(MethodCall call, MethodChannel.Result result) {\n                        switch (call.method) {\n                            case \"share\":\n                                share();\n                                result.success(null);\n                                break;\n                            case \"getVersionName\":\n                                result.success(getVersionName());\n                                break;\n                            case \"sendEmail\":\n                                sendEmail();\n                                result.success(null);\n                                break;\n                            default:\n                                result.notImplemented();\n                                break;\n                        }\n                    }\n                });\n    }\n\n    private void share() {\n        Intent intent = new Intent();\n        intent.setAction(Intent.ACTION_SEND);\n        intent.putExtra(Intent.EXTRA_TEXT, SHARE_CONTENT);\n        intent.setType(\"text/plain\");\n        startActivity(Intent.createChooser(intent, \"Share with\"));\n    }\n\n    private String getVersionName() {\n        try {\n            PackageManager manager = getPackageManager();\n            PackageInfo info = manager.getPackageInfo(getPackageName(), 0);\n            String version = info.versionName;\n            return \"Version: \" + version;\n        } catch (Exception e) {\n            e.printStackTrace();\n            return \"Version: 1.0\";\n        }\n    }\n\n    private void sendEmail() {\n        Intent intent = new Intent();\n        intent.setAction(Intent.ACTION_SENDTO);\n        intent.setData(Uri.parse(EMAIL_ADDRESS));\n        intent.putExtra(Intent.EXTRA_SUBJECT, EMAIL_SUBJECT);\n        try {\n            startActivity(intent);\n        } catch (Exception e) {\n            Toast.makeText(this, \"Not found Email app.\", Toast.LENGTH_SHORT).show();\n        }\n    }\n\n}\n"
  },
  {
    "path": "android/app/src/main/res/drawable/launch_background.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!-- Modify this file to customize your launch splash screen -->\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@android:color/white\" />\n\n    <!-- You can insert your own image assets here -->\n    <item>\n        <bitmap\n            android:gravity=\"center\"\n            android:src=\"@drawable/image_launcher\" />\n    </item>\n</layer-list>\n"
  },
  {
    "path": "android/app/src/main/res/values/styles.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <style name=\"LaunchTheme\" parent=\"@android:style/Theme.Black.NoTitleBar\">\n        <!-- Show a splash screen on the activity. Automatically removed when\n             Flutter draws its first frame -->\n        <item name=\"android:windowBackground\">@drawable/launch_background</item>\n    </style>\n</resources>\n"
  },
  {
    "path": "android/build.gradle",
    "content": "buildscript {\n    repositories {\n        google()\n        jcenter()\n    }\n\n    dependencies {\n        classpath 'com.android.tools.build:gradle:3.2.1'\n    }\n}\n\nallprojects {\n    repositories {\n        google()\n        jcenter()\n    }\n}\n\nrootProject.buildDir = '../build'\nsubprojects {\n    project.buildDir = \"${rootProject.buildDir}/${project.name}\"\n}\nsubprojects {\n    project.evaluationDependsOn(':app')\n}\n\ntask clean(type: Delete) {\n    delete rootProject.buildDir\n}\n"
  },
  {
    "path": "android/gradle/wrapper/gradle-wrapper.properties",
    "content": "#Fri Jun 23 08:50:38 CEST 2017\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-4.6-all.zip\n"
  },
  {
    "path": "android/gradle.properties",
    "content": "org.gradle.jvmargs=-Xmx1536M\n"
  },
  {
    "path": "android/gradlew",
    "content": "#!/usr/bin/env bash\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS=\"\"\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn ( ) {\n    echo \"$*\"\n}\n\ndie ( ) {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\nesac\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin, switch paths to Windows format before running java\nif $cygwin ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=$((i+1))\n    done\n    case $i in\n        (0) set -- ;;\n        (1) set -- \"$args0\" ;;\n        (2) set -- \"$args0\" \"$args1\" ;;\n        (3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        (4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        (5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        (6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        (7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        (8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        (9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules\nfunction splitJvmOpts() {\n    JVM_OPTS=(\"$@\")\n}\neval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS\nJVM_OPTS[${#JVM_OPTS[*]}]=\"-Dorg.gradle.appname=$APP_BASE_NAME\"\n\nexec \"$JAVACMD\" \"${JVM_OPTS[@]}\" -classpath \"$CLASSPATH\" org.gradle.wrapper.GradleWrapperMain \"$@\"\n"
  },
  {
    "path": "android/gradlew.bat",
    "content": "@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto init\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto init\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:init\n@rem Get command-line arguments, handling Windowz variants\n\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\nif \"%@eval[2+2]\" == \"4\" goto 4NT_args\n\n:win9xME_args\n@rem Slurp the command line arguments.\nset CMD_LINE_ARGS=\nset _SKIP=2\n\n:win9xME_args_slurp\nif \"x%~1\" == \"x\" goto execute\n\nset CMD_LINE_ARGS=%*\ngoto execute\n\n:4NT_args\n@rem Get arguments from the 4NT Shell from JP Software\nset CMD_LINE_ARGS=%$\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "android/settings.gradle",
    "content": "include ':app'\n\ndef flutterProjectRoot = rootProject.projectDir.parentFile.toPath()\n\ndef plugins = new Properties()\ndef pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')\nif (pluginsFile.exists()) {\n    pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }\n}\n\nplugins.each { name, path ->\n    def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()\n    include \":$name\"\n    project(\":$name\").projectDir = pluginDirectory\n}\n"
  },
  {
    "path": "flutter_demo.iml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module type=\"JAVA_MODULE\" version=\"4\">\n  <component name=\"NewModuleRootManager\" inherit-compiler-output=\"true\">\n    <exclude-output />\n    <content url=\"file://$MODULE_DIR$\">\n      <sourceFolder url=\"file://$MODULE_DIR$/lib\" isTestSource=\"false\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/test\" isTestSource=\"true\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/.dart_tool\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/.idea\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/.pub\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/ios/.symlinks/plugins/url_launcher/.dart_tool\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/ios/.symlinks/plugins/url_launcher/.pub\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/ios/.symlinks/plugins/url_launcher/build\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/ios/.symlinks/plugins/url_launcher/example/.dart_tool\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/ios/.symlinks/plugins/url_launcher/example/.pub\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/ios/.symlinks/plugins/url_launcher/example/build\" />\n    </content>\n    <orderEntry type=\"sourceFolder\" forTests=\"false\" />\n    <orderEntry type=\"library\" name=\"Dart SDK\" level=\"project\" />\n    <orderEntry type=\"library\" name=\"Flutter Plugins\" level=\"project\" />\n    <orderEntry type=\"library\" name=\"Dart Packages\" level=\"project\" />\n  </component>\n</module>"
  },
  {
    "path": "flutter_demo_android.iml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module type=\"JAVA_MODULE\" version=\"4\">\n  <component name=\"FacetManager\">\n    <facet type=\"android\" name=\"Android\">\n      <configuration>\n        <option name=\"ALLOW_USER_CONFIGURATION\" value=\"false\" />\n        <option name=\"GEN_FOLDER_RELATIVE_PATH_APT\" value=\"/android/gen\" />\n        <option name=\"GEN_FOLDER_RELATIVE_PATH_AIDL\" value=\"/android/gen\" />\n        <option name=\"MANIFEST_FILE_RELATIVE_PATH\" value=\"/android/AndroidManifest.xml\" />\n        <option name=\"RES_FOLDER_RELATIVE_PATH\" value=\"/android/res\" />\n        <option name=\"ASSETS_FOLDER_RELATIVE_PATH\" value=\"/android/assets\" />\n        <option name=\"LIBS_FOLDER_RELATIVE_PATH\" value=\"/android/libs\" />\n        <option name=\"PROGUARD_LOGS_FOLDER_RELATIVE_PATH\" value=\"/android/proguard_logs\" />\n      </configuration>\n    </facet>\n  </component>\n  <component name=\"NewModuleRootManager\" inherit-compiler-output=\"true\">\n    <exclude-output />\n    <content url=\"file://$MODULE_DIR$/android\">\n      <sourceFolder url=\"file://$MODULE_DIR$/android/app/src/main/java\" isTestSource=\"false\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/android/gen\" isTestSource=\"false\" generated=\"true\" />\n    </content>\n    <orderEntry type=\"jdk\" jdkName=\"Android API 25 Platform\" jdkType=\"Android SDK\" />\n    <orderEntry type=\"sourceFolder\" forTests=\"false\" />\n    <orderEntry type=\"library\" name=\"Flutter for Android\" level=\"project\" />\n  </component>\n</module>"
  },
  {
    "path": "ios/.gitignore",
    "content": ".idea/\n.vagrant/\n.sconsign.dblite\n.svn/\n\n.DS_Store\n*.swp\nprofile\n\nDerivedData/\nbuild/\nGeneratedPluginRegistrant.h\nGeneratedPluginRegistrant.m\n\n*.pbxuser\n*.mode1v3\n*.mode2v3\n*.perspectivev3\n\n!default.pbxuser\n!default.mode1v3\n!default.mode2v3\n!default.perspectivev3\n\nxcuserdata\n\n*.moved-aside\n\n*.pyc\n*sync/\nIcon?\n.tags*\n\n/Flutter/app.flx\n/Flutter/app.zip\n/Flutter/flutter_assets/\n/Flutter/App.framework\n/Flutter/Flutter.framework\n/Flutter/Generated.xcconfig\n/ServiceDefinitions.json\n\nPods/\n"
  },
  {
    "path": "ios/Flutter/AppFrameworkInfo.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n  <key>CFBundleDevelopmentRegion</key>\n  <string>en</string>\n  <key>CFBundleExecutable</key>\n  <string>App</string>\n  <key>CFBundleIdentifier</key>\n  <string>io.flutter.flutter.app</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>App</string>\n  <key>CFBundlePackageType</key>\n  <string>FMWK</string>\n  <key>CFBundleShortVersionString</key>\n  <string>1.0</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>1.0</string>\n  <key>UIRequiredDeviceCapabilities</key>\n  <array>\n    <string>arm64</string>\n  </array>\n  <key>MinimumOSVersion</key>\n  <string>8.0</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "ios/Flutter/Debug.xcconfig",
    "content": "#include \"Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig\"\n#include \"Generated.xcconfig\"\n"
  },
  {
    "path": "ios/Flutter/Release.xcconfig",
    "content": "#include \"Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig\"\n#include \"Generated.xcconfig\"\n"
  },
  {
    "path": "ios/Podfile",
    "content": "# Uncomment this line to define a global platform for your project\n# platform :ios, '9.0'\n\n# CocoaPods analytics sends network stats synchronously affecting flutter build latency.\nENV['COCOAPODS_DISABLE_STATS'] = 'true'\n\ndef parse_KV_file(file, separator='=')\n  file_abs_path = File.expand_path(file)\n  if !File.exists? file_abs_path\n    return [];\n  end\n  pods_ary = []\n  skip_line_start_symbols = [\"#\", \"/\"]\n  File.foreach(file_abs_path) { |line|\n      next if skip_line_start_symbols.any? { |symbol| line =~ /^\\s*#{symbol}/ }\n      plugin = line.split(pattern=separator)\n      if plugin.length == 2\n        podname = plugin[0].strip()\n        path = plugin[1].strip()\n        podpath = File.expand_path(\"#{path}\", file_abs_path)\n        pods_ary.push({:name => podname, :path => podpath});\n      else\n        puts \"Invalid plugin specification: #{line}\"\n      end\n  }\n  return pods_ary\nend\n\ntarget 'Runner' do\n  # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock\n  # referring to absolute paths on developers' machines.\n  system('rm -rf .symlinks')\n  system('mkdir -p .symlinks/plugins')\n\n  # Flutter Pods\n  generated_xcode_build_settings = parse_KV_file('./Flutter/Generated.xcconfig')\n  if generated_xcode_build_settings.empty?\n    puts \"Generated.xcconfig must exist. If you're running pod install manually, make sure flutter packages get is executed first.\"\n  end\n  generated_xcode_build_settings.map { |p|\n    if p[:name] == 'FLUTTER_FRAMEWORK_DIR'\n      symlink = File.join('.symlinks', 'flutter')\n      File.symlink(File.dirname(p[:path]), symlink)\n      pod 'Flutter', :path => File.join(symlink, File.basename(p[:path]))\n    end\n  }\n\n  # Plugin Pods\n  plugin_pods = parse_KV_file('../.flutter-plugins')\n  plugin_pods.map { |p|\n    symlink = File.join('.symlinks', 'plugins', p[:name])\n    File.symlink(p[:path], symlink)\n    pod p[:name], :path => File.join(symlink, 'ios')\n  }\nend\n\npost_install do |installer|\n  installer.pods_project.targets.each do |target|\n    target.build_configurations.each do |config|\n      config.build_settings['ENABLE_BITCODE'] = 'NO'\n    end\n  end\nend"
  },
  {
    "path": "ios/Runner/AppDelegate.h",
    "content": "#import <UIKit/UIKit.h>\n#import <Flutter/Flutter.h>\n\n@interface AppDelegate : FlutterAppDelegate\n\n@end\n"
  },
  {
    "path": "ios/Runner/AppDelegate.m",
    "content": "#include \"AppDelegate.h\"\n#include \"GeneratedPluginRegistrant.h\"\n\n@implementation AppDelegate\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n  [GeneratedPluginRegistrant registerWithRegistry:self];\n  // Override point for customization after application launch.\n  return [super application:application didFinishLaunchingWithOptions:launchOptions];\n}\n\n@end\n"
  },
  {
    "path": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-20x20@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-20x20@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-29x29@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-29x29@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-40x40@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-40x40@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"83.5x83.5\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-83.5x83.5@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"1024x1024\",\n      \"idiom\" : \"ios-marketing\",\n      \"filename\" : \"Icon-App-1024x1024@1x.png\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}\n"
  },
  {
    "path": "ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"LaunchImage.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"LaunchImage@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"LaunchImage@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}\n"
  },
  {
    "path": "ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md",
    "content": "# Launch Screen Assets\n\nYou can customize the launch screen with your own desired assets by replacing the image files in this directory.\n\nYou 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."
  },
  {
    "path": "ios/Runner/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<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\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"12089\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Ydg-fD-yQy\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"xbc-2k-c8Z\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <imageView opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" image=\"LaunchImage\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"YRO-k0-Ey4\">\n                            </imageView>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"YRO-k0-Ey4\" firstAttribute=\"centerX\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"centerX\" id=\"1a2-6s-vTC\"/>\n                            <constraint firstItem=\"YRO-k0-Ey4\" firstAttribute=\"centerY\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"centerY\" id=\"4X2-HB-R7a\"/>\n                        </constraints>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"LaunchImage\" width=\"168\" height=\"185\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "ios/Runner/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<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\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"10085\"/>\n    </dependencies>\n    <scenes>\n        <!--Flutter View Controller-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController id=\"BYZ-38-t0r\" customClass=\"FlutterViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"y3c-jy-aDJ\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"wfy-db-euE\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "ios/Runner/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>flutter_demo</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UIRequiredDeviceCapabilities</key>\n\t<array>\n\t\t<string>arm64</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UIViewControllerBasedStatusBarAppearance</key>\n\t<false/>\n</dict>\n</plist>\n"
  },
  {
    "path": "ios/Runner/main.m",
    "content": "#import <UIKit/UIKit.h>\n#import <Flutter/Flutter.h>\n#import \"AppDelegate.h\"\n\nint main(int argc, char * argv[]) {\n  @autoreleasepool {\n    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));\n  }\n}\n"
  },
  {
    "path": "ios/Runner.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };\n\t\t2D5378261FAA1A9400D5DBA9 /* flutter_assets in Resources */ = {isa = PBXBuildFile; fileRef = 2D5378251FAA1A9400D5DBA9 /* flutter_assets */; };\n\t\t3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };\n\t\t3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; };\n\t\t3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; };\n\t\t9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };\n\t\t9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; };\n\t\t9740EEB51CF90195004384FC /* Generated.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB31CF90195004384FC /* Generated.xcconfig */; };\n\t\t978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; };\n\t\t97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; };\n\t\t97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };\n\t\t97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };\n\t\t97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };\n\t\tCB9D968E6FA25F9D39C29ABE /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DED9A1A75D33C5B076818C6E /* libPods-Runner.a */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t9705A1C41CF9048500538489 /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t\t3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */,\n\t\t\t\t9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */,\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = \"<group>\"; };\n\t\t1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = \"<group>\"; };\n\t\t2D5378251FAA1A9400D5DBA9 /* flutter_assets */ = {isa = PBXFileReference; lastKnownFileType = folder; name = flutter_assets; path = Flutter/flutter_assets; sourceTree = SOURCE_ROOT; };\n\t\t3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = \"<group>\"; };\n\t\t3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = \"<group>\"; };\n\t\t7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = \"<group>\"; };\n\t\t7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = \"<group>\"; };\n\t\t7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = \"<group>\"; };\n\t\t9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = \"<group>\"; };\n\t\t9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = \"<group>\"; };\n\t\t9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = \"<group>\"; };\n\t\t97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\t97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\t97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n\t\tDED9A1A75D33C5B076818C6E /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = \"libPods-Runner.a\"; sourceTree = BUILT_PRODUCTS_DIR; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t97C146EB1CF9000F007C117D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */,\n\t\t\t\t3B80C3941E831B6300D905FE /* App.framework in Frameworks */,\n\t\t\t\tCB9D968E6FA25F9D39C29ABE /* libPods-Runner.a in Frameworks */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t9740EEB11CF90186004384FC /* Flutter */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t2D5378251FAA1A9400D5DBA9 /* flutter_assets */,\n\t\t\t\t3B80C3931E831B6300D905FE /* App.framework */,\n\t\t\t\t3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,\n\t\t\t\t9740EEBA1CF902C7004384FC /* Flutter.framework */,\n\t\t\t\t9740EEB21CF90195004384FC /* Debug.xcconfig */,\n\t\t\t\t7AFA3C8E1D35360C0083082E /* Release.xcconfig */,\n\t\t\t\t9740EEB31CF90195004384FC /* Generated.xcconfig */,\n\t\t\t);\n\t\t\tname = Flutter;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146E51CF9000F007C117D = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9740EEB11CF90186004384FC /* Flutter */,\n\t\t\t\t97C146F01CF9000F007C117D /* Runner */,\n\t\t\t\t97C146EF1CF9000F007C117D /* Products */,\n\t\t\t\tF0A69501B739B7210807AE75 /* Pods */,\n\t\t\t\tB349611CADCD4B927A041236 /* Frameworks */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146EF1CF9000F007C117D /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t97C146EE1CF9000F007C117D /* Runner.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146F01CF9000F007C117D /* Runner */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */,\n\t\t\t\t7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */,\n\t\t\t\t97C146FA1CF9000F007C117D /* Main.storyboard */,\n\t\t\t\t97C146FD1CF9000F007C117D /* Assets.xcassets */,\n\t\t\t\t97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,\n\t\t\t\t97C147021CF9000F007C117D /* Info.plist */,\n\t\t\t\t97C146F11CF9000F007C117D /* Supporting Files */,\n\t\t\t\t1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,\n\t\t\t\t1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,\n\t\t\t);\n\t\t\tpath = Runner;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146F11CF9000F007C117D /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t97C146F21CF9000F007C117D /* main.m */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tB349611CADCD4B927A041236 /* Frameworks */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\tDED9A1A75D33C5B076818C6E /* libPods-Runner.a */,\n\t\t\t);\n\t\t\tname = Frameworks;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\tF0A69501B739B7210807AE75 /* Pods */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t);\n\t\t\tname = Pods;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t97C146ED1CF9000F007C117D /* Runner */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget \"Runner\" */;\n\t\t\tbuildPhases = (\n\t\t\t\tB3092390BC17D6B606432780 /* [CP] Check Pods Manifest.lock */,\n\t\t\t\t9740EEB61CF901F6004384FC /* Run Script */,\n\t\t\t\t97C146EA1CF9000F007C117D /* Sources */,\n\t\t\t\t97C146EB1CF9000F007C117D /* Frameworks */,\n\t\t\t\t97C146EC1CF9000F007C117D /* Resources */,\n\t\t\t\t9705A1C41CF9048500538489 /* Embed Frameworks */,\n\t\t\t\t3B06AD1E1E4923F5004D2608 /* Thin Binary */,\n\t\t\t\tF14DAD73828DC392FCA11E30 /* [CP] Embed Pods Frameworks */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Runner;\n\t\t\tproductName = Runner;\n\t\t\tproductReference = 97C146EE1CF9000F007C117D /* Runner.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t97C146E61CF9000F007C117D /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0910;\n\t\t\t\tORGANIZATIONNAME = \"The Chromium Authors\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t97C146ED1CF9000F007C117D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3.1;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject \"Runner\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 97C146E51CF9000F007C117D;\n\t\t\tproductRefGroup = 97C146EF1CF9000F007C117D /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t97C146ED1CF9000F007C117D /* Runner */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t97C146EC1CF9000F007C117D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,\n\t\t\t\t9740EEB51CF90195004384FC /* Generated.xcconfig in Resources */,\n\t\t\t\t3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,\n\t\t\t\t9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */,\n\t\t\t\t97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,\n\t\t\t\t2D5378261FAA1A9400D5DBA9 /* flutter_assets in Resources */,\n\t\t\t\t97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Thin Binary\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"/bin/sh \\\"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\\\" thin\";\n\t\t};\n\t\t9740EEB61CF901F6004384FC /* Run Script */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Run Script\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"/bin/sh \\\"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\\\" build\";\n\t\t};\n\t\tB3092390BC17D6B606432780 /* [CP] Check Pods Manifest.lock */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\",\n\t\t\t\t\"${PODS_ROOT}/Manifest.lock\",\n\t\t\t);\n\t\t\tname = \"[CP] Check Pods Manifest.lock\";\n\t\t\toutputPaths = (\n\t\t\t\t\"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"diff \\\"${PODS_PODFILE_DIR_PATH}/Podfile.lock\\\" \\\"${PODS_ROOT}/Manifest.lock\\\" > /dev/null\\nif [ $? != 0 ] ; then\\n    # print error to STDERR\\n    echo \\\"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\\\" >&2\\n    exit 1\\nfi\\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\\necho \\\"SUCCESS\\\" > \\\"${SCRIPT_OUTPUT_FILE_0}\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n\t\tF14DAD73828DC392FCA11E30 /* [CP] Embed Pods Frameworks */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t\t\"${SRCROOT}/Pods/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\",\n\t\t\t\t\"${PODS_ROOT}/../.symlinks/flutter/ios/Flutter.framework\",\n\t\t\t);\n\t\t\tname = \"[CP] Embed Pods Frameworks\";\n\t\t\toutputPaths = (\n\t\t\t\t\"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Flutter.framework\",\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"\\\"${SRCROOT}/Pods/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\\\"\\n\";\n\t\t\tshowEnvVarsInLog = 0;\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t97C146EA1CF9000F007C117D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */,\n\t\t\t\t97C146F31CF9000F007C117D /* main.m in Sources */,\n\t\t\t\t1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\t97C146FA1CF9000F007C117D /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t97C146FB1CF9000F007C117D /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t97C147001CF9000F007C117D /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t97C147031CF9000F007C117D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t97C147041CF9000F007C117D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 8.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t97C147061CF9000F007C117D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = arm64;\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = Runner/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.eajy.flutterDemo;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t97C147071CF9000F007C117D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tARCHS = arm64;\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCURRENT_PROJECT_VERSION = 1;\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = Runner/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.eajy.flutterDemo;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t97C146E91CF9000F007C117D /* Build configuration list for PBXProject \"Runner\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t97C147031CF9000F007C117D /* Debug */,\n\t\t\t\t97C147041CF9000F007C117D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget \"Runner\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t97C147061CF9000F007C117D /* Debug */,\n\t\t\t\t97C147071CF9000F007C117D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 97C146E61CF9000F007C117D /* Project object */;\n}\n"
  },
  {
    "path": "ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Runner.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0910\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n               BuildableName = \"Runner.app\"\n               BlueprintName = \"Runner\"\n               ReferencedContainer = \"container:Runner.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      language = \"\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n            BuildableName = \"Runner.app\"\n            BlueprintName = \"Runner\"\n            ReferencedContainer = \"container:Runner.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      language = \"\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n            BuildableName = \"Runner.app\"\n            BlueprintName = \"Runner\"\n            ReferencedContainer = \"container:Runner.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n            BuildableName = \"Runner.app\"\n            BlueprintName = \"Runner\"\n            ReferencedContainer = \"container:Runner.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "ios/Runner.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Runner.xcodeproj\">\n   </FileRef>\n   <FileRef\n      location = \"group:Pods/Pods.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "lib/main.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_demo/route/home.dart';\n\nvoid main() => runApp(new MyApp());\n\nclass MyApp extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return new MaterialApp(\n      title: 'Flutter Demo',\n      theme: new ThemeData(\n        primarySwatch: Colors.blue,\n        accentColor: Colors.amber,\n      ),\n      home: new HomePage(title: 'Flutter Demo Home Page'),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/route/about.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter/services.dart';\nimport 'dart:async';\nimport 'package:url_launcher/url_launcher.dart';\n\nclass About extends StatefulWidget {\n  @override\n  State<StatefulWidget> createState() {\n    return new AboutState();\n  }\n}\n\nclass AboutState extends State<About> {\n  static const platform = const MethodChannel('com.eajy.flutterdemo/android');\n\n  static const app_url =\n      'https://play.google.com/store/apps/details?id=com.eajy.flutterdemo';\n  static const github_url = 'https://github.com/Eajy/flutter_demo';\n  static const me_url = 'https://sites.google.com/view/eajy';\n\n  String _version = 'Version:';\n\n  Future<Null> _getVersionName() async {\n    try {\n      _version = await platform.invokeMethod('getVersionName');\n    } on PlatformException catch (e) {\n      print(e);\n      _version = 'Version: 1.0';\n    }\n    setState(() {});\n  }\n\n  Future<Null> _share() async {\n    try {\n      platform.invokeMethod('share');\n    } on PlatformException catch (e) {\n      print(e);\n    }\n  }\n\n  Future<Null> _sendEmail() async {\n    try {\n      platform.invokeMethod('sendEmail');\n    } on PlatformException catch (e) {\n      print(e);\n    }\n  }\n\n  @override\n  void initState() {\n    _getVersionName();\n    super.initState();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return new Scaffold(\n      appBar: new AppBar(\n        title: new Text('About'),\n      ),\n      body: new ListView(\n        children: <Widget>[\n          new ListTile(\n            leading: new FlutterLogo(),\n            title: new Text('This app is developed by using Flutter.'),\n            subtitle: new Text(_version),\n          ),\n          new Divider(),\n          new ListTile(\n            leading: new Icon(Icons.shop),\n            title: new Text('Rate on Google Play'),\n            onTap: () {\n              launch(app_url);\n            },\n          ),\n          new ListTile(\n            leading: new Icon(Icons.code),\n            title: new Text('Source code on GitHub'),\n            onTap: () {\n              launch(github_url);\n            },\n          ),\n          new ListTile(\n            leading: new Icon(Icons.email),\n            title: new Text('Feedback by E-mail'),\n            onTap: () {\n              _sendEmail();\n            },\n          ),\n          new ListTile(\n            leading: new Icon(Icons.web),\n            title: new Text('View my website'),\n            onTap: () {\n              launch(me_url);\n            },\n          ),\n          new Divider(),\n          new ListTile(\n            leading: new Icon(\n              Icons.info,\n              color: Colors.transparent,\n            ),\n            title: new Text(\n              'Designed by Eajy in China.',\n              style: new TextStyle(color: Colors.black54, fontSize: 14.0),\n            ),\n          ),\n        ],\n      ),\n      floatingActionButton: new FloatingActionButton(\n        onPressed: () {\n          _share();\n        },\n        child: new Icon(Icons.share, color: Colors.white),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/route/bottomNavigation.dart",
    "content": "import 'package:flutter/material.dart';\n\nclass NavigationIconView {\n  NavigationIconView({\n    Widget icon,\n    String title,\n    Color color,\n    TickerProvider vsync,\n  })  : _icon = icon,\n        _color = color,\n        _title = title,\n        item = new BottomNavigationBarItem(\n          icon: icon,\n          title: new Text(title),\n          backgroundColor: color,\n        ),\n        controller = new AnimationController(\n          duration: kThemeAnimationDuration,\n          vsync: vsync,\n        ) {\n    _animation = new CurvedAnimation(\n      parent: controller,\n      curve: const Interval(0.5, 1.0, curve: Curves.fastOutSlowIn),\n    );\n  }\n\n  final Widget _icon;\n  final Color _color;\n  final String _title;\n  final BottomNavigationBarItem item;\n  final AnimationController controller;\n  CurvedAnimation _animation;\n\n  FadeTransition transition(\n      BottomNavigationBarType type, BuildContext context) {\n    Color iconColor;\n    if (type == BottomNavigationBarType.shifting) {\n      iconColor = _color;\n    } else {\n      final ThemeData themeData = Theme.of(context);\n      iconColor = themeData.brightness == Brightness.light\n          ? themeData.primaryColor\n          : themeData.accentColor;\n    }\n\n    return new FadeTransition(\n      opacity: _animation,\n      child: new SlideTransition(\n        position: new Tween<Offset>(\n          begin: const Offset(0.0, 0.02), // Slightly down.\n          end: Offset.zero,\n        ).animate(_animation),\n        child: new IconTheme(\n          data: new IconThemeData(\n            color: iconColor,\n            size: 120.0,\n          ),\n          child: new Semantics(\n            label: 'Placeholder for $_title tab',\n            child: _icon,\n          ),\n        ),\n      ),\n    );\n  }\n}\n\nclass CustomIcon extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    final IconThemeData iconTheme = IconTheme.of(context);\n    return new Container(\n      margin: const EdgeInsets.all(4.0),\n      width: iconTheme.size - 8.0,\n      height: iconTheme.size - 8.0,\n      color: iconTheme.color,\n    );\n  }\n}\n\nclass BottomNavigationDemo extends StatefulWidget {\n  @override\n  _BottomNavigationDemoState createState() => new _BottomNavigationDemoState();\n}\n\nclass _BottomNavigationDemoState extends State<BottomNavigationDemo>\n    with TickerProviderStateMixin {\n  int _currentIndex = 0;\n  BottomNavigationBarType _type = BottomNavigationBarType.fixed;\n  List<NavigationIconView> _navigationViews;\n\n  @override\n  void initState() {\n    super.initState();\n    _navigationViews = <NavigationIconView>[\n      new NavigationIconView(\n        icon: const Icon(Icons.dashboard),\n        title: 'Dashborad',\n        color: Colors.blue,\n        vsync: this,\n      ),\n      new NavigationIconView(\n        icon: const Icon(Icons.image),\n        title: 'Image',\n        color: Colors.teal,\n        vsync: this,\n      ),\n      new NavigationIconView(\n        icon: const Icon(Icons.music_note),\n        title: 'Music',\n        color: Colors.orange,\n        vsync: this,\n      ),\n      new NavigationIconView(\n        icon: const Icon(Icons.movie),\n        title: 'Movie',\n        color: Colors.red,\n        vsync: this,\n      )\n    ];\n\n    for (NavigationIconView view in _navigationViews)\n      view.controller.addListener(_rebuild);\n\n    _navigationViews[_currentIndex].controller.value = 1.0;\n  }\n\n  @override\n  void dispose() {\n    for (NavigationIconView view in _navigationViews) view.controller.dispose();\n    super.dispose();\n  }\n\n  void _rebuild() {\n    setState(() {\n      // Rebuild in order to animate views.\n    });\n  }\n\n  Widget _buildTransitionsStack() {\n    final List<FadeTransition> transitions = <FadeTransition>[];\n\n    for (NavigationIconView view in _navigationViews)\n      transitions.add(view.transition(_type, context));\n\n    // We want to have the newly animating (fading in) views on top.\n    transitions.sort((FadeTransition a, FadeTransition b) {\n      final Animation<double> aAnimation = a.opacity;\n      final Animation<double> bAnimation = b.opacity;\n      final double aValue = aAnimation.value;\n      final double bValue = bAnimation.value;\n      return aValue.compareTo(bValue);\n    });\n\n    return new Stack(children: transitions);\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    final BottomNavigationBar botNavBar = new BottomNavigationBar(\n      items: _navigationViews\n          .map((NavigationIconView navigationView) => navigationView.item)\n          .toList(),\n      currentIndex: _currentIndex,\n      type: _type,\n      onTap: (int index) {\n        setState(() {\n          _navigationViews[_currentIndex].controller.reverse();\n          _currentIndex = index;\n          _navigationViews[_currentIndex].controller.forward();\n        });\n      },\n    );\n\n    return new Scaffold(\n      appBar: new AppBar(\n        title: const Text('Bottom navigation'),\n        actions: <Widget>[\n          new PopupMenuButton<BottomNavigationBarType>(\n            onSelected: (BottomNavigationBarType value) {\n              setState(() {\n                _type = value;\n              });\n            },\n            itemBuilder: (BuildContext context) =>\n                <PopupMenuItem<BottomNavigationBarType>>[\n                  const PopupMenuItem<BottomNavigationBarType>(\n                    value: BottomNavigationBarType.fixed,\n                    child: const Text('Fixed'),\n                  ),\n                  const PopupMenuItem<BottomNavigationBarType>(\n                    value: BottomNavigationBarType.shifting,\n                    child: const Text('Shifting'),\n                  )\n                ],\n          )\n        ],\n      ),\n      body: new Center(child: _buildTransitionsStack()),\n      bottomNavigationBar: botNavBar,\n    );\n  }\n}\n"
  },
  {
    "path": "lib/route/fullscreen.dart",
    "content": "import 'package:flutter/material.dart';\n\nclass Fullscreen extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return new Scaffold(\n      body: new Center(\n        child: new Stack(\n          children: <Widget>[\n            new Image.asset(\n              'res/gif/material_design_flutter_1.gif',\n              fit: BoxFit.fill,\n            ),\n          ],\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/route/home.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_demo/widget/tabWidget.dart';\nimport 'package:flutter_demo/route/homeCards.dart';\nimport 'package:flutter_demo/route/homeDialogs.dart';\nimport 'homeWidgets.dart';\n\nclass HomePage extends StatefulWidget {\n  HomePage({Key key, this.title}) : super(key: key);\n\n  final String title;\n\n  @override\n  HomePageState createState() => new HomePageState();\n}\n\nclass HomePageState extends State<HomePage> {\n  @override\n  Widget build(BuildContext context) {\n    final List<String> tabs = <String>['Cards', 'Dialogs', 'Widgets'];\n\n    final List<Widget> widgets = <Widget>[\n      new HomeCards(),\n      new HomeDialogs(),\n      new HomeWidgets(),\n    ];\n\n    const List<Menu> menus = const <Menu>[\n      const Menu(title: 'item 1', icon: Icons.add),\n      const Menu(title: 'item 2', icon: Icons.add),\n      const Menu(title: 'item 3', icon: Icons.add),\n    ];\n\n    return new TabbedScaffold(\n      title: 'Flutter Demo',\n      tabs: tabs,\n      actions: <Widget>[\n        new IconButton(\n          icon: const Icon(\n            Icons.search,\n            color: Colors.white,\n          ),\n          tooltip: 'more',\n          onPressed: () {},\n        ),\n        new PopupMenuButton<Menu>(\n          itemBuilder: (BuildContext context) {\n            return menus.skip(0).map((Menu menu) {\n              return new PopupMenuItem<Menu>(\n                value: menu,\n                child: new Text(menu.title),\n              );\n            }).toList();\n          },\n        ),\n      ],\n      widgets: widgets,\n    );\n  }\n}\n\nclass Menu {\n  const Menu({this.title, this.icon});\n\n  final String title;\n  final IconData icon;\n}\n"
  },
  {
    "path": "lib/route/homeCards.dart",
    "content": "import 'package:flutter/material.dart';\n\nclass HomeCards extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return new SingleChildScrollView(\n      child: new Column(\n        children: <Widget>[\n          new Card(\n            color: Color(0xFFFFF59D),\n            child: new Column(\n              mainAxisSize: MainAxisSize.min,\n              children: <Widget>[\n                const ListTile(\n                  leading: const Icon(Icons.image),\n                  title: const Text('This Is A Title'),\n                  subtitle: const Text('This is a subtitle in a list tile.'),\n                ),\n                new ButtonTheme.bar(\n                  // make buttons use the appropriate styles for cards\n                  child: new ButtonBar(\n                    children: <Widget>[\n                      new FlatButton(\n                        child: const Text('Button1'),\n                        onPressed: () {},\n                      ),\n                      new FlatButton(\n                        child: const Text('Button2'),\n                        onPressed: () {},\n                      ),\n                    ],\n                  ),\n                ),\n              ],\n            ),\n          ),\n          new Card(\n            child: new Column(\n              mainAxisSize: MainAxisSize.min,\n              children: <Widget>[\n                new Image.asset(\n                  'res/images/material_design_2.jpg',\n//                  height: 192.0,\n                  fit: BoxFit.fill,\n                ),\n                const ListTile(\n                  title: const Text('This Is A Title'),\n                  subtitle: const Text('This is a subtitle in a card.'),\n                ),\n                new ButtonTheme.bar(\n                  // make buttons use the appropriate styles for cards\n                  child: new ButtonBar(\n                    alignment: MainAxisAlignment.start,\n                    children: <Widget>[\n                      new FlatButton(\n                        child: const Text('Button1'),\n                        onPressed: () {},\n                      ),\n                      new FlatButton(\n                        child: const Text('Button2'),\n                        onPressed: () {},\n                      ),\n                    ],\n                  ),\n                ),\n              ],\n            ),\n          ),\n          new Card(\n            child: new Column(\n              mainAxisSize: MainAxisSize.min,\n              children: <Widget>[\n                new Stack(\n                  alignment: AlignmentDirectional.bottomStart,\n                  children: <Widget>[\n                    new Image.asset(\n                      'res/images/material_design_4.jpg',\n//                      height: 192.0,\n                      fit: BoxFit.fill,\n                    ),\n                    new ListTile(\n                      title: new Text(\n                        'This Is A Title',\n                        style:\n                            new TextStyle(color: Colors.white, fontSize: 24.0),\n                      ),\n                    ),\n                  ],\n                ),\n                new ButtonTheme.bar(\n                  child: new ButtonBar(\n                    alignment: MainAxisAlignment.end,\n                    children: <Widget>[\n                      new IconButton(\n                        icon: new Icon(Icons.favorite, color: Colors.grey),\n                        onPressed: () {},\n                      ),\n                      new IconButton(\n                        icon: new Icon(Icons.bookmark, color: Colors.grey),\n                        onPressed: () {},\n                      ),\n                      new IconButton(\n                        icon: new Icon(Icons.share, color: Colors.grey),\n                        onPressed: () {},\n                      ),\n                    ],\n                  ),\n                )\n              ],\n            ),\n          ),\n        ].map((Widget widget) {\n          // Add a little space between the widgets\n          return new Container(\n            padding: const EdgeInsets.symmetric(vertical: 4.0),\n            child: widget,\n          );\n        }).toList(),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/route/homeDialogs.dart",
    "content": "import 'package:flutter/material.dart';\n\nclass HomeDialogs extends StatefulWidget {\n  @override\n  State<StatefulWidget> createState() {\n    return new HomeDialogsState();\n  }\n}\n\nclass HomeDialogsState extends State<HomeDialogs> {\n  TimeOfDay _selectedTime;\n\n  @override\n  void initState() {\n    super.initState();\n    final DateTime now = new DateTime.now();\n    _selectedTime = new TimeOfDay(hour: now.hour, minute: now.minute);\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    final ThemeData theme = Theme.of(context);\n    final TextStyle dialogTextStyle =\n        theme.textTheme.subhead.copyWith(color: theme.textTheme.caption.color);\n\n    return new ListView(\n      padding: const EdgeInsets.symmetric(vertical: 16.0, horizontal: 24.0),\n      children: <Widget>[\n        new RaisedButton(\n            padding: EdgeInsets.symmetric(vertical: 14.0),\n            child: new Text(\n              'Alert Dialog',\n              style: new TextStyle(color: Colors.white),\n            ),\n            color: Colors.red,\n            onPressed: () {\n              showDialog(\n                context: context,\n                child: new AlertDialog(\n                  content: new Text('This is content', style: dialogTextStyle),\n                  actions: <Widget>[\n                    new FlatButton(\n                      onPressed: () {\n                        Navigator.pop(context, 'OK');\n                      },\n                      child: const Text('OK'),\n                    )\n                  ],\n                ),\n              ).then((onValue) {\n                if (onValue != null) {\n                  Scaffold.of(context).showSnackBar(\n                      new SnackBar(content: new Text('$onValue')));\n                }\n              });\n            }),\n        new RaisedButton(\n            padding: EdgeInsets.symmetric(vertical: 14.0),\n            child: new Text(\n              'Alert Dialog',\n              style: new TextStyle(color: Colors.white),\n            ),\n            color: Colors.purple,\n            onPressed: () {\n              showDialog(\n                context: context,\n                child: new AlertDialog(\n                  title: new Text('This Is Title'),\n                  content: new Text('This is content', style: dialogTextStyle),\n                  actions: <Widget>[\n                    new FlatButton(\n                        onPressed: () {\n                          Navigator.pop(context, 'Cancel');\n                        },\n                        child: const Text('Cancel')),\n                    new FlatButton(\n                      onPressed: () {\n                        Navigator.pop(context, 'OK');\n                      },\n                      child: const Text('OK'),\n                    ),\n                  ],\n                ),\n              ).then((onValue) {\n                if (onValue != null) {\n                  Scaffold.of(context).showSnackBar(\n                      new SnackBar(content: new Text('$onValue')));\n                }\n              });\n            }),\n        new RaisedButton(\n            padding: EdgeInsets.symmetric(vertical: 14.0),\n            child: new Text(\n              'Single Choice Dialog',\n              style: new TextStyle(color: Colors.white),\n            ),\n            color: Colors.indigo,\n            onPressed: () {\n              showDialog(\n                context: context,\n                child: new SingleChoiceDialog(),\n              ).then((onValue) {\n                if (onValue != null) {\n                  Scaffold.of(context).showSnackBar(\n                      new SnackBar(content: new Text('$onValue')));\n                }\n              });\n            }),\n        new RaisedButton(\n            padding: EdgeInsets.symmetric(vertical: 14.0),\n            child: new Text(\n              'Multi Choise Dialog',\n              style: new TextStyle(color: Colors.white),\n            ),\n            color: Colors.blue,\n            onPressed: () {\n              showDialog(\n                context: context,\n                child: new MultiChoiceDialog(),\n              ).then((onValue) {\n                if (onValue != null) {\n                  Scaffold.of(context).showSnackBar(\n                      new SnackBar(content: new Text('$onValue')));\n                }\n              });\n            }),\n        new RaisedButton(\n            padding: EdgeInsets.symmetric(vertical: 14.0),\n            child: new Text(\n              'Time Picker Dialog',\n              style: new TextStyle(color: Colors.white),\n            ),\n            color: Colors.teal,\n            onPressed: () {\n              showTimePicker(\n                context: context,\n                initialTime: _selectedTime,\n              ).then((TimeOfDay value) {\n                if (value != null) {\n                  _selectedTime = value;\n                  Scaffold.of(context).showSnackBar(new SnackBar(\n                      content: new Text('${value.format(context)}')));\n                }\n              });\n            }),\n        new RaisedButton(\n            padding: EdgeInsets.symmetric(vertical: 14.0),\n            child: new Text(\n              'Date Picker Dialog',\n              style: new TextStyle(color: Colors.white),\n            ),\n            color: Colors.green,\n            onPressed: () {\n              showDatePicker(\n                context: context,\n                initialDate: new DateTime.now(),\n                firstDate: new DateTime(1970),\n                lastDate: new DateTime(2500),\n              ).then((DateTime value) {\n                if (value != null) {\n                  Scaffold.of(context).showSnackBar(\n                      new SnackBar(content: new Text('${value}')));\n                }\n              });\n            }),\n        new RaisedButton(\n            padding: EdgeInsets.symmetric(vertical: 14.0),\n            child: new Text(\n              'Show modal Bottom Sheet',\n              style: new TextStyle(color: Colors.white),\n            ),\n            color: Colors.orange,\n            onPressed: () {\n              showModalBottomSheet<void>(\n                  context: context,\n                  builder: (BuildContext context) {\n                    return new Container(\n                        padding: EdgeInsets.only(top: 16.0),\n                        decoration: const BoxDecoration(\n                          border: const Border(\n                              top: const BorderSide(color: Colors.black12)),\n                        ),\n                        child: new ListView(\n                          shrinkWrap: true,\n                          primary: false,\n                          children: <Widget>[\n                            new ListTile(\n                              dense: true,\n                              title: const Text('This is a modal bottom sheet'),\n                            ),\n                            new ListTile(\n                              dense: true,\n                              title: const Text('Click anywhete to dismiss'),\n                            ),\n                            new ButtonTheme.bar(\n                              // make buttons use the appropriate styles for cards\n                              child: new ButtonBar(\n                                children: <Widget>[\n                                  new FlatButton(\n                                    child: const Text('OK'),\n                                    onPressed: () {\n                                      Navigator.pop(context);\n                                    },\n                                  ),\n                                ],\n                              ),\n                            ),\n                          ],\n                        ));\n                  });\n            }),\n        new RaisedButton(\n            padding: EdgeInsets.symmetric(vertical: 14.0),\n            child: new Text(\n              'Show Bottom Sheet',\n              style: new TextStyle(color: Colors.white),\n            ),\n            color: Colors.blueGrey,\n            onPressed: () {\n              showBottomSheet(\n                  context: context,\n                  builder: (BuildContext context) {\n                    return new Container(\n                        padding: EdgeInsets.only(top: 16.0),\n                        decoration: const BoxDecoration(\n                          border: const Border(\n                              top: const BorderSide(color: Colors.black12)),\n                        ),\n                        child: new ListView(\n                          shrinkWrap: true,\n                          primary: false,\n                          children: <Widget>[\n                            new ListTile(\n                              dense: true,\n                              title: const Text('This is a bottom sheet'),\n                            ),\n                            new ListTile(\n                              dense: true,\n                              title: const Text('Click OK to dismiss'),\n                            ),\n                            new ButtonTheme.bar(\n                              // make buttons use the appropriate styles for cards\n                              child: new ButtonBar(\n                                children: <Widget>[\n                                  new FlatButton(\n                                    child: const Text('OK'),\n                                    onPressed: () {\n                                      Navigator.pop(context);\n                                    },\n                                  ),\n                                ],\n                              ),\n                            ),\n                          ],\n                        ));\n                  });\n            }),\n      ].map((Widget widget) {\n        return new Container(\n          padding: const EdgeInsets.symmetric(vertical: 12.0),\n          child: widget,\n        );\n      }).toList(),\n    );\n  }\n}\n\nint singleItemSelected = 0;\nList<bool> checkboxSelected = <bool>[false, false, false, false];\n\nclass SingleChoiceDialog extends StatefulWidget {\n  @override\n  State<StatefulWidget> createState() {\n    return new SingleChoiceDialogState();\n  }\n}\n\nclass SingleChoiceDialogState extends State<SingleChoiceDialog> {\n  @override\n  Widget build(BuildContext context) {\n    return new SimpleDialog(\n      contentPadding: EdgeInsets.fromLTRB(0.0, 12.0, 0.0, 0.0),\n      title: new Text('This Is Title'),\n      children: <Widget>[\n        new Column(\n          children: <Widget>[\n            new RadioListTile<int>(\n              title: const Text('item 0'),\n              value: 0,\n              groupValue: singleItemSelected,\n              onChanged: (int value) {\n                setState(() {\n                  singleItemSelected = value;\n                });\n                Navigator.pop(context, value);\n              },\n            ),\n            new RadioListTile<int>(\n              title: const Text('item 1'),\n              value: 1,\n              groupValue: singleItemSelected,\n              onChanged: (int value) {\n                setState(() {\n                  singleItemSelected = value;\n                });\n                Navigator.pop(context, value);\n              },\n            ),\n            new RadioListTile<int>(\n              title: const Text('item 2'),\n              value: 2,\n              groupValue: singleItemSelected,\n              onChanged: (int value) {\n                setState(() {\n                  singleItemSelected = value;\n                });\n                Navigator.pop(context, value);\n              },\n            ),\n            new RadioListTile<int>(\n              title: const Text('item 3'),\n              value: 3,\n              groupValue: singleItemSelected,\n              onChanged: (int value) {\n                setState(() {\n                  singleItemSelected = value;\n                });\n                Navigator.pop(context, value);\n              },\n            ),\n          ],\n        ),\n        new ButtonTheme.bar(\n          padding: EdgeInsets.symmetric(horizontal: 16.0),\n          child: new ButtonBar(\n            children: <Widget>[\n              new FlatButton(\n                  onPressed: () {\n                    Navigator.pop(context, 'Cancel');\n                  },\n                  child: const Text('Cancel')),\n            ],\n          ),\n        ),\n      ],\n    );\n  }\n}\n\nclass MultiChoiceDialog extends StatefulWidget {\n  @override\n  State<StatefulWidget> createState() {\n    return new MultiChoiceDialogState();\n  }\n}\n\nclass MultiChoiceDialogState extends State<MultiChoiceDialog> {\n  @override\n  Widget build(BuildContext context) {\n    return new SimpleDialog(\n      contentPadding: EdgeInsets.fromLTRB(8.0, 12.0, 8.0, 0.0),\n      title: new Text('This Is Title'),\n      children: <Widget>[\n        new Column(\n          children: <Widget>[\n            new CheckboxListTile(\n              title: const Text('item 0'),\n              value: checkboxSelected[0],\n              onChanged: (bool value) {\n                setState(() {\n                  checkboxSelected[0] = value;\n                });\n              },\n            ),\n            new CheckboxListTile(\n                title: const Text('item 1'),\n                value: checkboxSelected[1],\n                onChanged: (bool value) {\n                  setState(() {\n                    checkboxSelected[1] = value;\n                  });\n                }),\n            new CheckboxListTile(\n                title: const Text('item 2'),\n                value: checkboxSelected[2],\n                onChanged: (bool value) {\n                  setState(() {\n                    checkboxSelected[2] = value;\n                  });\n                }),\n            new CheckboxListTile(\n                title: const Text('item 3'),\n                value: checkboxSelected[3],\n                onChanged: (bool value) {\n                  setState(() {\n                    checkboxSelected[3] = value;\n                  });\n                }),\n          ],\n        ),\n        new ButtonTheme.bar(\n          child: new ButtonBar(\n            children: <Widget>[\n              new FlatButton(\n                  onPressed: () {\n                    Navigator.pop(context, 'OK');\n                  },\n                  child: const Text('OK')),\n            ],\n          ),\n        ),\n      ],\n    );\n  }\n}\n"
  },
  {
    "path": "lib/route/homeWidgets.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'dart:math' as math;\n\nclass HomeWidgets extends StatefulWidget {\n  @override\n  State<StatefulWidget> createState() {\n    return new HomeWidgetsState();\n  }\n}\n\nclass HomeWidgetsState extends State<HomeWidgets> {\n  double _sliderValue_1 = 0.2;\n  double _sliderValue_2 = 20.0;\n\n  @override\n  Widget build(BuildContext context) {\n    final ThemeData themeData = Theme.of(context);\n    final TextStyle categoryStyle =\n        themeData.textTheme.body2.copyWith(color: themeData.primaryColor);\n    final TextStyle accentColorText =\n        themeData.textTheme.body1.copyWith(color: Colors.black54);\n\n    return new ListView(\n      padding: const EdgeInsets.symmetric(horizontal: 16.0),\n      children: <Widget>[\n        new Text('TextField', style: categoryStyle),\n        new TextField(),\n        new Text('Chips', style: categoryStyle),\n        new Row(\n          children: <Widget>[\n            new Chip(label: new Text('Chip', style: accentColorText)),\n            new Chip(\n              avatar: new Icon(Icons.account_circle, color: Colors.black54),\n              label: new Text('Chip', style: accentColorText),\n            ),\n            new Chip(\n              deleteIcon:\n                  new Icon(Icons.cancel, size: 18.0, color: Colors.black54),\n              label: new Text('Chip', style: accentColorText),\n              onDeleted: () {},\n            ),\n          ].map((Widget widget) {\n            return new Container(\n              padding: const EdgeInsets.symmetric(horizontal: 4.0),\n              child: widget,\n            );\n          }).toList(),\n        ),\n        new Text('ExpansionTile', style: categoryStyle),\n        new ExpansionTile(\n            title: const Text('Sublist'),\n            backgroundColor: themeData.accentColor.withOpacity(0.025),\n            children: const <Widget>[\n              const ListTile(title: const Text('Item 1')),\n              const ListTile(title: const Text('Item 2')),\n              const ListTile(title: const Text('Item 3')),\n            ]),\n        new Text('Slider', style: categoryStyle),\n        new Slider(\n            value: _sliderValue_1,\n            min: 0.0,\n            max: 1.0,\n            activeColor: themeData.accentColor,\n            inactiveColor: Colors.black12,\n            onChanged: (double value) {\n              setState(() {\n                _sliderValue_1 = value;\n              });\n            }),\n        new Text('Slider with Divisions and Label', style: categoryStyle),\n        new Slider(\n            value: _sliderValue_2,\n            min: 0.0,\n            max: 100.0,\n            activeColor: themeData.accentColor,\n            inactiveColor: Colors.black12,\n            divisions: 5,\n            label: '${_sliderValue_2.round()}',\n            onChanged: (double value) {\n              setState(() {\n                _sliderValue_2 = value;\n              });\n            }),\n        new Text('LinearProgressIndicator', style: categoryStyle),\n        new LinearProgressIndicator(\n          backgroundColor: Colors.black12,\n        ),\n        new Text('CircularProgressIndicator', style: categoryStyle),\n        new Stack(\n          children: <Widget>[\n            new CircularProgressIndicator(),\n          ],\n        ),\n      ].map((Widget widget) {\n        return new Container(\n          padding: const EdgeInsets.symmetric(vertical: 16.0),\n          child: widget,\n        );\n      }).toList(),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/route/list.dart",
    "content": "import 'dart:async';\n\nimport 'package:flutter/material.dart';\n\nclass ListPage extends StatefulWidget {\n  ListPage({Key key}) : super(key: key);\n\n  List<String> items = new List<String>.generate(30, (i) => \"Item ${(i + 1)}\");\n\n  @override\n  State<StatefulWidget> createState() {\n    return new ListPageState(items: items);\n  }\n}\n\nclass ListPageState extends State<ListPage> {\n  ListPageState({this.items});\n\n  final List<String> items;\n\n  final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();\n  final GlobalKey<RefreshIndicatorState> _refreshIndicatorKey =\n      new GlobalKey<RefreshIndicatorState>();\n\n  Future<Null> _handleRefresh() {\n    final Completer<Null> completer = new Completer<Null>();\n    new Timer(const Duration(seconds: 2), () {\n      completer.complete(null);\n    });\n    return completer.future.then((_) {\n      _scaffoldKey.currentState?.showSnackBar(\n        new SnackBar(\n          content: const Text('Refresh complete'),\n          action: new SnackBarAction(\n            label: 'RETRY',\n            onPressed: () {\n              _refreshIndicatorKey.currentState.show();\n            },\n          ),\n        ),\n      );\n    });\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return new Scaffold(\n      key: _scaffoldKey,\n      appBar: new AppBar(\n        title: new Text('List'),\n      ),\n      body: new RefreshIndicator(\n        color: Colors.amber,\n        key: _refreshIndicatorKey,\n        onRefresh: _handleRefresh,\n        child: new ListView.builder(\n          itemCount: items.length,\n          itemBuilder: (context, index) {\n            final item = items[index];\n\n            return new Dismissible(\n              key: new Key(item),\n              onDismissed: (direction) {\n                setState(() {\n                  items.removeAt(index);\n                  Scaffold.of(context).showSnackBar(\n                        new SnackBar(content: new Text(\"$item dismissed\")),\n                      );\n                });\n              },\n              background: new Container(\n                color: Colors.red,\n                child: const ListTile(\n                    leading: const Icon(Icons.delete, color: Colors.white)),\n              ),\n              secondaryBackground: new Container(\n                color: Colors.red,\n                child: const ListTile(\n                    trailing: const Icon(Icons.delete, color: Colors.white)),\n              ),\n              child: new ListTile(\n                leading: new CircleAvatar(\n                  backgroundColor: Colors.amber,\n                  child:\n                      new Icon(Icons.fiber_manual_record, color: Colors.white),\n                ),\n                title: new Text('$item'),\n                subtitle: new Text('Pull to refresh. Swipe to dismiss.'),\n                onTap: () {},\n              ),\n            );\n          },\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/route/settings.dart",
    "content": "import 'package:flutter/material.dart';\n\nclass Settings extends StatefulWidget {\n  @override\n  State<StatefulWidget> createState() {\n    return new SettingsState();\n  }\n}\n\nclass SettingsState extends State<Settings> {\n  bool switchValue = true;\n  bool checkboxValue = true;\n\n  @override\n  Widget build(BuildContext context) {\n    final ThemeData themeData = Theme.of(context);\n    final TextStyle categoryStyle =\n        themeData.textTheme.body2.copyWith(color: themeData.accentColor);\n\n    final TextStyle dialogTextStyle = themeData.textTheme.subhead\n        .copyWith(color: themeData.textTheme.caption.color);\n\n    return new Scaffold(\n      appBar: new AppBar(\n        title: new Text('Settings'),\n      ),\n      body: new ListView(\n        children: <Widget>[\n          new ListTile(\n            title: new Text(\n              'Category 1',\n              style: categoryStyle,\n            ),\n          ),\n          new ListTile(\n            title: new Text('Settings Item 1'),\n            subtitle: new Text('This is a ListTile'),\n            onTap: () {\n              showDialog(\n                context: context,\n                child: new AlertDialog(\n                  content: new Text('Settings item clicked.',\n                      style: dialogTextStyle),\n                  actions: <Widget>[\n                    new FlatButton(\n                      onPressed: () {\n                        Navigator.pop(context, 'OK');\n                      },\n                      child: const Text('OK'),\n                    )\n                  ],\n                ),\n              );\n            },\n          ),\n          new Divider(height: 1.0),\n          new ListTile(\n            title: new Text('Settings Item 2'),\n            subtitle: new Text('This is a ListTile'),\n            onTap: () {\n              showDialog(\n                context: context,\n                child: new AlertDialog(\n                  content: new Text('Settings item clicked.',\n                      style: dialogTextStyle),\n                  actions: <Widget>[\n                    new FlatButton(\n                      onPressed: () {\n                        Navigator.pop(context, 'OK');\n                      },\n                      child: const Text('OK'),\n                    )\n                  ],\n                ),\n              );\n            },\n          ),\n          new Divider(height: 1.0),\n          new ListTile(\n            title: new Text('Settings Item 3'),\n            subtitle: new Text('This is a ListTile'),\n            onTap: () {\n              showDialog(\n                context: context,\n                child: new AlertDialog(\n                  content: new Text('Settings item clicked.',\n                      style: dialogTextStyle),\n                  actions: <Widget>[\n                    new FlatButton(\n                      onPressed: () {\n                        Navigator.pop(context, 'OK');\n                      },\n                      child: const Text('OK'),\n                    )\n                  ],\n                ),\n              );\n            },\n          ),\n          new ListTile(\n            title: new Text(\n              'Category 2',\n              style: categoryStyle,\n            ),\n          ),\n          new CheckboxListTile(\n            value: checkboxValue,\n            onChanged: (bool value) {\n              setState(() {\n                checkboxValue = value;\n              });\n            },\n            title: new Text('Checkbox Item'),\n            subtitle: new Text('This is a CheckboxListTile'),\n          ),\n          new Divider(height: 1.0),\n          new SwitchListTile(\n            value: switchValue,\n            onChanged: (bool value) {\n              setState(() {\n                switchValue = value;\n              });\n            },\n            title: new Text('Switch Item'),\n            subtitle: new Text('This is a SwitchListTile'),\n          ),\n        ],\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/route/sliverAppbar.dart",
    "content": "import 'package:flutter/material.dart';\n\nclass _ContactCategory extends StatelessWidget {\n  const _ContactCategory({Key key, this.icon, this.children}) : super(key: key);\n\n  final IconData icon;\n  final List<Widget> children;\n\n  @override\n  Widget build(BuildContext context) {\n    final ThemeData themeData = Theme.of(context);\n    return new Container(\n      padding: const EdgeInsets.symmetric(vertical: 16.0),\n      decoration: new BoxDecoration(\n          border: new Border(\n              bottom: new BorderSide(color: themeData.dividerColor))),\n      child: new DefaultTextStyle(\n        style: Theme.of(context).textTheme.subhead,\n        child: new SafeArea(\n          top: false,\n          bottom: false,\n          child: new Row(\n            crossAxisAlignment: CrossAxisAlignment.start,\n            children: <Widget>[\n              new Container(\n                  padding: const EdgeInsets.symmetric(vertical: 24.0),\n                  width: 72.0,\n                  child: new Icon(icon, color: themeData.primaryColor)),\n              new Expanded(child: new Column(children: children))\n            ],\n          ),\n        ),\n      ),\n    );\n  }\n}\n\nclass _ContactItem extends StatelessWidget {\n  _ContactItem({Key key, this.icon, this.lines, this.tooltip, this.onPressed})\n      : assert(lines.length > 1),\n        super(key: key);\n\n  final IconData icon;\n  final List<String> lines;\n  final String tooltip;\n  final VoidCallback onPressed;\n\n  @override\n  Widget build(BuildContext context) {\n    final ThemeData themeData = Theme.of(context);\n    final List<Widget> columnChildren = lines\n        .sublist(0, lines.length - 1)\n        .map((String line) => new Text(line))\n        .toList();\n    columnChildren\n        .add(new Text(lines.last, style: themeData.textTheme.caption));\n\n    final List<Widget> rowChildren = <Widget>[\n      new Expanded(\n          child: new Column(\n              crossAxisAlignment: CrossAxisAlignment.start,\n              children: columnChildren))\n    ];\n    if (icon != null) {\n      rowChildren.add(new SizedBox(\n          width: 72.0,\n          child: new IconButton(\n              icon: new Icon(icon),\n              color: themeData.primaryColor,\n              onPressed: onPressed)));\n    }\n    return new MergeSemantics(\n      child: new Padding(\n          padding: const EdgeInsets.symmetric(vertical: 16.0),\n          child: new Row(\n              mainAxisAlignment: MainAxisAlignment.spaceBetween,\n              children: rowChildren)),\n    );\n  }\n}\n\nclass ContactsDemo extends StatefulWidget {\n\n  @override\n  ContactsDemoState createState() => new ContactsDemoState();\n}\n\nenum AppBarBehavior { normal, pinned, floating, snapping }\n\nclass ContactsDemoState extends State<ContactsDemo> {\n  static final GlobalKey<ScaffoldState> _scaffoldKey =\n      new GlobalKey<ScaffoldState>();\n  final double _appBarHeight = 220.0;\n\n  AppBarBehavior _appBarBehavior = AppBarBehavior.pinned;\n\n  @override\n  Widget build(BuildContext context) {\n    return new Theme(\n      data: new ThemeData(\n        brightness: Brightness.light,\n        platform: Theme.of(context).platform,\n      ),\n      child: new Scaffold(\n        key: _scaffoldKey,\n        body: new CustomScrollView(\n          slivers: <Widget>[\n            new SliverAppBar(\n              expandedHeight: _appBarHeight,\n              pinned: _appBarBehavior == AppBarBehavior.pinned,\n              floating: _appBarBehavior == AppBarBehavior.floating ||\n                  _appBarBehavior == AppBarBehavior.snapping,\n              snap: _appBarBehavior == AppBarBehavior.snapping,\n              actions: <Widget>[\n                new PopupMenuButton<AppBarBehavior>(\n                  onSelected: (AppBarBehavior value) {\n                    setState(() {\n                      _appBarBehavior = value;\n                    });\n                  },\n                  itemBuilder: (BuildContext context) =>\n                      <PopupMenuItem<AppBarBehavior>>[\n                        const PopupMenuItem<AppBarBehavior>(\n                            value: AppBarBehavior.normal,\n                            child: const Text('App bar scrolls away')),\n                        const PopupMenuItem<AppBarBehavior>(\n                            value: AppBarBehavior.pinned,\n                            child: const Text('App bar stays put')),\n                        const PopupMenuItem<AppBarBehavior>(\n                            value: AppBarBehavior.floating,\n                            child: const Text('App bar floats')),\n                        const PopupMenuItem<AppBarBehavior>(\n                            value: AppBarBehavior.snapping,\n                            child: const Text('App bar snaps')),\n                      ],\n                ),\n              ],\n              flexibleSpace: new FlexibleSpaceBar(\n                title: const Text('User profile'),\n                background: new Stack(\n                  fit: StackFit.expand,\n                  children: <Widget>[\n                    new Image.asset(\n                      'res/images/material_design_3.png',\n                      fit: BoxFit.fill,\n                      height: _appBarHeight,\n                    ),\n                    // This gradient ensures that the toolbar icons are distinct against the background image.\n                    const DecoratedBox(\n                      decoration: const BoxDecoration(\n                        gradient: const LinearGradient(\n                          begin: const Alignment(0.0, -1.0),\n                          end: const Alignment(0.0, -0.4),\n                          colors: const <Color>[\n                            const Color(0x60000000),\n                            const Color(0x00000000)\n                          ],\n                        ),\n                      ),\n                    ),\n                  ],\n                ),\n              ),\n            ),\n            new SliverList(\n              delegate: new SliverChildListDelegate(<Widget>[\n                new _ContactCategory(\n                  icon: Icons.call,\n                  children: <Widget>[\n                    new _ContactItem(\n                      icon: Icons.message,\n                      tooltip: 'Send message',\n                      onPressed: () {},\n                      lines: const <String>[\n                        '+1-234-5678901',\n                        'Mobile',\n                      ],\n                    ),\n                    new _ContactItem(\n                      icon: Icons.message,\n                      tooltip: 'Send message',\n                      onPressed: () {},\n                      lines: const <String>[\n                        '+1-234-5678902',\n                        'Work',\n                      ],\n                    ),\n                    new _ContactItem(\n                      icon: Icons.message,\n                      tooltip: 'Send message',\n                      onPressed: () {},\n                      lines: const <String>[\n                        '+1-234-5678903',\n                        'Home',\n                      ],\n                    ),\n                  ],\n                ),\n                new _ContactCategory(\n                  icon: Icons.contact_mail,\n                  children: <Widget>[\n                    new _ContactItem(\n                      icon: Icons.email,\n                      tooltip: 'Send personal e-mail',\n                      onPressed: () {},\n                      lines: const <String>[\n                        'user.personal@email.com',\n                        'Personal',\n                      ],\n                    ),\n                    new _ContactItem(\n                      icon: Icons.email,\n                      tooltip: 'Send work e-mail',\n                      onPressed: () {},\n                      lines: const <String>[\n                        'user.work@email.com',\n                        'Work',\n                      ],\n                    ),\n                  ],\n                ),\n                new _ContactCategory(\n                  icon: Icons.location_on,\n                  children: <Widget>[\n                    new _ContactItem(\n                      icon: Icons.map,\n                      tooltip: 'Open map',\n                      onPressed: () {},\n                      lines: const <String>[\n                        'Home Street',\n                        'San Francisco, CA',\n                        'Home',\n                      ],\n                    ),\n                    new _ContactItem(\n                      icon: Icons.map,\n                      tooltip: 'Open map',\n                      onPressed: () {},\n                      lines: const <String>[\n                        'Work Parkway',\n                        'Los Angeles, CA',\n                        'Work',\n                      ],\n                    ),\n                  ],\n                ),\n                new _ContactCategory(\n                  icon: Icons.today,\n                  children: <Widget>[\n                    new _ContactItem(\n                      lines: const <String>[\n                        'Birthday',\n                        'November 27th, 1992',\n                      ],\n                    ),\n                  ],\n                ),\n              ]),\n            ),\n          ],\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/widget/drawerWidget.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_demo/route/about.dart';\nimport 'package:flutter_demo/route/bottomNavigation.dart';\nimport 'package:flutter_demo/route/fullscreen.dart';\nimport 'package:flutter_demo/route/list.dart';\nimport 'package:flutter_demo/route/settings.dart';\nimport 'package:flutter_demo/route/sliverAppbar.dart';\n\nclass DrawerWidget extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return new Drawer(\n      child: new ListView(\n        padding: EdgeInsets.all(0.0),\n        children: <Widget>[\n//          new MyDrawerHeader(),\n          new UserAccountsDrawerHeader(\n            accountName: new Text('User Name'),\n            accountEmail: new Text('user.name@email.com'),\n            currentAccountPicture: new CircleAvatar(\n              backgroundColor: Colors.amber,\n              child: new FlutterLogo(size: 42.0),\n            ),\n          ),\n          new ListTile(\n            leading: const Icon(Icons.list),\n            title: const Text('List'),\n            onTap: () {\n              Navigator.pop(context); //  close drawer\n              Navigator.push(context, new MaterialPageRoute<void>(\n                builder: (BuildContext context) {\n                  return new ListPage();\n                },\n              ));\n            },\n          ),\n          new ListTile(\n            leading: const Icon(Icons.vertical_align_top),\n            title: const Text('Sliver Appbar'),\n            onTap: () {\n              Navigator.pop(context);\n              Navigator.push(context, new MaterialPageRoute<void>(\n                builder: (BuildContext context) {\n                  return new ContactsDemo();\n                },\n              ));\n            },\n          ),\n          new ListTile(\n            leading: const Icon(Icons.fullscreen),\n            title: const Text('Full Screen'),\n            onTap: () {\n              Navigator.pop(context);\n              Navigator.of(context).push(new MaterialPageRoute(\n                builder: (BuildContext context) {\n                  return new Fullscreen();\n                },\n              ));\n            },\n          ),\n          new ListTile(\n            leading: const Icon(Icons.more_horiz),\n            title: const Text('Bottom Navigation'),\n            onTap: () {\n              Navigator.pop(context);\n              Navigator.push(context, new MaterialPageRoute(\n                builder: (BuildContext context) {\n                  return new BottomNavigationDemo();\n                },\n              ));\n            },\n          ),\n          new ListTile(\n            leading: const Icon(Icons.settings),\n            title: const Text('Settings'),\n            onTap: () {\n              Navigator.pop(context);\n              Navigator.push(context, new MaterialPageRoute(\n                builder: (BuildContext context) {\n                  return new Settings();\n                },\n              ));\n            },\n          ),\n          new Divider(),\n          new ListTile(\n            leading: const Icon(Icons.info),\n            title: const Text('About'),\n            onTap: () {\n              Navigator.pop(context);\n              Navigator.push(context, new MaterialPageRoute(\n                builder: (BuildContext context) {\n                  return new About();\n                },\n              ));\n            },\n          ),\n        ],\n      ),\n    );\n  }\n}\n\nclass MyDrawerHeader extends StatefulWidget {\n  const MyDrawerHeader({Key key}) : super(key: key);\n\n  @override\n  _MyDrawerHeaderState createState() => new _MyDrawerHeaderState();\n}\n\nclass _MyDrawerHeaderState extends State<MyDrawerHeader> {\n//  bool _logoHasName = true;\n//  bool _logoHorizontal = true;\n//  MaterialColor _logoColor = Colors.blue;\n\n  @override\n  Widget build(BuildContext context) {\n    final double statusBarHeight = MediaQuery.of(context).padding.top;\n\n    return new Semantics(\n      label: 'Flutter',\n      child: new DrawerHeader(\n//        decoration: new FlutterLogoDecoration(\n//          margin: new EdgeInsets.fromLTRB(\n//              12.0, 12.0 + systemTopPadding, 12.0, 12.0),\n//          style: _logoHasName\n//              ? _logoHorizontal\n//                  ? FlutterLogoStyle.horizontal\n//                  : FlutterLogoStyle.stacked\n//              : FlutterLogoStyle.markOnly,\n//          lightColor: _logoColor.shade400,\n//          darkColor: _logoColor.shade900,\n//          textColor: const Color(0xFF616161),\n//        ),\n//        duration: const Duration(milliseconds: 500),\n//        child: new GestureDetector(\n//          onLongPress: () {\n//            setState(() {\n//              _logoHorizontal = !_logoHorizontal;\n//              if (!_logoHasName) _logoHasName = true;\n//            });\n//          },\n//          onTap: () {\n//            setState(() {\n//              _logoHasName = !_logoHasName;\n//            });\n//          },\n//          onDoubleTap: () {\n//            setState(() {\n//              final List<MaterialColor> options = <MaterialColor>[];\n//              if (_logoColor != Colors.blue)\n//                options.addAll(<MaterialColor>[Colors.blue, Colors.blue, Colors.blue, Colors.blue, Colors.blue, Colors.blue, Colors.blue]);\n//              if (_logoColor != Colors.amber)\n//                options.addAll(<MaterialColor>[Colors.amber, Colors.amber, Colors.amber]);\n//              if (_logoColor != Colors.red)\n//                options.addAll(<MaterialColor>[Colors.red, Colors.red, Colors.red]);\n//              if (_logoColor != Colors.indigo)\n//                options.addAll(<MaterialColor>[Colors.indigo, Colors.indigo, Colors.indigo]);\n//              if (_logoColor != Colors.pink)\n//                options.addAll(<MaterialColor>[Colors.pink]);\n//              if (_logoColor != Colors.purple)\n//                options.addAll(<MaterialColor>[Colors.purple]);\n//              if (_logoColor != Colors.cyan)\n//                options.addAll(<MaterialColor>[Colors.cyan]);\n//              _logoColor = options[new math.Random().nextInt(options.length)];\n//            });\n//          }\n//        ),\n\n        padding: const EdgeInsets.all(0.0),\n        child: new Container(\n          color: Color(0x33000000),\n          padding: const EdgeInsets.all(16.0),\n          child: new Column(\n            mainAxisAlignment: MainAxisAlignment.spaceEvenly,\n            crossAxisAlignment: CrossAxisAlignment.start,\n            children: <Widget>[\n              new FlutterLogo(\n                size: 64.0,\n              ),\n              new Text(\n                'To Start Login',\n                style: new TextStyle(color: Colors.white),\n              )\n            ],\n          ),\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "lib/widget/tabWidget.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'drawerWidget.dart';\n\nclass TabbedScaffold extends StatelessWidget {\n  TabbedScaffold({this.title, this.tabs, this.actions, this.widgets});\n\n  final String title;\n  final List<String> tabs;\n  final List<Widget> actions;\n  final List<Widget> widgets;\n\n  @override\n  Widget build(BuildContext context) {\n    return new DefaultTabController(\n      length: widgets.length,\n      child: new Scaffold(\n        appBar: new AppBar(\n          title: new Text(title),\n          actions: (actions ?? null),\n          bottom: new TabBar(\n            isScrollable: false,\n            tabs: tabs.map((String s) => new Tab(text: s)).toList(),\n          ),\n        ),\n        drawer: new DrawerWidget(),\n        body: new TabBarView(\n          children: widgets.map((Widget widget) {\n            return new SafeArea(\n              top: false,\n              bottom: false,\n              child: new Padding(\n                padding: const EdgeInsets.all(8.0),\n                child: widget,\n              ),\n            );\n          }).toList(),\n        ),\n        floatingActionButton: new FloatingActionButton(\n          onPressed: () {\n            Scaffold\n                .of(context)\n                .showSnackBar(new SnackBar(content: new Text('Show Snackbar')));\n          },\n          child: new Icon(Icons.add, color: Colors.white),\n        ),\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "pubspec.yaml",
    "content": "name: flutter_demo\ndescription: A new Flutter application.\n\ndependencies:\n  flutter:\n    sdk: flutter\n\n  # The following adds the Cupertino Icons font to your application.\n  # Use with the CupertinoIcons class for iOS style icons.\n  cupertino_icons: 0.1.0\n  url_launcher: 3.0.0\n\ndev_dependencies:\n  flutter_test:\n    sdk: flutter\n\n\n# For information on the generic Dart part of this file, see the\n# following page: https://www.dartlang.org/tools/pub/pubspec\n\n# The following section is specific to Flutter.\nflutter:\n\n  # The following line ensures that the Material Icons font is\n  # included with your application, so that you can use the icons in\n  # the material Icons class.\n  uses-material-design: true\n\n  # To add assets to your application, add an assets section, like this:\n  assets:\n    - res/images/material_design_2.jpg\n    - res/images/material_design_3.png\n    - res/images/material_design_4.jpg\n    - res/gif/material_design_flutter_1.gif\n\n  # An image asset can refer to one or more resolution-specific \"variants\", see\n  # https://flutter.io/assets-and-images/#resolution-aware.\n\n  # For details regarding adding assets from package dependencies, see\n  # https://flutter.io/assets-and-images/#from-packages\n\n  # To add custom fonts to your application, add a fonts section here,\n  # in this \"flutter\" section. Each entry in this list should have a\n  # \"family\" key with the font family name, and a \"fonts\" key with a\n  # list giving the asset and other descriptors for the font. For\n  # example:\n  # fonts:\n  #   - family: Schyler\n  #     fonts:\n  #       - asset: fonts/Schyler-Regular.ttf\n  #       - asset: fonts/Schyler-Italic.ttf\n  #         style: italic\n  #   - family: Trajan Pro\n  #     fonts:\n  #       - asset: fonts/TrajanPro.ttf\n  #       - asset: fonts/TrajanPro_Bold.ttf\n  #         weight: 700\n  #\n  # For details regarding fonts from package dependencies, \n  # see https://flutter.io/custom-fonts/#from-packages\n"
  },
  {
    "path": "test/widget_test.dart",
    "content": "// This is a basic Flutter widget test.\n// To perform an interaction with a widget in your test, use the WidgetTester utility that Flutter\n// provides. For example, you can send tap and scroll gestures. You can also use WidgetTester to\n// find child widgets in the widget tree, read text, and verify that the values of widget properties\n// are correct.\n\nimport 'package:flutter/material.dart';\nimport 'package:flutter_test/flutter_test.dart';\n\nimport 'package:flutter_demo/main.dart';\n\nvoid main() {\n  testWidgets('Counter increments smoke test', (WidgetTester tester) async {\n    // Build our app and trigger a frame.\n    await tester.pumpWidget(new MyApp());\n\n    // Verify that our counter starts at 0.\n    expect(find.text('0'), findsOneWidget);\n    expect(find.text('1'), findsNothing);\n\n    // Tap the '+' icon and trigger a frame.\n    await tester.tap(find.byIcon(Icons.add));\n    await tester.pump();\n\n    // Verify that our counter has incremented.\n    expect(find.text('0'), findsNothing);\n    expect(find.text('1'), findsOneWidget);\n  });\n}\n"
  }
]