ソースを参照

初始化

tags/0.0.1
Weller 4年前
コミット
07176c0ff0
100個のファイルの変更3280行の追加0行の削除
  1. +7
    -0
      .gitignore
  2. +116
    -0
      .idea/codeStyles/Project.xml
  3. +19
    -0
      .idea/libraries/Dart_SDK.xml
  4. +13
    -0
      .idea/libraries/Flutter_Plugins.xml
  5. +9
    -0
      .idea/libraries/Flutter_for_Android.xml
  6. +7
    -0
      .idea/misc.xml
  7. +10
    -0
      .idea/modules.xml
  8. +6
    -0
      .idea/runConfigurations/example_lib_main_dart.xml
  9. +228
    -0
      .idea/workspace.xml
  10. +10
    -0
      .metadata
  11. +3
    -0
      CHANGELOG.md
  12. +1
    -0
      LICENSE
  13. +14
    -0
      README.md
  14. +8
    -0
      android/.gitignore
  15. +34
    -0
      android/build.gradle
  16. +4
    -0
      android/gradle.properties
  17. +5
    -0
      android/gradle/wrapper/gradle-wrapper.properties
  18. +1
    -0
      android/settings.gradle
  19. +3
    -0
      android/src/main/AndroidManifest.xml
  20. +45
    -0
      android/src/main/java/cn/zhios/zhiying_comm/ZhiyingCommPlugin.java
  21. +37
    -0
      example/.gitignore
  22. +10
    -0
      example/.metadata
  23. +16
    -0
      example/README.md
  24. +7
    -0
      example/android/.gitignore
  25. +61
    -0
      example/android/app/build.gradle
  26. +7
    -0
      example/android/app/src/debug/AndroidManifest.xml
  27. +30
    -0
      example/android/app/src/main/AndroidManifest.xml
  28. +13
    -0
      example/android/app/src/main/java/cn/zhios/zhiying_comm_example/MainActivity.java
  29. +12
    -0
      example/android/app/src/main/res/drawable/launch_background.xml
  30. バイナリ
     
  31. バイナリ
     
  32. バイナリ
     
  33. バイナリ
     
  34. バイナリ
     
  35. +8
    -0
      example/android/app/src/main/res/values/styles.xml
  36. +7
    -0
      example/android/app/src/profile/AndroidManifest.xml
  37. +29
    -0
      example/android/build.gradle
  38. +4
    -0
      example/android/gradle.properties
  39. +6
    -0
      example/android/gradle/wrapper/gradle-wrapper.properties
  40. +15
    -0
      example/android/settings.gradle
  41. +32
    -0
      example/ios/.gitignore
  42. +26
    -0
      example/ios/Flutter/AppFrameworkInfo.plist
  43. +2
    -0
      example/ios/Flutter/Debug.xcconfig
  44. +2
    -0
      example/ios/Flutter/Release.xcconfig
  45. +87
    -0
      example/ios/Podfile
  46. +511
    -0
      example/ios/Runner.xcodeproj/project.pbxproj
  47. +7
    -0
      example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
  48. +91
    -0
      example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
  49. +7
    -0
      example/ios/Runner.xcworkspace/contents.xcworkspacedata
  50. +8
    -0
      example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
  51. +6
    -0
      example/ios/Runner/AppDelegate.h
  52. +13
    -0
      example/ios/Runner/AppDelegate.m
  53. +122
    -0
      example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
  54. バイナリ
     
  55. バイナリ
     
  56. バイナリ
     
  57. バイナリ
     
  58. バイナリ
     
  59. バイナリ
     
  60. バイナリ
     
  61. バイナリ
     
  62. バイナリ
     
  63. バイナリ
     
  64. バイナリ
     
  65. バイナリ
     
  66. バイナリ
     
  67. バイナリ
     
  68. バイナリ
     
  69. +23
    -0
      example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
  70. バイナリ
     
  71. バイナリ
     
  72. バイナリ
     
  73. +5
    -0
      example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
  74. +37
    -0
      example/ios/Runner/Base.lproj/LaunchScreen.storyboard
  75. +26
    -0
      example/ios/Runner/Base.lproj/Main.storyboard
  76. +45
    -0
      example/ios/Runner/Info.plist
  77. +9
    -0
      example/ios/Runner/main.m
  78. +33
    -0
      example/lib/main.dart
  79. +264
    -0
      example/pubspec.lock
  80. +63
    -0
      example/pubspec.yaml
  81. +27
    -0
      example/test/widget_test.dart
  82. +37
    -0
      ios/.gitignore
  83. +0
    -0
     
  84. +24
    -0
      ios/Classes/ZhiyingCommNative.h
  85. +70
    -0
      ios/Classes/ZhiyingCommNative.m
  86. +38
    -0
      ios/Classes/ZhiyingCommNativeProtocol.h
  87. +30
    -0
      ios/Classes/ZhiyingCommNativeResult.h
  88. +34
    -0
      ios/Classes/ZhiyingCommNativeResult.m
  89. +4
    -0
      ios/Classes/ZhiyingCommPlugin.h
  90. +20
    -0
      ios/Classes/ZhiyingCommPlugin.m
  91. +29
    -0
      ios/zhiying_comm.podspec
  92. +34
    -0
      lib/native/native_router.dart
  93. +10
    -0
      lib/pages/empty_page.dart
  94. +32
    -0
      lib/util/color.dart
  95. +80
    -0
      lib/util/encode_util.dart
  96. +17
    -0
      lib/util/enum_util.dart
  97. +145
    -0
      lib/util/native_util.dart
  98. +47
    -0
      lib/util/navigator_observer.dart
  99. +326
    -0
      lib/util/net_util.dart
  100. +52
    -0
      lib/util/page_factory.dart

+ 7
- 0
.gitignore ファイルの表示

@@ -0,0 +1,7 @@
.DS_Store
.dart_tool/

.packages
.pub/

build/

+ 116
- 0
.idea/codeStyles/Project.xml ファイルの表示

@@ -0,0 +1,116 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<codeStyleSettings language="XML">
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
</indentOptions>
<arrangement>
<rules>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:android</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:id</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>style</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>ANDROID_ATTRIBUTE_ORDER</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>.*</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
</rules>
</arrangement>
</codeStyleSettings>
</code_scheme>
</component>

+ 19
- 0
.idea/libraries/Dart_SDK.xml ファイルの表示

@@ -0,0 +1,19 @@
<component name="libraryTable">
<library name="Dart SDK">
<CLASSES>
<root url="file:///Users/fnuser/Documents/flutter-sdk/bin/cache/dart-sdk/lib/async" />
<root url="file:///Users/fnuser/Documents/flutter-sdk/bin/cache/dart-sdk/lib/collection" />
<root url="file:///Users/fnuser/Documents/flutter-sdk/bin/cache/dart-sdk/lib/convert" />
<root url="file:///Users/fnuser/Documents/flutter-sdk/bin/cache/dart-sdk/lib/core" />
<root url="file:///Users/fnuser/Documents/flutter-sdk/bin/cache/dart-sdk/lib/developer" />
<root url="file:///Users/fnuser/Documents/flutter-sdk/bin/cache/dart-sdk/lib/html" />
<root url="file:///Users/fnuser/Documents/flutter-sdk/bin/cache/dart-sdk/lib/io" />
<root url="file:///Users/fnuser/Documents/flutter-sdk/bin/cache/dart-sdk/lib/isolate" />
<root url="file:///Users/fnuser/Documents/flutter-sdk/bin/cache/dart-sdk/lib/math" />
<root url="file:///Users/fnuser/Documents/flutter-sdk/bin/cache/dart-sdk/lib/mirrors" />
<root url="file:///Users/fnuser/Documents/flutter-sdk/bin/cache/dart-sdk/lib/typed_data" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

+ 13
- 0
.idea/libraries/Flutter_Plugins.xml ファイルの表示

@@ -0,0 +1,13 @@
<component name="libraryTable">
<library name="Flutter Plugins" type="FlutterPluginsLibraryType">
<CLASSES>
<root url="file://$PROJECT_DIR$" />
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/device_info-0.4.2+7" />
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/flutter_native_image-0.0.5+2" />
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/package_info-0.4.3" />
<root url="file://$USER_HOME$/.pub-cache/hosted/pub.flutter-io.cn/fluttertoast-7.0.4" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

+ 9
- 0
.idea/libraries/Flutter_for_Android.xml ファイルの表示

