Full Code of Eajy/flutter_demo for AI

master 3f421bc42261 cached
51 files
116.9 KB
30.2k tokens
81 symbols
1 requests
Download .txt
Repository: Eajy/flutter_demo
Branch: master
Commit: 3f421bc42261
Files: 51
Total size: 116.9 KB

Directory structure:
gitextract_cc8j8zb2/

├── .gitignore
├── .metadata
├── README.md
├── android/
│   ├── .gitignore
│   ├── app/
│   │   ├── build.gradle
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── eajy/
│   │           │           └── flutterdemo/
│   │           │               └── MainActivity.java
│   │           └── res/
│   │               ├── drawable/
│   │               │   └── launch_background.xml
│   │               └── values/
│   │                   └── styles.xml
│   ├── build.gradle
│   ├── gradle/
│   │   └── wrapper/
│   │       ├── gradle-wrapper.jar
│   │       └── gradle-wrapper.properties
│   ├── gradle.properties
│   ├── gradlew
│   ├── gradlew.bat
│   └── settings.gradle
├── flutter_demo.iml
├── flutter_demo_android.iml
├── ios/
│   ├── .gitignore
│   ├── Flutter/
│   │   ├── AppFrameworkInfo.plist
│   │   ├── Debug.xcconfig
│   │   └── Release.xcconfig
│   ├── Podfile
│   ├── Runner/
│   │   ├── AppDelegate.h
│   │   ├── AppDelegate.m
│   │   ├── Assets.xcassets/
│   │   │   ├── AppIcon.appiconset/
│   │   │   │   └── Contents.json
│   │   │   └── LaunchImage.imageset/
│   │   │       ├── Contents.json
│   │   │       └── README.md
│   │   ├── Base.lproj/
│   │   │   ├── LaunchScreen.storyboard
│   │   │   └── Main.storyboard
│   │   ├── Info.plist
│   │   └── main.m
│   ├── Runner.xcodeproj/
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace/
│   │   │   └── contents.xcworkspacedata
│   │   └── xcshareddata/
│   │       └── xcschemes/
│   │           └── Runner.xcscheme
│   └── Runner.xcworkspace/
│       └── contents.xcworkspacedata
├── lib/
│   ├── main.dart
│   ├── route/
│   │   ├── about.dart
│   │   ├── bottomNavigation.dart
│   │   ├── fullscreen.dart
│   │   ├── home.dart
│   │   ├── homeCards.dart
│   │   ├── homeDialogs.dart
│   │   ├── homeWidgets.dart
│   │   ├── list.dart
│   │   ├── settings.dart
│   │   └── sliverAppbar.dart
│   └── widget/
│       ├── drawerWidget.dart
│       └── tabWidget.dart
├── pubspec.yaml
└── test/
    └── widget_test.dart

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

================================================
FILE: .gitignore
================================================
.DS_Store
.atom/
.dart_tool/
.idea
.vscode/
.packages
.pub/
build/
ios/.generated/
packages
.flutter-plugins


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

version:
  revision: b397406561f5e7a9c94e28f58d9e49fca0dd58b7
  channel: beta


================================================
FILE: README.md
================================================
**This is a demo app designed with Material Design.
It's created by using [Flutter](https://flutter.io/).**  

#### Google Play:  
https://play.google.com/store/apps/details?id=com.eajy.flutterdemo  
  
![image](https://github.com/Eajy/flutter_demo/blob/master/android/pictures/1.png)

![image](https://github.com/Eajy/flutter_demo/blob/master/android/pictures/2.png)

![image](https://github.com/Eajy/flutter_demo/blob/master/android/pictures/3.png)
  
---  

#### Open Source Licenses:  
    Copyright 2018 Eajy  
      
    Licensed under the Apache License, Version 2.0.
    you may not use this file except in compliance with the License.
    You may obtain a copy of the License at
    
       http://www.apache.org/licenses/LICENSE-2.0
    
    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.

[_**- Designed by Eajy in China.**_](https://sites.google.com/view/eajy)

================================================
FILE: android/.gitignore
================================================
*.iml
*.class
.gradle
/local.properties
/key.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
GeneratedPluginRegistrant.java


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

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

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

def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

android {
    compileSdkVersion 28

    lintOptions {
        disable 'InvalidPackage'
    }

    defaultConfig {
        applicationId "com.eajy.flutterdemo"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 3
        versionName "1.2"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

    signingConfigs {
        release {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile file(keystoreProperties['storeFile'])
            storePassword keystoreProperties['storePassword']
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
}

flutter {
    source '../..'
}

dependencies {
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}


================================================
FILE: android/app/src/main/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.eajy.flutterdemo">

    <!-- The INTERNET permission is required for development. Specifically,
         flutter needs it to communicate with the running application
         to allow setting breakpoints, to provide hot reload, etc.
    -->
    <uses-permission android:name="android.permission.INTERNET"/>

    <!-- io.flutter.app.FlutterApplication is an android.app.Application that
         calls FlutterMain.startInitialization(this); in its onCreate method.
         In most cases you can leave this as-is, but you if you want to provide
         additional functionality it is fine to subclass or reimplement
         FlutterApplication and put your custom class here. -->
    <application
        android:name="io.flutter.app.FlutterApplication"
        android:label="Flutter Demo"
        android:icon="@mipmap/ic_launcher">
        <activity
            android:name=".MainActivity"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
            <!-- This keeps the window background of the activity showing
                 until Flutter renders its first frame. It can be removed if
                 there is no splash screen (such as the default splash screen
                 defined in @style/LaunchTheme). -->
            <meta-data
                android:name="io.flutter.app.android.SplashScreenUntilFirstFrame"
                android:value="true" />
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
</manifest>


================================================
FILE: android/app/src/main/java/com/eajy/flutterdemo/MainActivity.java
================================================
package com.eajy.flutterdemo;

import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.widget.Toast;

import io.flutter.app.FlutterActivity;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugins.GeneratedPluginRegistrant;

public class MainActivity extends FlutterActivity {

    private static final String CHANNEL = "com.eajy.flutterdemo/android";

    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";
    private static final String EMAIL_ADDRESS = "mailto:eajy.zhangxiao@gmail.com";
    private static final String EMAIL_SUBJECT = "Feedback:FlutterDemo";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        GeneratedPluginRegistrant.registerWith(this);

        new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler(
                new MethodChannel.MethodCallHandler() {
                    @Override
                    public void onMethodCall(MethodCall call, MethodChannel.Result result) {
                        switch (call.method) {
                            case "share":
                                share();
                                result.success(null);
                                break;
                            case "getVersionName":
                                result.success(getVersionName());
                                break;
                            case "sendEmail":
                                sendEmail();
                                result.success(null);
                                break;
                            default:
                                result.notImplemented();
                                break;
                        }
                    }
                });
    }

    private void share() {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_SEND);
        intent.putExtra(Intent.EXTRA_TEXT, SHARE_CONTENT);
        intent.setType("text/plain");
        startActivity(Intent.createChooser(intent, "Share with"));
    }

    private String getVersionName() {
        try {
            PackageManager manager = getPackageManager();
            PackageInfo info = manager.getPackageInfo(getPackageName(), 0);
            String version = info.versionName;
            return "Version: " + version;
        } catch (Exception e) {
            e.printStackTrace();
            return "Version: 1.0";
        }
    }

    private void sendEmail() {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_SENDTO);
        intent.setData(Uri.parse(EMAIL_ADDRESS));
        intent.putExtra(Intent.EXTRA_SUBJECT, EMAIL_SUBJECT);
        try {
            startActivity(intent);
        } catch (Exception e) {
            Toast.makeText(this, "Not found Email app.", Toast.LENGTH_SHORT).show();
        }
    }

}


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

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


================================================
FILE: android/app/src/main/res/values/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
        <!-- Show a splash screen on the activity. Automatically removed when
             Flutter draws its first frame -->
        <item name="android:windowBackground">@drawable/launch_background</item>
    </style>
</resources>


================================================
FILE: android/build.gradle
================================================
buildscript {
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.1'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

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

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


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


================================================
FILE: android/gradle.properties
================================================
org.gradle.jvmargs=-Xmx1536M


================================================
FILE: android/gradlew
================================================
#!/usr/bin/env bash

##############################################################################
##
##  Gradle start up script for UN*X
##
##############################################################################

# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""

APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"

warn ( ) {
    echo "$*"
}

die ( ) {
    echo
    echo "$*"
    echo
    exit 1
}

# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
  CYGWIN* )
    cygwin=true
    ;;
  Darwin* )
    darwin=true
    ;;
  MINGW* )
    msys=true
    ;;
esac

# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
    ls=`ls -ld "$PRG"`
    link=`expr "$ls" : '.*-> \(.*\)$'`
    if expr "$link" : '/.*' > /dev/null; then
        PRG="$link"
    else
        PRG=`dirname "$PRG"`"/$link"
    fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null

CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar

# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
        # IBM's JDK on AIX uses strange locations for the executables
        JAVACMD="$JAVA_HOME/jre/sh/java"
    else
        JAVACMD="$JAVA_HOME/bin/java"
    fi
    if [ ! -x "$JAVACMD" ] ; then
        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
    fi
else
    JAVACMD="java"
    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi

# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
    MAX_FD_LIMIT=`ulimit -H -n`
    if [ $? -eq 0 ] ; then
        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
            MAX_FD="$MAX_FD_LIMIT"
        fi
        ulimit -n $MAX_FD
        if [ $? -ne 0 ] ; then
            warn "Could not set maximum file descriptor limit: $MAX_FD"
        fi
    else
        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
    fi
fi

# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi

# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
    JAVACMD=`cygpath --unix "$JAVACMD"`

    # We build the pattern for arguments to be converted via cygpath
    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
    SEP=""
    for dir in $ROOTDIRSRAW ; do
        ROOTDIRS="$ROOTDIRS$SEP$dir"
        SEP="|"
    done
    OURCYGPATTERN="(^($ROOTDIRS))"
    # Add a user-defined pattern to the cygpath arguments
    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
    fi
    # Now convert the arguments - kludge to limit ourselves to /bin/sh
    i=0
    for arg in "$@" ; do
        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option

        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
        else
            eval `echo args$i`="\"$arg\""
        fi
        i=$((i+1))
    done
    case $i in
        (0) set -- ;;
        (1) set -- "$args0" ;;
        (2) set -- "$args0" "$args1" ;;
        (3) set -- "$args0" "$args1" "$args2" ;;
        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
    esac
fi

# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
    JVM_OPTS=("$@")
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"

exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"


================================================
FILE: android/gradlew.bat
================================================
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem  Gradle startup script for Windows
@rem
@rem ##########################################################################

@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal

@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=

set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome

set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init

echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

goto fail

:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto init

echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

goto fail

:init
@rem Get command-line arguments, handling Windowz variants

if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args

:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2

:win9xME_args_slurp
if "x%~1" == "x" goto execute

set CMD_LINE_ARGS=%*
goto execute

:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$

:execute
@rem Setup the command line

set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar

@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%

:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd

:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1

:mainEnd
if "%OS%"=="Windows_NT" endlocal

:omega


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

def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()

def plugins = new Properties()
def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
if (pluginsFile.exists()) {
    pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
}

plugins.each { name, path ->
    def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
    include ":$name"
    project(":$name").projectDir = pluginDirectory
}


================================================
FILE: flutter_demo.iml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
  <component name="NewModuleRootManager" inherit-compiler-output="true">
    <exclude-output />
    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/lib" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
      <excludeFolder url="file://$MODULE_DIR$/.dart_tool" />
      <excludeFolder url="file://$MODULE_DIR$/.idea" />
      <excludeFolder url="file://$MODULE_DIR$/.pub" />
      <excludeFolder url="file://$MODULE_DIR$/build" />
      <excludeFolder url="file://$MODULE_DIR$/ios/.symlinks/plugins/url_launcher/.dart_tool" />
      <excludeFolder url="file://$MODULE_DIR$/ios/.symlinks/plugins/url_launcher/.pub" />
      <excludeFolder url="file://$MODULE_DIR$/ios/.symlinks/plugins/url_launcher/build" />
      <excludeFolder url="file://$MODULE_DIR$/ios/.symlinks/plugins/url_launcher/example/.dart_tool" />
      <excludeFolder url="file://$MODULE_DIR$/ios/.symlinks/plugins/url_launcher/example/.pub" />
      <excludeFolder url="file://$MODULE_DIR$/ios/.symlinks/plugins/url_launcher/example/build" />
    </content>
    <orderEntry type="sourceFolder" forTests="false" />
    <orderEntry type="library" name="Dart SDK" level="project" />
    <orderEntry type="library" name="Flutter Plugins" level="project" />
    <orderEntry type="library" name="Dart Packages" level="project" />
  </component>
</module>

================================================
FILE: flutter_demo_android.iml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
  <component name="FacetManager">
    <facet type="android" name="Android">
      <configuration>
        <option name="ALLOW_USER_CONFIGURATION" value="false" />
        <option name="GEN_FOLDER_RELATIVE_PATH_APT" value="/android/gen" />
        <option name="GEN_FOLDER_RELATIVE_PATH_AIDL" value="/android/gen" />
        <option name="MANIFEST_FILE_RELATIVE_PATH" value="/android/AndroidManifest.xml" />
        <option name="RES_FOLDER_RELATIVE_PATH" value="/android/res" />
        <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/android/assets" />
        <option name="LIBS_FOLDER_RELATIVE_PATH" value="/android/libs" />
        <option name="PROGUARD_LOGS_FOLDER_RELATIVE_PATH" value="/android/proguard_logs" />
      </configuration>
    </facet>
  </component>
  <component name="NewModuleRootManager" inherit-compiler-output="true">
    <exclude-output />
    <content url="file://$MODULE_DIR$/android">
      <sourceFolder url="file://$MODULE_DIR$/android/app/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/android/gen" isTestSource="false" generated="true" />
    </content>
    <orderEntry type="jdk" jdkName="Android API 25 Platform" jdkType="Android SDK" />
    <orderEntry type="sourceFolder" forTests="false" />
    <orderEntry type="library" name="Flutter for Android" level="project" />
  </component>
</module>

================================================
FILE: ios/.gitignore
================================================
.idea/
.vagrant/
.sconsign.dblite
.svn/

.DS_Store
*.swp
profile

DerivedData/
build/
GeneratedPluginRegistrant.h
GeneratedPluginRegistrant.m

*.pbxuser
*.mode1v3
*.mode2v3
*.perspectivev3

!default.pbxuser
!default.mode1v3
!default.mode2v3
!default.perspectivev3

xcuserdata

*.moved-aside

*.pyc
*sync/
Icon?
.tags*

/Flutter/app.flx
/Flutter/app.zip
/Flutter/flutter_assets/
/Flutter/App.framework
/Flutter/Flutter.framework
/Flutter/Generated.xcconfig
/ServiceDefinitions.json

Pods/


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


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


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


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

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

def parse_KV_file(file, separator='=')
  file_abs_path = File.expand_path(file)
  if !File.exists? file_abs_path
    return [];
  end
  pods_ary = []
  skip_line_start_symbols = ["#", "/"]
  File.foreach(file_abs_path) { |line|
      next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ }
      plugin = line.split(pattern=separator)
      if plugin.length == 2
        podname = plugin[0].strip()
        path = plugin[1].strip()
        podpath = File.expand_path("#{path}", file_abs_path)
        pods_ary.push({:name => podname, :path => podpath});
      else
        puts "Invalid plugin specification: #{line}"
      end
  }
  return pods_ary
end

target 'Runner' do
  # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock
  # referring to absolute paths on developers' machines.
  system('rm -rf .symlinks')
  system('mkdir -p .symlinks/plugins')

  # Flutter Pods
  generated_xcode_build_settings = parse_KV_file('./Flutter/Generated.xcconfig')
  if generated_xcode_build_settings.empty?
    puts "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter packages get is executed first."
  end
  generated_xcode_build_settings.map { |p|
    if p[:name] == 'FLUTTER_FRAMEWORK_DIR'
      symlink = File.join('.symlinks', 'flutter')
      File.symlink(File.dirname(p[:path]), symlink)
      pod 'Flutter', :path => File.join(symlink, File.basename(p[:path]))
    end
  }

  # Plugin Pods
  plugin_pods = parse_KV_file('../.flutter-plugins')
  plugin_pods.map { |p|
    symlink = File.join('.symlinks', 'plugins', p[:name])
    File.symlink(p[:path], symlink)
    pod p[:name], :path => File.join(symlink, 'ios')
  }
end

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['ENABLE_BITCODE'] = 'NO'
    end
  end
end

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

@interface AppDelegate : FlutterAppDelegate

@end


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

@implementation AppDelegate

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

@end


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


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


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

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

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

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


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


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


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

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


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

/* Begin PBXBuildFile section */
		1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
		2D5378261FAA1A9400D5DBA9 /* flutter_assets in Resources */ = {isa = PBXBuildFile; fileRef = 2D5378251FAA1A9400D5DBA9 /* flutter_assets */; };
		3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
		3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; };
		3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
		9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; };
		9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
		9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; };
		9740EEB51CF90195004384FC /* Generated.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB31CF90195004384FC /* Generated.xcconfig */; };
		978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; };
		97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; };
		97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
		97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
		97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
		CB9D968E6FA25F9D39C29ABE /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DED9A1A75D33C5B076818C6E /* libPods-Runner.a */; };
