├── .gitattributes ├── doc └── mop_flutter_demo.gif ├── ios ├── Flutter │ ├── Debug.xcconfig │ ├── Release.xcconfig │ ├── Flutter.podspec │ └── AppFrameworkInfo.plist ├── Runner │ ├── AppDelegate.h │ ├── Assets.xcassets │ │ ├── LaunchImage.imageset │ │ │ ├── LaunchImage.png │ │ │ ├── LaunchImage@2x.png │ │ │ ├── LaunchImage@3x.png │ │ │ ├── README.md │ │ │ └── Contents.json │ │ └── AppIcon.appiconset │ │ │ ├── Icon-App-20x20@1x.png │ │ │ ├── Icon-App-20x20@2x.png │ │ │ ├── Icon-App-20x20@3x.png │ │ │ ├── Icon-App-29x29@1x.png │ │ │ ├── Icon-App-29x29@2x.png │ │ │ ├── Icon-App-29x29@3x.png │ │ │ ├── Icon-App-40x40@1x.png │ │ │ ├── Icon-App-40x40@2x.png │ │ │ ├── Icon-App-40x40@3x.png │ │ │ ├── Icon-App-60x60@2x.png │ │ │ ├── Icon-App-60x60@3x.png │ │ │ ├── Icon-App-76x76@1x.png │ │ │ ├── Icon-App-76x76@2x.png │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ ├── Icon-App-83.5x83.5@2x.png │ │ │ └── Contents.json │ ├── main.m │ ├── FATFlutterViewController.h │ ├── AppDelegate.m │ ├── FATFlutterViewController.m │ ├── Info.plist │ └── Base.lproj │ │ ├── Main.storyboard │ │ └── LaunchScreen.storyboard ├── Runner.xcodeproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ ├── xcshareddata │ │ └── xcschemes │ │ │ └── Runner.xcscheme │ └── project.pbxproj ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── Podfile.lock └── Podfile ├── android ├── gradle.properties ├── app │ ├── src │ │ ├── main │ │ │ ├── res │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ └── ic_launcher.png │ │ │ │ ├── values │ │ │ │ │ └── styles.xml │ │ │ │ └── drawable │ │ │ │ │ └── launch_background.xml │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── finogeeks │ │ │ │ │ └── mop_demo │ │ │ │ │ └── MainActivity.java │ │ │ └── AndroidManifest.xml │ │ ├── debug │ │ │ └── AndroidManifest.xml │ │ └── profile │ │ │ └── AndroidManifest.xml │ └── build.gradle ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties ├── settings.gradle └── build.gradle ├── .metadata ├── .vscode └── launch.json ├── .github └── workflows │ ├── issue.yml │ └── pull_request.yml ├── .flutter-plugins-dependencies ├── LICENSE ├── test └── widget_test.dart ├── pubspec.yaml ├── .gitignore ├── lib └── main.dart ├── pubspec.lock └── README.md /.gitattributes: -------------------------------------------------------------------------------- 1 | *.* linguist-language=dart 2 | -------------------------------------------------------------------------------- /doc/mop_flutter_demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finogeeks/finclip-flutter-demo/HEAD/doc/mop_flutter_demo.gif -------------------------------------------------------------------------------- /ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | android.enableJetifier=true 2 | android.useAndroidX=true 3 | org.gradle.jvmargs=-Xmx1536M 4 | 5 | android.enableR8=true 6 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | @interface AppDelegate : FlutterAppDelegate 5 | 6 | @end 7 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finogeeks/finclip-flutter-demo/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finogeeks/finclip-flutter-demo/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finogeeks/finclip-flutter-demo/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finogeeks/finclip-flutter-demo/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finogeeks/finclip-flutter-demo/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finogeeks/finclip-flutter-demo/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finogeeks/finclip-flutter-demo/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finogeeks/finclip-flutter-demo/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finogeeks/finclip-flutter-demo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finogeeks/finclip-flutter-demo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finogeeks/finclip-flutter-demo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finogeeks/finclip-flutter-demo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finogeeks/finclip-flutter-demo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finogeeks/finclip-flutter-demo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finogeeks/finclip-flutter-demo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finogeeks/finclip-flutter-demo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finogeeks/finclip-flutter-demo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finogeeks/finclip-flutter-demo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finogeeks/finclip-flutter-demo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finogeeks/finclip-flutter-demo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finogeeks/finclip-flutter-demo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finogeeks/finclip-flutter-demo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/finogeeks/finclip-flutter-demo/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Runner/main.m: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | #import "AppDelegate.h" 4 | 5 | int main(int argc, char* argv[]) { 6 | @autoreleasepool { 7 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Jun 23 08:50:38 CEST 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip 7 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled and should not be manually edited. 5 | 6 | version: 7 | revision: 1aedbb1835bd6eb44550293d57d4d124f19901f0 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md: -------------------------------------------------------------------------------- 1 | # Launch Screen Assets 2 | 3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory. 4 | 5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Flutter", 9 | "request": "launch", 10 | "type": "dart" 11 | } 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /ios/Runner/FATFlutterViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // FATFlutterViewController.h 3 | // Runner 4 | // 5 | // Created by Haley on 2022/6/29. 6 | // Copyright © 2022 The Chromium Authors. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface FATFlutterViewController : FlutterViewController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/main/java/com/finogeeks/mop_demo/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.finogeeks.mop_demo; 2 | 3 | import android.os.Bundle; 4 | import io.flutter.app.FlutterActivity; 5 | import io.flutter.plugins.GeneratedPluginRegistrant; 6 | 7 | public class MainActivity extends FlutterActivity { 8 | @Override 9 | protected void onCreate(Bundle savedInstanceState) { 10 | super.onCreate(savedInstanceState); 11 | GeneratedPluginRegistrant.registerWith(this); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ios/Runner/AppDelegate.m: -------------------------------------------------------------------------------- 1 | #include "AppDelegate.h" 2 | #include "GeneratedPluginRegistrant.h" 3 | 4 | @implementation AppDelegate 5 | 6 | - (BOOL)application:(UIApplication *)application 7 | didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 8 | [GeneratedPluginRegistrant registerWithRegistry:self]; 9 | // Override point for customization after application launch. 10 | return [super application:application didFinishLaunchingWithOptions:launchOptions]; 11 | } 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /.github/workflows/issue.yml: -------------------------------------------------------------------------------- 1 | name: Notify 2 | on: 3 | issues: 4 | types: [opened] 5 | issue_comment: 6 | types: [created] 7 | jobs: 8 | build: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v2 12 | - name: Notify 13 | run: curl --location --request POST 'https://api.finogeeks.club/api/v1/finstore/webhooks/61b331d79b3dad0001f72fa2/postreceive?nonce=jhd2QyrArsc' --header "Content-Type:application/json" --data-raw '{"msg":"仓库 ${{github.repository}} 有新的 issue"}' 14 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /.github/workflows/pull_request.yml: -------------------------------------------------------------------------------- 1 | name: Notify 2 | on: 3 | pull_request: 4 | branches: [ master ] 5 | jobs: 6 | build: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: actions/checkout@v2 10 | - name: Notify 11 | run: curl --location --request POST 'https://api.finogeeks.club/api/v1/finstore/webhooks/61b331d79b3dad0001f72fa2/postreceive?nonce=jhd2QyrArsc' --header "Content-Type:application/json" --data-raw '{"msg":"仓库 ${{github.repository}} 有新的 PR ${{ github.event.pull_request._links.html.href }}"}' 12 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() 4 | 5 | def plugins = new Properties() 6 | def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') 7 | if (pluginsFile.exists()) { 8 | pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } 9 | } 10 | 11 | plugins.each { name, path -> 12 | def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() 13 | include ":$name" 14 | project(":$name").projectDir = pluginDirectory 15 | } 16 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | repositories { 3 | google() 4 | jcenter() 5 | } 6 | 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:3.4.0' 9 | } 10 | } 11 | 12 | allprojects { 13 | repositories { 14 | google() 15 | jcenter() 16 | } 17 | } 18 | 19 | rootProject.buildDir = '../build' 20 | subprojects { 21 | project.buildDir = "${rootProject.buildDir}/${project.name}" 22 | } 23 | subprojects { 24 | project.evaluationDependsOn(':app') 25 | } 26 | 27 | task clean(type: Delete) { 28 | delete rootProject.buildDir 29 | } 30 | -------------------------------------------------------------------------------- /.flutter-plugins-dependencies: -------------------------------------------------------------------------------- 1 | {"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"mop","path":"/Users/fino/.pub-cache/hosted/pub.flutter-io.cn/mop-2.49.11/","native_build":true,"dependencies":[]}],"android":[{"name":"flutter_plugin_android_lifecycle","path":"/Users/fino/.pub-cache/hosted/pub.flutter-io.cn/flutter_plugin_android_lifecycle-2.0.14/","native_build":true,"dependencies":[]},{"name":"mop","path":"/Users/fino/.pub-cache/hosted/pub.flutter-io.cn/mop-2.49.11/","native_build":true,"dependencies":["flutter_plugin_android_lifecycle"]}],"macos":[],"linux":[],"windows":[],"web":[]},"dependencyGraph":[{"name":"flutter_plugin_android_lifecycle","dependencies":[]},{"name":"mop","dependencies":["flutter_plugin_android_lifecycle"]}],"date_created":"2025-09-29 11:10:33.014160","version":"3.24.4","swift_package_manager_enabled":false} -------------------------------------------------------------------------------- /ios/Flutter/Flutter.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # This podspec is NOT to be published. It is only used as a local source! 3 | # This is a generated file; do not edit or check into version control. 4 | # 5 | 6 | Pod::Spec.new do |s| 7 | s.name = 'Flutter' 8 | s.version = '1.0.0' 9 | s.summary = 'A UI toolkit for beautiful and fast apps.' 10 | s.homepage = 'https://flutter.dev' 11 | s.license = { :type => 'BSD' } 12 | s.author = { 'Flutter Dev Team' => 'flutter-dev@googlegroups.com' } 13 | s.source = { :git => 'https://github.com/flutter/engine', :tag => s.version.to_s } 14 | s.ios.deployment_target = '12.0' 15 | # Framework linking is handled by Flutter tooling, not CocoaPods. 16 | # Add a placeholder to satisfy `s.dependency 'Flutter'` plugin podspecs. 17 | s.vendored_frameworks = 'path/to/nothing' 18 | end 19 | -------------------------------------------------------------------------------- /ios/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - FinApplet (2.49.11) 3 | - FinAppletExt (2.49.11): 4 | - FinApplet (= 2.49.11) 5 | - Flutter (1.0.0) 6 | - mop (0.1.1): 7 | - FinApplet (= 2.49.11) 8 | - FinAppletExt (= 2.49.11) 9 | - Flutter 10 | 11 | DEPENDENCIES: 12 | - Flutter (from `Flutter`) 13 | - mop (from `.symlinks/plugins/mop/ios`) 14 | 15 | SPEC REPOS: 16 | trunk: 17 | - FinApplet 18 | - FinAppletExt 19 | 20 | EXTERNAL SOURCES: 21 | Flutter: 22 | :path: Flutter 23 | mop: 24 | :path: ".symlinks/plugins/mop/ios" 25 | 26 | SPEC CHECKSUMS: 27 | FinApplet: 394b8bd19410ede59145889763193b1a3a095f0a 28 | FinAppletExt: d93f6008bd7be3f80d36b412c1f6f9971ae4b836 29 | Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 30 | mop: 4b2a8899128baba8856aacfb2ecbb2fd8565e9b1 31 | 32 | PODFILE CHECKSUM: cf0c950f7e9a456b4e325f5b8fc0f98906a3705a 33 | 34 | COCOAPODS: 1.15.2 35 | -------------------------------------------------------------------------------- /ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | App 9 | CFBundleIdentifier 10 | io.flutter.flutter.app 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | App 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1.0 23 | MinimumOSVersion 24 | 12.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 finogeeks 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /ios/Runner/FATFlutterViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // FATFlutterViewController.m 3 | // Runner 4 | // 5 | // Created by Haley on 2022/6/29. 6 | // Copyright © 2022 The Chromium Authors. All rights reserved. 7 | // 8 | 9 | #import "FATFlutterViewController.h" 10 | 11 | @interface FATFlutterViewController () 12 | 13 | @end 14 | 15 | @implementation FATFlutterViewController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | // Do any additional setup after loading the view. 20 | } 21 | 22 | - (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event { 23 | if (self.presentedViewController) { 24 | return; 25 | } 26 | [super touchesBegan:touches withEvent:event]; 27 | 28 | } 29 | 30 | - (void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event { 31 | if (self.presentedViewController) { 32 | return; 33 | } 34 | [super touchesMoved:touches withEvent:event]; 35 | } 36 | 37 | - (void)touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event { 38 | if (self.presentedViewController) { 39 | return; 40 | } 41 | [super touchesEnded:touches withEvent:event]; 42 | } 43 | 44 | @end 45 | -------------------------------------------------------------------------------- /test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility that Flutter provides. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:mop_demo/main.dart'; 12 | 13 | void main() { 14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async { 15 | // Build our app and trigger a frame. 16 | await tester.pumpWidget(MyApp()); 17 | 18 | // Verify that our counter starts at 0. 19 | expect(find.text('0'), findsOneWidget); 20 | expect(find.text('1'), findsNothing); 21 | 22 | // Tap the '+' icon and trigger a frame. 23 | await tester.tap(find.byIcon(Icons.add)); 24 | await tester.pump(); 25 | 26 | // Verify that our counter has incremented. 27 | expect(find.text('0'), findsNothing); 28 | expect(find.text('1'), findsOneWidget); 29 | }); 30 | } 31 | -------------------------------------------------------------------------------- /ios/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | platform :ios, '12.0' 3 | 4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 6 | 7 | project 'Runner', { 8 | 'Debug' => :debug, 9 | 'Profile' => :release, 10 | 'Release' => :release, 11 | } 12 | 13 | def flutter_root 14 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) 15 | unless File.exist?(generated_xcode_build_settings_path) 16 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" 17 | end 18 | 19 | File.foreach(generated_xcode_build_settings_path) do |line| 20 | matches = line.match(/FLUTTER_ROOT\=(.*)/) 21 | return matches[1].strip if matches 22 | end 23 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" 24 | end 25 | 26 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) 27 | 28 | flutter_ios_podfile_setup 29 | 30 | target 'Runner' do 31 | flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) 32 | end 33 | 34 | post_install do |installer| 35 | installer.pods_project.targets.each do |target| 36 | flutter_additional_ios_build_settings(target) 37 | end 38 | end 39 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 9 | 13 | 20 | 24 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CADisableMinimumFrameDurationOnPhone 6 | 7 | CFBundleDevelopmentRegion 8 | $(DEVELOPMENT_LANGUAGE) 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | mop_demo 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | $(FLUTTER_BUILD_NAME) 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | $(FLUTTER_BUILD_NUMBER) 25 | LSRequiresIPhoneOS 26 | 27 | UIApplicationSupportsIndirectInputEvents 28 | 29 | UILaunchStoryboardName 30 | LaunchScreen 31 | UIMainStoryboardFile 32 | Main 33 | UIRequiresFullScreen 34 | 35 | UISupportedInterfaceOrientations 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationLandscapeLeft 39 | UIInterfaceOrientationLandscapeRight 40 | 41 | UISupportedInterfaceOrientations~ipad 42 | 43 | UIInterfaceOrientationPortrait 44 | UIInterfaceOrientationPortraitUpsideDown 45 | UIInterfaceOrientationLandscapeLeft 46 | UIInterfaceOrientationLandscapeRight 47 | 48 | UIViewControllerBasedStatusBarAppearance 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /ios/Runner/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /android/app/build.gradle: -------------------------------------------------------------------------------- 1 | def localProperties = new Properties() 2 | def localPropertiesFile = rootProject.file('local.properties') 3 | if (localPropertiesFile.exists()) { 4 | localPropertiesFile.withReader('UTF-8') { reader -> 5 | localProperties.load(reader) 6 | } 7 | } 8 | 9 | def flutterRoot = localProperties.getProperty('flutter.sdk') 10 | if (flutterRoot == null) { 11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 12 | } 13 | 14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 15 | if (flutterVersionCode == null) { 16 | flutterVersionCode = '1' 17 | } 18 | 19 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 20 | if (flutterVersionName == null) { 21 | flutterVersionName = '1.0' 22 | } 23 | 24 | apply plugin: 'com.android.application' 25 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 26 | 27 | android { 28 | compileSdkVersion 33 29 | 30 | lintOptions { 31 | disable 'InvalidPackage' 32 | } 33 | 34 | defaultConfig { 35 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 36 | applicationId "com.finogeeks.finclip.demo" 37 | minSdkVersion 21 38 | targetSdkVersion 33 39 | versionCode flutterVersionCode.toInteger() 40 | versionName flutterVersionName 41 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 42 | } 43 | 44 | buildTypes { 45 | release { 46 | // TODO: Add your own signing config for the release build. 47 | // Signing with the debug keys for now, so `flutter run --release` works. 48 | signingConfig signingConfigs.debug 49 | } 50 | } 51 | packagingOptions { 52 | // libsdkcore.so是被加固过的,不能被压缩,否则加载动态库时会报错 53 | doNotStrip "*/x86/libsdkcore.so" 54 | doNotStrip "*/x86_64/libsdkcore.so" 55 | doNotStrip "*/armeabi/libsdkcore.so" 56 | doNotStrip "*/armeabi-v7a/libsdkcore.so" 57 | doNotStrip "*/arm64-v8a/libsdkcore.so" 58 | } 59 | } 60 | 61 | flutter { 62 | source '../..' 63 | } 64 | 65 | dependencies { 66 | testImplementation 'junit:junit:4.12' 67 | androidTestImplementation 'androidx.test:runner:1.1.0' 68 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0' 69 | 70 | implementation "com.finogeeks.lib:finapplet:2.45.3" 71 | implementation "com.finogeeks.mop:plugins:2.45.3" 72 | } 73 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: mop_demo 2 | description: A new Flutter project. 3 | 4 | # The following defines the version and build number for your application. 5 | # A version number is three numbers separated by dots, like 1.2.43 6 | # followed by an optional build number separated by a +. 7 | # Both the version and the builder number may be overridden in flutter 8 | # build by specifying --build-name and --build-number, respectively. 9 | # In Android, build-name is used as versionName while build-number used as versionCode. 10 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning 11 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. 12 | # Read more about iOS versioning at 13 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html 14 | version: 1.0.0+1 15 | 16 | environment: 17 | sdk: '>=2.12.0 <4.0.0' 18 | flutter: '>=2.2.3' 19 | 20 | dependencies: 21 | flutter: 22 | sdk: flutter 23 | 24 | # The following adds the Cupertino Icons font to your application. 25 | # Use with the CupertinoIcons class for iOS style icons. 26 | cupertino_icons: ^1.0.8 27 | mop: 2.49.11 28 | 29 | dev_dependencies: 30 | flutter_test: 31 | sdk: flutter 32 | 33 | # For information on the generic Dart part of this file, see the 34 | # following page: https://dart.dev/tools/pub/pubspec 35 | 36 | # The following section is specific to Flutter. 37 | flutter: 38 | # The following line ensures that the Material Icons font is 39 | # included with your application, so that you can use the icons in 40 | # the material Icons class. 41 | uses-material-design: true 42 | # To add assets to your application, add an assets section, like this: 43 | # assets: 44 | # - images/a_dot_burr.jpeg 45 | # - images/a_dot_ham.jpeg 46 | # An image asset can refer to one or more resolution-specific "variants", see 47 | # https://flutter.dev/assets-and-images/#resolution-aware. 48 | # For details regarding adding assets from package dependencies, see 49 | # https://flutter.dev/assets-and-images/#from-packages 50 | # To add custom fonts to your application, add a fonts section here, 51 | # in this "flutter" section. Each entry in this list should have a 52 | # "family" key with the font family name, and a "fonts" key with a 53 | # list giving the asset and other descriptors for the font. For 54 | # example: 55 | # fonts: 56 | # - family: Schyler 57 | # fonts: 58 | # - asset: fonts/Schyler-Regular.ttf 59 | # - asset: fonts/Schyler-Italic.ttf 60 | # style: italic 61 | # - family: Trajan Pro 62 | # fonts: 63 | # - asset: fonts/TrajanPro.ttf 64 | # - asset: fonts/TrajanPro_Bold.ttf 65 | # weight: 700 66 | # 67 | # For details regarding fonts from package dependencies, 68 | # see https://flutter.dev/custom-fonts/#from-packages 69 | -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-60x60@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-60x60@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-App-20x20@1x.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "20x20", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-App-20x20@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-29x29@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "29x29", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-29x29@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-40x40@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "40x40", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-40x40@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-76x76@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-76x76@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "83.5x83.5", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-App-83.5x83.5@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "1024x1024", 113 | "idiom" : "ios-marketing", 114 | "filename" : "Icon-App-1024x1024@1x.png", 115 | "scale" : "1x" 116 | } 117 | ], 118 | "info" : { 119 | "version" : 1, 120 | "author" : "xcode" 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | *.swo 7 | *~ 8 | .DS_Store 9 | .atom/ 10 | .buildlog/ 11 | .history 12 | .svn/ 13 | *.tmproj 14 | *.esproj 15 | *.sublime-workspace 16 | 17 | # IntelliJ related 18 | *.iml 19 | *.ipr 20 | *.iws 21 | .idea/ 22 | modules.xml 23 | workspace.xml 24 | 25 | # Visual Studio Code related 26 | .vscode/ 27 | !.vscode/settings.json 28 | !.vscode/tasks.json 29 | !.vscode/launch.json 30 | !.vscode/extensions.json 31 | *.code-workspace 32 | 33 | # Flutter/Dart/Pub related 34 | **/doc/api/ 35 | .dart_tool/ 36 | .flutter-plugins 37 | .flutter-plugins-dependencies 38 | .packages 39 | .pub-cache/ 40 | .pub/ 41 | /build/ 42 | flutter_*/** 43 | .pub-cache/ 44 | .pub/ 45 | /.dart_tool/ 46 | /build/ 47 | flutter/app.*.symbols 48 | flutter/app.*.map 49 | flutter/*.dart.js 50 | flutter/*.js 51 | flutter/*.js.map 52 | **/generated_plugin_registrant.dart 53 | 54 | # Dart 55 | *.dart.js 56 | *.js.deps 57 | *.js.map 58 | *.info.json 59 | *.js 60 | *.js_ 61 | *.part.js 62 | *.ddc.js 63 | *.lib.js 64 | .ddc/ 65 | .jazzignore 66 | 67 | # Android related 68 | **/android/**/gradle-wrapper.jar 69 | **/android/.gradle/ 70 | **/android/captures/ 71 | **/android/gradlew 72 | **/android/gradlew.bat 73 | **/android/local.properties 74 | **/android/**/GeneratedPluginRegistrant.java 75 | **/android/**/google-services.json 76 | **/android/**/GeneratedPluginRegistrant.java 77 | **/android/app/debug/ 78 | **/android/key.properties 79 | **/android/key.jks 80 | *.apk 81 | *.aab 82 | *.ap_ 83 | *.aar 84 | output.json 85 | 86 | # iOS/XCode related 87 | **/ios/**/*.mode1v3 88 | **/ios/**/*.mode2v3 89 | **/ios/**/*.moved-aside 90 | **/ios/**/*.pbxuser 91 | **/ios/**/*.perspectivev3 92 | **/ios/**/*sync/ 93 | **/ios/**/.sconsign.dblite 94 | **/ios/**/.tags* 95 | **/ios/**/.vagrant/ 96 | **/ios/**/DerivedData/ 97 | **/ios/**/Icon? 98 | **/ios/**/Pods/ 99 | **/ios/**/.symlinks/ 100 | **/ios/**/profile 101 | **/ios/**/xcuserdata 102 | **/ios/.generated/ 103 | **/ios/Flutter/App.framework 104 | **/ios/Flutter/Flutter.framework 105 | **/ios/Flutter/Generated.xcconfig 106 | **/ios/Flutter/app.flx 107 | **/ios/Flutter/app.zip 108 | **/ios/Flutter/flutter_assets/ 109 | **/ios/Flutter/flutter_export_environment.sh 110 | **/ios/ServiceDefinitions.json 111 | **/ios/Runner/GeneratedPluginRegistrant.* 112 | **/ios/Podfile.lock 113 | **/ios/Flutter/flutter.csproj 114 | **/ios/.metadata 115 | 116 | # Exceptions to above rules. 117 | !**/ios/**/default.mode1v3 118 | !**/ios/**/default.mode2v3 119 | !**/ios/**/default.pbxuser 120 | !**/ios/**/default.perspectivev3 121 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages 122 | 123 | # Files and directories created by pub 124 | .dart_tool/ 125 | .packages 126 | pubspec.lock 127 | build/ 128 | # The pubspec.lock file is used by packages and plugins not as an app 129 | # Comment this if you want to commit the pubspec.lock file for an application 130 | #pubspec.lock 131 | 132 | # Directory created by dartdoc 133 | doc/api/ 134 | 135 | # Web related 136 | web/export/ 137 | 138 | # Windows 139 | Thumbs.db 140 | ehthumbs.db 141 | Desktop.ini 142 | 143 | # Linux 144 | *~ 145 | 146 | # Package files 147 | *.7z 148 | *.dmg 149 | *.gz 150 | *.iso 151 | *.jar 152 | *.rar 153 | *.tar 154 | *.zip 155 | 156 | # Coverage 157 | coverage/ 158 | .lcov.info 159 | 160 | # Environment variables 161 | .env 162 | .env.local 163 | .env.production 164 | .env.development 165 | 166 | # Firebase 167 | **/firebase-debug.log 168 | **/firebase-export.json 169 | 170 | # Flutter web 171 | /web_export/ 172 | 173 | # Flutter test outputs 174 | /test/results/ 175 | 176 | # Flutter build outputs 177 | /flutter-build/ -------------------------------------------------------------------------------- /lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'dart:async'; 3 | import 'dart:io'; 4 | import 'package:mop/mop.dart'; 5 | 6 | void main() => runApp(MyApp()); 7 | 8 | class MyApp extends StatefulWidget { 9 | @override 10 | _MyAppState createState() => _MyAppState(); 11 | } 12 | 13 | class _MyAppState extends State { 14 | @override 15 | void initState() { 16 | super.initState(); 17 | init(); 18 | } 19 | 20 | // Platform messages are asynchronous, so we initialize in an async method. 21 | Future init() async { 22 | // if (Platform.isIOS) { 23 | // final res = await Mop.instance.initialize( 24 | // '22LyZEib0gLTQdU3MUauATBwgfnTCJjdr7FCnywmAEM=', 'bdfd76cae24d4313', 25 | // apiServer: 'https://api.finclip.com', apiPrefix: '/api/v1/mop'); 26 | // print(res); 27 | // } else if (Platform.isAndroid) { 28 | // final res = await Mop.instance.initialize( 29 | // '22LyZEib0gLTQdU3MUauATBwgfnTCJjdr7FCnywmAEM=', 'bdfd76cae24d4313', 30 | // apiServer: 'https://api.finclip.com', apiPrefix: '/api/v1/mop'); 31 | // print(res); 32 | // } 33 | //多服务器配置 34 | FinStoreConfig storeConfigA = FinStoreConfig( 35 | "22LyZEib0gLTQdU3MUauAfJ/xujwNfM6OvvEqQyH4igA", 36 | "703b9026be3d6bc5", 37 | "https://api.finclip.com", 38 | cryptType: "SM", 39 | ); 40 | List storeConfigs = [storeConfigA]; 41 | Config config = Config(storeConfigs); 42 | config.appletDebugMode = BOOLState.BOOLStateTrue; 43 | 44 | UIConfig uiconfig = UIConfig(); 45 | uiconfig.isHideAddToDesktopMenu = false; 46 | 47 | final res = await Mop.instance.initSDK(config, uiConfig: uiconfig); 48 | print(res); 49 | 50 | if (!mounted) return; 51 | } 52 | 53 | // 5e637a18cbfae4000170fa7a 54 | @override 55 | Widget build(BuildContext context) { 56 | return MaterialApp( 57 | home: Scaffold( 58 | appBar: AppBar( 59 | title: const Text('凡泰极客小程序 Flutter 插件'), 60 | ), 61 | body: Center( 62 | child: Container( 63 | padding: EdgeInsets.only( 64 | top: 20, 65 | ), 66 | child: Column( 67 | children: [ 68 | Container( 69 | width: 140, 70 | decoration: BoxDecoration( 71 | borderRadius: BorderRadius.all(Radius.circular(5)), 72 | gradient: LinearGradient( 73 | colors: const [Color(0xFF12767e), Color(0xFF0dabb8)], 74 | stops: const [0.0, 1.0], 75 | begin: Alignment.topCenter, 76 | end: Alignment.bottomCenter, 77 | ), 78 | ), 79 | child: TextButton( 80 | onPressed: () { 81 | Mop.instance.openApplet('5facb3a52dcbff00017469bd', 82 | path: 'pages/index/index', query: ''); 83 | }, 84 | child: Text( 85 | '打开画图小程序', 86 | style: TextStyle(color: Colors.white), 87 | ), 88 | ), 89 | ), 90 | SizedBox(height: 30), 91 | Container( 92 | width: 140, 93 | decoration: BoxDecoration( 94 | borderRadius: BorderRadius.all(Radius.circular(5)), 95 | gradient: LinearGradient( 96 | colors: const [Color(0xFF12767e), Color(0xFF0dabb8)], 97 | stops: const [0.0, 1.0], 98 | begin: Alignment.topCenter, 99 | end: Alignment.bottomCenter, 100 | ), 101 | ), 102 | child: TextButton( 103 | onPressed: () { 104 | Mop.instance.openApplet('5fa214a29a6a7900019b5cc1'); 105 | }, 106 | child: Text( 107 | '打开官方小程序', 108 | style: TextStyle(color: Colors.white), 109 | ), 110 | ), 111 | ), 112 | SizedBox(height: 30), 113 | Container( 114 | width: 140, 115 | decoration: BoxDecoration( 116 | borderRadius: BorderRadius.all(Radius.circular(5)), 117 | gradient: LinearGradient( 118 | colors: const [Color(0xFF12767e), Color(0xFF0dabb8)], 119 | stops: const [0.0, 1.0], 120 | begin: Alignment.topCenter, 121 | end: Alignment.bottomCenter, 122 | ), 123 | ), 124 | child: TextButton( 125 | onPressed: () { 126 | Mop.instance.openApplet('5fa215459a6a7900019b5cc3'); 127 | }, 128 | child: Text( 129 | '我的对账单', 130 | style: TextStyle(color: Colors.white), 131 | ), 132 | ), 133 | ), 134 | ], 135 | ), 136 | ), 137 | ), 138 | ), 139 | ); 140 | } 141 | } 142 | -------------------------------------------------------------------------------- /pubspec.lock: -------------------------------------------------------------------------------- 1 | # Generated by pub 2 | # See https://dart.dev/tools/pub/glossary#lockfile 3 | packages: 4 | async: 5 | dependency: transitive 6 | description: 7 | name: async 8 | sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" 9 | url: "https://pub.flutter-io.cn" 10 | source: hosted 11 | version: "2.11.0" 12 | boolean_selector: 13 | dependency: transitive 14 | description: 15 | name: boolean_selector 16 | sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" 17 | url: "https://pub.flutter-io.cn" 18 | source: hosted 19 | version: "2.1.1" 20 | characters: 21 | dependency: transitive 22 | description: 23 | name: characters 24 | sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" 25 | url: "https://pub.flutter-io.cn" 26 | source: hosted 27 | version: "1.3.0" 28 | clock: 29 | dependency: transitive 30 | description: 31 | name: clock 32 | sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf 33 | url: "https://pub.flutter-io.cn" 34 | source: hosted 35 | version: "1.1.1" 36 | collection: 37 | dependency: transitive 38 | description: 39 | name: collection 40 | sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a 41 | url: "https://pub.flutter-io.cn" 42 | source: hosted 43 | version: "1.18.0" 44 | cupertino_icons: 45 | dependency: "direct main" 46 | description: 47 | name: cupertino_icons 48 | sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 49 | url: "https://pub.flutter-io.cn" 50 | source: hosted 51 | version: "1.0.8" 52 | fake_async: 53 | dependency: transitive 54 | description: 55 | name: fake_async 56 | sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" 57 | url: "https://pub.flutter-io.cn" 58 | source: hosted 59 | version: "1.3.1" 60 | flutter: 61 | dependency: "direct main" 62 | description: flutter 63 | source: sdk 64 | version: "0.0.0" 65 | flutter_plugin_android_lifecycle: 66 | dependency: transitive 67 | description: 68 | name: flutter_plugin_android_lifecycle 69 | sha256: "96af49aa6b57c10a312106ad6f71deed5a754029c24789bbf620ba784f0bd0b0" 70 | url: "https://pub.flutter-io.cn" 71 | source: hosted 72 | version: "2.0.14" 73 | flutter_test: 74 | dependency: "direct dev" 75 | description: flutter 76 | source: sdk 77 | version: "0.0.0" 78 | leak_tracker: 79 | dependency: transitive 80 | description: 81 | name: leak_tracker 82 | sha256: "3f87a60e8c63aecc975dda1ceedbc8f24de75f09e4856ea27daf8958f2f0ce05" 83 | url: "https://pub.flutter-io.cn" 84 | source: hosted 85 | version: "10.0.5" 86 | leak_tracker_flutter_testing: 87 | dependency: transitive 88 | description: 89 | name: leak_tracker_flutter_testing 90 | sha256: "932549fb305594d82d7183ecd9fa93463e9914e1b67cacc34bc40906594a1806" 91 | url: "https://pub.flutter-io.cn" 92 | source: hosted 93 | version: "3.0.5" 94 | leak_tracker_testing: 95 | dependency: transitive 96 | description: 97 | name: leak_tracker_testing 98 | sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" 99 | url: "https://pub.flutter-io.cn" 100 | source: hosted 101 | version: "3.0.1" 102 | matcher: 103 | dependency: transitive 104 | description: 105 | name: matcher 106 | sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb 107 | url: "https://pub.flutter-io.cn" 108 | source: hosted 109 | version: "0.12.16+1" 110 | material_color_utilities: 111 | dependency: transitive 112 | description: 113 | name: material_color_utilities 114 | sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec 115 | url: "https://pub.flutter-io.cn" 116 | source: hosted 117 | version: "0.11.1" 118 | meta: 119 | dependency: transitive 120 | description: 121 | name: meta 122 | sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 123 | url: "https://pub.flutter-io.cn" 124 | source: hosted 125 | version: "1.15.0" 126 | mop: 127 | dependency: "direct main" 128 | description: 129 | name: mop 130 | sha256: "11df52a5082c37596d6e91491626a4a28567edc5d852c4931a047fb958180e59" 131 | url: "https://pub.flutter-io.cn" 132 | source: hosted 133 | version: "2.49.11" 134 | path: 135 | dependency: transitive 136 | description: 137 | name: path 138 | sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" 139 | url: "https://pub.flutter-io.cn" 140 | source: hosted 141 | version: "1.9.0" 142 | sky_engine: 143 | dependency: transitive 144 | description: flutter 145 | source: sdk 146 | version: "0.0.99" 147 | source_span: 148 | dependency: transitive 149 | description: 150 | name: source_span 151 | sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" 152 | url: "https://pub.flutter-io.cn" 153 | source: hosted 154 | version: "1.10.0" 155 | stack_trace: 156 | dependency: transitive 157 | description: 158 | name: stack_trace 159 | sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" 160 | url: "https://pub.flutter-io.cn" 161 | source: hosted 162 | version: "1.11.1" 163 | stream_channel: 164 | dependency: transitive 165 | description: 166 | name: stream_channel 167 | sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 168 | url: "https://pub.flutter-io.cn" 169 | source: hosted 170 | version: "2.1.2" 171 | string_scanner: 172 | dependency: transitive 173 | description: 174 | name: string_scanner 175 | sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" 176 | url: "https://pub.flutter-io.cn" 177 | source: hosted 178 | version: "1.2.0" 179 | term_glyph: 180 | dependency: transitive 181 | description: 182 | name: term_glyph 183 | sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 184 | url: "https://pub.flutter-io.cn" 185 | source: hosted 186 | version: "1.2.1" 187 | test_api: 188 | dependency: transitive 189 | description: 190 | name: test_api 191 | sha256: "5b8a98dafc4d5c4c9c72d8b31ab2b23fc13422348d2997120294d3bac86b4ddb" 192 | url: "https://pub.flutter-io.cn" 193 | source: hosted 194 | version: "0.7.2" 195 | vector_math: 196 | dependency: transitive 197 | description: 198 | name: vector_math 199 | sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" 200 | url: "https://pub.flutter-io.cn" 201 | source: hosted 202 | version: "2.1.4" 203 | vm_service: 204 | dependency: transitive 205 | description: 206 | name: vm_service 207 | sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d" 208 | url: "https://pub.flutter-io.cn" 209 | source: hosted 210 | version: "14.2.5" 211 | sdks: 212 | dart: ">=3.3.0 <4.0.0" 213 | flutter: ">=3.18.0-18.0.pre.54" 214 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | 4 | 5 |