@@ -0,0 +1,9 @@
<component name="libraryTable">
<library name="Flutter for Android">
<CLASSES>
<root url="jar:///Users/fnuser/Documents/flutter-sdk/bin/cache/artifacts/engine/android-arm/flutter.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

+ 7
- 0
.idea/misc.xml ファイルの表示

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Android API 30 Platform" project-jdk-type="Android SDK" />
<component name="ProjectType">
<option name="id" value="io.flutter" />
</component>
</project>

+ 10
- 0
.idea/modules.xml ファイルの表示

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/zhiying_comm.iml" filepath="$PROJECT_DIR$/zhiying_comm.iml" />
<module fileurl="file://$PROJECT_DIR$/android/zhiying_comm_android.iml" filepath="$PROJECT_DIR$/android/zhiying_comm_android.iml" />
<module fileurl="file://$PROJECT_DIR$/example/android/zhiying_comm_example_android.iml" filepath="$PROJECT_DIR$/example/android/zhiying_comm_example_android.iml" />
</modules>
</component>
</project>

+ 6
- 0
.idea/runConfigurations/example_lib_main_dart.xml ファイルの表示

@@ -0,0 +1,6 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="example/lib/main.dart" type="FlutterRunConfigurationType" factoryName="Flutter">
<option name="filePath" value="$PROJECT_DIR$/example/lib/main.dart" />
<method />
</configuration>
</component>

+ 228
- 0
.idea/workspace.xml ファイルの表示

@@ -0,0 +1,228 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="0ff6f366-28dc-4efd-9bca-709f40bc6813" name="Default Changelist" comment="" />
<ignored path="$PROJECT_DIR$/.dart_tool/" />
<ignored path="$PROJECT_DIR$/.idea/" />
<ignored path="$PROJECT_DIR$/.pub/" />
<ignored path="$PROJECT_DIR$/build/" />
<ignored path="$PROJECT_DIR$/example/.pub/" />
<ignored path="$PROJECT_DIR$/example/build/" />
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="DefaultGradleProjectSettings">
<option name="testRunner" value="GRADLE" />
<option name="delegatedBuild" value="true" />
</component>
<component name="ExecutionTargetManager" SELECTED_TARGET="Pixel_3_API_28" />
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/lib/zhiying_comm.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="210">
<caret line="14" column="31" lean-forward="true" selection-start-line="14" selection-start-column="31" selection-end-line="14" selection-end-column="31" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/android/src/main/AndroidManifest.xml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="45">
<caret line="3" lean-forward="true" selection-start-line="3" selection-end-line="3" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/ios/Classes/ZhiyingCommPlugin.h">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="60">
<caret line="4" lean-forward="true" selection-start-line="4" selection-end-line="4" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/ios/Classes/ZhiyingCommPlugin.m">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="300">
<caret line="20" lean-forward="true" selection-start-line="20" selection-end-line="20" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/ios/Classes/HairuyiFlutterCommPlugin.h">
<provider selected="true" editor-type-id="text-editor" />
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/ios/Classes/HairuyiFlutterCommPlugin.m">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="285">
<caret line="19" lean-forward="true" selection-start-line="19" selection-end-line="19" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/example/lib/main.dart">
<provider selected="true" editor-type-id="text-editor" />
</entry>
</file>
</leaf>
</component>
<component name="ProjectFrameBounds" extendedState="6">
<option name="x" value="922" />
<option name="y" value="23" />
<option name="width" value="998" />
<option name="height" value="978" />
</component>
<component name="ProjectView">
<navigator currentView="ProjectPane" proportions="" version="1">
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="Scope" />
<pane id="ProjectPane">
<subPane>
<expand>
<path>
<item name="zhiying_comm" type="b2602c69:ProjectViewProjectNode" />
<item name="zhiying_comm" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="zhiying_comm" type="b2602c69:ProjectViewProjectNode" />
<item name="zhiying_comm" type="462c0819:PsiDirectoryNode" />
<item name="ios" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="zhiying_comm" type="b2602c69:ProjectViewProjectNode" />
<item name="zhiying_comm" type="462c0819:PsiDirectoryNode" />
<item name="ios" type="462c0819:PsiDirectoryNode" />
<item name="Classes" type="462c0819:PsiDirectoryNode" />
</path>
</expand>
<select />
</subPane>
</pane>
<pane id="PackagesPane" />
<pane id="AndroidView" />
</panes>
</component>
<component name="PropertiesComponent">
<property name="dart.analysis.tool.window.force.activate" value="false" />
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
<property name="show.migrate.to.gradle.popup" value="false" />
</component>
<component name="RecentsManager">
<key name="MoveFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$/ios/Classes" />
</key>
</component>
<component name="RunDashboard">
<option name="ruleStates">
<list>
<RuleState>
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
</RuleState>
<RuleState>
<option name="name" value="StatusDashboardGroupingRule" />
</RuleState>
</list>
</option>
</component>
<component name="SvnConfiguration">
<configuration />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="0ff6f366-28dc-4efd-9bca-709f40bc6813" name="Default Changelist" comment="" />
<created>1598948275074</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1598948275074</updated>
</task>
<servers />
</component>
<component name="ToolWindowManager">
<frame x="0" y="23" width="1920" height="1015" extended-state="6" />
<editor active="true" />
<layout>
<window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.24973376" />
<window_info id="Captures" order="1" side_tool="true" />
<window_info id="Structure" order="2" side_tool="true" />
<window_info id="Image Layers" order="3" />
<window_info id="Designer" order="4" />
<window_info id="Build Variants" order="5" side_tool="true" />
<window_info id="Resources Explorer" order="6" />
<window_info id="Capture Tool" order="7" />
<window_info id="Favorites" order="8" side_tool="true" />
<window_info anchor="bottom" id="Dart Analysis" order="0" visible="true" weight="0.16359697" />
<window_info anchor="bottom" id="Run" order="1" />
<window_info anchor="bottom" id="TODO" order="2" />
<window_info anchor="bottom" id="Android Profiler" order="3" show_stripe_button="false" />
<window_info anchor="bottom" id="Logcat" order="4" />
<window_info anchor="bottom" id="Debug" order="5" />
<window_info anchor="bottom" id="Terminal" order="6" />
<window_info anchor="bottom" id="Event Log" order="7" side_tool="true" />
<window_info anchor="bottom" id="Version Control" order="8" />
<window_info anchor="right" id="Device File Explorer" order="0" side_tool="true" />
<window_info anchor="right" id="Capture Analysis" order="1" />
<window_info anchor="right" id="Theme Preview" order="2" />
<window_info anchor="right" id="Flutter Inspector" order="3" />
<window_info anchor="right" id="Flutter Outline" order="4" />
<window_info anchor="right" id="Palette&#9;" order="5" />
<window_info anchor="right" id="Flutter Performance" order="6" />
</layout>
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/lib/zhiying_comm.dart">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="210">
<caret line="14" column="31" lean-forward="true" selection-start-line="14" selection-start-column="31" selection-end-line="14" selection-end-column="31" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/example/lib/main.dart">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/android/src/main/AndroidManifest.xml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="45">
<caret line="3" lean-forward="true" selection-start-line="3" selection-end-line="3" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/ios/Classes/ZhiyingCommPlugin.h">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="60">
<caret line="4" lean-forward="true" selection-start-line="4" selection-end-line="4" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/ios/Classes/HairuyiFlutterCommPlugin.h">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/ios/Classes/HairuyiFlutterCommPlugin.m">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="285">
<caret line="19" lean-forward="true" selection-start-line="19" selection-end-line="19" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/ios/Classes/ZhiyingCommPlugin.m">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="300">
<caret line="20" lean-forward="true" selection-start-line="20" selection-end-line="20" />
</state>
</provider>
</entry>
</component>
</project>

+ 10
- 0
.metadata ファイルの表示

@@ -0,0 +1,10 @@
# 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: f139b11009aeb8ed2a3a3aa8b0066e482709dde3
channel: v1.12.13-hotfixes

project_type: plugin

+ 3
- 0
CHANGELOG.md ファイルの表示

@@ -0,0 +1,3 @@
## 0.0.1

* TODO: Describe initial release.

+ 1
- 0
LICENSE ファイルの表示

@@ -0,0 +1 @@
TODO: Add your license here.

+ 14
- 0
README.md ファイルの表示

@@ -0,0 +1,14 @@
# zhiying_comm

A new Flutter plugin.

## Getting Started