/* End PBXBuildFile section */

/* Begin PBXCopyFilesBuildPhase section */
		9705A1C41CF9048500538489 /* Embed Frameworks */ = {
			isa = PBXCopyFilesBuildPhase;
			buildActionMask = 2147483647;
			dstPath = "";
			dstSubfolderSpec = 10;
			files = (
				3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */,
				9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */,
			);
			name = "Embed Frameworks";
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXCopyFilesBuildPhase section */

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

/* Begin PBXFrameworksBuildPhase section */
		97C146EB1CF9000F007C117D /* Frameworks */ = {
			isa = PBXFrameworksBuildPhase;
			buildActionMask = 2147483647;
			files = (
				9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */,
				3B80C3941E831B6300D905FE /* App.framework in Frameworks */,
				CB9D968E6FA25F9D39C29ABE /* libPods-Runner.a in Frameworks */,
			);
			runOnlyForDeploymentPostprocessing = 0;
		};
/* End PBXFrameworksBuildPhase section */

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

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

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

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

/* Begin PBXShellScriptBuildPhase section */
		3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			inputPaths = (
			);
			name = "Thin Binary";
			outputPaths = (
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin";
		};
		9740EEB61CF901F6004384FC /* Run Script */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			inputPaths = (
			);
			name = "Run Script";
			outputPaths = (
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
		};
		B3092390BC17D6B606432780 /* [CP] Check Pods Manifest.lock */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			inputPaths = (
				"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
				"${PODS_ROOT}/Manifest.lock",
			);
			name = "[CP] Check Pods Manifest.lock";
			outputPaths = (
				"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "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";
			showEnvVarsInLog = 0;
		};
		F14DAD73828DC392FCA11E30 /* [CP] Embed Pods Frameworks */ = {
			isa = PBXShellScriptBuildPhase;
			buildActionMask = 2147483647;
			files = (
			);
			inputPaths = (
				"${SRCROOT}/Pods/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh",
				"${PODS_ROOT}/../.symlinks/flutter/ios/Flutter.framework",
			);
			name = "[CP] Embed Pods Frameworks";
			outputPaths = (
				"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Flutter.framework",
			);
			runOnlyForDeploymentPostprocessing = 0;
			shellPath = /bin/sh;
			shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
			showEnvVarsInLog = 0;
		};
/* End PBXShellScriptBuildPhase section */

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

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

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

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


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


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


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


================================================
FILE: lib/main.dart
================================================
import 'package:flutter/material.dart';
import 'package:flutter_demo/route/home.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Flutter Demo',
      theme: new ThemeData(
        primarySwatch: Colors.blue,
        accentColor: Colors.amber,
      ),
      home: new HomePage(title: 'Flutter Demo Home Page'),
    );
  }
}


================================================
FILE: lib/route/about.dart
================================================
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'dart:async';
import 'package:url_launcher/url_launcher.dart';

class About extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return new AboutState();
  }
}

class AboutState extends State<About> {
  static const platform = const MethodChannel('com.eajy.flutterdemo/android');

  static const app_url =
      'https://play.google.com/store/apps/details?id=com.eajy.flutterdemo';
  static const github_url = 'https://github.com/Eajy/flutter_demo';
  static const me_url = 'https://sites.google.com/view/eajy';

  String _version = 'Version:';

  Future<Null> _getVersionName() async {
    try {
      _version = await platform.invokeMethod('getVersionName');
    } on PlatformException catch (e) {
      print(e);
      _version = 'Version: 1.0';
    }
    setState(() {});
  }

  Future<Null> _share() async {
    try {
      platform.invokeMethod('share');
    } on PlatformException catch (e) {
      print(e);
    }
  }