6 | 7 |

8 | FinClip Flutter DEMO
9 |

10 |

11 | 本项目提供在 Flutter 环境中运行小程序的示例 DEMO 12 |

13 | 14 |

15 | 👉 https://www.finclip.com/ 👈 16 |

17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 | 32 |

33 | 34 |

35 | 36 | [官方网站](https://www.finclip.com/) | [示例小程序](https://www.finclip.com/#/market) | [开发文档](https://www.finclip.com/mop/document/) | [部署指南](https://www.finclip.com/mop/document/introduce/quickStart/cloud-server-deployment-guide.html) | [SDK 集成指南](https://www.finclip.com/mop/document/introduce/quickStart/intergration-guide.html) | [API 列表](https://www.finclip.com/mop/document/develop/api/overview.html) | [组件列表](https://www.finclip.com/mop/document/develop/component/overview.html) | [隐私承诺](https://www.finclip.com/mop/document/operate/safety.html) 37 | 38 |
39 | 40 | ----- 41 | ## 🤔 FinClip 是什么? 42 | 43 | 有没有**想过**,开发好的微信小程序能放在自己的 APP 里直接运行,只需要开发一次小程序,就能在不同的应用中打开它,是不是很不可思议? 44 | 45 | 有没有**试过**,在自己的 APP 中引入一个 SDK ,应用中不仅可以打开小程序,还能自定义小程序接口,修改小程序样式,是不是觉得更不可思议? 46 | 47 | 这就是 FinClip ,就是有这么多不可思议! 48 | 49 | ## ⚙️ Flutter 集成 50 | 51 | 在项目 `pubspec.yaml` 文件中添加依赖 52 | 53 | ```yaml 54 | mop: latest.version 55 | ``` 56 | 57 | ## 🖥 示例 58 | 59 | ```flutter 60 | import 'package:flutter/material.dart'; 61 | import 'dart:async'; 62 | import 'dart:io'; 63 | import 'package:mop/mop.dart'; 64 | 65 | void main() => runApp(MyApp()); 66 | 67 | class MyApp extends StatefulWidget { 68 | @override 69 | _MyAppState createState() => _MyAppState(); 70 | } 71 | 72 | class _MyAppState extends State { 73 | @override 74 | void initState() { 75 | super.initState(); 76 | init(); 77 | } 78 | 79 | // Platform messages are asynchronous, so we initialize in an async method. 80 | Future init() async { 81 | if (Platform.isiOS) { 82 | //com.finogeeks.mopExample 83 | final res = await Mop.instance.initialize( 84 | '22LyZEib0gLTQdU3MUauARlLry7JL/2fRpscC9kpGZQA', '1c11d7252c53e0b6', 85 | apiServer: 'https://api.finclip.com', apiPrefix: '/api/v1/mop'); 86 | print(res); 87 | } else if (Platform.isAndroid) { 88 | //com.finogeeks.mopexample 89 | final res = await Mop.instance.initialize( 90 | '22LyZEib0gLTQdU3MUauARjmmp6QmYgjGb3uHueys1oA', '98c49f97a031b555', 91 | apiServer: 'https://api.finclip.com', apiPrefix: '/api/v1/mop'); 92 | print(res); 93 | } 94 | if (!mounted) return; 95 | } 96 | 97 | @override 98 | Widget build(BuildContext context) { 99 | return MaterialApp( 100 | home: Scaffold( 101 | appBar: AppBar( 102 | title: const Text('凡泰极客小程序 Flutter 插件'), 103 | ), 104 | body: Center( 105 | child: Container( 106 | padding: EdgeInsets.only( 107 | top: 20, 108 | ), 109 | child: Column( 110 | children: [ 111 | Container( 112 | decoration: BoxDecoration( 113 | borderRadius: BorderRadius.all(Radius.circular(5)), 114 | gradient: LinearGradient( 115 | colors: const [Color(0xFF12767e), Color(0xFF0dabb8)], 116 | stops: const [0.0, 1.0], 117 | begin: Alignment.topCenter, 118 | end: Alignment.bottomCenter, 119 | ), 120 | ), 121 | child: FlatButton( 122 | onPressed: () { 123 | Mop.instance.openApplet('5e3c147a188211000141e9b1'); 124 | }, 125 | child: Text( 126 | '打开示例小程序', 127 | style: TextStyle(color: Colors.white), 128 | ), 129 | ), 130 | ), 131 | SizedBox(height: 30), 132 | Container( 133 | decoration: BoxDecoration( 134 | borderRadius: BorderRadius.all(Radius.circular(5)), 135 | gradient: LinearGradient( 136 | colors: const [Color(0xFF12767e), Color(0xFF0dabb8)], 137 | stops: const [0.0, 1.0], 138 | begin: Alignment.topCenter, 139 | end: Alignment.bottomCenter, 140 | ), 141 | ), 142 | child: FlatButton( 143 | onPressed: () { 144 | Mop.instance.openApplet('5e4d123647edd60001055df1',sequence: 1); 145 | }, 146 | child: Text( 147 | '打开官方小程序', 148 | style: TextStyle(color: Colors.white), 149 | ), 150 | ), 151 | ), 152 | ], 153 | ), 154 | ), 155 | ), 156 | ), 157 | ); 158 | } 159 | } 160 | ``` 161 | 162 | ## 📘 目录结构 163 | ``` 164 | . 165 | ├── LICENSE 166 | ├── README.md 167 | ├── android 安卓工程目录 168 | │   ├── app 169 | │   │   ├── build.gradle 应用构建配置 170 | │   │   └── src 171 | │   │   ├── debug 172 | │   │   │   └── AndroidManifest.xml 应用清单文件 173 | │   │   ├── main 应用源码主目录 174 | │   │   │   ├── AndroidManifest.xml 应用清单文件 175 | │   │   │   ├── java 应用源码目录 176 | │   │   │   │   ├── com 177 | │   │   │   │   │   └── finogeeks 178 | │   │   │   │   │   └── mop_demo 179 | │   │   │   │   │   └── MainActivity.java 180 | │   │   │   │   └── io 181 | │   │   │   │   └── flutter 182 | │   │   │   │   └── plugins 183 | │   │   │   │   └── GeneratedPluginRegistrant.java 184 | │   │   │   └── res 资源文件目录 185 | │   │   │   ├── drawable darwable资源目录 186 | │   │   │   │   └── launch_background.xml 187 | │   │   │   ├── mipmap-hdpi 图片资源目录 188 | │   │   │   │   └── ic_launcher.png 189 | │   │   │   ├── mipmap-mdpi 图片资源目录 190 | │   │   │   │   └── ic_launcher.png 191 | │   │   │   ├── mipmap-xhdpi 图片资源目录 192 | │   │   │   │   └── ic_launcher.png 193 | │   │   │   ├── mipmap-xxhdpi 图片资源目录 194 | │   │   │   │   └── ic_launcher.png 195 | │   │   │   ├── mipmap-xxxhdpi 图片资源目录 196 | │   │   │   │   └── ic_launcher.png 197 | │   │   │   └── values 198 | │   │   │   └── styles.xml 199 | │   │   └── profile 200 | │   │   └── AndroidManifest.xml 201 | │   ├── build.gradle 202 | │   ├── gradle gradle版本配置目录,一般情况下无需关注 203 | │   │   └── wrapper 204 | │   │   └── gradle-wrapper.properties 205 | │   ├── gradle.properties 206 | │   ├── local.properties 207 | │   └── settings.gradle 208 | ├── build 209 | ├── doc 210 | │   └── mop_flutter_demo.gif 211 | ├── ios iOS工程目录 212 | │   ├── Flutter Flutter-SDK目录,一般无需关注 213 | │   │   ├── AppFrameworkInfo.plist 214 | │   │   ├── Debug.xcconfig 215 | │   │   ├── Flutter.framework 216 | │   │   ├── Flutter.podspec 217 | │   │   ├── Generated.xcconfig 218 | │   │   ├── Release.xcconfig 219 | │   │   └── flutter_export_environment.sh 220 | │   ├── Podfile pod依赖配置文件 221 | │   ├── Runner iOS源码主目录 222 | │   │   ├── AppDelegate.h 223 | │   │   ├── AppDelegate.m 224 | │   │   ├── Assets.xcassets 图片资源 225 | │   │   │   ├── AppIcon.appiconset 图标 226 | │   │   │   └── LaunchImage.imageset 启动图 227 | │   │   ├── Base.lproj 228 | │   │   │   ├── LaunchScreen.storyboard 229 | │   │   │   └── Main.storyboard 230 | │   │   ├── FATFlutterViewController.h Flutter页面控制器子类 231 | │   │   ├── FATFlutterViewController.m Flutter页面控制器子类 232 | │   │   ├── GeneratedPluginRegistrant.h 233 | │   │   ├── GeneratedPluginRegistrant.m 234 | │   │   ├── Info.plist iOS工程配置文件 235 | │   │   └── main.m 236 | │   └── Runner.xcodeproj 237 | ├── lib Flutter源码主目录 238 | │   ├── main.dart 首页 239 | │   └── wx_pay.dart 微信支付源码 240 | ├── pubspec.lock 241 | ├── pubspec.yaml Flutter配置文件 242 | └── test 243 | └── widget_test.dart 244 | ``` 245 | 246 | ## 📋 接口文档 247 | 248 | ### 1. 初始化小程序 249 | 250 | 在使用 SDK 提供的 API 之前必须要初始化 SDK ,初始化 SDK 的接口如下 251 | 252 | ``` 253 | /// 254 | /// initialize mop miniprogram engine. 255 | /// 初始化小程序 256 | /// [appkey] is required. it can be getted from api.finclip.com 257 | /// [secret] is required. it can be getted from api.finclip.com 258 | /// [apiServer] is optional. the mop server address. default is https://mp.finogeek.com 259 | /// [apiPrefix] is optional. the mop server prefix. default is /api/v1/mop 260 | /// 261 | /// 262 | Future initialize(String appkey, String secret, 263 | {String apiServer, String apiPrefix}) 264 | ``` 265 | 266 | 使用示例: 267 | ``` 268 | final res = await Mop.instance.initialize( 269 | '22LyZEib0gLTQdU3MUauARlLry7JL/2fRpscC9kpGZQA', '1c11d7252c53e0b6', 270 | apiServer: 'https://api.finclip.com', apiPrefix: '/api/v1/mop'); 271 | ``` 272 | 273 | ### 2. 打开小程序 274 | 275 | ``` 276 | /// 277 | /// open the miniprogram [appId] from the mop server. 278 | /// 打开小程序 279 | /// [appId] is required. 280 | /// [path] is miniprogram open path. example /pages/index/index 281 | /// [query] is miniprogram query parameters. example key1=value1&key2=value2 282 | /// 283 | /// 284 | Future openApplet(final String appId, 285 | {final String path, final String query, final int sequence}) 286 | ``` 287 | 288 | ### 3. 获取当前正在使用的小程序信息 289 | 290 | 当前小程序信息包括的字段有 `appId`, `name`, `icon`, `description`, `version`, `thumbnail` 291 | 292 | ``` 293 | /// 294 | /// get current using applet 295 | /// 获取当前正在使用的小程序信息 296 | /// {appId,name,icon,description,version,thumbnail} 297 | /// 298 | /// 299 | Future> currentApplet() 300 | ``` 301 | 302 | ### 4. 关闭当前打开的所有小程序 303 | 304 | ``` 305 | /// 306 | /// close all running applets 307 | /// 关闭当前打开的所有小程序 308 | /// 309 | Future closeAllApplets() 310 | ``` 311 | 312 | ### 5. 清除缓存的小程序 313 | 314 | 清除缓存的小程序,当再次打开时,会重新下载小程序 315 | ``` 316 | /// 317 | /// clear applets cache 318 | /// 清除缓存的小程序 319 | /// 320 | Future clearApplets() 321 | ``` 322 | 323 | ### 6. 注册小程序事件处理 324 | 325 | 当小程序内触发指定事件时,会通知到使用者,比如小程序被转发,小程序需要获取用户信息,注册处理器来做出对应的响应 326 | 327 | ``` 328 | /// 329 | /// register handler to provide custom info or behaviour 330 | /// 注册小程序事件处理 331 | /// 332 | void registerAppletHandler(AppletHandler handler) 333 | ``` 334 | 335 | 处理器的结构 336 | ``` 337 | abstract class AppletHandler { 338 | /// 339 | /// 转发小程序 340 | /// 341 | /// 342 | /// 343 | void forwardApplet(Map appletInfo); 344 | 345 | /// 346 | ///获取用户信息 347 | /// "userId" 348 | /// "nickName" 349 | /// "avatarUrl" 350 | /// "jwt" 351 | /// "accessToken" 352 | /// 353 | Future> getUserInfo(); 354 | 355 | /// 获取自定义菜单 356 | Future> getCustomMenus(String appId); 357 | 358 | ///自定义菜单点击处理 359 | Future onCustomMenuClick(String appId, int menuId); 360 | } 361 | ``` 362 | 363 | ### 7. 注册扩展 API 364 | 365 | 如果,我们的小程序 SDK API 不满足您的需求,您可以注册自定义的小程序API,然后就可以在小程序内调用自已定义的 API 了。 366 | 367 | ``` 368 | /// 369 | /// register extension api 370 | /// 注册扩展api 371 | /// 372 | void registerExtensionApi(String name, ExtensionApiHandler handler) 373 | ``` 374 | 375 | iOS 需要在小程序根目录创建 `FinChatConf.js` 文件,配置实例如下 376 | 377 | ``` 378 | module.exports = { 379 | extApi:[ 380 | { //普通交互API 381 | name: 'onCustomEvent', //扩展api名 该api必须Native方实现了 382 | params: { //扩展api 的参数格式,可以只列必须的属性 383 | url: '' 384 | } 385 | } 386 | ] 387 | } 388 | ``` 389 | 390 | ## 📘 目录结构 391 | 392 | ``` 393 | . 394 | ├─.github 395 | │ 396 | ├─.vscode 397 | │ 398 | ├─android 工程Android源码 399 | │ 400 | ├─ios 工程iOS源码 401 | │ 402 | ├─lib 工程Flutter源码 403 | │ │ 404 | │ ├─ main.dart 程序入口,以及各初始化、调用示例 405 | │ │ 406 | │ └─ wx_pay.dart 微信支付类示例 407 | │ 408 | ├─test 测试目录,无需关注 409 | │ 410 | └─pubspec.yaml Flutter工程配置项 411 | ``` 412 | 413 | ## 🔗 常用链接 414 | 以下内容是您在 FinClip 进行开发与体验时,常见的问题与指引信息 415 | 416 | - [FinClip 官网](https://www.finclip.com/#/home) 417 | - [示例小程序](https://www.finclip.com/#/market) 418 | - [文档中心](https://www.finclip.com/mop/document/) 419 | - [SDK 部署指南](https://www.finclip.com/mop/document/introduce/quickStart/intergration-guide.html) 420 | - [小程序代码结构](https://www.finclip.com/mop/document/develop/guide/structure.html) 421 | - [iOS 集成指引](https://www.finclip.com/mop/document/runtime-sdk/ios/ios-integrate.html) 422 | - [Android 集成指引](https://www.finclip.com/mop/document/runtime-sdk/android/android-integrate.html) 423 | - [Flutter 集成指引](https://www.finclip.com/mop/document/runtime-sdk/flutter/flutter-integrate.html) 424 | 425 | ## ☎️ 联系我们 426 | 微信扫描下面二维码,关注官方公众号 **「凡泰极客」**,获取更多精彩内容。
427 | 428 | 429 | 微信扫描下面二维码,加入官方微信交流群,获取更多精彩内容。
430 | 431 | 432 | ## Stargazers 433 | [![Stargazers repo roster for @finogeeks/finclip-flutter-demo](https://reporoster.com/stars/finogeeks/finclip-flutter-demo)](https://github.com/finogeeks/finclip-flutter-demo/stargazers) 434 | 435 | ## Forkers 436 | [![Forkers repo roster for @finogeeks/finclip-flutter-demo](https://reporoster.com/forks/finogeeks/finclip-flutter-demo)](https://github.com/finogeeks/finclip-flutter-demo/network/members) 437 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 54; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; 11 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 12 | 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; }; 13 | 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; }; 14 | 97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; }; 15 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 16 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 17 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 18 | A84A83B8286C8E500000E7F4 /* FATFlutterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A84A83B7286C8E500000E7F4 /* FATFlutterViewController.m */; }; 19 | D633F869EAF2622663E7A6C4 /* libPods-Runner.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 69BD2AEC140040D71731672C /* libPods-Runner.a */; }; 20 | /* End PBXBuildFile section */ 21 | 22 | /* Begin PBXCopyFilesBuildPhase section */ 23 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = { 24 | isa = PBXCopyFilesBuildPhase; 25 | buildActionMask = 2147483647; 26 | dstPath = ""; 27 | dstSubfolderSpec = 10; 28 | files = ( 29 | ); 30 | name = "Embed Frameworks"; 31 | runOnlyForDeploymentPostprocessing = 0; 32 | }; 33 | /* End PBXCopyFilesBuildPhase section */ 34 | 35 | /* Begin PBXFileReference section */ 36 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 37 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 38 | 18A40DF7FC07C18FDD1F7AC4 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 39 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 40 | 69BD2AEC140040D71731672C /* libPods-Runner.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Runner.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 41 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 42 | 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 43 | 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 44 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 45 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 46 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 47 | 97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 48 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 49 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 50 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 51 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 52 | A84A83B6286C8E500000E7F4 /* FATFlutterViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FATFlutterViewController.h; sourceTree = ""; }; 53 | A84A83B7286C8E500000E7F4 /* FATFlutterViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = FATFlutterViewController.m; sourceTree = ""; }; 54 | B1258BD5DC3A8CB9CAEF4240 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 55 | B8B9EC8425B09BF8603CCF51 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 56 | /* End PBXFileReference section */ 57 | 58 | /* Begin PBXFrameworksBuildPhase section */ 59 | 97C146EB1CF9000F007C117D /* Frameworks */ = { 60 | isa = PBXFrameworksBuildPhase; 61 | buildActionMask = 2147483647; 62 | files = ( 63 | D633F869EAF2622663E7A6C4 /* libPods-Runner.a in Frameworks */, 64 | ); 65 | runOnlyForDeploymentPostprocessing = 0; 66 | }; 67 | /* End PBXFrameworksBuildPhase section */ 68 | 69 | /* Begin PBXGroup section */ 70 | 108679D9EF3938687D147804 /* Frameworks */ = { 71 | isa = PBXGroup; 72 | children = ( 73 | 69BD2AEC140040D71731672C /* libPods-Runner.a */, 74 | ); 75 | name = Frameworks; 76 | sourceTree = ""; 77 | }; 78 | 4CB7E95E7C759C4E705F5805 /* Pods */ = { 79 | isa = PBXGroup; 80 | children = ( 81 | B8B9EC8425B09BF8603CCF51 /* Pods-Runner.debug.xcconfig */, 82 | 18A40DF7FC07C18FDD1F7AC4 /* Pods-Runner.release.xcconfig */, 83 | B1258BD5DC3A8CB9CAEF4240 /* Pods-Runner.profile.xcconfig */, 84 | ); 85 | path = Pods; 86 | sourceTree = ""; 87 | }; 88 | 9740EEB11CF90186004384FC /* Flutter */ = { 89 | isa = PBXGroup; 90 | children = ( 91 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 92 | 9740EEB21CF90195004384FC /* Debug.xcconfig */, 93 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 94 | 9740EEB31CF90195004384FC /* Generated.xcconfig */, 95 | ); 96 | name = Flutter; 97 | sourceTree = ""; 98 | }; 99 | 97C146E51CF9000F007C117D = { 100 | isa = PBXGroup; 101 | children = ( 102 | 9740EEB11CF90186004384FC /* Flutter */, 103 | 97C146F01CF9000F007C117D /* Runner */, 104 | 97C146EF1CF9000F007C117D /* Products */, 105 | 4CB7E95E7C759C4E705F5805 /* Pods */, 106 | 108679D9EF3938687D147804 /* Frameworks */, 107 | ); 108 | sourceTree = ""; 109 | }; 110 | 97C146EF1CF9000F007C117D /* Products */ = { 111 | isa = PBXGroup; 112 | children = ( 113 | 97C146EE1CF9000F007C117D /* Runner.app */, 114 | ); 115 | name = Products; 116 | sourceTree = ""; 117 | }; 118 | 97C146F01CF9000F007C117D /* Runner */ = { 119 | isa = PBXGroup; 120 | children = ( 121 | 7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */, 122 | 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */, 123 | A84A83B6286C8E500000E7F4 /* FATFlutterViewController.h */, 124 | A84A83B7286C8E500000E7F4 /* FATFlutterViewController.m */, 125 | 97C146FA1CF9000F007C117D /* Main.storyboard */, 126 | 97C146FD1CF9000F007C117D /* Assets.xcassets */, 127 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 128 | 97C147021CF9000F007C117D /* Info.plist */, 129 | 97C146F11CF9000F007C117D /* Supporting Files */, 130 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 131 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 132 | ); 133 | path = Runner; 134 | sourceTree = ""; 135 | }; 136 | 97C146F11CF9000F007C117D /* Supporting Files */ = { 137 | isa = PBXGroup; 138 | children = ( 139 | 97C146F21CF9000F007C117D /* main.m */, 140 | ); 141 | name = "Supporting Files"; 142 | sourceTree = ""; 143 | }; 144 | /* End PBXGroup section */ 145 | 146 | /* Begin PBXNativeTarget section */ 147 | 97C146ED1CF9000F007C117D /* Runner */ = { 148 | isa = PBXNativeTarget; 149 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; 150 | buildPhases = ( 151 | EE4CCABE0507F91D7C367EC4 /* [CP] Check Pods Manifest.lock */, 152 | 9740EEB61CF901F6004384FC /* Run Script */, 153 | 97C146EA1CF9000F007C117D /* Sources */, 154 | 97C146EB1CF9000F007C117D /* Frameworks */, 155 | 97C146EC1CF9000F007C117D /* Resources */, 156 | 9705A1C41CF9048500538489 /* Embed Frameworks */, 157 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 158 | D81555E84DB260D586357F11 /* [CP] Embed Pods Frameworks */, 159 | ); 160 | buildRules = ( 161 | ); 162 | dependencies = ( 163 | ); 164 | name = Runner; 165 | productName = Runner; 166 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */; 167 | productType = "com.apple.product-type.application"; 168 | }; 169 | /* End PBXNativeTarget section */ 170 | 171 | /* Begin PBXProject section */ 172 | 97C146E61CF9000F007C117D /* Project object */ = { 173 | isa = PBXProject; 174 | attributes = { 175 | LastUpgradeCheck = 1510; 176 | ORGANIZATIONNAME = "The Chromium Authors"; 177 | TargetAttributes = { 178 | 97C146ED1CF9000F007C117D = { 179 | CreatedOnToolsVersion = 7.3.1; 180 | }; 181 | }; 182 | }; 183 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; 184 | compatibilityVersion = "Xcode 3.2"; 185 | developmentRegion = en; 186 | hasScannedForEncodings = 0; 187 | knownRegions = ( 188 | en, 189 | Base, 190 | ); 191 | mainGroup = 97C146E51CF9000F007C117D; 192 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */; 193 | projectDirPath = ""; 194 | projectRoot = ""; 195 | targets = ( 196 | 97C146ED1CF9000F007C117D /* Runner */, 197 | ); 198 | }; 199 | /* End PBXProject section */ 200 | 201 | /* Begin PBXResourcesBuildPhase section */ 202 | 97C146EC1CF9000F007C117D /* Resources */ = { 203 | isa = PBXResourcesBuildPhase; 204 | buildActionMask = 2147483647; 205 | files = ( 206 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 207 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 208 | 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */, 209 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 210 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, 211 | ); 212 | runOnlyForDeploymentPostprocessing = 0; 213 | }; 214 | /* End PBXResourcesBuildPhase section */ 215 | 216 | /* Begin PBXShellScriptBuildPhase section */ 217 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 218 | isa = PBXShellScriptBuildPhase; 219 | alwaysOutOfDate = 1; 220 | buildActionMask = 2147483647; 221 | files = ( 222 | ); 223 | inputPaths = ( 224 | "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", 225 | ); 226 | name = "Thin Binary"; 227 | outputPaths = ( 228 | ); 229 | runOnlyForDeploymentPostprocessing = 0; 230 | shellPath = /bin/sh; 231 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; 232 | }; 233 | 9740EEB61CF901F6004384FC /* Run Script */ = { 234 | isa = PBXShellScriptBuildPhase; 235 | alwaysOutOfDate = 1; 236 | buildActionMask = 2147483647; 237 | files = ( 238 | ); 239 | inputPaths = ( 240 | ); 241 | name = "Run Script"; 242 | outputPaths = ( 243 | ); 244 | runOnlyForDeploymentPostprocessing = 0; 245 | shellPath = /bin/sh; 246 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; 247 | }; 248 | D81555E84DB260D586357F11 /* [CP] Embed Pods Frameworks */ = { 249 | isa = PBXShellScriptBuildPhase; 250 | buildActionMask = 2147483647; 251 | files = ( 252 | ); 253 | inputPaths = ( 254 | "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh", 255 | "${PODS_XCFRAMEWORKS_BUILD_DIR}/FinApplet/FinApplet.framework/FinApplet", 256 | "${PODS_XCFRAMEWORKS_BUILD_DIR}/FinAppletExt/FinAppletExt.framework/FinAppletExt", 257 | ); 258 | name = "[CP] Embed Pods Frameworks"; 259 | outputPaths = ( 260 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FinApplet.framework", 261 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FinAppletExt.framework", 262 | ); 263 | runOnlyForDeploymentPostprocessing = 0; 264 | shellPath = /bin/sh; 265 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; 266 | showEnvVarsInLog = 0; 267 | }; 268 | EE4CCABE0507F91D7C367EC4 /* [CP] Check Pods Manifest.lock */ = { 269 | isa = PBXShellScriptBuildPhase; 270 | buildActionMask = 2147483647; 271 | files = ( 272 | ); 273 | inputFileListPaths = ( 274 | ); 275 | inputPaths = ( 276 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 277 | "${PODS_ROOT}/Manifest.lock", 278 | ); 279 | name = "[CP] Check Pods Manifest.lock"; 280 | outputFileListPaths = ( 281 | ); 282 | outputPaths = ( 283 | "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", 284 | ); 285 | runOnlyForDeploymentPostprocessing = 0; 286 | shellPath = /bin/sh; 287 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 288 | showEnvVarsInLog = 0; 289 | }; 290 | /* End PBXShellScriptBuildPhase section */ 291 | 292 | /* Begin PBXSourcesBuildPhase section */ 293 | 97C146EA1CF9000F007C117D /* Sources */ = { 294 | isa = PBXSourcesBuildPhase; 295 | buildActionMask = 2147483647; 296 | files = ( 297 | 978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */, 298 | A84A83B8286C8E500000E7F4 /* FATFlutterViewController.m in Sources */, 299 | 97C146F31CF9000F007C117D /* main.m in Sources */, 300 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, 301 | ); 302 | runOnlyForDeploymentPostprocessing = 0; 303 | }; 304 | /* End PBXSourcesBuildPhase section */ 305 | 306 | /* Begin PBXVariantGroup section */ 307 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = { 308 | isa = PBXVariantGroup; 309 | children = ( 310 | 97C146FB1CF9000F007C117D /* Base */, 311 | ); 312 | name = Main.storyboard; 313 | sourceTree = ""; 314 | }; 315 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { 316 | isa = PBXVariantGroup; 317 | children = ( 318 | 97C147001CF9000F007C117D /* Base */, 319 | ); 320 | name = LaunchScreen.storyboard; 321 | sourceTree = ""; 322 | }; 323 | /* End PBXVariantGroup section */ 324 | 325 | /* Begin XCBuildConfiguration section */ 326 | 249021D3217E4FDB00AE95B9 /* Profile */ = { 327 | isa = XCBuildConfiguration; 328 | buildSettings = { 329 | ALWAYS_SEARCH_USER_PATHS = NO; 330 | CLANG_ANALYZER_NONNULL = YES; 331 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 332 | CLANG_CXX_LIBRARY = "libc++"; 333 | CLANG_ENABLE_MODULES = YES; 334 | CLANG_ENABLE_OBJC_ARC = YES; 335 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 336 | CLANG_WARN_BOOL_CONVERSION = YES; 337 | CLANG_WARN_COMMA = YES; 338 | CLANG_WARN_CONSTANT_CONVERSION = YES; 339 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 340 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 341 | CLANG_WARN_EMPTY_BODY = YES; 342 | CLANG_WARN_ENUM_CONVERSION = YES; 343 | CLANG_WARN_INFINITE_RECURSION = YES; 344 | CLANG_WARN_INT_CONVERSION = YES; 345 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 346 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 347 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 348 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 349 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 350 | CLANG_WARN_STRICT_PROTOTYPES = YES; 351 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 352 | CLANG_WARN_UNREACHABLE_CODE = YES; 353 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 354 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 355 | COPY_PHASE_STRIP = NO; 356 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 357 | ENABLE_NS_ASSERTIONS = NO; 358 | ENABLE_STRICT_OBJC_MSGSEND = YES; 359 | GCC_C_LANGUAGE_STANDARD = gnu99; 360 | GCC_NO_COMMON_BLOCKS = YES; 361 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 362 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 363 | GCC_WARN_UNDECLARED_SELECTOR = YES; 364 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 365 | GCC_WARN_UNUSED_FUNCTION = YES; 366 | GCC_WARN_UNUSED_VARIABLE = YES; 367 | IPHONEOS_DEPLOYMENT_TARGET = 12.0; 368 | MTL_ENABLE_DEBUG_INFO = NO; 369 | SDKROOT = iphoneos; 370 | TARGETED_DEVICE_FAMILY = "1,2"; 371 | VALIDATE_PRODUCT = YES; 372 | }; 373 | name = Profile; 374 | }; 375 | 249021D4217E4FDB00AE95B9 /* Profile */ = { 376 | isa = XCBuildConfiguration; 377 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 378 | buildSettings = { 379 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 380 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 381 | ENABLE_BITCODE = NO; 382 | FRAMEWORK_SEARCH_PATHS = ( 383 | "$(inherited)", 384 | "$(PROJECT_DIR)/Flutter", 385 | ); 386 | INFOPLIST_FILE = Runner/Info.plist; 387 | LD_RUNPATH_SEARCH_PATHS = ( 388 | "$(inherited)", 389 | "@executable_path/Frameworks", 390 | ); 391 | LIBRARY_SEARCH_PATHS = ( 392 | "$(inherited)", 393 | "$(PROJECT_DIR)/Flutter", 394 | ); 395 | PRODUCT_BUNDLE_IDENTIFIER = com.finogeeks.finosprite; 396 | PRODUCT_NAME = "$(TARGET_NAME)"; 397 | VERSIONING_SYSTEM = "apple-generic"; 398 | }; 399 | name = Profile; 400 | }; 401 | 97C147031CF9000F007C117D /* Debug */ = { 402 | isa = XCBuildConfiguration; 403 | buildSettings = { 404 | ALWAYS_SEARCH_USER_PATHS = NO; 405 | CLANG_ANALYZER_NONNULL = YES; 406 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 407 | CLANG_CXX_LIBRARY = "libc++"; 408 | CLANG_ENABLE_MODULES = YES; 409 | CLANG_ENABLE_OBJC_ARC = YES; 410 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 411 | CLANG_WARN_BOOL_CONVERSION = YES; 412 | CLANG_WARN_COMMA = YES; 413 | CLANG_WARN_CONSTANT_CONVERSION = YES; 414 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 415 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 416 | CLANG_WARN_EMPTY_BODY = YES; 417 | CLANG_WARN_ENUM_CONVERSION = YES; 418 | CLANG_WARN_INFINITE_RECURSION = YES; 419 | CLANG_WARN_INT_CONVERSION = YES; 420 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 421 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 422 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 423 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 424 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 425 | CLANG_WARN_STRICT_PROTOTYPES = YES; 426 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 427 | CLANG_WARN_UNREACHABLE_CODE = YES; 428 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 429 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 430 | COPY_PHASE_STRIP = NO; 431 | DEBUG_INFORMATION_FORMAT = dwarf; 432 | ENABLE_STRICT_OBJC_MSGSEND = YES; 433 | ENABLE_TESTABILITY = YES; 434 | GCC_C_LANGUAGE_STANDARD = gnu99; 435 | GCC_DYNAMIC_NO_PIC = NO; 436 | GCC_NO_COMMON_BLOCKS = YES; 437 | GCC_OPTIMIZATION_LEVEL = 0; 438 | GCC_PREPROCESSOR_DEFINITIONS = ( 439 | "DEBUG=1", 440 | "$(inherited)", 441 | ); 442 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 443 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 444 | GCC_WARN_UNDECLARED_SELECTOR = YES; 445 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 446 | GCC_WARN_UNUSED_FUNCTION = YES; 447 | GCC_WARN_UNUSED_VARIABLE = YES; 448 | IPHONEOS_DEPLOYMENT_TARGET = 12.0; 449 | MTL_ENABLE_DEBUG_INFO = YES; 450 | ONLY_ACTIVE_ARCH = YES; 451 | SDKROOT = iphoneos; 452 | TARGETED_DEVICE_FAMILY = "1,2"; 453 | }; 454 | name = Debug; 455 | }; 456 | 97C147041CF9000F007C117D /* Release */ = { 457 | isa = XCBuildConfiguration; 458 | buildSettings = { 459 | ALWAYS_SEARCH_USER_PATHS = NO; 460 | CLANG_ANALYZER_NONNULL = YES; 461 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 462 | CLANG_CXX_LIBRARY = "libc++"; 463 | CLANG_ENABLE_MODULES = YES; 464 | CLANG_ENABLE_OBJC_ARC = YES; 465 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 466 | CLANG_WARN_BOOL_CONVERSION = YES; 467 | CLANG_WARN_COMMA = YES; 468 | CLANG_WARN_CONSTANT_CONVERSION = YES; 469 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 470 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 471 | CLANG_WARN_EMPTY_BODY = YES; 472 | CLANG_WARN_ENUM_CONVERSION = YES; 473 | CLANG_WARN_INFINITE_RECURSION = YES; 474 | CLANG_WARN_INT_CONVERSION = YES; 475 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 476 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 477 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 478 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 479 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 480 | CLANG_WARN_STRICT_PROTOTYPES = YES; 481 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 482 | CLANG_WARN_UNREACHABLE_CODE = YES; 483 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 484 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 485 | COPY_PHASE_STRIP = NO; 486 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 487 | ENABLE_NS_ASSERTIONS = NO; 488 | ENABLE_STRICT_OBJC_MSGSEND = YES; 489 | GCC_C_LANGUAGE_STANDARD = gnu99; 490 | GCC_NO_COMMON_BLOCKS = YES; 491 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 492 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 493 | GCC_WARN_UNDECLARED_SELECTOR = YES; 494 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 495 | GCC_WARN_UNUSED_FUNCTION = YES; 496 | GCC_WARN_UNUSED_VARIABLE = YES; 497 | IPHONEOS_DEPLOYMENT_TARGET = 12.0; 498 | MTL_ENABLE_DEBUG_INFO = NO; 499 | SDKROOT = iphoneos; 500 | TARGETED_DEVICE_FAMILY = "1,2"; 501 | VALIDATE_PRODUCT = YES; 502 | }; 503 | name = Release; 504 | }; 505 | 97C147061CF9000F007C117D /* Debug */ = { 506 | isa = XCBuildConfiguration; 507 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 508 | buildSettings = { 509 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 510 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 511 | DEVELOPMENT_TEAM = 9QCKYFU5M4; 512 | ENABLE_BITCODE = NO; 513 | FRAMEWORK_SEARCH_PATHS = ( 514 | "$(inherited)", 515 | "$(PROJECT_DIR)/Flutter", 516 | ); 517 | INFOPLIST_FILE = Runner/Info.plist; 518 | LD_RUNPATH_SEARCH_PATHS = ( 519 | "$(inherited)", 520 | "@executable_path/Frameworks", 521 | ); 522 | LIBRARY_SEARCH_PATHS = ( 523 | "$(inherited)", 524 | "$(PROJECT_DIR)/Flutter", 525 | ); 526 | PRODUCT_BUNDLE_IDENTIFIER = com.finogeeks.finosprite; 527 | PRODUCT_NAME = "$(TARGET_NAME)"; 528 | VERSIONING_SYSTEM = "apple-generic"; 529 | }; 530 | name = Debug; 531 | }; 532 | 97C147071CF9000F007C117D /* Release */ = { 533 | isa = XCBuildConfiguration; 534 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 535 | buildSettings = { 536 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 537 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 538 | DEVELOPMENT_TEAM = 9QCKYFU5M4; 539 | ENABLE_BITCODE = NO; 540 | FRAMEWORK_SEARCH_PATHS = ( 541 | "$(inherited)", 542 | "$(PROJECT_DIR)/Flutter", 543 | ); 544 | INFOPLIST_FILE = Runner/Info.plist; 545 | LD_RUNPATH_SEARCH_PATHS = ( 546 | "$(inherited)", 547 | "@executable_path/Frameworks", 548 | ); 549 | LIBRARY_SEARCH_PATHS = ( 550 | "$(inherited)", 551 | "$(PROJECT_DIR)/Flutter", 552 | ); 553 | PRODUCT_BUNDLE_IDENTIFIER = com.finogeeks.finosprite; 554 | PRODUCT_NAME = "$(TARGET_NAME)"; 555 | VERSIONING_SYSTEM = "apple-generic"; 556 | }; 557 | name = Release; 558 | }; 559 | /* End XCBuildConfiguration section */ 560 | 561 | /* Begin XCConfigurationList section */ 562 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { 563 | isa = XCConfigurationList; 564 | buildConfigurations = ( 565 | 97C147031CF9000F007C117D /* Debug */, 566 | 97C147041CF9000F007C117D /* Release */, 567 | 249021D3217E4FDB00AE95B9 /* Profile */, 568 | ); 569 | defaultConfigurationIsVisible = 0; 570 | defaultConfigurationName = Release; 571 | }; 572 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { 573 | isa = XCConfigurationList; 574 | buildConfigurations = ( 575 | 97C147061CF9000F007C117D /* Debug */, 576 | 97C147071CF9000F007C117D /* Release */, 577 | 249021D4217E4FDB00AE95B9 /* Profile */, 578 | ); 579 | defaultConfigurationIsVisible = 0; 580 | defaultConfigurationName = Release; 581 | }; 582 | /* End XCConfigurationList section */ 583 | }; 584 | rootObject = 97C146E61CF9000F007C117D /* Project object */; 585 | } 586 | --------------------------------------------------------------------------------