This project is a starting point for a Flutter
[plug-in package](https://flutter.dev/developing-packages/),
a specialized package that includes platform-specific implementation code for
Android and/or iOS.

For help getting started with Flutter, view our
[online documentation](https://flutter.dev/docs), which offers tutorials,
samples, guidance on mobile development, and a full API reference.

+ 8
- 0
android/.gitignore ファイルの表示

@@ -0,0 +1,8 @@
*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures

+ 34
- 0
android/build.gradle ファイルの表示

@@ -0,0 +1,34 @@
group 'cn.zhios.zhiying_comm'
version '1.0'

buildscript {
repositories {
google()
jcenter()
}

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

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

apply plugin: 'com.android.library'

android {
compileSdkVersion 28

defaultConfig {
minSdkVersion 16
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
lintOptions {
disable 'InvalidPackage'
}
}

+ 4
- 0
android/gradle.properties ファイルの表示

@@ -0,0 +1,4 @@
org.gradle.jvmargs=-Xmx1536M
android.enableR8=true
android.useAndroidX=true
android.enableJetifier=true

+ 5
- 0
android/gradle/wrapper/gradle-wrapper.properties ファイルの表示

@@ -0,0 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip

+ 1
- 0
android/settings.gradle ファイルの表示

@@ -0,0 +1 @@
rootProject.name = 'zhiying_comm'

+ 3
- 0
android/src/main/AndroidManifest.xml ファイルの表示

@@ -0,0 +1,3 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.zhios.zhiying_comm">
</manifest>

+ 45
- 0
android/src/main/java/cn/zhios/zhiying_comm/ZhiyingCommPlugin.java ファイルの表示

@@ -0,0 +1,45 @@
package cn.zhios.zhiying_comm;

import androidx.annotation.NonNull;
import io.flutter.embedding.engine.plugins.FlutterPlugin;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
import io.flutter.plugin.common.MethodChannel.Result;
import io.flutter.plugin.common.PluginRegistry.Registrar;

/** ZhiyingCommPlugin */
public class ZhiyingCommPlugin implements FlutterPlugin, MethodCallHandler {
@Override
public void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) {
final MethodChannel channel = new MethodChannel(flutterPluginBinding.getFlutterEngine().getDartExecutor(), "zhiying_comm");
channel.setMethodCallHandler(new ZhiyingCommPlugin());
}

// This static function is optional and equivalent to onAttachedToEngine. It supports the old
// pre-Flutter-1.12 Android projects. You are encouraged to continue supporting
// plugin registration via this function while apps migrate to use the new Android APIs
// post-flutter-1.12 via https://flutter.dev/go/android-project-migration.
//
// It is encouraged to share logic between onAttachedToEngine and registerWith to keep
// them functionally equivalent. Only one of onAttachedToEngine or registerWith will be called
// depending on the user's project. onAttachedToEngine or registerWith must both be defined
// in the same class.
public static void registerWith(Registrar registrar) {
final MethodChannel channel = new MethodChannel(registrar.messenger(), "zhiying_comm");
channel.setMethodCallHandler(new ZhiyingCommPlugin());
}

@Override
public void onMethodCall(@NonNull MethodCall call, @NonNull Result result) {
if (call.method.equals("getPlatformVersion")) {
result.success("Android " + android.os.Build.VERSION.RELEASE);
} else {
result.notImplemented();
}
}

@Override
public void onDetachedFromEngine(@NonNull FlutterPluginBinding binding) {
}
}

+ 37
- 0
example/.gitignore ファイルの表示

@@ -0,0 +1,37 @@
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/

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

# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/

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

# Web related
lib/generated_plugin_registrant.dart

# Exceptions to above rules.
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages

+ 10
- 0
example/.metadata ファイルの表示

@@ -0,0 +1,10 @@
# 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: f139b11009aeb8ed2a3a3aa8b0066e482709dde3
channel: v1.12.13-hotfixes

project_type: app

+ 16
- 0
example/README.md ファイルの表示

@@ -0,0 +1,16 @@
# zhiying_comm_example

Demonstrates how to use the zhiying_comm plugin.

## Getting Started

This project is a starting point for a Flutter application.

A few resources to get you started if this is your first Flutter project:

- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab)
- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook)

For help getting started with Flutter, view our
[online documentation](https://flutter.dev/docs), which offers tutorials,
samples, guidance on mobile development, and a full API reference.

+ 7
- 0
example/android/.gitignore ファイルの表示

@@ -0,0 +1,7 @@
gradle-wrapper.jar
/.gradle
/captures/
/gradlew
/gradlew.bat
/local.properties
GeneratedPluginRegistrant.java

+ 61
- 0
example/android/app/build.gradle ファイルの表示

@@ -0,0 +1,61 @@
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}

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

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

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

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

android {
compileSdkVersion 28

lintOptions {
disable 'InvalidPackage'
}

defaultConfig {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "cn.zhios.zhiying_comm_example"
minSdkVersion 16
targetSdkVersion 28
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

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

flutter {
source '../..'
}

dependencies {
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
}

+ 7
- 0
example/android/app/src/debug/AndroidManifest.xml ファイルの表示

@@ -0,0 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.zhios.zhiying_comm_example">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>

+ 30
- 0
example/android/app/src/main/AndroidManifest.xml ファイルの表示

@@ -0,0 +1,30 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.zhios.zhiying_comm_example">
<!-- 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="zhiying_comm_example"
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>
</manifest>

+ 13
- 0
example/android/app/src/main/java/cn/zhios/zhiying_comm_example/MainActivity.java ファイルの表示

@@ -0,0 +1,13 @@
package cn.zhios.zhiying_comm_example;

import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.plugins.GeneratedPluginRegistrant;

public class MainActivity extends FlutterActivity {
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine);
}
}

+ 12
- 0
example/android/app/src/main/res/drawable/launch_background.xml ファイルの表示

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/white" />

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

バイナリ
ファイルの表示


バイナリ
ファイルの表示


バイナリ
ファイルの表示


バイナリ
ファイルの表示


バイナリ
ファイルの表示


+ 8
- 0
example/android/app/src/main/res/values/styles.xml ファイルの表示

@@ -0,0 +1,8 @@
<?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>

+ 7
- 0
example/android/app/src/profile/AndroidManifest.xml ファイルの表示

@@ -0,0 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="cn.zhios.zhiying_comm_example">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>

+ 29
- 0
example/android/build.gradle ファイルの表示

@@ -0,0 +1,29 @@
buildscript {
repositories {
google()
jcenter()
}

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

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
}

+ 4
- 0
example/android/gradle.properties ファイルの表示

@@ -0,0 +1,4 @@
org.gradle.jvmargs=-Xmx1536M
android.enableR8=true
android.useAndroidX=true
android.enableJetifier=true

+ 6
- 0
example/android/gradle/wrapper/gradle-wrapper.properties ファイルの表示

@@ -0,0 +1,6 @@
#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-5.6.2-all.zip

+ 15
- 0
example/android/settings.gradle ファイルの表示

@@ -0,0 +1,15 @@
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
}

+ 32
- 0
example/ios/.gitignore ファイルの表示

@@ -0,0 +1,32 @@
*.mode1v3
*.mode2v3
*.moved-aside
*.pbxuser
*.perspectivev3
**/*sync/
.sconsign.dblite
.tags*
**/.vagrant/
**/DerivedData/
Icon?
**/Pods/
**/.symlinks/
profile
xcuserdata
**/.generated/
Flutter/App.framework
Flutter/Flutter.framework
Flutter/Flutter.podspec
Flutter/Generated.xcconfig
Flutter/app.flx
Flutter/app.zip
Flutter/flutter_assets/
Flutter/flutter_export_environment.sh
ServiceDefinitions.json
Runner/GeneratedPluginRegistrant.*

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

+ 26
- 0
example/ios/Flutter/AppFrameworkInfo.plist ファイルの表示

@@ -0,0 +1,26 @@
<?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>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>App</string>
<key>CFBundleIdentifier</key>
<string>io.flutter.flutter.app</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>App</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>MinimumOSVersion</key>
<string>8.0</string>
</dict>
</plist>

+ 2
- 0
example/ios/Flutter/Debug.xcconfig ファイルの表示

@@ -0,0 +1,2 @@
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Generated.xcconfig"

+ 2
- 0
example/ios/Flutter/Release.xcconfig ファイルの表示

@@ -0,0 +1,2 @@
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig"

+ 87
- 0
example/ios/Podfile ファイルの表示

@@ -0,0 +1,87 @@
# Uncomment this line to define a global platform for your project
# platform :ios, '9.0'

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

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