  Future<Null> _sendEmail() async {
    try {
      platform.invokeMethod('sendEmail');
    } on PlatformException catch (e) {
      print(e);
    }
  }

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

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text('About'),
      ),
      body: new ListView(
        children: <Widget>[
          new ListTile(
            leading: new FlutterLogo(),
            title: new Text('This app is developed by using Flutter.'),
            subtitle: new Text(_version),
          ),
          new Divider(),
          new ListTile(
            leading: new Icon(Icons.shop),
            title: new Text('Rate on Google Play'),
            onTap: () {
              launch(app_url);
            },
          ),
          new ListTile(
            leading: new Icon(Icons.code),
            title: new Text('Source code on GitHub'),
            onTap: () {
              launch(github_url);
            },
          ),
          new ListTile(
            leading: new Icon(Icons.email),
            title: new Text('Feedback by E-mail'),
            onTap: () {
              _sendEmail();
            },
          ),
          new ListTile(
            leading: new Icon(Icons.web),
            title: new Text('View my website'),
            onTap: () {
              launch(me_url);
            },
          ),
          new Divider(),
          new ListTile(
            leading: new Icon(
              Icons.info,
              color: Colors.transparent,
            ),
            title: new Text(
              'Designed by Eajy in China.',
              style: new TextStyle(color: Colors.black54, fontSize: 14.0),
            ),
          ),
        ],
      ),
      floatingActionButton: new FloatingActionButton(
        onPressed: () {
          _share();
        },
        child: new Icon(Icons.share, color: Colors.white),
      ),
    );
  }
}


================================================
FILE: lib/route/bottomNavigation.dart
================================================
import 'package:flutter/material.dart';

class NavigationIconView {
  NavigationIconView({
    Widget icon,
    String title,
    Color color,
    TickerProvider vsync,
  })  : _icon = icon,
        _color = color,
        _title = title,
        item = new BottomNavigationBarItem(
          icon: icon,
          title: new Text(title),
          backgroundColor: color,
        ),
        controller = new AnimationController(
          duration: kThemeAnimationDuration,
          vsync: vsync,
        ) {
    _animation = new CurvedAnimation(
      parent: controller,
      curve: const Interval(0.5, 1.0, curve: Curves.fastOutSlowIn),
    );
  }

  final Widget _icon;
  final Color _color;
  final String _title;
  final BottomNavigationBarItem item;
  final AnimationController controller;
  CurvedAnimation _animation;

  FadeTransition transition(
      BottomNavigationBarType type, BuildContext context) {
    Color iconColor;
    if (type == BottomNavigationBarType.shifting) {
      iconColor = _color;
    } else {
      final ThemeData themeData = Theme.of(context);
      iconColor = themeData.brightness == Brightness.light
          ? themeData.primaryColor
          : themeData.accentColor;
    }

    return new FadeTransition(
      opacity: _animation,
      child: new SlideTransition(
        position: new Tween<Offset>(
          begin: const Offset(0.0, 0.02), // Slightly down.
          end: Offset.zero,
        ).animate(_animation),
        child: new IconTheme(
          data: new IconThemeData(
            color: iconColor,
            size: 120.0,
          ),
          child: new Semantics(
            label: 'Placeholder for $_title tab',
            child: _icon,
          ),
        ),
      ),
    );
  }
}

class CustomIcon extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final IconThemeData iconTheme = IconTheme.of(context);
    return new Container(
      margin: const EdgeInsets.all(4.0),
      width: iconTheme.size - 8.0,
      height: iconTheme.size - 8.0,
      color: iconTheme.color,
    );
  }
}

class BottomNavigationDemo extends StatefulWidget {
  @override
  _BottomNavigationDemoState createState() => new _BottomNavigationDemoState();
}

class _BottomNavigationDemoState extends State<BottomNavigationDemo>
    with TickerProviderStateMixin {
  int _currentIndex = 0;
  BottomNavigationBarType _type = BottomNavigationBarType.fixed;
  List<NavigationIconView> _navigationViews;

  @override
  void initState() {
    super.initState();
    _navigationViews = <NavigationIconView>[
      new NavigationIconView(
        icon: const Icon(Icons.dashboard),
        title: 'Dashborad',
        color: Colors.blue,
        vsync: this,
      ),
      new NavigationIconView(
        icon: const Icon(Icons.image),
        title: 'Image',
        color: Colors.teal,
        vsync: this,
      ),
      new NavigationIconView(
        icon: const Icon(Icons.music_note),
        title: 'Music',
        color: Colors.orange,
        vsync: this,
      ),
      new NavigationIconView(
        icon: const Icon(Icons.movie),
        title: 'Movie',
        color: Colors.red,
        vsync: this,
      )
    ];

    for (NavigationIconView view in _navigationViews)
      view.controller.addListener(_rebuild);

    _navigationViews[_currentIndex].controller.value = 1.0;
  }

  @override
  void dispose() {
    for (NavigationIconView view in _navigationViews) view.controller.dispose();
    super.dispose();
  }

  void _rebuild() {
    setState(() {
      // Rebuild in order to animate views.
    });
  }

  Widget _buildTransitionsStack() {
    final List<FadeTransition> transitions = <FadeTransition>[];

    for (NavigationIconView view in _navigationViews)
      transitions.add(view.transition(_type, context));

    // We want to have the newly animating (fading in) views on top.
    transitions.sort((FadeTransition a, FadeTransition b) {
      final Animation<double> aAnimation = a.opacity;
      final Animation<double> bAnimation = b.opacity;
      final double aValue = aAnimation.value;
      final double bValue = bAnimation.value;
      return aValue.compareTo(bValue);
    });

    return new Stack(children: transitions);
  }

  @override
  Widget build(BuildContext context) {
    final BottomNavigationBar botNavBar = new BottomNavigationBar(
      items: _navigationViews
          .map((NavigationIconView navigationView) => navigationView.item)
          .toList(),
      currentIndex: _currentIndex,
      type: _type,
      onTap: (int index) {
        setState(() {
          _navigationViews[_currentIndex].controller.reverse();
          _currentIndex = index;
          _navigationViews[_currentIndex].controller.forward();
        });
      },
    );

    return new Scaffold(
      appBar: new AppBar(
        title: const Text('Bottom navigation'),
        actions: <Widget>[
          new PopupMenuButton<BottomNavigationBarType>(
            onSelected: (BottomNavigationBarType value) {
              setState(() {
                _type = value;
              });
            },
            itemBuilder: (BuildContext context) =>
                <PopupMenuItem<BottomNavigationBarType>>[
                  const PopupMenuItem<BottomNavigationBarType>(
                    value: BottomNavigationBarType.fixed,
                    child: const Text('Fixed'),
                  ),
                  const PopupMenuItem<BottomNavigationBarType>(
                    value: BottomNavigationBarType.shifting,
                    child: const Text('Shifting'),
                  )
                ],
          )
        ],
      ),
      body: new Center(child: _buildTransitionsStack()),
      bottomNavigationBar: botNavBar,
    );
  }
}


================================================
FILE: lib/route/fullscreen.dart
================================================
import 'package:flutter/material.dart';

class Fullscreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: new Center(
        child: new Stack(
          children: <Widget>[
            new Image.asset(
              'res/gif/material_design_flutter_1.gif',
              fit: BoxFit.fill,
            ),
          ],
        ),
      ),
    );
  }
}


================================================
FILE: lib/route/home.dart
================================================
import 'package:flutter/material.dart';
import 'package:flutter_demo/widget/tabWidget.dart';
import 'package:flutter_demo/route/homeCards.dart';
import 'package:flutter_demo/route/homeDialogs.dart';
import 'homeWidgets.dart';

class HomePage extends StatefulWidget {
  HomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  HomePageState createState() => new HomePageState();
}

class HomePageState extends State<HomePage> {
  @override
  Widget build(BuildContext context) {
    final List<String> tabs = <String>['Cards', 'Dialogs', 'Widgets'];

    final List<Widget> widgets = <Widget>[
      new HomeCards(),
      new HomeDialogs(),
      new HomeWidgets(),
    ];

    const List<Menu> menus = const <Menu>[
      const Menu(title: 'item 1', icon: Icons.add),
      const Menu(title: 'item 2', icon: Icons.add),
      const Menu(title: 'item 3', icon: Icons.add),
    ];

    return new TabbedScaffold(
      title: 'Flutter Demo',
      tabs: tabs,
      actions: <Widget>[
        new IconButton(
          icon: const Icon(
            Icons.search,
            color: Colors.white,
          ),
          tooltip: 'more',
          onPressed: () {},
        ),
        new PopupMenuButton<Menu>(
          itemBuilder: (BuildContext context) {
            return menus.skip(0).map((Menu menu) {
              return new PopupMenuItem<Menu>(
                value: menu,
                child: new Text(menu.title),
              );
            }).toList();
          },
        ),
      ],
      widgets: widgets,
    );
  }
}

class Menu {
  const Menu({this.title, this.icon});

  final String title;
  final IconData icon;
}


================================================
FILE: lib/route/homeCards.dart
================================================
import 'package:flutter/material.dart';

class HomeCards extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new SingleChildScrollView(
      child: new Column(
        children: <Widget>[
          new Card(
            color: Color(0xFFFFF59D),
            child: new Column(
              mainAxisSize: MainAxisSize.min,
              children: <Widget>[
                const ListTile(
                  leading: const Icon(Icons.image),
                  title: const Text('This Is A Title'),
                  subtitle: const Text('This is a subtitle in a list tile.'),
                ),
                new ButtonTheme.bar(
                  // make buttons use the appropriate styles for cards
                  child: new ButtonBar(
                    children: <Widget>[
                      new FlatButton(
                        child: const Text('Button1'),
                        onPressed: () {},
                      ),
                      new FlatButton(
                        child: const Text('Button2'),
                        onPressed: () {},
                      ),
                    ],
                  ),
                ),
              ],
            ),
          ),
          new Card(
            child: new Column(
              mainAxisSize: MainAxisSize.min,
              children: <Widget>[
                new Image.asset(
                  'res/images/material_design_2.jpg',
//                  height: 192.0,
                  fit: BoxFit.fill,
                ),
                const ListTile(
                  title: const Text('This Is A Title'),
                  subtitle: const Text('This is a subtitle in a card.'),
                ),
                new ButtonTheme.bar(
                  // make buttons use the appropriate styles for cards
                  child: new ButtonBar(
                    alignment: MainAxisAlignment.start,
                    children: <Widget>[
                      new FlatButton(
                        child: const Text('Button1'),
                        onPressed: () {},
                      ),
                      new FlatButton(
                        child: const Text('Button2'),
                        onPressed: () {},
                      ),
                    ],
                  ),
                ),
              ],
            ),
          ),
          new Card(
            child: new Column(
              mainAxisSize: MainAxisSize.min,
              children: <Widget>[
                new Stack(
                  alignment: AlignmentDirectional.bottomStart,
                  children: <Widget>[
                    new Image.asset(
                      'res/images/material_design_4.jpg',
//                      height: 192.0,
                      fit: BoxFit.fill,
                    ),
                    new ListTile(
                      title: new Text(
                        'This Is A Title',
                        style:
                            new TextStyle(color: Colors.white, fontSize: 24.0),
                      ),
                    ),
                  ],
                ),
                new ButtonTheme.bar(
                  child: new ButtonBar(
                    alignment: MainAxisAlignment.end,
                    children: <Widget>[
                      new IconButton(
                        icon: new Icon(Icons.favorite, color: Colors.grey),
                        onPressed: () {},
                      ),
                      new IconButton(
                        icon: new Icon(Icons.bookmark, color: Colors.grey),
                        onPressed: () {},
                      ),
                      new IconButton(
                        icon: new Icon(Icons.share, color: Colors.grey),
                        onPressed: () {},
                      ),
                    ],
                  ),
                )
              ],
            ),
          ),
        ].map((Widget widget) {
          // Add a little space between the widgets
          return new Container(
            padding: const EdgeInsets.symmetric(vertical: 4.0),
            child: widget,
          );
        }).toList(),
      ),
    );
  }
}


