wangguolei

flutter demo

Showing 68 changed files with 1933 additions and 0 deletions
  1 +# Miscellaneous
  2 +*.class
  3 +*.log
  4 +*.pyc
  5 +*.swp
  6 +.DS_Store
  7 +.atom/
  8 +.buildlog/
  9 +.history
  10 +.svn/
  11 +
  12 +# IntelliJ related
  13 +*.iml
  14 +*.ipr
  15 +*.iws
  16 +.idea/
  17 +
  18 +# The .vscode folder contains launch configuration and tasks you configure in
  19 +# VS Code which you may wish to be included in version control, so this line
  20 +# is commented out by default.
  21 +#.vscode/
  22 +
  23 +# Flutter/Dart/Pub related
  24 +**/doc/api/
  25 +**/ios/Flutter/.last_build_id
  26 +.dart_tool/
  27 +.flutter-plugins
  28 +.flutter-plugins-dependencies
  29 +.packages
  30 +.pub-cache/
  31 +.pub/
  32 +/build/
  33 +
  34 +# Web related
  35 +lib/generated_plugin_registrant.dart
  36 +
  37 +# Symbolication related
  38 +app.*.symbols
  39 +
  40 +# Obfuscation related
  41 +app.*.map.json
  42 +
  43 +# Android Studio will place build artifacts here
  44 +/android/app/debug
  45 +/android/app/profile
  46 +/android/app/release
  1 +# This file tracks properties of this Flutter project.
  2 +# Used by Flutter tool to assess capabilities and perform upgrades etc.
  3 +#
  4 +# This file should be version controlled and should not be manually edited.
  5 +
  6 +version:
  7 + revision: b22742018b3edf16c6cadd7b76d9db5e7f9064b5
  8 + channel: stable
  9 +
  10 +project_type: app
  1 +# hh_demo
  2 +
  3 +A new Flutter project.
  4 +
  5 +## Getting Started
  6 +
  7 +This project is a starting point for a Flutter application.
  8 +
  9 +A few resources to get you started if this is your first Flutter project:
  10 +
  11 +- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)
  12 +- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)
  13 +
  14 +For help getting started with Flutter, view our
  15 +[online documentation](https://flutter.dev/docs), which offers tutorials,
  16 +samples, guidance on mobile development, and a full API reference.
  1 +gradle-wrapper.jar
  2 +/.gradle
  3 +/captures/
  4 +/gradlew
  5 +/gradlew.bat
  6 +/local.properties
  7 +GeneratedPluginRegistrant.java
  8 +
  9 +# Remember to never publicly share your keystore.
  10 +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
  11 +key.properties
  1 +def localProperties = new Properties()
  2 +def localPropertiesFile = rootProject.file('local.properties')
  3 +if (localPropertiesFile.exists()) {
  4 + localPropertiesFile.withReader('UTF-8') { reader ->
  5 + localProperties.load(reader)
  6 + }
  7 +}
  8 +
  9 +def flutterRoot = localProperties.getProperty('flutter.sdk')
  10 +if (flutterRoot == null) {
  11 + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
  12 +}
  13 +
  14 +def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
  15 +if (flutterVersionCode == null) {
  16 + flutterVersionCode = '1'
  17 +}
  18 +
  19 +def flutterVersionName = localProperties.getProperty('flutter.versionName')
  20 +if (flutterVersionName == null) {
  21 + flutterVersionName = '1.0'
  22 +}
  23 +
  24 +apply plugin: 'com.android.application'
  25 +apply plugin: 'kotlin-android'
  26 +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
  27 +
  28 +android {
  29 + compileSdkVersion 30
  30 +
  31 + sourceSets {
  32 + main.java.srcDirs += 'src/main/kotlin'
  33 + }
  34 +
  35 + defaultConfig {
  36 + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
  37 + applicationId "com.example.hh_demo"
  38 + minSdkVersion 17
  39 + targetSdkVersion 29
  40 + versionCode flutterVersionCode.toInteger()
  41 + versionName flutterVersionName
  42 + }
  43 +
  44 + buildTypes {
  45 + release {
  46 + // TODO: Add your own signing config for the release build.
  47 + // Signing with the debug keys for now, so `flutter run --release` works.
  48 + signingConfig signingConfigs.debug
  49 + }
  50 + }
  51 +}
  52 +
  53 +flutter {
  54 + source '../..'
  55 +}
  56 +
  57 +dependencies {
  58 + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
  59 + implementation 'com.hhmedic.android.sdk:hh_trtc:3.2.0.01131726'
  60 +}
  1 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2 + package="com.example.hh_demo">
  3 + <!-- Flutter needs it to communicate with the running application
  4 + to allow setting breakpoints, to provide hot reload, etc.
  5 + -->
  6 + <uses-permission android:name="android.permission.INTERNET"/>
  7 +</manifest>
  1 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2 + xmlns:tools="http://schemas.android.com/tools"
  3 + package="com.example.hh_demo">
  4 + <application
  5 + tools:replace="android:label"
  6 + android:label="hh_demo"
  7 + android:icon="@mipmap/ic_launcher">
  8 + <activity
  9 + android:name=".MainActivity"
  10 + android:launchMode="singleTop"
  11 + android:theme="@style/LaunchTheme"
  12 + android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
  13 + android:hardwareAccelerated="true"
  14 + android:windowSoftInputMode="adjustResize">
  15 + <!-- Specifies an Android theme to apply to this Activity as soon as
  16 + the Android process has started. This theme is visible to the user
  17 + while the Flutter UI initializes. After that, this theme continues
  18 + to determine the Window background behind the Flutter UI. -->
  19 + <meta-data
  20 + android:name="io.flutter.embedding.android.NormalTheme"
  21 + android:resource="@style/NormalTheme"
  22 + />
  23 + <!-- Displays an Android View that continues showing the launch screen
  24 + Drawable until Flutter paints its first frame, then this splash
  25 + screen fades out. A splash screen is useful to avoid any visual
  26 + gap between the end of Android's launch screen and the painting of
  27 + Flutter's first frame. -->
  28 + <meta-data
  29 + android:name="io.flutter.embedding.android.SplashScreenDrawable"
  30 + android:resource="@drawable/launch_background"
  31 + />
  32 + <intent-filter>
  33 + <action android:name="android.intent.action.MAIN"/>
  34 + <category android:name="android.intent.category.LAUNCHER"/>
  35 + </intent-filter>
  36 + </activity>
  37 + <!-- Don't delete the meta-data below.
  38 + This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
  39 + <meta-data
  40 + android:name="flutterEmbedding"
  41 + android:value="2" />
  42 + </application>
  43 +</manifest>
  1 +package com.example.hh_demo
  2 +
  3 +import android.content.Context
  4 +import android.content.Intent
  5 +import android.text.TextUtils
  6 +import android.util.Log
  7 +import com.hhmedic.android.sdk.HHDoctor
  8 +import com.hhmedic.android.sdk.config.HHSDKOptions
  9 +import com.hhmedic.android.sdk.listener.HHLoginListener
  10 +import com.hhmedic.android.sdk.uikit.widget.HHTips
  11 +import com.orhanobut.logger.BuildConfig
  12 +import com.orhanobut.logger.Logger
  13 +import io.flutter.plugin.common.BinaryMessenger
  14 +import io.flutter.plugin.common.MethodCall
  15 +import io.flutter.plugin.common.MethodChannel
  16 +
  17 +
  18 +class HHPlatform {
  19 +
  20 +
  21 +
  22 +
  23 +
  24 + companion object {
  25 +
  26 + private const val NET_CHANNEL_NAME = "com.hh-medic.channel"
  27 +
  28 + private var mSendChannel:MethodChannel? = null
  29 +
  30 +
  31 + fun register(context: Context, bm:BinaryMessenger?){
  32 +
  33 + mSendChannel = MethodChannel(bm,NET_CHANNEL_NAME)
  34 +
  35 + mSendChannel?.setMethodCallHandler { call, result ->
  36 +
  37 + Log.e("Flutter channel","now get flutter channel---->${call.method}")
  38 +
  39 + try {
  40 +
  41 + if (TextUtils.equals(call.method,"skipToChatHome")){
  42 +
  43 + (call.arguments as? HashMap<*, *>)?.apply {
  44 +
  45 + skipToHome(context, this)
  46 +
  47 + }
  48 +
  49 + }
  50 +
  51 +
  52 + }catch (e:Exception){
  53 +
  54 + Logger.e("HH channel error:${e.message}")
  55 +
  56 + }
  57 +
  58 + }
  59 +
  60 +
  61 + }
  62 +
  63 + fun skipToHome(context: Context,arguments: HashMap<*, *>){
  64 +
  65 + val sdkProductId = arguments["sdkProductId"] as? String
  66 + val userToken = arguments["userToken"] as? String
  67 + val isDevelop = arguments["isDevelop"] as? Boolean
  68 +
  69 + val option = HHSDKOptions(sdkProductId);
  70 + option.dev = (isDevelop ?: false);
  71 + option.isDebug = BuildConfig.DEBUG
  72 + HHDoctor.init(context, option);
  73 + HHDoctor.login(context, userToken, object :HHLoginListener{
  74 + override fun onSuccess() {
  75 +
  76 + HHDoctor.message(context)
  77 + }
  78 +
  79 + override fun onError(tips: String?) {
  80 + HHTips().errorTips(context, tips)
  81 + }
  82 +
  83 + })
  84 +
  85 +
  86 + }
  87 +
  88 + }
  89 +
  90 +
  91 +
  92 +
  93 +
  94 +
  95 +}
  1 +package com.example.hh_demo
  2 +
  3 +import androidx.annotation.NonNull
  4 +import io.flutter.embedding.android.FlutterActivity
  5 +import io.flutter.embedding.engine.FlutterEngine
  6 +import io.flutter.plugins.GeneratedPluginRegistrant
  7 +
  8 +class MainActivity: FlutterActivity() {
  9 +
  10 + override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
  11 +
  12 + GeneratedPluginRegistrant.registerWith(flutterEngine)
  13 +
  14 + HHPlatform.register(this,flutterEngine.dartExecutor)
  15 +
  16 + }
  17 +
  18 +
  19 +}
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<!-- Modify this file to customize your launch splash screen -->
  3 +<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  4 + <item android:drawable="?android:colorBackground" />
  5 +
  6 + <!-- You can insert your own image assets here -->
  7 + <!-- <item>
  8 + <bitmap
  9 + android:gravity="center"
  10 + android:src="@mipmap/launch_image" />
  11 + </item> -->
  12 +</layer-list>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<!-- Modify this file to customize your launch splash screen -->
  3 +<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  4 + <item android:drawable="@android:color/white" />
  5 +
  6 + <!-- You can insert your own image assets here -->
  7 + <!-- <item>
  8 + <bitmap
  9 + android:gravity="center"
  10 + android:src="@mipmap/launch_image" />
  11 + </item> -->
  12 +</layer-list>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<resources>
  3 + <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
  4 + <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
  5 + <!-- Show a splash screen on the activity. Automatically removed when
  6 + Flutter draws its first frame -->
  7 + <item name="android:windowBackground">@drawable/launch_background</item>
  8 + </style>
  9 + <!-- Theme applied to the Android Window as soon as the process has started.
  10 + This theme determines the color of the Android Window while your
  11 + Flutter UI initializes, as well as behind your Flutter UI while its
  12 + running.
  13 +
  14 + This Theme is only used starting with V2 of Flutter's Android embedding. -->
  15 + <style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
  16 + <item name="android:windowBackground">?android:colorBackground</item>
  17 + </style>
  18 +</resources>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<resources>
  3 + <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
  4 + <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
  5 + <!-- Show a splash screen on the activity. Automatically removed when
  6 + Flutter draws its first frame -->
  7 + <item name="android:windowBackground">@drawable/launch_background</item>
  8 + </style>
  9 + <!-- Theme applied to the Android Window as soon as the process has started.
  10 + This theme determines the color of the Android Window while your
  11 + Flutter UI initializes, as well as behind your Flutter UI while its
  12 + running.
  13 +
  14 + This Theme is only used starting with V2 of Flutter's Android embedding. -->
  15 + <style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
  16 + <item name="android:windowBackground">?android:colorBackground</item>
  17 + </style>
  18 +</resources>
  1 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2 + package="com.example.hh_demo">
  3 + <!-- Flutter needs it to communicate with the running application
  4 + to allow setting breakpoints, to provide hot reload, etc.
  5 + -->
  6 + <uses-permission android:name="android.permission.INTERNET"/>
  7 +</manifest>
  1 +buildscript {
  2 + ext.kotlin_version = '1.3.50'
  3 + repositories {
  4 + google()
  5 + jcenter()
  6 + }
  7 +
  8 + dependencies {
  9 + classpath 'com.android.tools.build:gradle:4.1.0'
  10 + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
  11 + }
  12 +}
  13 +
  14 +allprojects {
  15 + repositories {
  16 + google()
  17 + jcenter()
  18 +
  19 + maven {
  20 + credentials {
  21 + username 'hh-public'
  22 + password 'OFGB5wX0'
  23 + }
  24 +
  25 + url 'http://develop.hh-medic.com/repository/maven-public'
  26 + }
  27 + }
  28 +}
  29 +
  30 +rootProject.buildDir = '../build'
  31 +subprojects {
  32 + project.buildDir = "${rootProject.buildDir}/${project.name}"
  33 + project.evaluationDependsOn(':app')
  34 +}
  35 +
  36 +task clean(type: Delete) {
  37 + delete rootProject.buildDir
  38 +}
  1 +org.gradle.jvmargs=-Xmx1536M
  2 +android.useAndroidX=true
  3 +android.enableJetifier=true
  1 +#Fri Jun 23 08:50:38 CEST 2017
  2 +distributionBase=GRADLE_USER_HOME
  3 +distributionPath=wrapper/dists
  4 +zipStoreBase=GRADLE_USER_HOME
  5 +zipStorePath=wrapper/dists
  6 +distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
  1 +include ':app'
  2 +
  3 +def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
  4 +def properties = new Properties()
  5 +
  6 +assert localPropertiesFile.exists()
  7 +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
  8 +
  9 +def flutterSdkPath = properties.getProperty("flutter.sdk")
  10 +assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
  11 +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
  1 +*.mode1v3
  2 +*.mode2v3
  3 +*.moved-aside
  4 +*.pbxuser
  5 +*.perspectivev3
  6 +**/*sync/
  7 +.sconsign.dblite
  8 +.tags*
  9 +**/.vagrant/
  10 +**/DerivedData/
  11 +Icon?
  12 +**/Pods/
  13 +**/.symlinks/
  14 +profile
  15 +xcuserdata
  16 +**/.generated/
  17 +Flutter/App.framework
  18 +Flutter/Flutter.framework
  19 +Flutter/Flutter.podspec
  20 +Flutter/Generated.xcconfig
  21 +Flutter/ephemeral/
  22 +Flutter/app.flx
  23 +Flutter/app.zip
  24 +Flutter/flutter_assets/
  25 +Flutter/flutter_export_environment.sh
  26 +ServiceDefinitions.json
  27 +Runner/GeneratedPluginRegistrant.*
  28 +
  29 +# Exceptions to above rules.
  30 +!default.mode1v3
  31 +!default.mode2v3
  32 +!default.pbxuser
  33 +!default.perspectivev3
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>CFBundleDevelopmentRegion</key>
  6 + <string>en</string>
  7 + <key>CFBundleExecutable</key>
  8 + <string>App</string>
  9 + <key>CFBundleIdentifier</key>
  10 + <string>io.flutter.flutter.app</string>
  11 + <key>CFBundleInfoDictionaryVersion</key>
  12 + <string>6.0</string>
  13 + <key>CFBundleName</key>
  14 + <string>App</string>
  15 + <key>CFBundlePackageType</key>
  16 + <string>FMWK</string>
  17 + <key>CFBundleShortVersionString</key>
  18 + <string>1.0</string>
  19 + <key>CFBundleSignature</key>
  20 + <string>????</string>
  21 + <key>CFBundleVersion</key>
  22 + <string>1.0</string>
  23 + <key>MinimumOSVersion</key>
  24 + <string>8.0</string>
  25 +</dict>
  26 +</plist>
  1 +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
  2 +#include "Generated.xcconfig"
  1 +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
  2 +#include "Generated.xcconfig"
  1 +# Uncomment the next line to define a global platform for your project
  2 +# platform :ios, '9.0'
  3 +
  4 +target 'Runner' do
  5 + # Comment the next line if you don't want to use dynamic frameworks
  6 + use_frameworks!
  7 +
  8 + # Pods for Runner
  9 + pod 'HHVDoctorSDK', :git => "http://code.hh-medic.com/hh_public/hhvDoctorSDK.ios.git"
  10 +
  11 +end
  1 +PODS:
  2 + - HHVDoctorSDK (3.2.0.01261430):
  3 + - HHVDoctorSDK/Base (= 3.2.0.01261430)
  4 + - TXIMSDK_iOS
  5 + - HHVDoctorSDK/Base (3.2.0.01261430):
  6 + - TXIMSDK_iOS
  7 + - TXIMSDK_iOS (5.1.62)
  8 +
  9 +DEPENDENCIES:
  10 + - HHVDoctorSDK (from `http://code.hh-medic.com/hh_public/hhvDoctorSDK.ios.git`)
  11 +
  12 +SPEC REPOS:
  13 + trunk:
  14 + - TXIMSDK_iOS
  15 +
  16 +EXTERNAL SOURCES:
  17 + HHVDoctorSDK:
  18 + :git: http://code.hh-medic.com/hh_public/hhvDoctorSDK.ios.git
  19 +
  20 +CHECKOUT OPTIONS:
  21 + HHVDoctorSDK:
  22 + :commit: f5eadca71e40e74ff0196c3b55513b85c40e9944
  23 + :git: http://code.hh-medic.com/hh_public/hhvDoctorSDK.ios.git
  24 +
  25 +SPEC CHECKSUMS:
  26 + HHVDoctorSDK: 777f6f9cfb901b1f9dd72cc40f2f19de9e2d9101
  27 + TXIMSDK_iOS: 4016cc84a61db57fc8ca024becf47ad229bbeef1
  28 +
  29 +PODFILE CHECKSUM: afa1a171d7b859c36f221f452b503650bb96312f
  30 +
  31 +COCOAPODS: 1.10.1
  1 +// !$*UTF8*$!
  2 +{
  3 + archiveVersion = 1;
  4 + classes = {
  5 + };
  6 + objectVersion = 51;
  7 + objects = {
  8 +
  9 +/* Begin PBXBuildFile section */
  10 + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
  11 + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
  12 + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
  13 + 7EAC3FC927A1484A005603CF /* HHPlatform.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EAC3FC827A1484A005603CF /* HHPlatform.swift */; };
  14 + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
  15 + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
  16 + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
  17 + 97CB16D4C1AC6E8EA0A3AEE3 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 98F4A983FE23CE58AEA66640 /* Pods_Runner.framework */; };
  18 +/* End PBXBuildFile section */
  19 +
  20 +/* Begin PBXCopyFilesBuildPhase section */
  21 + 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
  22 + isa = PBXCopyFilesBuildPhase;
  23 + buildActionMask = 2147483647;
  24 + dstPath = "";
  25 + dstSubfolderSpec = 10;
  26 + files = (
  27 + );
  28 + name = "Embed Frameworks";
  29 + runOnlyForDeploymentPostprocessing = 0;
  30 + };
  31 +/* End PBXCopyFilesBuildPhase section */
  32 +
  33 +/* Begin PBXFileReference section */
  34 + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
  35 + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
  36 + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
  37 + 65DFB5B8F2FD6EA3ED6F3A1F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
  38 + 72C1D61BFC8792C941B8E1BE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
  39 + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
  40 + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
  41 + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
  42 + 7EAC3FC827A1484A005603CF /* HHPlatform.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = HHPlatform.swift; sourceTree = "<group>"; };
  43 + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
  44 + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
  45 + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
  46 + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
  47 + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
  48 + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
  49 + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
  50 + 98F4A983FE23CE58AEA66640 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
  51 + DBFFDD221E372F6EB4CEDC90 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
  52 +/* End PBXFileReference section */
  53 +
  54 +/* Begin PBXFrameworksBuildPhase section */
  55 + 97C146EB1CF9000F007C117D /* Frameworks */ = {
  56 + isa = PBXFrameworksBuildPhase;
  57 + buildActionMask = 2147483647;
  58 + files = (
  59 + 97CB16D4C1AC6E8EA0A3AEE3 /* Pods_Runner.framework in Frameworks */,
  60 + );
  61 + runOnlyForDeploymentPostprocessing = 0;
  62 + };
  63 +/* End PBXFrameworksBuildPhase section */
  64 +
  65 +/* Begin PBXGroup section */
  66 + 51CA4FFBF6F9ED637C071FAD /* Frameworks */ = {
  67 + isa = PBXGroup;
  68 + children = (
  69 + 98F4A983FE23CE58AEA66640 /* Pods_Runner.framework */,
  70 + );
  71 + name = Frameworks;
  72 + sourceTree = "<group>";
  73 + };
  74 + 9740EEB11CF90186004384FC /* Flutter */ = {
  75 + isa = PBXGroup;
  76 + children = (
  77 + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
  78 + 9740EEB21CF90195004384FC /* Debug.xcconfig */,
  79 + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
  80 + 9740EEB31CF90195004384FC /* Generated.xcconfig */,
  81 + );
  82 + name = Flutter;
  83 + sourceTree = "<group>";
  84 + };
  85 + 97C146E51CF9000F007C117D = {
  86 + isa = PBXGroup;
  87 + children = (
  88 + 9740EEB11CF90186004384FC /* Flutter */,
  89 + 97C146F01CF9000F007C117D /* Runner */,
  90 + 97C146EF1CF9000F007C117D /* Products */,
  91 + C1250F29C7CFCC9E1E5B1959 /* Pods */,
  92 + 51CA4FFBF6F9ED637C071FAD /* Frameworks */,
  93 + );
  94 + sourceTree = "<group>";
  95 + };
  96 + 97C146EF1CF9000F007C117D /* Products */ = {
  97 + isa = PBXGroup;
  98 + children = (
  99 + 97C146EE1CF9000F007C117D /* Runner.app */,
  100 + );
  101 + name = Products;
  102 + sourceTree = "<group>";
  103 + };
  104 + 97C146F01CF9000F007C117D /* Runner */ = {
  105 + isa = PBXGroup;
  106 + children = (
  107 + 7EAC3FC827A1484A005603CF /* HHPlatform.swift */,
  108 + 97C146FA1CF9000F007C117D /* Main.storyboard */,
  109 + 97C146FD1CF9000F007C117D /* Assets.xcassets */,
  110 + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
  111 + 97C147021CF9000F007C117D /* Info.plist */,
  112 + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
  113 + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
  114 + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
  115 + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
  116 + );
  117 + path = Runner;
  118 + sourceTree = "<group>";
  119 + };
  120 + C1250F29C7CFCC9E1E5B1959 /* Pods */ = {
  121 + isa = PBXGroup;
  122 + children = (
  123 + 72C1D61BFC8792C941B8E1BE /* Pods-Runner.debug.xcconfig */,
  124 + DBFFDD221E372F6EB4CEDC90 /* Pods-Runner.release.xcconfig */,
  125 + 65DFB5B8F2FD6EA3ED6F3A1F /* Pods-Runner.profile.xcconfig */,
  126 + );
  127 + path = Pods;
  128 + sourceTree = "<group>";
  129 + };
  130 +/* End PBXGroup section */
  131 +
  132 +/* Begin PBXNativeTarget section */
  133 + 97C146ED1CF9000F007C117D /* Runner */ = {
  134 + isa = PBXNativeTarget;
  135 + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
  136 + buildPhases = (
  137 + 34DD5C6CA50A5873482FC0A4 /* [CP] Check Pods Manifest.lock */,
  138 + 9740EEB61CF901F6004384FC /* Run Script */,
  139 + 97C146EA1CF9000F007C117D /* Sources */,
  140 + 97C146EB1CF9000F007C117D /* Frameworks */,
  141 + 97C146EC1CF9000F007C117D /* Resources */,
  142 + 9705A1C41CF9048500538489 /* Embed Frameworks */,
  143 + 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
  144 + CD4A7ED612D76914EC032036 /* [CP] Embed Pods Frameworks */,
  145 + 15D85B9C4CB25F3ADA418C31 /* [CP] Copy Pods Resources */,
  146 + );
  147 + buildRules = (
  148 + );
  149 + dependencies = (
  150 + );
  151 + name = Runner;
  152 + productName = Runner;
  153 + productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
  154 + productType = "com.apple.product-type.application";
  155 + };
  156 +/* End PBXNativeTarget section */
  157 +
  158 +/* Begin PBXProject section */
  159 + 97C146E61CF9000F007C117D /* Project object */ = {
  160 + isa = PBXProject;
  161 + attributes = {
  162 + LastUpgradeCheck = 1020;
  163 + ORGANIZATIONNAME = "";
  164 + TargetAttributes = {
  165 + 97C146ED1CF9000F007C117D = {
  166 + CreatedOnToolsVersion = 7.3.1;
  167 + LastSwiftMigration = 1100;
  168 + };
  169 + };
  170 + };
  171 + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
  172 + compatibilityVersion = "Xcode 9.3";
  173 + developmentRegion = en;
  174 + hasScannedForEncodings = 0;
  175 + knownRegions = (
  176 + en,
  177 + Base,
  178 + );
  179 + mainGroup = 97C146E51CF9000F007C117D;
  180 + productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
  181 + projectDirPath = "";
  182 + projectRoot = "";
  183 + targets = (
  184 + 97C146ED1CF9000F007C117D /* Runner */,
  185 + );
  186 + };
  187 +/* End PBXProject section */
  188 +
  189 +/* Begin PBXResourcesBuildPhase section */
  190 + 97C146EC1CF9000F007C117D /* Resources */ = {
  191 + isa = PBXResourcesBuildPhase;
  192 + buildActionMask = 2147483647;
  193 + files = (
  194 + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
  195 + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
  196 + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
  197 + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
  198 + );
  199 + runOnlyForDeploymentPostprocessing = 0;
  200 + };
  201 +/* End PBXResourcesBuildPhase section */
  202 +
  203 +/* Begin PBXShellScriptBuildPhase section */
  204 + 15D85B9C4CB25F3ADA418C31 /* [CP] Copy Pods Resources */ = {
  205 + isa = PBXShellScriptBuildPhase;
  206 + buildActionMask = 2147483647;
  207 + files = (
  208 + );
  209 + inputFileListPaths = (
  210 + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
  211 + );
  212 + name = "[CP] Copy Pods Resources";
  213 + outputFileListPaths = (
  214 + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
  215 + );
  216 + runOnlyForDeploymentPostprocessing = 0;
  217 + shellPath = /bin/sh;
  218 + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
  219 + showEnvVarsInLog = 0;
  220 + };
  221 + 34DD5C6CA50A5873482FC0A4 /* [CP] Check Pods Manifest.lock */ = {
  222 + isa = PBXShellScriptBuildPhase;
  223 + buildActionMask = 2147483647;
  224 + files = (
  225 + );
  226 + inputFileListPaths = (
  227 + );
  228 + inputPaths = (
  229 + "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
  230 + "${PODS_ROOT}/Manifest.lock",
  231 + );
  232 + name = "[CP] Check Pods Manifest.lock";
  233 + outputFileListPaths = (
  234 + );
  235 + outputPaths = (
  236 + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
  237 + );
  238 + runOnlyForDeploymentPostprocessing = 0;
  239 + shellPath = /bin/sh;
  240 + 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";
  241 + showEnvVarsInLog = 0;
  242 + };
  243 + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
  244 + isa = PBXShellScriptBuildPhase;
  245 + buildActionMask = 2147483647;
  246 + files = (
  247 + );
  248 + inputPaths = (
  249 + );
  250 + name = "Thin Binary";
  251 + outputPaths = (
  252 + );
  253 + runOnlyForDeploymentPostprocessing = 0;
  254 + shellPath = /bin/sh;
  255 + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
  256 + };
  257 + 9740EEB61CF901F6004384FC /* Run Script */ = {
  258 + isa = PBXShellScriptBuildPhase;
  259 + buildActionMask = 2147483647;
  260 + files = (
  261 + );
  262 + inputPaths = (
  263 + );
  264 + name = "Run Script";
  265 + outputPaths = (
  266 + );
  267 + runOnlyForDeploymentPostprocessing = 0;
  268 + shellPath = /bin/sh;
  269 + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
  270 + };
  271 + CD4A7ED612D76914EC032036 /* [CP] Embed Pods Frameworks */ = {
  272 + isa = PBXShellScriptBuildPhase;
  273 + buildActionMask = 2147483647;
  274 + files = (
  275 + );
  276 + inputFileListPaths = (
  277 + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
  278 + );
  279 + name = "[CP] Embed Pods Frameworks";
  280 + outputFileListPaths = (
  281 + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
  282 + );
  283 + runOnlyForDeploymentPostprocessing = 0;
  284 + shellPath = /bin/sh;
  285 + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
  286 + showEnvVarsInLog = 0;
  287 + };
  288 +/* End PBXShellScriptBuildPhase section */
  289 +
  290 +/* Begin PBXSourcesBuildPhase section */
  291 + 97C146EA1CF9000F007C117D /* Sources */ = {
  292 + isa = PBXSourcesBuildPhase;
  293 + buildActionMask = 2147483647;
  294 + files = (
  295 + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
  296 + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
  297 + 7EAC3FC927A1484A005603CF /* HHPlatform.swift in Sources */,
  298 + );
  299 + runOnlyForDeploymentPostprocessing = 0;
  300 + };
  301 +/* End PBXSourcesBuildPhase section */
  302 +
  303 +/* Begin PBXVariantGroup section */
  304 + 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
  305 + isa = PBXVariantGroup;
  306 + children = (
  307 + 97C146FB1CF9000F007C117D /* Base */,
  308 + );
  309 + name = Main.storyboard;
  310 + sourceTree = "<group>";
  311 + };
  312 + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
  313 + isa = PBXVariantGroup;
  314 + children = (
  315 + 97C147001CF9000F007C117D /* Base */,
  316 + );
  317 + name = LaunchScreen.storyboard;
  318 + sourceTree = "<group>";
  319 + };
  320 +/* End PBXVariantGroup section */
  321 +
  322 +/* Begin XCBuildConfiguration section */
  323 + 249021D3217E4FDB00AE95B9 /* Profile */ = {
  324 + isa = XCBuildConfiguration;
  325 + buildSettings = {
  326 + ALWAYS_SEARCH_USER_PATHS = NO;
  327 + CLANG_ANALYZER_NONNULL = YES;
  328 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
  329 + CLANG_CXX_LIBRARY = "libc++";
  330 + CLANG_ENABLE_MODULES = YES;
  331 + CLANG_ENABLE_OBJC_ARC = YES;
  332 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  333 + CLANG_WARN_BOOL_CONVERSION = YES;
  334 + CLANG_WARN_COMMA = YES;
  335 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  336 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  337 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  338 + CLANG_WARN_EMPTY_BODY = YES;
  339 + CLANG_WARN_ENUM_CONVERSION = YES;
  340 + CLANG_WARN_INFINITE_RECURSION = YES;
  341 + CLANG_WARN_INT_CONVERSION = YES;
  342 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  343 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
  344 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  345 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  346 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  347 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  348 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  349 + CLANG_WARN_UNREACHABLE_CODE = YES;
  350 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  351 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
  352 + COPY_PHASE_STRIP = NO;
  353 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
  354 + ENABLE_NS_ASSERTIONS = NO;
  355 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  356 + GCC_C_LANGUAGE_STANDARD = gnu99;
  357 + GCC_NO_COMMON_BLOCKS = YES;
  358 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  359 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  360 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  361 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  362 + GCC_WARN_UNUSED_FUNCTION = YES;
  363 + GCC_WARN_UNUSED_VARIABLE = YES;
  364 + IPHONEOS_DEPLOYMENT_TARGET = 9.0;
  365 + MTL_ENABLE_DEBUG_INFO = NO;
  366 + SDKROOT = iphoneos;
  367 + SUPPORTED_PLATFORMS = iphoneos;
  368 + TARGETED_DEVICE_FAMILY = "1,2";
  369 + VALIDATE_PRODUCT = YES;
  370 + };
  371 + name = Profile;
  372 + };
  373 + 249021D4217E4FDB00AE95B9 /* Profile */ = {
  374 + isa = XCBuildConfiguration;
  375 + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
  376 + buildSettings = {
  377 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  378 + CLANG_ENABLE_MODULES = YES;
  379 + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
  380 + ENABLE_BITCODE = NO;
  381 + INFOPLIST_FILE = Runner/Info.plist;
  382 + LD_RUNPATH_SEARCH_PATHS = (
  383 + "$(inherited)",
  384 + "@executable_path/Frameworks",
  385 + );
  386 + PRODUCT_BUNDLE_IDENTIFIER = com.example.hhDemo;
  387 + PRODUCT_NAME = "$(TARGET_NAME)";
  388 + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
  389 + SWIFT_VERSION = 5.0;
  390 + VERSIONING_SYSTEM = "apple-generic";
  391 + };
  392 + name = Profile;
  393 + };
  394 + 97C147031CF9000F007C117D /* Debug */ = {
  395 + isa = XCBuildConfiguration;
  396 + buildSettings = {
  397 + ALWAYS_SEARCH_USER_PATHS = NO;
  398 + CLANG_ANALYZER_NONNULL = YES;
  399 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
  400 + CLANG_CXX_LIBRARY = "libc++";
  401 + CLANG_ENABLE_MODULES = YES;
  402 + CLANG_ENABLE_OBJC_ARC = YES;
  403 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  404 + CLANG_WARN_BOOL_CONVERSION = YES;
  405 + CLANG_WARN_COMMA = YES;
  406 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  407 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  408 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  409 + CLANG_WARN_EMPTY_BODY = YES;
  410 + CLANG_WARN_ENUM_CONVERSION = YES;
  411 + CLANG_WARN_INFINITE_RECURSION = YES;
  412 + CLANG_WARN_INT_CONVERSION = YES;
  413 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  414 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
  415 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  416 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  417 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  418 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  419 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  420 + CLANG_WARN_UNREACHABLE_CODE = YES;
  421 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  422 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
  423 + COPY_PHASE_STRIP = NO;
  424 + DEBUG_INFORMATION_FORMAT = dwarf;
  425 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  426 + ENABLE_TESTABILITY = YES;
  427 + GCC_C_LANGUAGE_STANDARD = gnu99;
  428 + GCC_DYNAMIC_NO_PIC = NO;
  429 + GCC_NO_COMMON_BLOCKS = YES;
  430 + GCC_OPTIMIZATION_LEVEL = 0;
  431 + GCC_PREPROCESSOR_DEFINITIONS = (
  432 + "DEBUG=1",
  433 + "$(inherited)",
  434 + );
  435 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  436 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  437 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  438 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  439 + GCC_WARN_UNUSED_FUNCTION = YES;
  440 + GCC_WARN_UNUSED_VARIABLE = YES;
  441 + IPHONEOS_DEPLOYMENT_TARGET = 9.0;
  442 + MTL_ENABLE_DEBUG_INFO = YES;
  443 + ONLY_ACTIVE_ARCH = YES;
  444 + SDKROOT = iphoneos;
  445 + TARGETED_DEVICE_FAMILY = "1,2";
  446 + };
  447 + name = Debug;
  448 + };
  449 + 97C147041CF9000F007C117D /* Release */ = {
  450 + isa = XCBuildConfiguration;
  451 + buildSettings = {
  452 + ALWAYS_SEARCH_USER_PATHS = NO;
  453 + CLANG_ANALYZER_NONNULL = YES;
  454 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
  455 + CLANG_CXX_LIBRARY = "libc++";
  456 + CLANG_ENABLE_MODULES = YES;
  457 + CLANG_ENABLE_OBJC_ARC = YES;
  458 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  459 + CLANG_WARN_BOOL_CONVERSION = YES;
  460 + CLANG_WARN_COMMA = YES;
  461 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  462 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  463 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  464 + CLANG_WARN_EMPTY_BODY = YES;
  465 + CLANG_WARN_ENUM_CONVERSION = YES;
  466 + CLANG_WARN_INFINITE_RECURSION = YES;
  467 + CLANG_WARN_INT_CONVERSION = YES;
  468 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  469 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
  470 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  471 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  472 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  473 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  474 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  475 + CLANG_WARN_UNREACHABLE_CODE = YES;
  476 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  477 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
  478 + COPY_PHASE_STRIP = NO;
  479 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
  480 + ENABLE_NS_ASSERTIONS = NO;
  481 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  482 + GCC_C_LANGUAGE_STANDARD = gnu99;
  483 + GCC_NO_COMMON_BLOCKS = YES;
  484 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  485 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  486 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  487 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  488 + GCC_WARN_UNUSED_FUNCTION = YES;
  489 + GCC_WARN_UNUSED_VARIABLE = YES;
  490 + IPHONEOS_DEPLOYMENT_TARGET = 9.0;
  491 + MTL_ENABLE_DEBUG_INFO = NO;
  492 + SDKROOT = iphoneos;
  493 + SUPPORTED_PLATFORMS = iphoneos;
  494 + SWIFT_COMPILATION_MODE = wholemodule;
  495 + SWIFT_OPTIMIZATION_LEVEL = "-O";
  496 + TARGETED_DEVICE_FAMILY = "1,2";
  497 + VALIDATE_PRODUCT = YES;
  498 + };
  499 + name = Release;
  500 + };
  501 + 97C147061CF9000F007C117D /* Debug */ = {
  502 + isa = XCBuildConfiguration;
  503 + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
  504 + buildSettings = {
  505 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  506 + CLANG_ENABLE_MODULES = YES;
  507 + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
  508 + ENABLE_BITCODE = NO;
  509 + INFOPLIST_FILE = Runner/Info.plist;
  510 + LD_RUNPATH_SEARCH_PATHS = (
  511 + "$(inherited)",
  512 + "@executable_path/Frameworks",
  513 + );
  514 + PRODUCT_BUNDLE_IDENTIFIER = com.example.hhDemo;
  515 + PRODUCT_NAME = "$(TARGET_NAME)";
  516 + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
  517 + SWIFT_OPTIMIZATION_LEVEL = "-Onone";
  518 + SWIFT_VERSION = 5.0;
  519 + VERSIONING_SYSTEM = "apple-generic";
  520 + };
  521 + name = Debug;
  522 + };
  523 + 97C147071CF9000F007C117D /* Release */ = {
  524 + isa = XCBuildConfiguration;
  525 + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
  526 + buildSettings = {
  527 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  528 + CLANG_ENABLE_MODULES = YES;
  529 + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
  530 + ENABLE_BITCODE = NO;
  531 + INFOPLIST_FILE = Runner/Info.plist;
  532 + LD_RUNPATH_SEARCH_PATHS = (
  533 + "$(inherited)",
  534 + "@executable_path/Frameworks",
  535 + );
  536 + PRODUCT_BUNDLE_IDENTIFIER = com.example.hhDemo;
  537 + PRODUCT_NAME = "$(TARGET_NAME)";
  538 + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
  539 + SWIFT_VERSION = 5.0;
  540 + VERSIONING_SYSTEM = "apple-generic";
  541 + };
  542 + name = Release;
  543 + };
  544 +/* End XCBuildConfiguration section */
  545 +
  546 +/* Begin XCConfigurationList section */
  547 + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
  548 + isa = XCConfigurationList;
  549 + buildConfigurations = (
  550 + 97C147031CF9000F007C117D /* Debug */,
  551 + 97C147041CF9000F007C117D /* Release */,
  552 + 249021D3217E4FDB00AE95B9 /* Profile */,
  553 + );
  554 + defaultConfigurationIsVisible = 0;
  555 + defaultConfigurationName = Release;
  556 + };
  557 + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
  558 + isa = XCConfigurationList;
  559 + buildConfigurations = (
  560 + 97C147061CF9000F007C117D /* Debug */,
  561 + 97C147071CF9000F007C117D /* Release */,
  562 + 249021D4217E4FDB00AE95B9 /* Profile */,
  563 + );
  564 + defaultConfigurationIsVisible = 0;
  565 + defaultConfigurationName = Release;
  566 + };
  567 +/* End XCConfigurationList section */
  568 + };
  569 + rootObject = 97C146E61CF9000F007C117D /* Project object */;
  570 +}
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Workspace
  3 + version = "1.0">
  4 + <FileRef
  5 + location = "self:">
  6 + </FileRef>
  7 +</Workspace>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>IDEDidComputeMac32BitWarning</key>
  6 + <true/>
  7 +</dict>
  8 +</plist>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>PreviewsEnabled</key>
  6 + <false/>
  7 +</dict>
  8 +</plist>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Scheme
  3 + LastUpgradeVersion = "1020"
  4 + version = "1.3">
  5 + <BuildAction
  6 + parallelizeBuildables = "YES"
  7 + buildImplicitDependencies = "YES">
  8 + <BuildActionEntries>
  9 + <BuildActionEntry
  10 + buildForTesting = "YES"
  11 + buildForRunning = "YES"
  12 + buildForProfiling = "YES"
  13 + buildForArchiving = "YES"
  14 + buildForAnalyzing = "YES">
  15 + <BuildableReference
  16 + BuildableIdentifier = "primary"
  17 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  18 + BuildableName = "Runner.app"
  19 + BlueprintName = "Runner"
  20 + ReferencedContainer = "container:Runner.xcodeproj">
  21 + </BuildableReference>
  22 + </BuildActionEntry>
  23 + </BuildActionEntries>
  24 + </BuildAction>
  25 + <TestAction
  26 + buildConfiguration = "Debug"
  27 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
  28 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
  29 + shouldUseLaunchSchemeArgsEnv = "YES">
  30 + <Testables>
  31 + </Testables>
  32 + <MacroExpansion>
  33 + <BuildableReference
  34 + BuildableIdentifier = "primary"
  35 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  36 + BuildableName = "Runner.app"
  37 + BlueprintName = "Runner"
  38 + ReferencedContainer = "container:Runner.xcodeproj">
  39 + </BuildableReference>
  40 + </MacroExpansion>
  41 + <AdditionalOptions>
  42 + </AdditionalOptions>
  43 + </TestAction>
  44 + <LaunchAction
  45 + buildConfiguration = "Debug"
  46 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
  47 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
  48 + launchStyle = "0"
  49 + useCustomWorkingDirectory = "NO"
  50 + ignoresPersistentStateOnLaunch = "NO"
  51 + debugDocumentVersioning = "YES"
  52 + debugServiceExtension = "internal"
  53 + allowLocationSimulation = "YES">
  54 + <BuildableProductRunnable
  55 + runnableDebuggingMode = "0">
  56 + <BuildableReference
  57 + BuildableIdentifier = "primary"
  58 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  59 + BuildableName = "Runner.app"
  60 + BlueprintName = "Runner"
  61 + ReferencedContainer = "container:Runner.xcodeproj">
  62 + </BuildableReference>
  63 + </BuildableProductRunnable>
  64 + <AdditionalOptions>
  65 + </AdditionalOptions>
  66 + </LaunchAction>
  67 + <ProfileAction
  68 + buildConfiguration = "Profile"
  69 + shouldUseLaunchSchemeArgsEnv = "YES"
  70 + savedToolIdentifier = ""
  71 + useCustomWorkingDirectory = "NO"
  72 + debugDocumentVersioning = "YES">
  73 + <BuildableProductRunnable
  74 + runnableDebuggingMode = "0">
  75 + <BuildableReference
  76 + BuildableIdentifier = "primary"
  77 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  78 + BuildableName = "Runner.app"
  79 + BlueprintName = "Runner"
  80 + ReferencedContainer = "container:Runner.xcodeproj">
  81 + </BuildableReference>
  82 + </BuildableProductRunnable>
  83 + </ProfileAction>
  84 + <AnalyzeAction
  85 + buildConfiguration = "Debug">
  86 + </AnalyzeAction>
  87 + <ArchiveAction
  88 + buildConfiguration = "Release"
  89 + revealArchiveInOrganizer = "YES">
  90 + </ArchiveAction>
  91 +</Scheme>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Workspace
  3 + version = "1.0">
  4 + <FileRef
  5 + location = "group:Runner.xcodeproj">
  6 + </FileRef>
  7 + <FileRef
  8 + location = "group:Pods/Pods.xcodeproj">
  9 + </FileRef>
  10 +</Workspace>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>IDEDidComputeMac32BitWarning</key>
  6 + <true/>
  7 +</dict>
  8 +</plist>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>PreviewsEnabled</key>
  6 + <false/>
  7 +</dict>
  8 +</plist>
  1 +import UIKit
  2 +import Flutter
  3 +
  4 +@UIApplicationMain
  5 +@objc class AppDelegate: FlutterAppDelegate {
  6 + override func application(
  7 + _ application: UIApplication,
  8 + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  9 + ) -> Bool {
  10 + GeneratedPluginRegistrant.register(with: self)
  11 +
  12 + HHPlatform.default.start()
  13 +
  14 + return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  15 + }
  16 +}
  1 +{
  2 + "images" : [
  3 + {
  4 + "size" : "20x20",
  5 + "idiom" : "iphone",
  6 + "filename" : "Icon-App-20x20@2x.png",
  7 + "scale" : "2x"
  8 + },
  9 + {
  10 + "size" : "20x20",
  11 + "idiom" : "iphone",
  12 + "filename" : "Icon-App-20x20@3x.png",
  13 + "scale" : "3x"
  14 + },
  15 + {
  16 + "size" : "29x29",
  17 + "idiom" : "iphone",
  18 + "filename" : "Icon-App-29x29@1x.png",
  19 + "scale" : "1x"
  20 + },
  21 + {
  22 + "size" : "29x29",
  23 + "idiom" : "iphone",
  24 + "filename" : "Icon-App-29x29@2x.png",
  25 + "scale" : "2x"
  26 + },
  27 + {
  28 + "size" : "29x29",
  29 + "idiom" : "iphone",
  30 + "filename" : "Icon-App-29x29@3x.png",
  31 + "scale" : "3x"
  32 + },
  33 + {
  34 + "size" : "40x40",
  35 + "idiom" : "iphone",
  36 + "filename" : "Icon-App-40x40@2x.png",
  37 + "scale" : "2x"
  38 + },
  39 + {
  40 + "size" : "40x40",
  41 + "idiom" : "iphone",
  42 + "filename" : "Icon-App-40x40@3x.png",
  43 + "scale" : "3x"
  44 + },
  45 + {
  46 + "size" : "60x60",
  47 + "idiom" : "iphone",
  48 + "filename" : "Icon-App-60x60@2x.png",
  49 + "scale" : "2x"
  50 + },
  51 + {
  52 + "size" : "60x60",
  53 + "idiom" : "iphone",
  54 + "filename" : "Icon-App-60x60@3x.png",
  55 + "scale" : "3x"
  56 + },
  57 + {
  58 + "size" : "20x20",
  59 + "idiom" : "ipad",
  60 + "filename" : "Icon-App-20x20@1x.png",
  61 + "scale" : "1x"
  62 + },
  63 + {
  64 + "size" : "20x20",
  65 + "idiom" : "ipad",
  66 + "filename" : "Icon-App-20x20@2x.png",
  67 + "scale" : "2x"
  68 + },
  69 + {
  70 + "size" : "29x29",
  71 + "idiom" : "ipad",
  72 + "filename" : "Icon-App-29x29@1x.png",
  73 + "scale" : "1x"
  74 + },
  75 + {
  76 + "size" : "29x29",
  77 + "idiom" : "ipad",
  78 + "filename" : "Icon-App-29x29@2x.png",
  79 + "scale" : "2x"
  80 + },
  81 + {
  82 + "size" : "40x40",
  83 + "idiom" : "ipad",
  84 + "filename" : "Icon-App-40x40@1x.png",
  85 + "scale" : "1x"
  86 + },
  87 + {
  88 + "size" : "40x40",
  89 + "idiom" : "ipad",
  90 + "filename" : "Icon-App-40x40@2x.png",
  91 + "scale" : "2x"
  92 + },
  93 + {
  94 + "size" : "76x76",
  95 + "idiom" : "ipad",
  96 + "filename" : "Icon-App-76x76@1x.png",
  97 + "scale" : "1x"
  98 + },
  99 + {
  100 + "size" : "76x76",
  101 + "idiom" : "ipad",
  102 + "filename" : "Icon-App-76x76@2x.png",
  103 + "scale" : "2x"
  104 + },
  105 + {
  106 + "size" : "83.5x83.5",
  107 + "idiom" : "ipad",
  108 + "filename" : "Icon-App-83.5x83.5@2x.png",
  109 + "scale" : "2x"
  110 + },
  111 + {
  112 + "size" : "1024x1024",
  113 + "idiom" : "ios-marketing",
  114 + "filename" : "Icon-App-1024x1024@1x.png",
  115 + "scale" : "1x"
  116 + }
  117 + ],
  118 + "info" : {
  119 + "version" : 1,
  120 + "author" : "xcode"
  121 + }
  122 +}
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "filename" : "LaunchImage.png",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "idiom" : "universal",
  10 + "filename" : "LaunchImage@2x.png",
  11 + "scale" : "2x"
  12 + },
  13 + {
  14 + "idiom" : "universal",
  15 + "filename" : "LaunchImage@3x.png",
  16 + "scale" : "3x"
  17 + }
  18 + ],
  19 + "info" : {
  20 + "version" : 1,
  21 + "author" : "xcode"
  22 + }
  23 +}
  1 +# Launch Screen Assets
  2 +
  3 +You can customize the launch screen with your own desired assets by replacing the image files in this directory.
  4 +
  5 +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.
  1 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2 +<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">
  3 + <dependencies>
  4 + <deployment identifier="iOS"/>
  5 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
  6 + </dependencies>
  7 + <scenes>
  8 + <!--View Controller-->
  9 + <scene sceneID="EHf-IW-A2E">
  10 + <objects>
  11 + <viewController id="01J-lp-oVM" sceneMemberID="viewController">
  12 + <layoutGuides>
  13 + <viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/>
  14 + <viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/>
  15 + </layoutGuides>
  16 + <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
  17 + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
  18 + <subviews>
  19 + <imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
  20 + </imageView>
  21 + </subviews>
  22 + <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
  23 + <constraints>
  24 + <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/>
  25 + <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/>
  26 + </constraints>
  27 + </view>
  28 + </viewController>
  29 + <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
  30 + </objects>
  31 + <point key="canvasLocation" x="53" y="375"/>
  32 + </scene>
  33 + </scenes>
  34 + <resources>
  35 + <image name="LaunchImage" width="168" height="185"/>
  36 + </resources>
  37 +</document>
  1 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2 +<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">
  3 + <dependencies>
  4 + <deployment identifier="iOS"/>
  5 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
  6 + </dependencies>
  7 + <scenes>
  8 + <!--Flutter View Controller-->
  9 + <scene sceneID="tne-QT-ifu">
  10 + <objects>
  11 + <viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">
  12 + <layoutGuides>
  13 + <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
  14 + <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
  15 + </layoutGuides>
  16 + <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
  17 + <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
  18 + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
  19 + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
  20 + </view>
  21 + </viewController>
  22 + <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
  23 + </objects>
  24 + </scene>
  25 + </scenes>
  26 +</document>
  1 +//
  2 +// FLPlatform.swift
  3 +// Runner
  4 +//
  5 +// Created by 程言方 on 2021/4/23.
  6 +//
  7 +
  8 +import Foundation
  9 +import hhVDoctorSDK
  10 +
  11 +
  12 +class HHPlatform: NSObject {
  13 +
  14 + static let `default` = HHPlatform()
  15 +
  16 + private let channelId = "com.hh-medic.channel"
  17 +
  18 + private var channel: FlutterMethodChannel?
  19 +
  20 +
  21 + func start() {
  22 + self.startChannel()
  23 + }
  24 +
  25 + private func startChannel() {
  26 +
  27 + let delegate = UIApplication.shared.delegate as! AppDelegate
  28 +
  29 + guard let vc = delegate.window.rootViewController as? FlutterViewController else {
  30 + print("vc is none")
  31 + return
  32 + }
  33 +
  34 + channel = FlutterMethodChannel(name: channelId, binaryMessenger: vc.binaryMessenger)
  35 +
  36 + channel?.setMethodCallHandler { [weak self] (call, result) in
  37 +
  38 + guard let params = call.arguments as? [String: Any] else {return}
  39 +
  40 + switch call.method{
  41 +
  42 + case "skipToChatHome":
  43 +
  44 + self?.skipToChatHome(vc: vc, arguments: params)
  45 +
  46 + break
  47 +
  48 + default:
  49 + break
  50 + }
  51 +
  52 + }
  53 + }
  54 +
  55 + func skipToChatHome(vc: UIViewController ,arguments: [String: Any]){
  56 +
  57 + guard let sdkProductId = arguments["sdkProductId"] as? String else {return}
  58 + guard let userToken = arguments["userToken"] as? String else {return}
  59 + let isDevelop = (arguments["isDevelop"] as? Bool) ?? false
  60 +
  61 + let option = HHSDKOptions(productId: sdkProductId, isDebug: false, isDevelop: isDevelop)
  62 + HHMSDK.default.start(option: option)
  63 +
  64 + HHMSDK.default.login(userToken: userToken) { erroMsg in
  65 +
  66 + guard erroMsg == nil else {return}
  67 + HHMSDK.default.skipChatHome(skipType: .present, vc: vc)
  68 +
  69 + }
  70 +
  71 +
  72 + }
  73 +
  74 +}
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>CFBundleDevelopmentRegion</key>
  6 + <string>$(DEVELOPMENT_LANGUAGE)</string>
  7 + <key>CFBundleExecutable</key>
  8 + <string>$(EXECUTABLE_NAME)</string>
  9 + <key>CFBundleIdentifier</key>
  10 + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
  11 + <key>CFBundleInfoDictionaryVersion</key>
  12 + <string>6.0</string>
  13 + <key>CFBundleName</key>
  14 + <string>hh_demo</string>
  15 + <key>CFBundlePackageType</key>
  16 + <string>APPL</string>
  17 + <key>CFBundleShortVersionString</key>
  18 + <string>$(FLUTTER_BUILD_NAME)</string>
  19 + <key>CFBundleSignature</key>
  20 + <string>????</string>
  21 + <key>CFBundleVersion</key>
  22 + <string>$(FLUTTER_BUILD_NUMBER)</string>
  23 + <key>LSRequiresIPhoneOS</key>
  24 + <true/>
  25 + <key>UILaunchStoryboardName</key>
  26 + <string>LaunchScreen</string>
  27 + <key>UIMainStoryboardFile</key>
  28 + <string>Main</string>
  29 + <key>UISupportedInterfaceOrientations</key>
  30 + <array>
  31 + <string>UIInterfaceOrientationPortrait</string>
  32 + <string>UIInterfaceOrientationLandscapeLeft</string>
  33 + <string>UIInterfaceOrientationLandscapeRight</string>
  34 + </array>
  35 + <key>UISupportedInterfaceOrientations~ipad</key>
  36 + <array>
  37 + <string>UIInterfaceOrientationPortrait</string>
  38 + <string>UIInterfaceOrientationPortraitUpsideDown</string>
  39 + <string>UIInterfaceOrientationLandscapeLeft</string>
  40 + <string>UIInterfaceOrientationLandscapeRight</string>
  41 + </array>
  42 + <key>UIViewControllerBasedStatusBarAppearance</key>
  43 + <false/>
  44 + <key>NSPhotoLibraryUsageDescription</key>
  45 + <string>应用需要使用相册权限,以便您向医生发送健康资料。</string>
  46 + <key>NSCameraUsageDescription</key>
  47 + <string>应用需使用相机权限,以便您向医生进行视频咨询。</string>
  48 + <key>NSMicrophoneUsageDescription</key>
  49 + <string>应用需使用麦克风权限,以便您向医生进行视频咨询。</string>
  50 +</dict>
  51 +</plist>
  1 +#import "GeneratedPluginRegistrant.h"
  1 +
  2 +import 'package:flutter/cupertino.dart';
  3 +import 'package:flutter/material.dart';
  4 +import 'package:flutter/services.dart';
  5 +
  6 +void main() {
  7 + runApp(MyApp());
  8 +}
  9 +
  10 +class MyApp extends StatelessWidget {
  11 + // This widget is the root of your application.
  12 + @override
  13 + Widget build(BuildContext context) {
  14 + return MaterialApp(
  15 + title: 'Flutter Demo',
  16 + theme: ThemeData(
  17 +
  18 + primarySwatch: Colors.blue,
  19 + ),
  20 + home: MyHomePage(title: '视频医生flutter demo'),
  21 + );
  22 + }
  23 +}
  24 +
  25 +class MyHomePage extends StatefulWidget {
  26 +
  27 +
  28 + MyHomePage({Key? key, required this.title}) : super(key: key);
  29 +
  30 +
  31 + final String title;
  32 +
  33 + @override
  34 + _MyHomePageState createState() => _MyHomePageState();
  35 +}
  36 +
  37 +class _MyHomePageState extends State<MyHomePage> {
  38 +
  39 + // 构造通道 原生也通过'com.hh-medic.channel'进行接收
  40 + final _hhPlatform = MethodChannel('com.hh-medic.channel');
  41 +
  42 + void skipToChatHome(){
  43 + _hhPlatform.invokeMapMethod("skipToChatHome" , {
  44 + "sdkProductId": "3000", // 分配的产品ID
  45 + "isDevelop": true, // 是否开始测试服模式,开启后连接测试服务器
  46 + "userToken": "3BCC438BBBE99F86C48A3C1DB11A43843F0D04F68EA2608F6783B874E4F50EEF" // 用户 userToken
  47 + });
  48 + }
  49 +
  50 + @override
  51 + Widget build(BuildContext context) {
  52 +
  53 + return Scaffold(
  54 + appBar: AppBar(
  55 +
  56 + title: Text(widget.title),
  57 + ),
  58 + body: Center(
  59 +
  60 + child: Column(
  61 +
  62 + mainAxisAlignment: MainAxisAlignment.center,
  63 + children: <Widget>[
  64 +
  65 + TextButton(onPressed: skipToChatHome, child: Text("跳转到首页"))
  66 +
  67 + ],
  68 + ),
  69 + ),
  70 + );
  71 + }
  72 +}
  1 +# Generated by pub
  2 +# See https://dart.dev/tools/pub/glossary#lockfile
  3 +packages:
  4 + async:
  5 + dependency: transitive
  6 + description:
  7 + name: async
  8 + url: "https://pub.flutter-io.cn"
  9 + source: hosted
  10 + version: "2.6.1"
  11 + boolean_selector:
  12 + dependency: transitive
  13 + description:
  14 + name: boolean_selector
  15 + url: "https://pub.flutter-io.cn"
  16 + source: hosted
  17 + version: "2.1.0"
  18 + characters:
  19 + dependency: transitive
  20 + description:
  21 + name: characters
  22 + url: "https://pub.flutter-io.cn"
  23 + source: hosted
  24 + version: "1.1.0"
  25 + charcode:
  26 + dependency: transitive
  27 + description:
  28 + name: charcode
  29 + url: "https://pub.flutter-io.cn"
  30 + source: hosted
  31 + version: "1.2.0"
  32 + clock:
  33 + dependency: transitive
  34 + description:
  35 + name: clock
  36 + url: "https://pub.flutter-io.cn"
  37 + source: hosted
  38 + version: "1.1.0"
  39 + collection:
  40 + dependency: transitive
  41 + description:
  42 + name: collection
  43 + url: "https://pub.flutter-io.cn"
  44 + source: hosted
  45 + version: "1.15.0"
  46 + cupertino_icons:
  47 + dependency: "direct main"
  48 + description:
  49 + name: cupertino_icons
  50 + url: "https://pub.flutter-io.cn"
  51 + source: hosted
  52 + version: "1.0.4"
  53 + fake_async:
  54 + dependency: transitive
  55 + description:
  56 + name: fake_async
  57 + url: "https://pub.flutter-io.cn"
  58 + source: hosted
  59 + version: "1.2.0"
  60 + flutter:
  61 + dependency: "direct main"
  62 + description: flutter
  63 + source: sdk
  64 + version: "0.0.0"
  65 + flutter_test:
  66 + dependency: "direct dev"
  67 + description: flutter
  68 + source: sdk
  69 + version: "0.0.0"
  70 + matcher:
  71 + dependency: transitive
  72 + description:
  73 + name: matcher
  74 + url: "https://pub.flutter-io.cn"
  75 + source: hosted
  76 + version: "0.12.10"
  77 + meta:
  78 + dependency: transitive
  79 + description:
  80 + name: meta
  81 + url: "https://pub.flutter-io.cn"
  82 + source: hosted
  83 + version: "1.3.0"
  84 + path:
  85 + dependency: transitive
  86 + description:
  87 + name: path
  88 + url: "https://pub.flutter-io.cn"
  89 + source: hosted
  90 + version: "1.8.0"
  91 + sky_engine:
  92 + dependency: transitive
  93 + description: flutter
  94 + source: sdk
  95 + version: "0.0.99"
  96 + source_span:
  97 + dependency: transitive
  98 + description:
  99 + name: source_span
  100 + url: "https://pub.flutter-io.cn"
  101 + source: hosted
  102 + version: "1.8.1"
  103 + stack_trace:
  104 + dependency: transitive
  105 + description:
  106 + name: stack_trace
  107 + url: "https://pub.flutter-io.cn"
  108 + source: hosted
  109 + version: "1.10.0"
  110 + stream_channel:
  111 + dependency: transitive
  112 + description:
  113 + name: stream_channel
  114 + url: "https://pub.flutter-io.cn"
  115 + source: hosted
  116 + version: "2.1.0"
  117 + string_scanner:
  118 + dependency: transitive
  119 + description:
  120 + name: string_scanner
  121 + url: "https://pub.flutter-io.cn"
  122 + source: hosted
  123 + version: "1.1.0"
  124 + term_glyph:
  125 + dependency: transitive
  126 + description:
  127 + name: term_glyph
  128 + url: "https://pub.flutter-io.cn"
  129 + source: hosted
  130 + version: "1.2.0"
  131 + test_api:
  132 + dependency: transitive
  133 + description:
  134 + name: test_api
  135 + url: "https://pub.flutter-io.cn"
  136 + source: hosted
  137 + version: "0.3.0"
  138 + typed_data:
  139 + dependency: transitive
  140 + description:
  141 + name: typed_data
  142 + url: "https://pub.flutter-io.cn"
  143 + source: hosted
  144 + version: "1.3.0"
  145 + vector_math:
  146 + dependency: transitive
  147 + description:
  148 + name: vector_math
  149 + url: "https://pub.flutter-io.cn"
  150 + source: hosted
  151 + version: "2.1.0"
  152 +sdks:
  153 + dart: ">=2.12.0 <3.0.0"
  1 +name: hh_demo
  2 +description: A new Flutter project.
  3 +
  4 +# The following line prevents the package from being accidentally published to
  5 +# pub.dev using `pub publish`. This is preferred for private packages.
  6 +publish_to: 'none' # Remove this line if you wish to publish to pub.dev
  7 +
  8 +# The following defines the version and build number for your application.
  9 +# A version number is three numbers separated by dots, like 1.2.43
  10 +# followed by an optional build number separated by a +.
  11 +# Both the version and the builder number may be overridden in flutter
  12 +# build by specifying --build-name and --build-number, respectively.
  13 +# In Android, build-name is used as versionName while build-number used as versionCode.
  14 +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
  15 +# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
  16 +# Read more about iOS versioning at
  17 +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
  18 +version: 1.0.0+1
  19 +
  20 +environment:
  21 + sdk: ">=2.12.0 <3.0.0"
  22 +
  23 +dependencies:
  24 + flutter:
  25 + sdk: flutter
  26 +
  27 +
  28 + # The following adds the Cupertino Icons font to your application.
  29 + # Use with the CupertinoIcons class for iOS style icons.
  30 + cupertino_icons: ^1.0.2
  31 +
  32 +dev_dependencies:
  33 + flutter_test:
  34 + sdk: flutter
  35 +
  36 +# For information on the generic Dart part of this file, see the
  37 +# following page: https://dart.dev/tools/pub/pubspec
  38 +
  39 +# The following section is specific to Flutter.
  40 +flutter:
  41 +
  42 + # The following line ensures that the Material Icons font is
  43 + # included with your application, so that you can use the icons in
  44 + # the material Icons class.
  45 + uses-material-design: true
  46 +
  47 + # To add assets to your application, add an assets section, like this:
  48 + # assets:
  49 + # - images/a_dot_burr.jpeg
  50 + # - images/a_dot_ham.jpeg
  51 +
  52 + # An image asset can refer to one or more resolution-specific "variants", see
  53 + # https://flutter.dev/assets-and-images/#resolution-aware.
  54 +
  55 + # For details regarding adding assets from package dependencies, see
  56 + # https://flutter.dev/assets-and-images/#from-packages
  57 +
  58 + # To add custom fonts to your application, add a fonts section here,
  59 + # in this "flutter" section. Each entry in this list should have a
  60 + # "family" key with the font family name, and a "fonts" key with a
  61 + # list giving the asset and other descriptors for the font. For
  62 + # example:
  63 + # fonts:
  64 + # - family: Schyler
  65 + # fonts:
  66 + # - asset: fonts/Schyler-Regular.ttf
  67 + # - asset: fonts/Schyler-Italic.ttf
  68 + # style: italic
  69 + # - family: Trajan Pro
  70 + # fonts:
  71 + # - asset: fonts/TrajanPro.ttf
  72 + # - asset: fonts/TrajanPro_Bold.ttf
  73 + # weight: 700
  74 + #
  75 + # For details regarding fonts from package dependencies,
  76 + # see https://flutter.dev/custom-fonts/#from-packages
  1 +// This is a basic Flutter widget test.
  2 +//
  3 +// To perform an interaction with a widget in your test, use the WidgetTester
  4 +// utility that Flutter provides. For example, you can send tap and scroll
  5 +// gestures. You can also use WidgetTester to find child widgets in the widget
  6 +// tree, read text, and verify that the values of widget properties are correct.
  7 +
  8 +import 'package:flutter/material.dart';
  9 +import 'package:flutter_test/flutter_test.dart';
  10 +
  11 +import 'package:hh_demo/main.dart';
  12 +
  13 +void main() {
  14 + testWidgets('Counter increments smoke test', (WidgetTester tester) async {
  15 + // Build our app and trigger a frame.
  16 + await tester.pumpWidget(MyApp());
  17 +
  18 + // Verify that our counter starts at 0.
  19 + expect(find.text('0'), findsOneWidget);
  20 + expect(find.text('1'), findsNothing);
  21 +
  22 + // Tap the '+' icon and trigger a frame.
  23 + await tester.tap(find.byIcon(Icons.add));
  24 + await tester.pump();
  25 +
  26 + // Verify that our counter has incremented.
  27 + expect(find.text('0'), findsNothing);
  28 + expect(find.text('1'), findsOneWidget);
  29 + });
  30 +}