def parse_KV_file(file, separator='=')
file_abs_path = File.expand_path(file)
if !File.exists? file_abs_path
return [];
end
generated_key_values = {}
skip_line_start_symbols = ["#", "/"]
File.foreach(file_abs_path) do |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)
generated_key_values[podname] = podpath
else
puts "Invalid plugin specification: #{line}"
end
end
generated_key_values
end

target 'Runner' do
# Flutter Pod

copied_flutter_dir = File.join(__dir__, 'Flutter')
copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework')
copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec')
unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path)
# Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet.
# That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration.
# CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist.

generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig')
unless File.exist?(generated_xcode_build_settings_path)
raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first"
end
generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path)
cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR'];

unless File.exist?(copied_framework_path)
FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir)
end
unless File.exist?(copied_podspec_path)
FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir)
end
end

# Keep pod path relative so it can be checked into Podfile.lock.
pod 'Flutter', :path => 'Flutter'

# Plugin Pods

# 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')
plugin_pods = parse_KV_file('../.flutter-plugins')
plugin_pods.each do |name, path|
symlink = File.join('.symlinks', 'plugins', name)
File.symlink(path, symlink)
pod name, :path => File.join(symlink, 'ios')
end
end

# Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system.
install! 'cocoapods', :disable_input_output_paths => true

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

+ 511
- 0
example/ios/Runner.xcodeproj/project.pbxproj ファイルの表示

@@ -0,0 +1,511 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objects = {

/* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
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, ); }; };
978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; };
97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
/* End PBXBuildFile section */

/* Begin PBXCopyFilesBuildPhase section */
9705A1C41CF9048500538489 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
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>"; };
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>"; };
/* End PBXFileReference section */

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

/* Begin PBXGroup section */
9740EEB11CF90186004384FC /* Flutter */ = {
isa = PBXGroup;
children = (
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 */,
CF3B75C9A7D2FA2A4C99F110 /* Frameworks */,
);
sourceTree = "<group>";
};
97C146EF1CF9000F007C117D /* Products */ = {
isa = PBXGroup;
children = (
97C146EE1CF9000F007C117D /* Runner.app */,
);
name = Products;
sourceTree = "<group>";
};
97C146F01CF9000F007C117D /* Runner */ = {
isa = PBXGroup;
children = (
7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */,
7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */,
97C146FA1CF9000F007C117D /* Main.storyboard */,
97C146FD1CF9000F007C117D /* Assets.xcassets */,
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
97C147021CF9000F007C117D /* Info.plist */,
97C146F11CF9000F007C117D /* Supporting Files */,
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
);
path = Runner;
sourceTree = "<group>";
};
97C146F11CF9000F007C117D /* Supporting Files */ = {
isa = PBXGroup;
children = (
97C146F21CF9000F007C117D /* main.m */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
/* End PBXGroup section */

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

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

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

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

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

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

/* Begin XCBuildConfiguration section */
249021D3217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = 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_IMPLICIT_RETAIN_SELF = 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;
SUPPORTED_PLATFORMS = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Profile;
};
249021D4217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
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 = cn.zhios.zhiyingCommExample;
PRODUCT_NAME = "$(TARGET_NAME)";
VERSIONING_SYSTEM = "apple-generic";
};
name = Profile;
};
97C147031CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = 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_IMPLICIT_RETAIN_SELF = 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_DEPRECATED_OBJC_IMPLEMENTATIONS = 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_IMPLICIT_RETAIN_SELF = 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;
SUPPORTED_PLATFORMS = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
97C147061CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
PRODUCT_BUNDLE_IDENTIFIER = cn.zhios.zhiyingCommExample;
PRODUCT_NAME = "$(TARGET_NAME)";
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
};
97C147071CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
PRODUCT_BUNDLE_IDENTIFIER = cn.zhios.zhiyingCommExample;
PRODUCT_NAME = "$(TARGET_NAME)";
VERSIONING_SYSTEM = "apple-generic";
};
name = Release;
};
/* End XCBuildConfiguration section */

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

+ 7
- 0
example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata ファイルの表示

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:Runner.xcodeproj">
</FileRef>
</Workspace>

+ 91
- 0
example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme ファイルの表示

@@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1020"
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"
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"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Profile"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

+ 7
- 0
example/ios/Runner.xcworkspace/contents.xcworkspacedata ファイルの表示

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:Runner.xcodeproj">
</FileRef>
</Workspace>

+ 8
- 0
example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist ファイルの表示

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>

+ 6
- 0
example/ios/Runner/AppDelegate.h ファイルの表示

@@ -0,0 +1,6 @@
#import <Flutter/Flutter.h>
#import <UIKit/UIKit.h>

@interface AppDelegate : FlutterAppDelegate

@end

+ 13
- 0
example/ios/Runner/AppDelegate.m ファイルの表示

@@ -0,0 +1,13 @@
#import "AppDelegate.h"
#import "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

+ 122
- 0
example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json ファイルの表示

@@ -0,0 +1,122 @@
{
"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"
}
}

バイナリ
ファイルの表示


バイナリ
ファイルの表示


バイナリ
ファイルの表示


バイナリ
ファイルの表示


バイナリ
ファイルの表示


バイナリ
ファイルの表示


バイナリ
ファイルの表示


バイナリ
ファイルの表示


バイナリ
ファイルの表示


バイナリ
ファイルの表示


バイナリ
ファイルの表示


バイナリ
ファイルの表示


バイナリ
ファイルの表示


バイナリ
ファイルの表示


バイナリ
ファイルの表示


+ 23
- 0
example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json ファイルの表示

@@ -0,0 +1,23 @@
{
"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"
}
}

バイナリ
ファイルの表示


バイナリ
ファイルの表示


バイナリ
ファイルの表示


+ 5
- 0
example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md ファイルの表示

@@ -0,0 +1,5 @@
# 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.

+ 37
- 0
example/ios/Runner/Base.lproj/LaunchScreen.storyboard ファイルの表示

@@ -0,0 +1,37 @@
<?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>

+ 26
- 0
example/ios/Runner/Base.lproj/Main.storyboard ファイルの表示

@@ -0,0 +1,26 @@
<?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>

+ 45
- 0
example/ios/Runner/Info.plist ファイルの表示

@@ -0,0 +1,45 @@
<?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>$(DEVELOPMENT_LANGUAGE)</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>zhiying_comm_example</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(FLUTTER_BUILD_NAME)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>$(FLUTTER_BUILD_NUMBER)</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
</dict>
</plist>

+ 9
- 0
example/ios/Runner/main.m ファイルの表示

@@ -0,0 +1,9 @@
#import <Flutter/Flutter.h>
#import <UIKit/UIKit.h>
#import "AppDelegate.h"

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

+ 33
- 0
example/lib/main.dart ファイルの表示

@@ -0,0 +1,33 @@
import 'package:flutter/material.dart';
import 'dart:async';

import 'package:flutter/services.dart';
import 'package:zhiying_comm/zhiying_comm.dart';

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

class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
}

@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('智莺-基础库'),
),
body: Center(
child: Text('123'),
),
),
);
}
}

+ 264
- 0
example/pubspec.lock ファイルの表示