================================================
FILE: lib/route/homeDialogs.dart
================================================
import 'package:flutter/material.dart';

class HomeDialogs extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return new HomeDialogsState();
  }
}

class HomeDialogsState extends State<HomeDialogs> {
  TimeOfDay _selectedTime;

  @override
  void initState() {
    super.initState();
    final DateTime now = new DateTime.now();
    _selectedTime = new TimeOfDay(hour: now.hour, minute: now.minute);
  }

  @override
  Widget build(BuildContext context) {
    final ThemeData theme = Theme.of(context);
    final TextStyle dialogTextStyle =
        theme.textTheme.subhead.copyWith(color: theme.textTheme.caption.color);

    return new ListView(
      padding: const EdgeInsets.symmetric(vertical: 16.0, horizontal: 24.0),
      children: <Widget>[
        new RaisedButton(
            padding: EdgeInsets.symmetric(vertical: 14.0),
            child: new Text(
              'Alert Dialog',
              style: new TextStyle(color: Colors.white),
            ),
            color: Colors.red,
            onPressed: () {
              showDialog(
                context: context,
                child: new AlertDialog(
                  content: new Text('This is content', style: dialogTextStyle),
                  actions: <Widget>[
                    new FlatButton(
                      onPressed: () {
                        Navigator.pop(context, 'OK');
                      },
                      child: const Text('OK'),
                    )
                  ],
                ),
              ).then((onValue) {
                if (onValue != null) {
                  Scaffold.of(context).showSnackBar(
                      new SnackBar(content: new Text('$onValue')));
                }
              });
            }),
        new RaisedButton(
            padding: EdgeInsets.symmetric(vertical: 14.0),
            child: new Text(
              'Alert Dialog',
              style: new TextStyle(color: Colors.white),
            ),
            color: Colors.purple,
            onPressed: () {
              showDialog(
                context: context,
                child: new AlertDialog(
                  title: new Text('This Is Title'),
                  content: new Text('This is content', style: dialogTextStyle),
                  actions: <Widget>[
                    new FlatButton(
                        onPressed: () {
                          Navigator.pop(context, 'Cancel');
                        },
                        child: const Text('Cancel')),
                    new FlatButton(
                      onPressed: () {
                        Navigator.pop(context, 'OK');
                      },
                      child: const Text('OK'),
                    ),
                  ],
                ),
              ).then((onValue) {
                if (onValue != null) {
                  Scaffold.of(context).showSnackBar(
                      new SnackBar(content: new Text('$onValue')));
                }
              });
            }),
        new RaisedButton(
            padding: EdgeInsets.symmetric(vertical: 14.0),
            child: new Text(
              'Single Choice Dialog',
              style: new TextStyle(color: Colors.white),
            ),
            color: Colors.indigo,
            onPressed: () {
              showDialog(
                context: context,
                child: new SingleChoiceDialog(),
              ).then((onValue) {
                if (onValue != null) {
                  Scaffold.of(context).showSnackBar(
                      new SnackBar(content: new Text('$onValue')));
                }
              });
            }),
        new RaisedButton(
            padding: EdgeInsets.symmetric(vertical: 14.0),
            child: new Text(
              'Multi Choise Dialog',
              style: new TextStyle(color: Colors.white),
            ),
            color: Colors.blue,
            onPressed: () {
              showDialog(
                context: context,
                child: new MultiChoiceDialog(),
              ).then((onValue) {
                if (onValue != null) {
                  Scaffold.of(context).showSnackBar(
                      new SnackBar(content: new Text('$onValue')));
                }
              });
            }),
        new RaisedButton(
            padding: EdgeInsets.symmetric(vertical: 14.0),
            child: new Text(
              'Time Picker Dialog',
              style: new TextStyle(color: Colors.white),
            ),
            color: Colors.teal,
            onPressed: () {
              showTimePicker(
                context: context,
                initialTime: _selectedTime,
              ).then((TimeOfDay value) {
                if (value != null) {
                  _selectedTime = value;
                  Scaffold.of(context).showSnackBar(new SnackBar(
                      content: new Text('${value.format(context)}')));
                }
              });
            }),
        new RaisedButton(
            padding: EdgeInsets.symmetric(vertical: 14.0),
            child: new Text(
              'Date Picker Dialog',
              style: new TextStyle(color: Colors.white),
            ),
            color: Colors.green,
            onPressed: () {
              showDatePicker(
                context: context,
                initialDate: new DateTime.now(),
                firstDate: new DateTime(1970),
                lastDate: new DateTime(2500),
              ).then((DateTime value) {
                if (value != null) {
                  Scaffold.of(context).showSnackBar(
                      new SnackBar(content: new Text('${value}')));
                }
              });
            }),
        new RaisedButton(
            padding: EdgeInsets.symmetric(vertical: 14.0),
            child: new Text(
              'Show modal Bottom Sheet',
              style: new TextStyle(color: Colors.white),
            ),
            color: Colors.orange,
            onPressed: () {
              showModalBottomSheet<void>(
                  context: context,
                  builder: (BuildContext context) {
                    return new Container(
                        padding: EdgeInsets.only(top: 16.0),
                        decoration: const BoxDecoration(
                          border: const Border(
                              top: const BorderSide(color: Colors.black12)),
                        ),
                        child: new ListView(
                          shrinkWrap: true,
                          primary: false,
                          children: <Widget>[
                            new ListTile(
                              dense: true,
                              title: const Text('This is a modal bottom sheet'),
                            ),
                            new ListTile(
                              dense: true,
                              title: const Text('Click anywhete to dismiss'),
                            ),
                            new ButtonTheme.bar(
                              // make buttons use the appropriate styles for cards
                              child: new ButtonBar(
                                children: <Widget>[
                                  new FlatButton(
                                    child: const Text('OK'),
                                    onPressed: () {
                                      Navigator.pop(context);
                                    },
                                  ),
                                ],
                              ),
                            ),
                          ],
                        ));
                  });
            }),
        new RaisedButton(
            padding: EdgeInsets.symmetric(vertical: 14.0),
            child: new Text(
              'Show Bottom Sheet',
              style: new TextStyle(color: Colors.white),
            ),
            color: Colors.blueGrey,
            onPressed: () {
              showBottomSheet(
                  context: context,
                  builder: (BuildContext context) {
                    return new Container(
                        padding: EdgeInsets.only(top: 16.0),
                        decoration: const BoxDecoration(
                          border: const Border(
                              top: const BorderSide(color: Colors.black12)),
                        ),
                        child: new ListView(
                          shrinkWrap: true,
                          primary: false,
                          children: <Widget>[
                            new ListTile(
                              dense: true,
                              title: const Text('This is a bottom sheet'),
                            ),
                            new ListTile(
                              dense: true,
                              title: const Text('Click OK to dismiss'),
                            ),
                            new ButtonTheme.bar(
                              // make buttons use the appropriate styles for cards
                              child: new ButtonBar(
                                children: <Widget>[
                                  new FlatButton(
                                    child: const Text('OK'),
                                    onPressed: () {
                                      Navigator.pop(context);
                                    },
                                  ),
                                ],
                              ),
                            ),
                          ],
                        ));
                  });
            }),
      ].map((Widget widget) {
        return new Container(
          padding: const EdgeInsets.symmetric(vertical: 12.0),
          child: widget,
        );
      }).toList(),
    );
  }
}

int singleItemSelected = 0;
List<bool> checkboxSelected = <bool>[false, false, false, false];

class SingleChoiceDialog extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return new SingleChoiceDialogState();
  }
}

class SingleChoiceDialogState extends State<SingleChoiceDialog> {
  @override
  Widget build(BuildContext context) {
    return new SimpleDialog(
      contentPadding: EdgeInsets.fromLTRB(0.0, 12.0, 0.0, 0.0),
      title: new Text('This Is Title'),
      children: <Widget>[
        new Column(
          children: <Widget>[
            new RadioListTile<int>(
              title: const Text('item 0'),
              value: 0,
              groupValue: singleItemSelected,
              onChanged: (int value) {
                setState(() {
                  singleItemSelected = value;
                });
                Navigator.pop(context, value);
              },
            ),
            new RadioListTile<int>(
              title: const Text('item 1'),
              value: 1,
              groupValue: singleItemSelected,
              onChanged: (int value) {
                setState(() {
                  singleItemSelected = value;
                });
                Navigator.pop(context, value);
              },
            ),
            new RadioListTile<int>(
              title: const Text('item 2'),
              value: 2,
              groupValue: singleItemSelected,
              onChanged: (int value) {
                setState(() {
                  singleItemSelected = value;
                });
                Navigator.pop(context, value);
              },
            ),
            new RadioListTile<int>(
              title: const Text('item 3'),
              value: 3,
              groupValue: singleItemSelected,
              onChanged: (int value) {
                setState(() {
                  singleItemSelected = value;
                });
                Navigator.pop(context, value);
              },
            ),
          ],
        ),
        new ButtonTheme.bar(
          padding: EdgeInsets.symmetric(horizontal: 16.0),
          child: new ButtonBar(
            children: <Widget>[
              new FlatButton(
                  onPressed: () {
                    Navigator.pop(context, 'Cancel');
                  },
                  child: const Text('Cancel')),
            ],
          ),
        ),
      ],
    );
  }
}

class MultiChoiceDialog extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return new MultiChoiceDialogState();
  }
}

class MultiChoiceDialogState extends State<MultiChoiceDialog> {
  @override
  Widget build(BuildContext context) {
    return new SimpleDialog(
      contentPadding: EdgeInsets.fromLTRB(8.0, 12.0, 8.0, 0.0),
      title: new Text('This Is Title'),
      children: <Widget>[
        new Column(
          children: <Widget>[
            new CheckboxListTile(
              title: const Text('item 0'),
              value: checkboxSelected[0],
              onChanged: (bool value) {
                setState(() {
                  checkboxSelected[0] = value;
                });
              },
            ),
            new CheckboxListTile(
                title: const Text('item 1'),
                value: checkboxSelected[1],
                onChanged: (bool value) {
                  setState(() {
                    checkboxSelected[1] = value;
                  });
                }),
            new CheckboxListTile(
                title: const Text('item 2'),
                value: checkboxSelected[2],
                onChanged: (bool value) {
                  setState(() {
                    checkboxSelected[2] = value;
                  });
                }),
            new CheckboxListTile(
                title: const Text('item 3'),
                value: checkboxSelected[3],
                onChanged: (bool value) {
                  setState(() {
                    checkboxSelected[3] = value;
                  });
                }),
          ],
        ),
        new ButtonTheme.bar(
          child: new ButtonBar(
            children: <Widget>[
              new FlatButton(
                  onPressed: () {
                    Navigator.pop(context, 'OK');
                  },
                  child: const Text('OK')),
            ],
          ),
        ),
      ],
    );
  }
}


================================================
FILE: lib/route/homeWidgets.dart
================================================
import 'package:flutter/material.dart';
import 'dart:math' as math;

class HomeWidgets extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return new HomeWidgetsState();
  }
}

class HomeWidgetsState extends State<HomeWidgets> {
  double _sliderValue_1 = 0.2;
  double _sliderValue_2 = 20.0;

  @override
  Widget build(BuildContext context) {
    final ThemeData themeData = Theme.of(context);
    final TextStyle categoryStyle =
        themeData.textTheme.body2.copyWith(color: themeData.primaryColor);
    final TextStyle accentColorText =
        themeData.textTheme.body1.copyWith(color: Colors.black54);

    return new ListView(
      padding: const EdgeInsets.symmetric(horizontal: 16.0),
      children: <Widget>[
        new Text('TextField', style: categoryStyle),
        new TextField(),
        new Text('Chips', style: categoryStyle),
        new Row(
          children: <Widget>[
            new Chip(label: new Text('Chip', style: accentColorText)),
            new Chip(
              avatar: new Icon(Icons.account_circle, color: Colors.black54),
              label: new Text('Chip', style: accentColorText),
            ),
            new Chip(
              deleteIcon:
                  new Icon(Icons.cancel, size: 18.0, color: Colors.black54),
              label: new Text('Chip', style: accentColorText),
              onDeleted: () {},
            ),
          ].map((Widget widget) {
            return new Container(
              padding: const EdgeInsets.symmetric(horizontal: 4.0),
              child: widget,
            );
          }).toList(),
        ),
        new Text('ExpansionTile', style: categoryStyle),
        new ExpansionTile(
            title: const Text('Sublist'),
            backgroundColor: themeData.accentColor.withOpacity(0.025),
            children: const <Widget>[
              const ListTile(title: const Text('Item 1')),
              const ListTile(title: const Text('Item 2')),
              const ListTile(title: const Text('Item 3')),
            ]),
        new Text('Slider', style: categoryStyle),
        new Slider(
            value: _sliderValue_1,
            min: 0.0,
            max: 1.0,
            activeColor: themeData.accentColor,
            inactiveColor: Colors.black12,
            onChanged: (double value) {
              setState(() {
                _sliderValue_1 = value;
              });
            }),
        new Text('Slider with Divisions and Label', style: categoryStyle),
        new Slider(
            value: _sliderValue_2,
            min: 0.0,
            max: 100.0,
            activeColor: themeData.accentColor,
            inactiveColor: Colors.black12,
            divisions: 5,
            label: '${_sliderValue_2.round()}',
            onChanged: (double value) {
              setState(() {
                _sliderValue_2 = value;
              });
            }),
        new Text('LinearProgressIndicator', style: categoryStyle),
        new LinearProgressIndicator(
          backgroundColor: Colors.black12,
        ),
        new Text('CircularProgressIndicator', style: categoryStyle),
        new Stack(
          children: <Widget>[
            new CircularProgressIndicator(),
          ],
        ),
      ].map((Widget widget) {
        return new Container(
          padding: const EdgeInsets.symmetric(vertical: 16.0),
          child: widget,
        );
      }).toList(),
    );
  }
}


================================================
FILE: lib/route/list.dart
================================================
import 'dart:async';

import 'package:flutter/material.dart';

class ListPage extends StatefulWidget {
  ListPage({Key key}) : super(key: key);

  List<String> items = new List<String>.generate(30, (i) => "Item ${(i + 1)}");

  @override
  State<StatefulWidget> createState() {
    return new ListPageState(items: items);
  }
}

class ListPageState extends State<ListPage> {
  ListPageState({this.items});

  final List<String> items;

  final GlobalKey<ScaffoldState> _scaffoldKey = new GlobalKey<ScaffoldState>();
  final GlobalKey<RefreshIndicatorState> _refreshIndicatorKey =
      new GlobalKey<RefreshIndicatorState>();

  Future<Null> _handleRefresh() {
    final Completer<Null> completer = new Completer<Null>();
    new Timer(const Duration(seconds: 2), () {
      completer.complete(null);
    });
    return completer.future.then((_) {
      _scaffoldKey.currentState?.showSnackBar(
        new SnackBar(
          content: const Text('Refresh complete'),
          action: new SnackBarAction(
            label: 'RETRY',
            onPressed: () {
              _refreshIndicatorKey.currentState.show();
            },
          ),
        ),
      );
    });
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      key: _scaffoldKey,
      appBar: new AppBar(
        title: new Text('List'),
      ),
      body: new RefreshIndicator(
        color: Colors.amber,
        key: _refreshIndicatorKey,
        onRefresh: _handleRefresh,
        child: new ListView.builder(
          itemCount: items.length,
          itemBuilder: (context, index) {
            final item = items[index];

            return new Dismissible(
              key: new Key(item),
              onDismissed: (direction) {
                setState(() {
                  items.removeAt(index);
                  Scaffold.of(context).showSnackBar(
                        new SnackBar(content: new Text("$item dismissed")),
                      );
                });
              },
              background: new Container(
                color: Colors.red,
                child: const ListTile(
                    leading: const Icon(Icons.delete, color: Colors.white)),
              ),
              secondaryBackground: new Container(
                color: Colors.red,
                child: const ListTile(
                    trailing: const Icon(Icons.delete, color: Colors.white)),
              ),
              child: new ListTile(
                leading: new CircleAvatar(
                  backgroundColor: Colors.amber,
                  child:
                      new Icon(Icons.fiber_manual_record, color: Colors.white),
                ),
                title: new Text('$item'),
                subtitle: new Text('Pull to refresh. Swipe to dismiss.'),
                onTap: () {},
              ),
            );
          },
        ),
      ),
    );
  }
}


================================================
FILE: lib/route/settings.dart
================================================
import 'package:flutter/material.dart';

class Settings extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return new SettingsState();
  }
}

class SettingsState extends State<Settings> {
  bool switchValue = true;
  bool checkboxValue = true;

  @override
  Widget build(BuildContext context) {
    final ThemeData themeData = Theme.of(context);
    final TextStyle categoryStyle =
        themeData.textTheme.body2.copyWith(color: themeData.accentColor);

    final TextStyle dialogTextStyle = themeData.textTheme.subhead
        .copyWith(color: themeData.textTheme.caption.color);

    return new Scaffold(
      appBar: new AppBar(
        title: new Text('Settings'),
      ),
      body: new ListView(
        children: <Widget>[
          new ListTile(
            title: new Text(
              'Category 1',
              style: categoryStyle,
            ),
          ),
          new ListTile(
            title: new Text('Settings Item 1'),
            subtitle: new Text('This is a ListTile'),
            onTap: () {
              showDialog(
                context: context,
                child: new AlertDialog(
                  content: new Text('Settings item clicked.',
                      style: dialogTextStyle),
                  actions: <Widget>[
                    new FlatButton(
                      onPressed: () {
                        Navigator.pop(context, 'OK');
                      },
                      child: const Text('OK'),
                    )
                  ],
                ),
              );
            },
          ),
          new Divider(height: 1.0),
          new ListTile(
            title: new Text('Settings Item 2'),
            subtitle: new Text('This is a ListTile'),
            onTap: () {
              showDialog(
                context: context,
                child: new AlertDialog(
                  content: new Text('Settings item clicked.',
                      style: dialogTextStyle),
                  actions: <Widget>[
                    new FlatButton(
                      onPressed: () {
                        Navigator.pop(context, 'OK');
                      },
                      child: const Text('OK'),
                    )
                  ],
                ),
              );
            },
          ),
          new Divider(height: 1.0),
          new ListTile(
            title: new Text('Settings Item 3'),
            subtitle: new Text('This is a ListTile'),
            onTap: () {
              showDialog(
                context: context,
                child: new AlertDialog(
                  content: new Text('Settings item clicked.',
                      style: dialogTextStyle),
                  actions: <Widget>[
                    new FlatButton(
                      onPressed: () {
                        Navigator.pop(context, 'OK');
                      },
                      child: const Text('OK'),
                    )
                  ],
                ),
              );
            },
          ),
          new ListTile(
            title: new Text(
              'Category 2',
              style: categoryStyle,
            ),
          ),
          new CheckboxListTile(
            value: checkboxValue,
            onChanged: (bool value) {
              setState(() {
                checkboxValue = value;
              });
            },
            title: new Text('Checkbox Item'),
            subtitle: new Text('This is a CheckboxListTile'),
          ),
          new Divider(height: 1.0),
          new SwitchListTile(
            value: switchValue,
            onChanged: (bool value) {
              setState(() {
                switchValue = value;
              });
            },
            title: new Text('Switch Item'),
            subtitle: new Text('This is a SwitchListTile'),
          ),
        ],
      ),
    );
  }
}


================================================
FILE: lib/route/sliverAppbar.dart
================================================
import 'package:flutter/material.dart';

class _ContactCategory extends StatelessWidget {
  const _ContactCategory({Key key, this.icon, this.children}) : super(key: key);

  final IconData icon;
  final List<Widget> children;

  @override
  Widget build(BuildContext context) {
    final ThemeData themeData = Theme.of(context);
    return new Container(
      padding: const EdgeInsets.symmetric(vertical: 16.0),
      decoration: new BoxDecoration(
          border: new Border(
              bottom: new BorderSide(color: themeData.dividerColor))),
      child: new DefaultTextStyle(
        style: Theme.of(context).textTheme.subhead,
        child: new SafeArea(
          top: false,
          bottom: false,
          child: new Row(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              new Container(
                  padding: const EdgeInsets.symmetric(vertical: 24.0),
                  width: 72.0,
                  child: new Icon(icon, color: themeData.primaryColor)),
              new Expanded(child: new Column(children: children))
            ],
          ),
        ),
      ),
    );
  }
}