@@ -0,0 +1,264 @@
# Generated by pub
# See https://dart.dev/tools/pub/glossary#lockfile
packages:
archive:
dependency: transitive
description:
name: archive
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.11"
args:
dependency: transitive
description:
name: args
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.5.2"
async:
dependency: transitive
description:
name: async
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.4.0"
boolean_selector:
dependency: transitive
description:
name: boolean_selector
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.5"
charcode:
dependency: transitive
description:
name: charcode
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.2"
collection:
dependency: transitive
description:
name: collection
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.14.11"
convert:
dependency: transitive
description:
name: convert
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.1"
crypto:
dependency: transitive
description:
name: crypto
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.3"
cupertino_icons:
dependency: "direct main"
description:
name: cupertino_icons
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.1.3"
device_info:
dependency: transitive
description:
name: device_info
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.4.2+7"
device_info_platform_interface:
dependency: transitive
description:
name: device_info_platform_interface
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.0"
dio:
dependency: transitive
description:
name: dio
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.0.10"
flutter:
dependency: "direct main"
description: flutter
source: sdk
version: "0.0.0"
flutter_native_image:
dependency: transitive
description:
name: flutter_native_image
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.0.5+2"
flutter_test:
dependency: "direct dev"
description: flutter
source: sdk
version: "0.0.0"
flutter_web_plugins:
dependency: transitive
description: flutter
source: sdk
version: "0.0.0"
fluttertoast:
dependency: transitive
description:
name: fluttertoast
url: "https://pub.flutter-io.cn"
source: hosted
version: "7.0.4"
http_parser:
dependency: transitive
description:
name: http_parser
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.1.4"
image:
dependency: transitive
description:
name: image
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.1.4"
matcher:
dependency: transitive
description:
name: matcher
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.12.6"
meta:
dependency: transitive
description:
name: meta
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.8"
package_info:
dependency: transitive
description:
name: package_info
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.4.3"
path:
dependency: transitive
description:
name: path
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.6.4"
pedantic:
dependency: transitive
description:
name: pedantic
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.8.0+1"
petitparser:
dependency: transitive
description:
name: petitparser
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.4.0"
plugin_platform_interface:
dependency: transitive
description:
name: plugin_platform_interface
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.2"
quiver:
dependency: transitive
description:
name: quiver
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.5"
sky_engine:
dependency: transitive
description: flutter
source: sdk
version: "0.0.99"
source_span:
dependency: transitive
description:
name: source_span
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.5.5"
stack_trace:
dependency: transitive
description:
name: stack_trace
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.9.3"
stream_channel:
dependency: transitive
description:
name: stream_channel
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.0"
string_scanner:
dependency: transitive
description:
name: string_scanner
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.0.5"
term_glyph:
dependency: transitive
description:
name: term_glyph
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.0"
test_api:
dependency: transitive
description:
name: test_api
url: "https://pub.flutter-io.cn"
source: hosted
version: "0.2.11"
typed_data:
dependency: transitive
description:
name: typed_data
url: "https://pub.flutter-io.cn"
source: hosted
version: "1.1.6"
vector_math:
dependency: transitive
description:
name: vector_math
url: "https://pub.flutter-io.cn"
source: hosted
version: "2.0.8"
xml:
dependency: transitive
description:
name: xml
url: "https://pub.flutter-io.cn"
source: hosted
version: "3.5.0"
zhiying_comm:
dependency: "direct dev"
description:
path: ".."
relative: true
source: path
version: "0.0.1"
sdks:
dart: ">=2.7.0 <3.0.0"
flutter: ">=1.12.13+hotfix.5 <2.0.0"

+ 63
- 0
example/pubspec.yaml ファイルの表示

@@ -0,0 +1,63 @@
name: zhiying_comm_example
description: Demonstrates how to use the zhiying_comm plugin.
publish_to: 'none'

environment:
sdk: ">=2.1.0 <3.0.0"

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.2

dev_dependencies:
flutter_test:
sdk: flutter

zhiying_comm:
path: ../

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

# The following section is specific to Flutter.
flutter:

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

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

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

# For details regarding adding assets from package dependencies, see
# https://flutter.dev/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.dev/custom-fonts/#from-packages

+ 27
- 0
example/test/widget_test.dart ファイルの表示

@@ -0,0 +1,27 @@
// 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:zhiying_comm_example/main.dart';

void main() {
testWidgets('Verify Platform version', (WidgetTester tester) async {
// Build our app and trigger a frame.
await tester.pumpWidget(MyApp());

// Verify that platform version is retrieved.
expect(
find.byWidgetPredicate(
(Widget widget) => widget is Text &&
widget.data.startsWith('Running on:'),
),
findsOneWidget,
);
});
}

+ 37
- 0
ios/.gitignore ファイルの表示

@@ -0,0 +1,37 @@
.idea/
.vagrant/
.sconsign.dblite
.svn/

.DS_Store
*.swp
profile

DerivedData/
build/
GeneratedPluginRegistrant.h
GeneratedPluginRegistrant.m

.generated/

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

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

xcuserdata

*.moved-aside

*.pyc
*sync/
Icon?
.tags*

/Flutter/Generated.xcconfig
/Flutter/flutter_export_environment.sh


+ 24
- 0
ios/Classes/ZhiyingCommNative.h ファイルの表示

@@ -0,0 +1,24 @@
//
// ZhiyingCommNative.h
// hairuyi_flutter_comm
//
// Created by Weller on 2020/5/16.
//

#import <Foundation/Foundation.h>
#import "ZhiyingCommNativeProtocol.h"

NS_ASSUME_NONNULL_BEGIN

@interface ZhiyingCommNative : NSObject

/// 插件注册
+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar;

/// Native端注册,以提供Flutter端功能
/// @param delegate 原生功能协议
+ (void)regist:(id<ZhiyingCommNativeProtocol>) delegate;

@end

NS_ASSUME_NONNULL_END

+ 70
- 0
ios/Classes/ZhiyingCommNative.m ファイルの表示

@@ -0,0 +1,70 @@
//
// ZhiyingCommNative.m
// hairuyi_flutter_comm
//
// Created by Weller on 2020/5/16.
//
#import <Flutter/Flutter.h>
#import "ZhiyingCommNative.h"
#import "ZhiyingCommNativeResult.h"

@implementation ZhiyingCommNative


static id<ZhiyingCommNativeProtocol> _delegate;

+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {
FlutterMethodChannel* channel = [FlutterMethodChannel
methodChannelWithName:@"hairuyi_flutter_comm://method"
binaryMessenger:[registrar messenger]];
ZhiyingCommNative* instance = [[ZhiyingCommNative alloc] init];
[registrar addMethodCallDelegate:instance channel:channel];
}


- (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
if ([@"openPage" isEqualToString:call.method]) {
if ([_delegate respondsToSelector:@selector(openPage:)]) {
[_delegate openPage:call.arguments];
}
result(@{@"success": @"1"});
} else if ([@"openNativePage" isEqualToString:call.method]) {
if ([_delegate respondsToSelector:@selector(openNativePage:)]) {
[_delegate openNativePage:call.arguments];
}
result(@{@"success": @"1"});
} else if ([@"getSetting" isEqualToString:call.method]) {
NSDictionary *setting = @{};
if ([_delegate respondsToSelector:@selector(getSetting)]) {
setting = [_delegate getSetting];
}
result(setting);
} else if ([@"openWechatPay" isEqualToString:call.method]) {
if ([_delegate respondsToSelector:@selector(openWechatPay:status:)]) {
[_delegate openWechatPay: call.arguments status: ^(ZhiyingCommNativeResult *res) {
result([res toDict]);
}];
} else {
result([NativeCommandNotImp toDict]);
}
} else if ([@"invokeMethod" isEqualToString:call.method]) {
NSDictionary *dict = call.arguments;
NSString *method = [dict valueForKey:@"method"];
NSDictionary *params = [dict valueForKey:@"params"];
if ([_delegate respondsToSelector:@selector(invokeMethod:withParams:status:)]) {
[_delegate invokeMethod:method withParams: params status: ^(ZhiyingCommNativeResult *res) {
result([res toDict]);
}];
} else {
result([NativeCommandNotImp toDict]);
}
} else{
result(FlutterMethodNotImplemented);
}
}

+ (void)regist:(id<ZhiyingCommNativeProtocol>) delegate {
_delegate = delegate;
}

@end

+ 38
- 0
ios/Classes/ZhiyingCommNativeProtocol.h ファイルの表示

@@ -0,0 +1,38 @@
/*
* @Author: your name
* @Date: 2020-06-16 15:37:18
* @LastEditTime: 2020-06-20 11:28:22
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /hairuyi_flutter_comm/ios/Classes/HairuyiFlutterCommNativeProtocol.h
*/
//
// ZhiyingCommNativeProtocol.h
// hairuyi_flutter_comm
//
// Created by Weller on 2020/5/16.
//

#import "ZhiyingCommNativeResult.h"

#ifndef ZhiyingCommNativeProtocol_h
#define ZhiyingCommNativeProtocol_h

typedef void (^ZhiyingCommNativeStatus)(ZhiyingCommNativeResult *status);

/// app需要实现协议,使flutter获得更多功能
@protocol ZhiyingCommNativeProtocol <NSObject>

// 公共跳转方法
- (void)openPage:(NSDictionary *)params;
// 跳转原生页面(非公共跳转)
- (void)openNativePage:(NSDictionary *)params;
// 获取设置
- (NSDictionary *)getSetting;

// 调用原生方法
- (void)invokeMethod: (NSString*)method withParams: (NSDictionary *)params status:(ZhiyingCommNativeStatus)status;

@end

#endif /* ZhiyingCommNativeProtocol_h */

+ 30
- 0
ios/Classes/ZhiyingCommNativeResult.h ファイルの表示

@@ -0,0 +1,30 @@
//
// ZhiyingCommNativeResult.h
// hairuyi_flutter_comm
//
// Created by Weller on 2020/5/16.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