class _ContactItem extends StatelessWidget {
  _ContactItem({Key key, this.icon, this.lines, this.tooltip, this.onPressed})
      : assert(lines.length > 1),
        super(key: key);

  final IconData icon;
  final List<String> lines;
  final String tooltip;
  final VoidCallback onPressed;

  @override
  Widget build(BuildContext context) {
    final ThemeData themeData = Theme.of(context);
    final List<Widget> columnChildren = lines
        .sublist(0, lines.length - 1)
        .map((String line) => new Text(line))
        .toList();
    columnChildren
        .add(new Text(lines.last, style: themeData.textTheme.caption));

    final List<Widget> rowChildren = <Widget>[
      new Expanded(
          child: new Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: columnChildren))
    ];
    if (icon != null) {
      rowChildren.add(new SizedBox(
          width: 72.0,
          child: new IconButton(
              icon: new Icon(icon),
              color: themeData.primaryColor,
              onPressed: onPressed)));
    }
    return new MergeSemantics(
      child: new Padding(
          padding: const EdgeInsets.symmetric(vertical: 16.0),
          child: new Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: rowChildren)),
    );
  }
}

class ContactsDemo extends StatefulWidget {

  @override
  ContactsDemoState createState() => new ContactsDemoState();
}

enum AppBarBehavior { normal, pinned, floating, snapping }

class ContactsDemoState extends State<ContactsDemo> {
  static final GlobalKey<ScaffoldState> _scaffoldKey =
      new GlobalKey<ScaffoldState>();
  final double _appBarHeight = 220.0;

  AppBarBehavior _appBarBehavior = AppBarBehavior.pinned;

  @override
  Widget build(BuildContext context) {
    return new Theme(
      data: new ThemeData(
        brightness: Brightness.light,
        platform: Theme.of(context).platform,
      ),
      child: new Scaffold(
        key: _scaffoldKey,
        body: new CustomScrollView(
          slivers: <Widget>[
            new SliverAppBar(
              expandedHeight: _appBarHeight,
              pinned: _appBarBehavior == AppBarBehavior.pinned,
              floating: _appBarBehavior == AppBarBehavior.floating ||
                  _appBarBehavior == AppBarBehavior.snapping,
              snap: _appBarBehavior == AppBarBehavior.snapping,
              actions: <Widget>[
                new PopupMenuButton<AppBarBehavior>(
                  onSelected: (AppBarBehavior value) {
                    setState(() {
                      _appBarBehavior = value;
                    });
                  },
                  itemBuilder: (BuildContext context) =>
                      <PopupMenuItem<AppBarBehavior>>[
                        const PopupMenuItem<AppBarBehavior>(
                            value: AppBarBehavior.normal,
                            child: const Text('App bar scrolls away')),
                        const PopupMenuItem<AppBarBehavior>(
                            value: AppBarBehavior.pinned,
                            child: const Text('App bar stays put')),
                        const PopupMenuItem<AppBarBehavior>(
                            value: AppBarBehavior.floating,
                            child: const Text('App bar floats')),
                        const PopupMenuItem<AppBarBehavior>(
                            value: AppBarBehavior.snapping,
                            child: const Text('App bar snaps')),
                      ],
                ),
              ],
              flexibleSpace: new FlexibleSpaceBar(
                title: const Text('User profile'),
                background: new Stack(
                  fit: StackFit.expand,
                  children: <Widget>[
                    new Image.asset(
                      'res/images/material_design_3.png',
                      fit: BoxFit.fill,
                      height: _appBarHeight,
                    ),
                    // This gradient ensures that the toolbar icons are distinct against the background image.
                    const DecoratedBox(
                      decoration: const BoxDecoration(
                        gradient: const LinearGradient(
                          begin: const Alignment(0.0, -1.0),
                          end: const Alignment(0.0, -0.4),
                          colors: const <Color>[
                            const Color(0x60000000),
                            const Color(0x00000000)
                          ],
                        ),
                      ),
                    ),
                  ],
                ),
              ),
            ),
            new SliverList(
              delegate: new SliverChildListDelegate(<Widget>[
                new _ContactCategory(
                  icon: Icons.call,
                  children: <Widget>[
                    new _ContactItem(
                      icon: Icons.message,
                      tooltip: 'Send message',
                      onPressed: () {},
                      lines: const <String>[
                        '+1-234-5678901',
                        'Mobile',
                      ],
                    ),
                    new _ContactItem(
                      icon: Icons.message,
                      tooltip: 'Send message',
                      onPressed: () {},
                      lines: const <String>[
                        '+1-234-5678902',
                        'Work',
                      ],
                    ),
                    new _ContactItem(
                      icon: Icons.message,
                      tooltip: 'Send message',
                      onPressed: () {},
                      lines: const <String>[
                        '+1-234-5678903',
                        'Home',
                      ],
                    ),
                  ],
                ),
                new _ContactCategory(
                  icon: Icons.contact_mail,
                  children: <Widget>[
                    new _ContactItem(
                      icon: Icons.email,
                      tooltip: 'Send personal e-mail',
                      onPressed: () {},
                      lines: const <String>[
                        'user.personal@email.com',
                        'Personal',
                      ],
                    ),
                    new _ContactItem(
                      icon: Icons.email,
                      tooltip: 'Send work e-mail',
                      onPressed: () {},
                      lines: const <String>[
                        'user.work@email.com',
                        'Work',
                      ],
                    ),
                  ],
                ),
                new _ContactCategory(
                  icon: Icons.location_on,
                  children: <Widget>[
                    new _ContactItem(
                      icon: Icons.map,
                      tooltip: 'Open map',
                      onPressed: () {},
                      lines: const <String>[
                        'Home Street',
                        'San Francisco, CA',
                        'Home',
                      ],
                    ),
                    new _ContactItem(
                      icon: Icons.map,
                      tooltip: 'Open map',
                      onPressed: () {},
                      lines: const <String>[
                        'Work Parkway',
                        'Los Angeles, CA',
                        'Work',
                      ],
                    ),
                  ],
                ),
                new _ContactCategory(
                  icon: Icons.today,
                  children: <Widget>[
                    new _ContactItem(
                      lines: const <String>[
                        'Birthday',
                        'November 27th, 1992',
                      ],
                    ),
                  ],
                ),
              ]),
            ),
          ],
        ),
      ),
    );
  }
}


================================================
FILE: lib/widget/drawerWidget.dart
================================================
import 'package:flutter/material.dart';
import 'package:flutter_demo/route/about.dart';
import 'package:flutter_demo/route/bottomNavigation.dart';
import 'package:flutter_demo/route/fullscreen.dart';
import 'package:flutter_demo/route/list.dart';
import 'package:flutter_demo/route/settings.dart';
import 'package:flutter_demo/route/sliverAppbar.dart';

class DrawerWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return new Drawer(
      child: new ListView(
        padding: EdgeInsets.all(0.0),
        children: <Widget>[
//          new MyDrawerHeader(),
          new UserAccountsDrawerHeader(
            accountName: new Text('User Name'),
            accountEmail: new Text('user.name@email.com'),
            currentAccountPicture: new CircleAvatar(
              backgroundColor: Colors.amber,
              child: new FlutterLogo(size: 42.0),
            ),
          ),
          new ListTile(
            leading: const Icon(Icons.list),
            title: const Text('List'),
            onTap: () {
              Navigator.pop(context); //  close drawer
              Navigator.push(context, new MaterialPageRoute<void>(
                builder: (BuildContext context) {
                  return new ListPage();
                },
              ));
            },
          ),
          new ListTile(
            leading: const Icon(Icons.vertical_align_top),
            title: const Text('Sliver Appbar'),
            onTap: () {
              Navigator.pop(context);
              Navigator.push(context, new MaterialPageRoute<void>(
                builder: (BuildContext context) {
                  return new ContactsDemo();
                },
              ));
            },
          ),
          new ListTile(
            leading: const Icon(Icons.fullscreen),
            title: const Text('Full Screen'),
            onTap: () {
              Navigator.pop(context);
              Navigator.of(context).push(new MaterialPageRoute(
                builder: (BuildContext context) {
                  return new Fullscreen();
                },
              ));
            },
          ),
          new ListTile(
            leading: const Icon(Icons.more_horiz),
            title: const Text('Bottom Navigation'),
            onTap: () {
              Navigator.pop(context);
              Navigator.push(context, new MaterialPageRoute(
                builder: (BuildContext context) {
                  return new BottomNavigationDemo();
                },
              ));
            },
          ),
          new ListTile(
            leading: const Icon(Icons.settings),
            title: const Text('Settings'),
            onTap: () {
              Navigator.pop(context);
              Navigator.push(context, new MaterialPageRoute(
                builder: (BuildContext context) {
                  return new Settings();
                },
              ));
            },
          ),
          new Divider(),
          new ListTile(
            leading: const Icon(Icons.info),
            title: const Text('About'),
            onTap: () {
              Navigator.pop(context);
              Navigator.push(context, new MaterialPageRoute(
                builder: (BuildContext context) {
                  return new About();
                },
              ));
            },
          ),
        ],
      ),
    );
  }
}

class MyDrawerHeader extends StatefulWidget {
  const MyDrawerHeader({Key key}) : super(key: key);

  @override
  _MyDrawerHeaderState createState() => new _MyDrawerHeaderState();
}

class _MyDrawerHeaderState extends State<MyDrawerHeader> {
//  bool _logoHasName = true;
//  bool _logoHorizontal = true;
//  MaterialColor _logoColor = Colors.blue;