#define NativeCommandSuccess(msg) [[ZhiyingCommNativeResult alloc] initWithMsg:msg success:YES]
#define NativeCommandFailed(msg) [[ZhiyingCommNativeResult alloc] initWithMsg: msg success: NO]
#define NativeCommandNotImp [[ZhiyingCommNativeResult alloc] initWithMsg: @"native调用失败" success: NO]

@interface ZhiyingCommNativeResult : NSObject

// 状态
@property (nonatomic, assign) BOOL success;
// 消息
@property (nonatomic, copy) NSString *msg;
@property (nonatomic, strong) NSDictionary* data;

- (instancetype)initWithMsg: (NSString*)msg success: (BOOL) success;

- (NSDictionary*)toDict;

@end

NS_ASSUME_NONNULL_END

+ 34
- 0
ios/Classes/ZhiyingCommNativeResult.m ファイルの表示

@@ -0,0 +1,34 @@
//
// ZhiyingCommNativeResult.m
// hairuyi_flutter_comm
//
// Created by Weller on 2020/5/16.
//

#import "ZhiyingCommNativeResult.h"

@interface ZhiyingCommNativeResult()


@end

@implementation ZhiyingCommNativeResult

- (instancetype)initWithMsg: (NSString*)msg success: (BOOL) success
{
self = [super init];
if (self) {
_msg = msg == nil ? @"" : msg;
_success = success;
}
return self;
}

- (NSDictionary*)toDict {
return @{@"success" : _success ? @"1" : @"0",
@"msg" : _msg,
@"data" : _data == nil ? @{} : _data
};
}

@end

+ 4
- 0
ios/Classes/ZhiyingCommPlugin.h ファイルの表示

@@ -0,0 +1,4 @@
#import <Flutter/Flutter.h>

@interface ZhiyingCommPlugin : NSObject<FlutterPlugin>
@end

+ 20
- 0
ios/Classes/ZhiyingCommPlugin.m ファイルの表示

@@ -0,0 +1,20 @@
#import "ZhiyingCommPlugin.h"

@implementation ZhiyingCommPlugin
+ (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar {
FlutterMethodChannel* channel = [FlutterMethodChannel
methodChannelWithName:@"zhiying_comm"
binaryMessenger:[registrar messenger]];
ZhiyingCommPlugin* instance = [[ZhiyingCommPlugin alloc] init];
[registrar addMethodCallDelegate:instance channel:channel];
}

- (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
if ([@"getPlatformVersion" isEqualToString:call.method]) {
result([@"iOS " stringByAppendingString:[[UIDevice currentDevice] systemVersion]]);
} else {
result(FlutterMethodNotImplemented);
}
}

@end

+ 29
- 0
ios/zhiying_comm.podspec ファイルの表示

@@ -0,0 +1,29 @@
#
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html.
# Run `pod lib lint zhiying_comm.podspec' to validate before publishing.
#
Pod::Spec.new do |s|
s.name = 'zhiying_comm'
s.version = '0.0.1'
s.summary = 'A new Flutter plugin.'
s.description = <<-DESC
A new Flutter plugin.
DESC
s.homepage = 'http://example.com'
s.license = { :file => '../LICENSE' }
s.author = { 'Your Company' => 'email@example.com' }
s.source = { :path => '.' }
s.source_files = 'Classes/**/*'
s.public_header_files = 'Classes/**/*.h'
s.public_header_files =
'Classes/ZhiyingCommPlugin.h',
'Classes/ZhiyingCommNative.h',
'Classes/ZhiyingCommNativeResult.h',
'Classes/ZhiyingCommNativeProtocol.h'

s.dependency 'Flutter'
s.platform = :ios, '8.0'

# Flutter.framework does not contain a i386 slice. Only x86_64 simulators are supported.
s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'VALID_ARCHS[sdk=iphonesimulator*]' => 'x86_64' }
end

+ 34
- 0
lib/native/native_router.dart ファイルの表示

@@ -0,0 +1,34 @@
/*
* @Author: your name
* @Date: 2020-06-19 14:59:26
* @LastEditTime: 2020-06-24 16:37:35
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /hairuyi_flutter_comm/lib/native/native_router.dart
*/

// 重要!!!!!
// 重要!!!!!
// 重要!!!!!
// 需要在壳工程原生代码中实现对应方法

// ---------------- Android -------------------
// 在实现了 HairuyiFlutterCommNativable 的类中,openNativePage方法添加对应的页面跳转

// ---------------- iOS -------------------
// 在实现了 HairuyiFlutterCommNativeProtocol 的类中,openNativePage方法添加对应的页面跳转

enum NativeRouter {
openModifyPayPassword, // 打开修改支付密码
openVerifyByAlipay, // 打开支付宝实名认证
openSettingAlipay, // 打开支付宝绑定页面
openContacts, // 打开人脉
openLiveAnchor, //打开主播开播页面
openLiveWatch, //打开观看直播页面
openLiveRecord, // 打开会看(录播)
openWeChatShare, // 分享到微信
openSharePop, //打开分享弹窗
openSearchKeyword, // 关键词搜索
openWithdrawal, // 打开提现页面
showIntegralPop, // 展示获得积分弹窗
}

+ 10
- 0
lib/pages/empty_page.dart ファイルの表示

@@ -0,0 +1,10 @@
import 'package:flutter/widgets.dart';

class EmptyPage extends StatelessWidget {
@override
Widget build(BuildContext context) {

return Center(child: Text('Page has no regist'),);
}
}

+ 32
- 0
lib/util/color.dart ファイルの表示

@@ -0,0 +1,32 @@
/*
* @Author: your name
* @Date: 2020-05-18 14:01:56
* @LastEditTime: 2020-06-24 13:45:26
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /hairuyi_flutter_yunfadan/lib/utils/color.dart
*/

import 'dart:ui';
import 'dart:math';

extension HexColor on Color {
/// String is in the format "aabbcc" or "ffaabbcc" with an optional leading "#".
static Color fromHex(String hexString) {
final buffer = StringBuffer();
if (hexString.length == 6 || hexString.length == 7) buffer.write('ff');
buffer.write(hexString.replaceFirst('#', ''));
return Color(int.parse(buffer.toString(), radix: 16));
}

static Color random() {
return Color(Random().nextInt(1 << 32));
}

/// Prefixes a hash sign if [leadingHashSign] is set to `true` (default is `true`).
String toHex({bool leadingHashSign = true}) => '${leadingHashSign ? '#' : ''}'
'${alpha.toRadixString(16).padLeft(2, '0')}'
'${red.toRadixString(16).padLeft(2, '0')}'
'${green.toRadixString(16).padLeft(2, '0')}'
'${blue.toRadixString(16).padLeft(2, '0')}';
}

+ 80
- 0
lib/util/encode_util.dart ファイルの表示

@@ -0,0 +1,80 @@
import 'package:crypto/crypto.dart';
import 'dart:convert';
import 'dart:io';
import 'dart:typed_data';
import 'package:flutter_native_image/flutter_native_image.dart';

class EncodeUtil {
/*
* Md5加密
* */
static String generateMd5(String data) {
var content = new Utf8Encoder().convert(data);
var digest = md5.convert(content);
return digest.toString();
}

/*
* Base64加密
*/
static String encodeBase64(String data) {
var content = utf8.encode(data);
var digest = base64Encode(content);
return digest;
}

/*
* Base64解密
*/
static String decodeBase64(String data) {
return String.fromCharCodes(base64Decode(data));
}

// 图片转成base64
static Future<String> image2Base64(File file) async {
// File file = new File(path);
List<int> imageBytes = await file.readAsBytes();
return base64Encode(imageBytes);
}

// 压缩图片至指定大小
static Future<File> compressImage(File file, int size) async {
List<int> originBytes = await file.readAsBytes();
int originSize = (originBytes.length / 1024).ceil();
print('原图大小:' + originSize.toString() + 'kb');
if (originSize <= size) {
return file;
}

int minQuality = 0;
int maxQuality = 100;

List<int> imageBytes = originBytes;

do {
int midQuality = ((minQuality + maxQuality) / 2).floor();
File compressedFile = await FlutterNativeImage.compressImage(file.path,
quality: midQuality);
imageBytes = await compressedFile.readAsBytes();
int compressSize = (imageBytes.length / 1024).ceil();
if (compressSize == size) {
break;
} else if (compressSize > size) {
maxQuality = midQuality;
} else {
minQuality = midQuality;
}
} while (maxQuality - minQuality > 1);
File compressedFile =
await FlutterNativeImage.compressImage(file.path, quality: minQuality);
imageBytes = await compressedFile.readAsBytes();
int compressSize = (imageBytes.length / 1024).ceil();
print('quality:' +
minQuality.toString() +
' 压缩后大小:' +
compressSize.toString() +
'kb');

return compressedFile;
}
}

+ 17
- 0
lib/util/enum_util.dart ファイルの表示

@@ -0,0 +1,17 @@
/*
* @Author: your name
* @Date: 2020-06-19 15:09:28
* @LastEditTime: 2020-06-19 15:09:38
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /hairuyi_flutter_comm/lib/utils/enum_util.dart
*/

///枚举类型转string
String enumToString(o) => o.toString().split('.').last;

///string转枚举类型
T enumFromString<T>(Iterable<T> values, String value) {
return values.firstWhere((type) => type.toString().split('.').last == value,
orElse: () => null);
}

+ 145
- 0
lib/util/native_util.dart ファイルの表示

@@ -0,0 +1,145 @@
/*
* 与原生app进行交互
* @Author: fnuoos
* @Date: 2020-05-15 11:53:06
* @Last Modified by: mikey.zhaopeng
* @Last Modified time: 2020-05-15 11:53:58
*/

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:zhiying_comm/zhiying_comm.dart';

class NativeUtil {
// 工厂模式
factory NativeUtil() => _getInstance();
static NativeUtil get instance => _getInstance();
static NativeUtil _instance;

MethodChannel _methodChannel;
NativeUtil._internal() {
// 初始化
_methodChannel = MethodChannel('hairuyi_flutter_comm://method');
}
static NativeUtil _getInstance() {
if (_instance == null) {
_instance = new NativeUtil._internal();
}
return _instance;
}

static Future<Map<String, dynamic>> _invokeChannel(String method,
{Map<String, dynamic> params}) async {
var res;
try {
res =
await NativeUtil.instance._methodChannel.invokeMethod(method, params);
} catch (e) {
res = {'Failed': e.message};
}

print(res);
return Map<String, dynamic>.from(res);
}

// 通过原生webview打开url
static Future openUrl(BuildContext context, String url) {
Map<String, dynamic> params = Map<String, dynamic>();
params['url'] = url ?? '';
params['SkipUIIdentifier'] = 'pub_wailian';
NativeUtil.openPage(context, params);
}

// 公共跳转方法
static Future openPage(BuildContext context, Map params) {
// if (params.containsKey('is_to_flutter') &&
// params['is_to_flutter'].toString() == '1') {
// BasePageModel model = BasePageModel.fromJson(params);
// return Navigator.of(context).push(MaterialPageRoute(
// builder: (BuildContext context) =>
// PageFactory.create(model.SkipUIIdentifier, model)));
// }
return NativeUtil._invokeChannel('openPage',
params: new Map<String, dynamic>.from(params));
}

//跳转原生普通页面,非公共跳转
static Future openNativePage(NativeRouter router, {Map params}) {
String method = enumToString(router);
return NativeUtil._invokeChannel('openNativePage', params: {
'method': method,
'params': params == null ? {} : Map<String, dynamic>.from(params)
});
}

// 跳转原生商品详情
static openGoodsDetail(Map<String, dynamic> params) async {
NativeUtil._invokeChannel('openGoodsDetail', params: params);
}

static Future<String> getToken() async {
Map<String, dynamic> data = await NativeUtil._invokeChannel('getToken');
if (data.containsKey('token')) {
return data['token'];
}
return '';
}

static Future<Map<String, dynamic>> getSetting() async {
return NativeUtil._invokeChannel('getSetting');
}

// 打开支付宝支付
static Future<bool> payByAlipay(String payCode) async {
Map params = {"code": payCode};
Map<String, dynamic> result = await NativeUtil._invokeChannel('openAliPay',
params: new Map<String, dynamic>.from(params));
if (result.containsKey('msg')) {
Fluttertoast.showToast(
msg: result['msg'],
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.BOTTOM,
);
}
if (result.containsKey('success') && result['success'] == '1') {
return true;
}
return false;
}

// 打开微信支付
static Future<bool> payByWechat(Map params) async {
Map<String, dynamic> result = await NativeUtil._invokeChannel(
'openWechatPay',
params: new Map<String, dynamic>.from(params));

if (result.containsKey('msg')) {
Fluttertoast.showToast(
msg: result['msg'],
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.BOTTOM,
);
}
if (result.containsKey('success') && result['success'] == '1') {
return true;
}
return false;
}

static Future<Map<String, dynamic>> onPagePop(bool isTop) async {
NativeUtil._invokeChannel('pageDidPop',
params: new Map<String, dynamic>.from({'isTop': isTop}));
}

static Future<Map<String, dynamic>> onPagePush(bool isTop) async {
NativeUtil._invokeChannel('pageDidPush',
params: new Map<String, dynamic>.from({'isTop': isTop}));
}

static Future<Map<String, dynamic>> invokeMethod(
String method, Map<String, dynamic> params) {
Map<String, dynamic> request = {"method": method, "params": params};
return NativeUtil._invokeChannel('invokeMethod', params: request);
}
}

+ 47
- 0
lib/util/navigator_observer.dart ファイルの表示

@@ -0,0 +1,47 @@
import 'package:flutter/material.dart';
import 'package:zhiying_comm/zhiying_comm.dart';

class FNNavigatorObserver extends NavigatorObserver {
factory FNNavigatorObserver() => _getInstance();
static FNNavigatorObserver get instance => _getInstance();
static FNNavigatorObserver _instance;

NavigatorObserver curContext;

FNNavigatorObserver._();
static FNNavigatorObserver _getInstance() {
if (_instance == null) {
_instance = new FNNavigatorObserver._();
}
return _instance;
}

String topRouteName = "";

void didPush(Route<dynamic> route, Route<dynamic> previousRoute) {
notifyHide(previousRoute);
notifyShow(route);
NativeUtil.onPagePush(previousRoute == null ? true : previousRoute.isFirst);
}

void didPop(Route<dynamic> route, Route<dynamic> previousRoute) {
notifyHide(route);
notifyShow(previousRoute);
NativeUtil.onPagePush(previousRoute == null ? true : previousRoute.isFirst);
}

void didRemove(Route<dynamic> route, Route<dynamic> previousRoute) {
notifyHide(route);
notifyShow(previousRoute);
}

/// The [Navigator] replaced `oldRoute` with `newRoute`.
void didReplace({Route<dynamic> newRoute, Route<dynamic> oldRoute}) {
notifyHide(oldRoute);
notifyShow(newRoute);
}

void notifyShow(Route<dynamic> route) {}

void notifyHide(Route<dynamic> route) {}
}

+ 326
- 0
lib/util/net_util.dart ファイルの表示

@@ -0,0 +1,326 @@
import 'package:dio/dio.dart';
import 'package:dio/adapter.dart';
import 'dart:io';
import 'dart:ui';
import 'dart:convert';
import 'package:convert/convert.dart';
import 'package:crypto/crypto.dart';
import 'package:zhiying_comm/zhiying_comm.dart';
import 'package:package_info/package_info.dart';
import 'package:device_info/device_info.dart';
import 'package:fluttertoast/fluttertoast.dart';

typedef OnSuccess = dynamic Function(dynamic data);
typedef OnError = dynamic Function(String e);