  @override
  Widget build(BuildContext context) {
    final double statusBarHeight = MediaQuery.of(context).padding.top;

    return new Semantics(
      label: 'Flutter',
      child: new DrawerHeader(
//        decoration: new FlutterLogoDecoration(
//          margin: new EdgeInsets.fromLTRB(
//              12.0, 12.0 + systemTopPadding, 12.0, 12.0),
//          style: _logoHasName
//              ? _logoHorizontal
//                  ? FlutterLogoStyle.horizontal
//                  : FlutterLogoStyle.stacked
//              : FlutterLogoStyle.markOnly,
//          lightColor: _logoColor.shade400,
//          darkColor: _logoColor.shade900,
//          textColor: const Color(0xFF616161),
//        ),
//        duration: const Duration(milliseconds: 500),
//        child: new GestureDetector(
//          onLongPress: () {
//            setState(() {
//              _logoHorizontal = !_logoHorizontal;
//              if (!_logoHasName) _logoHasName = true;
//            });
//          },
//          onTap: () {
//            setState(() {
//              _logoHasName = !_logoHasName;
//            });
//          },
//          onDoubleTap: () {
//            setState(() {
//              final List<MaterialColor> options = <MaterialColor>[];
//              if (_logoColor != Colors.blue)
//                options.addAll(<MaterialColor>[Colors.blue, Colors.blue, Colors.blue, Colors.blue, Colors.blue, Colors.blue, Colors.blue]);
//              if (_logoColor != Colors.amber)
//                options.addAll(<MaterialColor>[Colors.amber, Colors.amber, Colors.amber]);
//              if (_logoColor != Colors.red)
//                options.addAll(<MaterialColor>[Colors.red, Colors.red, Colors.red]);
//              if (_logoColor != Colors.indigo)
//                options.addAll(<MaterialColor>[Colors.indigo, Colors.indigo, Colors.indigo]);
//              if (_logoColor != Colors.pink)
//                options.addAll(<MaterialColor>[Colors.pink]);
//              if (_logoColor != Colors.purple)
//                options.addAll(<MaterialColor>[Colors.purple]);
//              if (_logoColor != Colors.cyan)
//                options.addAll(<MaterialColor>[Colors.cyan]);
//              _logoColor = options[new math.Random().nextInt(options.length)];
//            });
//          }
//        ),

        padding: const EdgeInsets.all(0.0),
        child: new Container(
          color: Color(0x33000000),
          padding: const EdgeInsets.all(16.0),
          child: new Column(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              new FlutterLogo(
                size: 64.0,
              ),
              new Text(
                'To Start Login',
                style: new TextStyle(color: Colors.white),
              )
            ],
          ),
        ),
      ),
    );
  }
}


================================================
FILE: lib/widget/tabWidget.dart
================================================
import 'package:flutter/material.dart';
import 'drawerWidget.dart';

class TabbedScaffold extends StatelessWidget {
  TabbedScaffold({this.title, this.tabs, this.actions, this.widgets});

  final String title;
  final List<String> tabs;
  final List<Widget> actions;
  final List<Widget> widgets;

  @override
  Widget build(BuildContext context) {
    return new DefaultTabController(
      length: widgets.length,
      child: new Scaffold(
        appBar: new AppBar(
          title: new Text(title),
          actions: (actions ?? null),
          bottom: new TabBar(
            isScrollable: false,
            tabs: tabs.map((String s) => new Tab(text: s)).toList(),
          ),
        ),
        drawer: new DrawerWidget(),
        body: new TabBarView(
          children: widgets.map((Widget widget) {
            return new SafeArea(
              top: false,
              bottom: false,
              child: new Padding(
                padding: const EdgeInsets.all(8.0),
                child: widget,
              ),
            );
          }).toList(),
        ),
        floatingActionButton: new FloatingActionButton(
          onPressed: () {
            Scaffold
                .of(context)
                .showSnackBar(new SnackBar(content: new Text('Show Snackbar')));
          },
          child: new Icon(Icons.add, color: Colors.white),
        ),
      ),
    );
  }
}


================================================
FILE: pubspec.yaml
================================================
name: flutter_demo
description: A new Flutter application.

dependencies:
  flutter:
    sdk: flutter

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

dev_dependencies:
  flutter_test:
    sdk: flutter


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

# The following section is specific to Flutter.
flutter:

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

  # To add assets to your application, add an assets section, like this:
  assets:
    - res/images/material_design_2.jpg
    - res/images/material_design_3.png
    - res/images/material_design_4.jpg
    - res/gif/material_design_flutter_1.gif

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

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

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


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

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

import 'package:flutter_demo/main.dart';

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

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

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

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

├── .gitignore
├── .metadata
├── README.md
├── android/
│   ├── .gitignore
│   ├── app/
│   │   ├── build.gradle
│   │   └── src/
│   │       └── main/
│   │           ├── AndroidManifest.xml
│   │           ├── java/
│   │           │   └── com/
│   │           │       └── eajy/
│   │           │           └── flutterdemo/
│   │           │               └── MainActivity.java
│   │           └── res/
│   │               ├── drawable/
│   │               │   └── launch_background.xml
│   │               └── values/
│   │                   └── styles.xml
│   ├── build.gradle
│   ├── gradle/
│   │   └── wrapper/
│   │       ├── gradle-wrapper.jar
│   │       └── gradle-wrapper.properties
│   ├── gradle.properties
│   ├── gradlew
│   ├── gradlew.bat
│   └── settings.gradle
├── flutter_demo.iml
├── flutter_demo_android.iml
├── ios/
│   ├── .gitignore
│   ├── Flutter/
│   │   ├── AppFrameworkInfo.plist
│   │   ├── Debug.xcconfig
│   │   └── Release.xcconfig
│   ├── Podfile
│   ├── Runner/
│   │   ├── AppDelegate.h
│   │   ├── AppDelegate.m
│   │   ├── Assets.xcassets/
│   │   │   ├── AppIcon.appiconset/
│   │   │   │   └── Contents.json
│   │   │   └── LaunchImage.imageset/
│   │   │       ├── Contents.json
│   │   │       └── README.md
│   │   ├── Base.lproj/
│   │   │   ├── LaunchScreen.storyboard
│   │   │   └── Main.storyboard
│   │   ├── Info.plist
│   │   └── main.m
│   ├── Runner.xcodeproj/
│   │   ├── project.pbxproj
│   │   ├── project.xcworkspace/
│   │   │   └── contents.xcworkspacedata
│   │   └── xcshareddata/
│   │       └── xcschemes/
│   │           └── Runner.xcscheme
│   └── Runner.xcworkspace/
│       └── contents.xcworkspacedata
├── lib/
│   ├── main.dart
│   ├── route/
│   │   ├── about.dart
│   │   ├── bottomNavigation.dart
│   │   ├── fullscreen.dart
│   │   ├── home.dart
│   │   ├── homeCards.dart
│   │   ├── homeDialogs.dart
│   │   ├── homeWidgets.dart
│   │   ├── list.dart
│   │   ├── settings.dart
│   │   └── sliverAppbar.dart
│   └── widget/
│       ├── drawerWidget.dart
│       └── tabWidget.dart
├── pubspec.yaml
└── test/
    └── widget_test.dart
Download .txt
SYMBOL INDEX (81 symbols across 15 files)

FILE: android/app/src/main/java/com/eajy/flutterdemo/MainActivity.java
  class MainActivity (line 15) | public class MainActivity extends FlutterActivity {
    method onCreate (line 23) | @Override
    method share (line 52) | private void share() {
    method getVersionName (line 60) | private String getVersionName() {
    method sendEmail (line 72) | private void sendEmail() {

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

FILE: lib/route/about.dart
  class About (line 6) | class About extends StatefulWidget {
    method createState (line 8) | State<StatefulWidget> createState()
  class AboutState (line 13) | class AboutState extends State<About> {
    method _getVersionName (line 23) | Future<Null> _getVersionName()
    method _share (line 33) | Future<Null> _share()
    method _sendEmail (line 41) | Future<Null> _sendEmail()
    method initState (line 50) | void initState()
    method build (line 56) | Widget build(BuildContext context)

FILE: lib/route/bottomNavigation.dart
  class NavigationIconView (line 3) | class NavigationIconView {
    method transition (line 34) | FadeTransition transition(
  class CustomIcon (line 68) | class CustomIcon extends StatelessWidget {
    method build (line 70) | Widget build(BuildContext context)
  class BottomNavigationDemo (line 81) | class BottomNavigationDemo extends StatefulWidget {
    method createState (line 83) | _BottomNavigationDemoState createState()
  class _BottomNavigationDemoState (line 86) | class _BottomNavigationDemoState extends State<BottomNavigationDemo>
    method initState (line 93) | void initState()
    method dispose (line 129) | void dispose()
    method _rebuild (line 134) | void _rebuild()
    method _buildTransitionsStack (line 140) | Widget _buildTransitionsStack()
    method build (line 159) | Widget build(BuildContext context)

FILE: lib/route/fullscreen.dart
  class Fullscreen (line 3) | class Fullscreen extends StatelessWidget {
    method build (line 5) | Widget build(BuildContext context)

FILE: lib/route/home.dart
  class HomePage (line 7) | class HomePage extends StatefulWidget {
    method createState (line 13) | HomePageState createState()
  class HomePageState (line 16) | class HomePageState extends State<HomePage> {
    method build (line 18) | Widget build(BuildContext context)
  class Menu (line 61) | class Menu {

FILE: lib/route/homeCards.dart
  class HomeCards (line 3) | class HomeCards extends StatelessWidget {
    method build (line 5) | Widget build(BuildContext context)

FILE: lib/route/homeDialogs.dart
  class HomeDialogs (line 3) | class HomeDialogs extends StatefulWidget {
    method createState (line 5) | State<StatefulWidget> createState()
  class HomeDialogsState (line 10) | class HomeDialogsState extends State<HomeDialogs> {
    method initState (line 14) | void initState()
    method build (line 21) | Widget build(BuildContext context)
  class SingleChoiceDialog (line 271) | class SingleChoiceDialog extends StatefulWidget {
    method createState (line 273) | State<StatefulWidget> createState()
  class SingleChoiceDialogState (line 278) | class SingleChoiceDialogState extends State<SingleChoiceDialog> {
    method build (line 280) | Widget build(BuildContext context)
  class MultiChoiceDialog (line 350) | class MultiChoiceDialog extends StatefulWidget {
    method createState (line 352) | State<StatefulWidget> createState()
  class MultiChoiceDialogState (line 357) | class MultiChoiceDialogState extends State<MultiChoiceDialog> {
    method build (line 359) | Widget build(BuildContext context)

FILE: lib/route/homeWidgets.dart
  class HomeWidgets (line 4) | class HomeWidgets extends StatefulWidget {
    method createState (line 6) | State<StatefulWidget> createState()
  class HomeWidgetsState (line 11) | class HomeWidgetsState extends State<HomeWidgets> {
    method build (line 16) | Widget build(BuildContext context)

FILE: lib/route/list.dart
  class ListPage (line 5) | class ListPage extends StatefulWidget {
    method createState (line 11) | State<StatefulWidget> createState()
  class ListPageState (line 16) | class ListPageState extends State<ListPage> {
    method _handleRefresh (line 25) | Future<Null> _handleRefresh()
    method build (line 46) | Widget build(BuildContext context)

FILE: lib/route/settings.dart
  class Settings (line 3) | class Settings extends StatefulWidget {
    method createState (line 5) | State<StatefulWidget> createState()
  class SettingsState (line 10) | class SettingsState extends State<Settings> {
    method build (line 15) | Widget build(BuildContext context)

FILE: lib/route/sliverAppbar.dart
  class _ContactCategory (line 3) | class _ContactCategory extends StatelessWidget {
    method build (line 10) | Widget build(BuildContext context)
  class _ContactItem (line 38) | class _ContactItem extends StatelessWidget {
    method build (line 49) | Widget build(BuildContext context)
  class ContactsDemo (line 82) | class ContactsDemo extends StatefulWidget {
    method createState (line 85) | ContactsDemoState createState()
  type AppBarBehavior (line 88) | enum AppBarBehavior { normal, pinned, floating, snapping }
  class ContactsDemoState (line 90) | class ContactsDemoState extends State<ContactsDemo> {
    method build (line 98) | Widget build(BuildContext context)

FILE: lib/widget/drawerWidget.dart
  class DrawerWidget (line 9) | class DrawerWidget extends StatelessWidget {
    method build (line 11) | Widget build(BuildContext context)
  class MyDrawerHeader (line 104) | class MyDrawerHeader extends StatefulWidget {
    method createState (line 108) | _MyDrawerHeaderState createState()
  class _MyDrawerHeaderState (line 111) | class _MyDrawerHeaderState extends State<MyDrawerHeader> {
    method build (line 117) | Widget build(BuildContext context)

FILE: lib/widget/tabWidget.dart
  class TabbedScaffold (line 4) | class TabbedScaffold extends StatelessWidget {
    method build (line 13) | Widget build(BuildContext context)

FILE: test/widget_test.dart
  function main (line 12) | void main()
Condensed preview — 51 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (129K chars).
[
  {
    "path": ".gitignore",
    "chars": 109,
    "preview": ".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",
    "chars": 284,
    "preview": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrade"
  },
  {
    "path": "README.md",
    "chars": 1147,
    "preview": "**This is a demo app designed with Material Design.\nIt's created by using [Flutter](https://flutter.io/).**  \n\n#### Goog"
  },
  {
    "path": "android/.gitignore",
    "chars": 152,
    "preview": "*.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"
  },
  {
    "path": "android/app/build.gradle",
    "chars": 1727,
    "preview": "def localProperties = new Properties()\ndef localPropertiesFile = rootProject.file('local.properties')\nif (localPropertie"
  },
  {
    "path": "android/app/src/main/AndroidManifest.xml",
    "chars": 1989,
    "preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.eajy.flutterdemo\">\n\n    <!-- The I"
  },
  {
    "path": "android/app/src/main/java/com/eajy/flutterdemo/MainActivity.java",
    "chars": 3188,
    "preview": "package com.eajy.flutterdemo;\n\nimport android.content.Intent;\nimport android.content.pm.PackageInfo;\nimport android.cont"
  },
  {
    "path": "android/app/src/main/res/drawable/launch_background.xml",
    "chars": 428,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!-- Modify this file to customize your launch splash screen -->\n<layer-list xmlns"
  },
  {
    "path": "android/app/src/main/res/values/styles.xml",
    "chars": 361,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <style name=\"LaunchTheme\" parent=\"@android:style/Theme.Black.NoTi"
  },
  {
    "path": "android/build.gradle",
    "chars": 470,
    "preview": "buildscript {\n    repositories {\n        google()\n        jcenter()\n    }\n\n    dependencies {\n        classpath 'com.and"
  },
  {
    "path": "android/gradle/wrapper/gradle-wrapper.properties",
    "chars": 231,
    "preview": "#Fri Jun 23 08:50:38 CEST 2017\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER"
  },
  {
    "path": "android/gradle.properties",
    "chars": 29,
    "preview": "org.gradle.jvmargs=-Xmx1536M\n"
  },
  {
    "path": "android/gradlew",
    "chars": 4971,
    "preview": "#!/usr/bin/env bash\n\n##############################################################################\n##\n##  Gradle start "
  },
  {
    "path": "android/gradlew.bat",
    "chars": 2314,
    "preview": "@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem "
  },
  {
    "path": "android/settings.gradle",
    "chars": 484,
    "preview": "include ':app'\n\ndef flutterProjectRoot = rootProject.projectDir.parentFile.toPath()\n\ndef plugins = new Properties()\ndef "
  },
  {
    "path": "flutter_demo.iml",
    "chars": 1474,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module type=\"JAVA_MODULE\" version=\"4\">\n  <component name=\"NewModuleRootManager\" "
  },
  {
    "path": "flutter_demo_android.iml",
    "chars": 1450,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module type=\"JAVA_MODULE\" version=\"4\">\n  <component name=\"FacetManager\">\n    <fa"
  },
  {
    "path": "ios/.gitignore",
    "chars": 488,
    "preview": ".idea/\n.vagrant/\n.sconsign.dblite\n.svn/\n\n.DS_Store\n*.swp\nprofile\n\nDerivedData/\nbuild/\nGeneratedPluginRegistrant.h\nGenera"
  },
  {
    "path": "ios/Flutter/AppFrameworkInfo.plist",
    "chars": 863,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "ios/Flutter/Debug.xcconfig",
    "chars": 106,
    "preview": "#include \"Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig\"\n#include \"Generated.xcconfig\"\n"
  },
  {
    "path": "ios/Flutter/Release.xcconfig",
    "chars": 108,
    "preview": "#include \"Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig\"\n#include \"Generated.xcconfig\"\n"
  },
  {
    "path": "ios/Podfile",
    "chars": 2113,
    "preview": "# Uncomment this line to define a global platform for your project\n# platform :ios, '9.0'\n\n# CocoaPods analytics sends n"
  },
  {
    "path": "ios/Runner/AppDelegate.h",
    "chars": 103,
    "preview": "#import <UIKit/UIKit.h>\n#import <Flutter/Flutter.h>\n\n@interface AppDelegate : FlutterAppDelegate\n\n@end\n"
  },
  {
    "path": "ios/Runner/AppDelegate.m",
    "chars": 420,
    "preview": "#include \"AppDelegate.h\"\n#include \"GeneratedPluginRegistrant.h\"\n\n@implementation AppDelegate\n\n- (BOOL)application:(UIApp"
  },
  {
    "path": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "chars": 2519,
    "preview": "{\n  \"images\" : [\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@2x.png\",\n   "
  },
  {
    "path": "ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json",
    "chars": 391,
    "preview": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"LaunchImage.png\",\n      \"scale\" : \"1x\"\n    },\n  "
  },
  {
    "path": "ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md",
    "chars": 336,
    "preview": "# Launch Screen Assets\n\nYou can customize the launch screen with your own desired assets by replacing the image files in"
  },
  {
    "path": "ios/Runner/Base.lproj/LaunchScreen.storyboard",
    "chars": 2377,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
  },
  {
    "path": "ios/Runner/Base.lproj/Main.storyboard",
    "chars": 1605,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
  },
  {
    "path": "ios/Runner/Info.plist",
    "chars": 1555,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
  },
  {
    "path": "ios/Runner/main.m",
    "chars": 227,
    "preview": "#import <UIKit/UIKit.h>\n#import <Flutter/Flutter.h>\n#import \"AppDelegate.h\"\n\nint main(int argc, char * argv[]) {\n  @auto"
  },
  {
    "path": "ios/Runner.xcodeproj/project.pbxproj",
    "chars": 21139,
    "preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
  },
  {
    "path": "ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "chars": 152,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Runner.xcodepr"
  },
  {
    "path": "ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme",
    "chars": 3331,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0910\"\n   version = \"1.3\">\n   <BuildAction\n      "
  },
  {
    "path": "ios/Runner.xcworkspace/contents.xcworkspacedata",
    "chars": 224,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Runner.xcodepr"
  },
  {
    "path": "lib/main.dart",
    "chars": 451,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_demo/route/home.dart';\n\nvoid main() => runApp(new MyApp("
  },
  {
    "path": "lib/route/about.dart",
    "chars": 3047,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter/services.dart';\nimport 'dart:async';\nimport 'package:url"
  },
  {
    "path": "lib/route/bottomNavigation.dart",
    "chars": 5768,
    "preview": "import 'package:flutter/material.dart';\n\nclass NavigationIconView {\n  NavigationIconView({\n    Widget icon,\n    String t"
  },
  {
    "path": "lib/route/fullscreen.dart",
    "chars": 417,
    "preview": "import 'package:flutter/material.dart';\n\nclass Fullscreen extends StatelessWidget {\n  @override\n  Widget build(BuildCont"
  },
  {
    "path": "lib/route/home.dart",
    "chars": 1673,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_demo/widget/tabWidget.dart';\nimport 'package:flutter_dem"
  },
  {
    "path": "lib/route/homeCards.dart",
    "chars": 4255,
    "preview": "import 'package:flutter/material.dart';\n\nclass HomeCards extends StatelessWidget {\n  @override\n  Widget build(BuildConte"
  },
  {
    "path": "lib/route/homeDialogs.dart",
    "chars": 14420,
    "preview": "import 'package:flutter/material.dart';\n\nclass HomeDialogs extends StatefulWidget {\n  @override\n  State<StatefulWidget> "
  },
  {
    "path": "lib/route/homeWidgets.dart",
    "chars": 3453,
    "preview": "import 'package:flutter/material.dart';\nimport 'dart:math' as math;\n\nclass HomeWidgets extends StatefulWidget {\n  @overr"
  },
  {
    "path": "lib/route/list.dart",
    "chars": 2911,
    "preview": "import 'dart:async';\n\nimport 'package:flutter/material.dart';\n\nclass ListPage extends StatefulWidget {\n  ListPage({Key k"
  },
  {
    "path": "lib/route/settings.dart",
    "chars": 3947,
    "preview": "import 'package:flutter/material.dart';\n\nclass Settings extends StatefulWidget {\n  @override\n  State<StatefulWidget> cre"
  },
  {
    "path": "lib/route/sliverAppbar.dart",
    "chars": 9355,
    "preview": "import 'package:flutter/material.dart';\n\nclass _ContactCategory extends StatelessWidget {\n  const _ContactCategory({Key "
  },
  {
    "path": "lib/widget/drawerWidget.dart",
    "chars": 6713,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_demo/route/about.dart';\nimport 'package:flutter_demo/rou"
  },
  {
    "path": "lib/widget/tabWidget.dart",
    "chars": 1404,
    "preview": "import 'package:flutter/material.dart';\nimport 'drawerWidget.dart';\n\nclass TabbedScaffold extends StatelessWidget {\n  Ta"
  },
  {
    "path": "pubspec.yaml",
    "chars": 1944,
    "preview": "name: flutter_demo\ndescription: A new Flutter application.\n\ndependencies:\n  flutter:\n    sdk: flutter\n\n  # The following"
  },
  {
    "path": "test/widget_test.dart",
    "chars": 1052,
    "preview": "// This is a basic Flutter widget test.\n// To perform an interaction with a widget in your test, use the WidgetTester ut"
  }
]

// ... and 1 more files (download for full content)

About this extraction

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

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

Copied to clipboard!