class NetUtil {
static final String APPKEY = "123";
Dio _dio;
static String _apiVersion;

NetUtil._() {}
static NetUtil _instance;
static NetUtil getInstance() {
if (_instance == null) {
_instance = NetUtil._();
}
return _instance;
}

get dio async {
if (_dio == null) {
var setting = await NativeUtil.getSetting();
String domain = setting['domain']; //'http://www.hairuyi.com/';
String version = setting['version']; //'42';
_config(domain, apiVersion: _apiVersion);
}
return _dio;
}

// 配置网络请求,基础地址,代理地址,如:192.168.0.123:8888(代理地址生产环境无效)
// apiVersion 接口版本
void _config(String baseUrl, {String proxyUrl, String apiVersion}) {
_dio = Dio(BaseOptions(
method: "post",
baseUrl: baseUrl,
connectTimeout: 15000,
receiveTimeout: 15000,
contentType: Headers.formUrlEncodedContentType,
followRedirects: true));
_dio.interceptors.add(_NetInterceptors());

_apiVersion = apiVersion;
const bool inProduction = const bool.fromEnvironment("dart.vm.product");
if (proxyUrl != null && proxyUrl != '' && !inProduction) {
_setProxy(proxyUrl);
}
}

void _setProxy(String proxyUrl) {
(_dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate =
(HttpClient client) {
client.findProxy = (uri) {
return "PROXY $proxyUrl";
};
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
};
}

/// 统一添加必要的参数
static Future<Map<String, dynamic>> signParams(
Map<String, dynamic> params) async {
if (_apiVersion != null) {
params["version"] = _apiVersion;
}
if (Platform.isIOS) {
params["platform"] = "iOS";
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
IosDeviceInfo iosInfo = await deviceInfo.iosInfo;
params["systemVersion"] = iosInfo.systemVersion;
} else if (Platform.isAndroid) {
params["platform"] = "Android";
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
String androidVersion = androidInfo.version.release;
params["systemVersion"] = "Android $androidVersion";
}

PackageInfo packageInfo = await PackageInfo.fromPlatform();
String version = packageInfo.version; //版本号
params["appVersion"] = version;
int width = window.physicalSize.width.floor();
int height = window.physicalSize.height.floor();
params["resolutionRatio"] = "$width*$height";

String token = await NativeUtil.getToken();
if (token != null &&
token != '' &&
(!params.containsKey('token') || params['token'] == '')) {
params['token'] = token;
}
params["time"] = getNowTime();

// 过滤空字段,过滤首尾空格
Map<String, dynamic> filters = Map<String, dynamic>();
params.forEach((key, value) {
if (key != '' && value != '') {
filters[key] = (value is String) ? value.trim() : value;
}
});
params = filters;

List<String> list = List<String>();
params.forEach((key, value) {
list.add(key.toString() + value.toString());
});
params["sign"] = signWithArray(list);
return params;
}

/// 签名
static String signWithArray(List<String> params) {
params.sort();
String result = "";
result += APPKEY;
params.forEach((param) {
result += param;
});
result += APPKEY;
return generateMd5(result);
}

// md5 加密
static String generateMd5(String data) {
var content = new Utf8Encoder().convert(data);
var digest = md5.convert(content);
// 这里其实就是 digest.toString()
return hex.encode(digest.bytes);
}

/// 获取时间戳,单位:秒
static String getNowTime() {
int timestamp = (DateTime.now().millisecondsSinceEpoch / 1000).floor();
return "$timestamp";
}

@Deprecated('方法弃用,建议使用 NetUtil.requet')
static Future<dynamic> post(String path,
{Map<String, dynamic> params}) async {
if (params == null) {
params = {};
}
Map<String, dynamic> sign = await signParams(params);
Response response;
try {
Dio dio = await NetUtil.getInstance().dio;
response = await dio.post(path, data: sign);
} on DioError catch (e) {
_formatError(e);
}
if (response == null) {
return {};
}

if (response.statusCode != 200) {
const bool inProduction = const bool.fromEnvironment("dart.vm.product");
if (!inProduction) {
Fluttertoast.showToast(msg: response.statusMessage);
}
// log.e(response.statusMessage);
return {};
}

var result = jsonDecode(response.data);

if (result['success'] == 0 || result['success'] == '0') {
print('error: ' + result['msg']);
Fluttertoast.showToast(
msg: result['msg'],
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.BOTTOM,
);
return {};
}
return result['data'];
}

static Future<dynamic> post2(String path,
{Map<String, dynamic> params}) async {
// if (params == null) {
// params = {};
// }
// Map<String, dynamic> sign = await signParams(params);
// Response response;
// try {
// Dio dio = await NetUtil.getInstance().dio;
// response = await dio.post(path, data: sign);
// } on DioError catch (e) {
// _formatError(e);
// }
// if (response == null) {
// return {};
// }

// if (response.statusCode != 200) {
// const bool inProduction = const bool.fromEnvironment("dart.vm.product");
// if (!inProduction) {
// Fluttertoast.showToast(msg: response.statusMessage);
// }
// log.e(response.statusMessage);
// return {};
// }

// var result = jsonDecode(response.data);

// if (result['success'] == 0 || result['success'] == '0') {
// print('error: ' + result['msg']);
// Fluttertoast.showToast(
// msg: result['msg'],
// toastLength: Toast.LENGTH_SHORT,
// gravity: ToastGravity.BOTTOM,
// );
// return result;
// }
// return result['data'];
}

/*
* error统一处理
*/
static void _formatError(DioError e) {
// if (e.type == DioErrorType.CONNECT_TIMEOUT) {
// log.d('连接超时: ${e.toString()}');
// } else if (e.type == DioErrorType.SEND_TIMEOUT) {
// log.d('请求超时: ${e.toString()}');
// } else if (e.type == DioErrorType.RECEIVE_TIMEOUT) {
// log.d('响应超时: ${e.toString()}');
// } else if (e.type == DioErrorType.RESPONSE) {
// log.d('出现异常: ${e.toString()}');
// } else if (e.type == DioErrorType.CANCEL) {
// log.d('请求取消: ${e.toString()}');
// } else {
// log.d('未知错误: ${e.toString()}');
// }
}

static void request(String path,
{String method = 'POST',
Map<String, dynamic> params,
Map<String, File> multiFiles,
OnSuccess onSuccess,
OnError onError}) async {
if (params == null) {
params = {};
}
signParams(params).then((sign) async {
print('params => ${sign.toString()}');
Dio dio = await NetUtil.getInstance().dio;
if (multiFiles != null && multiFiles.length > 0) {
for (String key in multiFiles.keys) {
var file = await MultipartFile.fromFile(multiFiles[key].path);
sign[key] = file;
}
}

FormData formdata = FormData.fromMap(sign);
return dio.request(path,
data: formdata, options: Options(method: method));
}).then((response) {
var result = jsonDecode(response.data);
if (result['success'] == 0 || result['success'] == '0') {
print('error: ' + result['msg']);
Fluttertoast.showToast(
msg: result['msg'],
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.BOTTOM,
);
if (onError != null) {
onError(result['msg'] ?? '未知错误');
}
return;
}
if (onSuccess != null) {
onSuccess(result['data']);
}
}).catchError((error) {
onError(error.toString());
});
}
}

/**
* @description: 网络请求拦截器
* @param {type}
* @return:
*/
class _NetInterceptors extends InterceptorsWrapper {
@override
Future onRequest(RequestOptions options) {
print("${options?.method} => ${options?.path}");

return super.onRequest(options);
}

@override
Future onResponse(Response response) {
print("response[${response?.statusCode}] => ${response?.data}");

return super.onResponse(response);
// String data = response?.data;
// Map<String, dynamic> map = json.decode(data);
// var success = map['success'];
// if (success != null && '$success' == '1') {
// return super.onResponse(response);
// } else {
// response.data = response?.data['msg'] ?? '未知错误';
// return NetUtil._dio.reject(Response(data: response));
// }
}

@override
Future onError(DioError err) {
print("ERROR[${err?.response?.statusCode}] => PATH: ${err?.request?.path}");
return super.onError(err);
}
}

+ 52
- 0
lib/util/page_factory.dart ファイルの表示

@@ -0,0 +1,52 @@
/*
* @Author: Weller
* @Date: 2020-05-16 17:26:40
* @LastEditTime: 2020-06-16 15:40:43
* @LastEditors: Please set LastEditors
* @Description: In User Settings Edit
* @FilePath: /hairuyi_flutter_comm/lib/router/page_factory.dart
*/
import 'package:flutter/material.dart';

import 'package:zhiying_comm/zhiying_comm.dart';

typedef Widget CreatePage(Map<String, dynamic> model);

/* 页面生成工厂, 用于生成flutter端公共跳转页面,native端页面生成PlatforView等等 */
class PageFactory {
static Map<String, CreatePage> pageCreater = Map();

/**
* @description: 注册路由
* @param {name} SkipUIIdentifier
* @return:
*/
static void regist(String name, CreatePage creater) {
if (pageCreater.containsKey(name)) {
return;
}

pageCreater[name] = creater;
}

/**
* @description: 创建页面
* @param {String} name注册的SkipUIIdentifier
* @return:
*/
static Widget create(String name, Map<String, dynamic> model) {
if (pageCreater.containsKey(name)) {
return pageCreater[name](model);
}
return EmptyPage();
}

/**
* @description: 是否注册页面
* @param {bool}
* @return:
*/
static bool hasRegisted(String name) {
return pageCreater.containsKey(name);
}
}

変更されたファイルが多すぎるため、一部のファイルは表示されません

読み込み中…
キャンセル
保存