├── .gitignore ├── .metadata ├── .vscode ├── ipch │ └── 931e29107e449597 │ │ └── mmap_address.bin └── settings.json ├── CHANGELOG.md ├── LICENSE ├── README.md ├── android ├── .classpath ├── .gitignore ├── .project ├── .settings │ └── org.eclipse.buildship.core.prefs ├── bin │ ├── .gitignore │ ├── .project │ ├── bootpay_flutter_android.iml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ ├── local.properties │ ├── settings.gradle │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── jaceshim │ │ └── bootpay_flutter │ │ ├── BootpayActivity.class │ │ ├── BootpayFlutterPlugin.class │ │ ├── Constans$PaymentReqCode.class │ │ ├── Constans$PaymentResultCode.class │ │ ├── Constans.class │ │ └── models │ │ ├── CancelParam.class │ │ └── PayParam.class ├── bootpay_flutter_android.iml ├── build.gradle ├── gradle.properties ├── gradlew ├── gradlew.bat ├── local.properties ├── settings.gradle └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── jaceshim │ └── bootpay_flutter │ ├── BootpayActivity.java │ ├── BootpayFlutterPlugin.java │ ├── Constans.java │ └── models │ └── PayParam.java ├── example ├── .gitignore ├── .metadata ├── README.md ├── android │ ├── .project │ ├── .settings │ │ └── org.eclipse.buildship.core.prefs │ ├── app │ │ ├── .classpath │ │ ├── .project │ │ ├── .settings │ │ │ └── org.eclipse.buildship.core.prefs │ │ ├── bin │ │ │ ├── build.gradle │ │ │ └── src │ │ │ │ ├── debug │ │ │ │ └── AndroidManifest.xml │ │ │ │ ├── main │ │ │ │ ├── AndroidManifest.xml │ │ │ │ └── res │ │ │ │ │ ├── drawable │ │ │ │ │ └── launch_background.xml │ │ │ │ │ ├── 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 │ │ │ │ └── profile │ │ │ │ └── AndroidManifest.xml │ │ ├── build.gradle │ │ └── src │ │ │ ├── debug │ │ │ └── AndroidManifest.xml │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ │ └── jaceshim │ │ │ │ │ └── bootpay_flutter_example │ │ │ │ │ └── MainActivity.java │ │ │ └── res │ │ │ │ ├── drawable │ │ │ │ └── launch_background.xml │ │ │ │ ├── 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 │ │ │ └── profile │ │ │ └── AndroidManifest.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ └── gradle-wrapper.properties │ └── settings.gradle ├── ios │ ├── Flutter │ │ ├── AppFrameworkInfo.plist │ │ ├── Debug.xcconfig │ │ └── Release.xcconfig │ ├── Podfile │ ├── Podfile.lock │ ├── Runner.xcodeproj │ │ ├── project.pbxproj │ │ ├── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── Runner.xcscheme │ ├── Runner.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── WorkspaceSettings.xcsettings │ └── Runner │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ ├── Contents.json │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ ├── 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-83.5x83.5@2x.png │ │ └── LaunchImage.imageset │ │ │ ├── Contents.json │ │ │ ├── LaunchImage.png │ │ │ ├── LaunchImage@2x.png │ │ │ ├── LaunchImage@3x.png │ │ │ └── README.md │ │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ │ ├── Info.plist │ │ └── Runner-Bridging-Header.h ├── lib │ └── main.dart ├── pubspec.lock └── pubspec.yaml ├── ios ├── .gitignore ├── Assets │ └── .gitkeep ├── Classes │ ├── BootpayFlutterPlugin.h │ ├── BootpayFlutterPlugin.m │ ├── BootpayViewController.swift │ └── SwiftBootpayFlutterPlugin.swift └── bootpay_flutter.podspec ├── lib └── bootpay_flutter.dart ├── pubspec.lock ├── pubspec.yaml └── test └── bootpay_flutter_test.dart /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .dart_tool/ 3 | .idea/ 4 | .packages 5 | .pub/ 6 | bootpay_flutter.iml 7 | build/ 8 | android/.gradle/ 9 | android/gradle/ 10 | .vscode/ -------------------------------------------------------------------------------- /.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: 0ba67226ee62d6c9d663a6f8410fb4b2f1076046 8 | channel: unknown 9 | 10 | project_type: plugin 11 | -------------------------------------------------------------------------------- /.vscode/ipch/931e29107e449597/mmap_address.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/.vscode/ipch/931e29107e449597/mmap_address.bin -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "java.configuration.updateBuildConfiguration": "automatic" 3 | } -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## [1.0.1] 2 | * 가상계좌 결제시 결제결과에 가상계좌정보 포함되도록 수정 3 | 4 | ## [1.0.0] 5 | * payment method가 대문자로 치환하여 적용하도록 변경 6 | * bootpay실행부분 exception catch 되도록 변경 7 | * ios에서 결제수단을 무조건 소문자로 치환하여 처리되도록 수정. 8 | * android onActivityResult 수행시 결제모듈로 실행될 경우에만 MethodChannel로 응답처리되게 수정. 9 | 10 | ## [0.0.9] 11 | * Flutter PlatformChannel에서 발생하는 에러 fix. 12 | * Example 수정 13 | 14 | ## [0.0.8] 15 | * bootpay 미지원 method 주석처리 16 | 17 | ## [0.0.7] 18 | * changed bootpay version for android 19 | * ignored .vscode directory 20 | 21 | ## [0.0.6] 22 | * android back button 터치시 사용자에 의한 취소로 처리되게 수정함. 23 | * ios 결제값 return로직 변경 24 | 25 | ## [0.0.5] 26 | * README example 오타 수정 ( ╥﹏╥) ノシ 27 | 28 | ## [0.0.4] 29 | * README example 오타 수정. 30 | 31 | ## [0.0.3] 32 | * 결제상태 처리를 bootpay의 action으로 대체. 33 | * README example 수정. 34 | * bootpay_flutter version변경. 35 | 36 | ## [0.0.2] 37 | * Removed unused dependencies. 38 | * Updated package description. 39 | * Reformatted dart code. 40 | 41 | ## [0.0.1] 42 | * initial release. 43 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2018 Jace shim 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # bootpay_flutter 2 | 3 | This plugin is payment modules of [Bootpay](https://www.bootpay.co.kr) for Flutter. 4 | 5 | ## Getting Started 6 | Add the module to your project ``pubspec.yaml``: 7 | ```yaml 8 | ... 9 | dependencies: 10 | ... 11 | bootpay_flutter: last_version 12 | ... 13 | ``` 14 | And install it using ``flutter packages get`` on your project folder. After that, just import the module and use it: 15 | 16 | ## Settings 17 | 18 | ### Android 19 | No configuration required. 20 | 21 | ### iOS 22 | ** {your project root}/ios/Runner/Info.plist ** 23 | 24 | ```xml 25 | NSAppTransportSecurity 26 | 27 | NSAllowsArbitraryLoads 28 | 29 | 30 | CFBundleURLTypes 31 | 32 | 33 | CFBundleTypeRole 34 | Editor 35 | CFBundleURLName 36 | kr.co.bootpaySample // 사용하고자 하시는 앱의 bundle url name 37 | CFBundleURLSchemes 38 | 39 | bootpaySample // 사용하고자 하시는 앱의 bundle url scheme 40 | 41 | 42 | 43 | ``` 44 | 45 | Done! 46 | 47 | ```dart 48 | import 'dart:async'; 49 | import 'dart:io'; 50 | 51 | import 'package:bootpay_flutter/bootpay_flutter.dart'; 52 | import 'package:flutter/material.dart'; 53 | 54 | void main() => runApp(MyApp()); 55 | 56 | class MyApp extends StatefulWidget { 57 | @override 58 | _MyAppState createState() => _MyAppState(); 59 | } 60 | 61 | class _MyAppState extends State { 62 | String _paymentResult = ''; 63 | 64 | @override 65 | void initState() { 66 | super.initState(); 67 | initPlatformState(); 68 | } 69 | 70 | // Platform messages are asynchronous, so we initialize in an async method. 71 | Future initPlatformState() async { 72 | String bootpayApplicationId; 73 | if (Platform.isAndroid) { 74 | bootpayApplicationId = "59a4d326396fa607cbe75de5"; // 안드로이드용 bootpay applicationId 75 | } else { 76 | bootpayApplicationId = "59a4d328396fa607b9e75de6"; // ios용 bootpay applicationId 77 | } 78 | 79 | String paymentResult; 80 | final UserInfo userInfo = UserInfo(username: "홍길동", email: "test@test.com"); 81 | final PayParam payParam = PayParam( 82 | price: "1000", 83 | applicationId: bootpayApplicationId, // your_bootpay_id (Android or iOS) 84 | name: "bootpay_flutter_테스트_결제", 85 | userInfo: userInfo, 86 | orderId: "BootpayTest000001"); 87 | 88 | try { 89 | final PayResult result = await BootpayFlutter.pay(payParam); 90 | if (result.action == "BootpayDone") { 91 | // 결제성공 92 | print("결제 성공"); 93 | } else if (result.action == "BootpayCancel") { 94 | // 사용자가 결제완료전에 결제를 중지한 상태. 95 | print("사용자 결제 취소"); 96 | } else if (result.action == "BootpayError") { 97 | // 결제에러 98 | print("결제 에러"); 99 | } 100 | paymentResult = result.toString(); 101 | } on Exception { 102 | paymentResult = 'Payment Failed.'; 103 | } 104 | 105 | setState(() { 106 | _paymentResult = paymentResult; 107 | }); 108 | } 109 | 110 | @override 111 | Widget build(BuildContext context) { 112 | return MaterialApp( 113 | home: Scaffold( 114 | appBar: AppBar( 115 | title: const Text('Bootpay flutter example app'), 116 | ), 117 | body: Center( 118 | child: Text('Payment Result : $_paymentResult'), 119 | ), 120 | ), 121 | ); 122 | } 123 | } 124 | 125 | ``` 126 | Enjoy! 127 | 128 | ## Author 129 | Developed by [Jace Shim (심천보)](https://www.facebook.com/jaceshim.kr) 130 | 131 | ## Contributing 132 | 133 | Feel free to help! 134 | -------------------------------------------------------------------------------- /android/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .dart_tool/ 3 | .idea/ 4 | .packages 5 | .pub/ 6 | bootpay_flutter.iml 7 | build/ 8 | .gradle/ 9 | -------------------------------------------------------------------------------- /android/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | bootpay_flutter 4 | Project android created by Buildship. 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.buildship.core.gradleprojectbuilder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.jdt.core.javanature 21 | org.eclipse.buildship.core.gradleprojectnature 22 | 23 | 24 | -------------------------------------------------------------------------------- /android/.settings/org.eclipse.buildship.core.prefs: -------------------------------------------------------------------------------- 1 | connection.project.dir= 2 | eclipse.preferences.version=1 3 | -------------------------------------------------------------------------------- /android/bin/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .dart_tool/ 3 | .idea/ 4 | .packages 5 | .pub/ 6 | bootpay_flutter.iml 7 | build/ 8 | .gradle/ 9 | -------------------------------------------------------------------------------- /android/bin/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | bootpay_flutter 4 | Project android created by Buildship. 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.buildship.core.gradleprojectbuilder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.jdt.core.javanature 21 | org.eclipse.buildship.core.gradleprojectnature 22 | 23 | 24 | -------------------------------------------------------------------------------- /android/bin/bootpay_flutter_android.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 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 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | -------------------------------------------------------------------------------- /android/bin/build.gradle: -------------------------------------------------------------------------------- 1 | def PLUGIN = "bootpay_flutter"; 2 | def ANDROIDX_WARNING = "flutterPluginsAndroidXWarning"; 3 | gradle.buildFinished { buildResult -> 4 | if (buildResult.failure && !rootProject.ext.has(ANDROIDX_WARNING)) { 5 | println ' *********************************************************' 6 | println 'WARNING: This version of ' + PLUGIN + ' will break your Android build if it or its dependencies aren\'t compatible with AndroidX.' 7 | println ' See https://goo.gl/CP92wY for more information on the problem and how to fix it.' 8 | println ' This warning prints for all Android build failures. The real root cause of the error may be unrelated.' 9 | println ' *********************************************************' 10 | rootProject.ext.set(ANDROIDX_WARNING, true); 11 | } 12 | } 13 | 14 | group 'jaceshim.bootpay_flutter' 15 | version '1.0-SNAPSHOT' 16 | 17 | buildscript { 18 | repositories { 19 | google() 20 | jcenter() 21 | maven { url 'https://jitpack.io' } 22 | } 23 | 24 | dependencies { 25 | classpath 'com.android.tools.build:gradle:3.3.0' 26 | } 27 | } 28 | 29 | rootProject.allprojects { 30 | repositories { 31 | google() 32 | jcenter() 33 | maven { url 'https://jitpack.io' } 34 | } 35 | } 36 | 37 | apply plugin: 'com.android.library' 38 | 39 | android { 40 | compileSdkVersion 28 41 | 42 | compileOptions { 43 | sourceCompatibility JavaVersion.VERSION_1_8 44 | targetCompatibility JavaVersion.VERSION_1_8 45 | } 46 | 47 | defaultConfig { 48 | minSdkVersion 23 49 | targetSdkVersion 28 50 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 51 | } 52 | lintOptions { 53 | disable 'InvalidPackage' 54 | } 55 | } 56 | 57 | dependencies { 58 | implementation 'com.google.code.gson:gson:2.8.5' 59 | implementation 'com.github.bootpay:client_android_java:2.14' 60 | } -------------------------------------------------------------------------------- /android/bin/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | -------------------------------------------------------------------------------- /android/bin/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/android/bin/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /android/bin/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Thu Jun 06 17:13:35 KST 2019 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-4.10.1-all.zip 7 | -------------------------------------------------------------------------------- /android/bin/gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | ############################################################################## 4 | ## 5 | ## Gradle start up script for UN*X 6 | ## 7 | ############################################################################## 8 | 9 | # Attempt to set APP_HOME 10 | # Resolve links: $0 may be a link 11 | PRG="$0" 12 | # Need this for relative symlinks. 13 | while [ -h "$PRG" ] ; do 14 | ls=`ls -ld "$PRG"` 15 | link=`expr "$ls" : '.*-> \(.*\)$'` 16 | if expr "$link" : '/.*' > /dev/null; then 17 | PRG="$link" 18 | else 19 | PRG=`dirname "$PRG"`"/$link" 20 | fi 21 | done 22 | SAVED="`pwd`" 23 | cd "`dirname \"$PRG\"`/" >/dev/null 24 | APP_HOME="`pwd -P`" 25 | cd "$SAVED" >/dev/null 26 | 27 | APP_NAME="Gradle" 28 | APP_BASE_NAME=`basename "$0"` 29 | 30 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 31 | DEFAULT_JVM_OPTS="" 32 | 33 | # Use the maximum available, or set MAX_FD != -1 to use that value. 34 | MAX_FD="maximum" 35 | 36 | warn () { 37 | echo "$*" 38 | } 39 | 40 | die () { 41 | echo 42 | echo "$*" 43 | echo 44 | exit 1 45 | } 46 | 47 | # OS specific support (must be 'true' or 'false'). 48 | cygwin=false 49 | msys=false 50 | darwin=false 51 | nonstop=false 52 | case "`uname`" in 53 | CYGWIN* ) 54 | cygwin=true 55 | ;; 56 | Darwin* ) 57 | darwin=true 58 | ;; 59 | MINGW* ) 60 | msys=true 61 | ;; 62 | NONSTOP* ) 63 | nonstop=true 64 | ;; 65 | esac 66 | 67 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 68 | 69 | # Determine the Java command to use to start the JVM. 70 | if [ -n "$JAVA_HOME" ] ; then 71 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 72 | # IBM's JDK on AIX uses strange locations for the executables 73 | JAVACMD="$JAVA_HOME/jre/sh/java" 74 | else 75 | JAVACMD="$JAVA_HOME/bin/java" 76 | fi 77 | if [ ! -x "$JAVACMD" ] ; then 78 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 79 | 80 | Please set the JAVA_HOME variable in your environment to match the 81 | location of your Java installation." 82 | fi 83 | else 84 | JAVACMD="java" 85 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 86 | 87 | Please set the JAVA_HOME variable in your environment to match the 88 | location of your Java installation." 89 | fi 90 | 91 | # Increase the maximum file descriptors if we can. 92 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then 93 | MAX_FD_LIMIT=`ulimit -H -n` 94 | if [ $? -eq 0 ] ; then 95 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 96 | MAX_FD="$MAX_FD_LIMIT" 97 | fi 98 | ulimit -n $MAX_FD 99 | if [ $? -ne 0 ] ; then 100 | warn "Could not set maximum file descriptor limit: $MAX_FD" 101 | fi 102 | else 103 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 104 | fi 105 | fi 106 | 107 | # For Darwin, add options to specify how the application appears in the dock 108 | if $darwin; then 109 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 110 | fi 111 | 112 | # For Cygwin, switch paths to Windows format before running java 113 | if $cygwin ; then 114 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 115 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 116 | JAVACMD=`cygpath --unix "$JAVACMD"` 117 | 118 | # We build the pattern for arguments to be converted via cygpath 119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 120 | SEP="" 121 | for dir in $ROOTDIRSRAW ; do 122 | ROOTDIRS="$ROOTDIRS$SEP$dir" 123 | SEP="|" 124 | done 125 | OURCYGPATTERN="(^($ROOTDIRS))" 126 | # Add a user-defined pattern to the cygpath arguments 127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 129 | fi 130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 131 | i=0 132 | for arg in "$@" ; do 133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 135 | 136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 138 | else 139 | eval `echo args$i`="\"$arg\"" 140 | fi 141 | i=$((i+1)) 142 | done 143 | case $i in 144 | (0) set -- ;; 145 | (1) set -- "$args0" ;; 146 | (2) set -- "$args0" "$args1" ;; 147 | (3) set -- "$args0" "$args1" "$args2" ;; 148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 154 | esac 155 | fi 156 | 157 | # Escape application args 158 | save () { 159 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done 160 | echo " " 161 | } 162 | APP_ARGS=$(save "$@") 163 | 164 | # Collect all arguments for the java command, following the shell quoting and substitution rules 165 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" 166 | 167 | # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong 168 | if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then 169 | cd "$(dirname "$0")" 170 | fi 171 | 172 | exec "$JAVACMD" "$@" 173 | -------------------------------------------------------------------------------- /android/bin/gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | set DIRNAME=%~dp0 12 | if "%DIRNAME%" == "" set DIRNAME=. 13 | set APP_BASE_NAME=%~n0 14 | set APP_HOME=%DIRNAME% 15 | 16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 17 | set DEFAULT_JVM_OPTS= 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windows variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | 53 | :win9xME_args 54 | @rem Slurp the command line arguments. 55 | set CMD_LINE_ARGS= 56 | set _SKIP=2 57 | 58 | :win9xME_args_slurp 59 | if "x%~1" == "x" goto execute 60 | 61 | set CMD_LINE_ARGS=%* 62 | 63 | :execute 64 | @rem Setup the command line 65 | 66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 67 | 68 | @rem Execute Gradle 69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 70 | 71 | :end 72 | @rem End local scope for the variables with windows NT shell 73 | if "%ERRORLEVEL%"=="0" goto mainEnd 74 | 75 | :fail 76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 77 | rem the _cmd.exe /c_ return code! 78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 79 | exit /b 1 80 | 81 | :mainEnd 82 | if "%OS%"=="Windows_NT" endlocal 83 | 84 | :omega 85 | -------------------------------------------------------------------------------- /android/bin/local.properties: -------------------------------------------------------------------------------- 1 | sdk.dir=/Users/jaceshim/Library/Android/sdk 2 | flutter.sdk=/Volumes/jacedata/workspace/tool/flutter -------------------------------------------------------------------------------- /android/bin/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'bootpay_flutter' 2 | -------------------------------------------------------------------------------- /android/bin/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /android/bin/src/main/java/jaceshim/bootpay_flutter/BootpayActivity.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/android/bin/src/main/java/jaceshim/bootpay_flutter/BootpayActivity.class -------------------------------------------------------------------------------- /android/bin/src/main/java/jaceshim/bootpay_flutter/BootpayFlutterPlugin.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/android/bin/src/main/java/jaceshim/bootpay_flutter/BootpayFlutterPlugin.class -------------------------------------------------------------------------------- /android/bin/src/main/java/jaceshim/bootpay_flutter/Constans$PaymentReqCode.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/android/bin/src/main/java/jaceshim/bootpay_flutter/Constans$PaymentReqCode.class -------------------------------------------------------------------------------- /android/bin/src/main/java/jaceshim/bootpay_flutter/Constans$PaymentResultCode.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/android/bin/src/main/java/jaceshim/bootpay_flutter/Constans$PaymentResultCode.class -------------------------------------------------------------------------------- /android/bin/src/main/java/jaceshim/bootpay_flutter/Constans.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/android/bin/src/main/java/jaceshim/bootpay_flutter/Constans.class -------------------------------------------------------------------------------- /android/bin/src/main/java/jaceshim/bootpay_flutter/models/CancelParam.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/android/bin/src/main/java/jaceshim/bootpay_flutter/models/CancelParam.class -------------------------------------------------------------------------------- /android/bin/src/main/java/jaceshim/bootpay_flutter/models/PayParam.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/android/bin/src/main/java/jaceshim/bootpay_flutter/models/PayParam.class -------------------------------------------------------------------------------- /android/bootpay_flutter_android.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 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 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | def PLUGIN = "bootpay_flutter"; 2 | def ANDROIDX_WARNING = "flutterPluginsAndroidXWarning"; 3 | gradle.buildFinished { buildResult -> 4 | if (buildResult.failure && !rootProject.ext.has(ANDROIDX_WARNING)) { 5 | println ' *********************************************************' 6 | println 'WARNING: This version of ' + PLUGIN + ' will break your Android build if it or its dependencies aren\'t compatible with AndroidX.' 7 | println ' See https://goo.gl/CP92wY for more information on the problem and how to fix it.' 8 | println ' This warning prints for all Android build failures. The real root cause of the error may be unrelated.' 9 | println ' *********************************************************' 10 | rootProject.ext.set(ANDROIDX_WARNING, true); 11 | } 12 | } 13 | 14 | group 'jaceshim.bootpay_flutter' 15 | version '1.0-SNAPSHOT' 16 | 17 | buildscript { 18 | repositories { 19 | google() 20 | jcenter() 21 | maven { url 'https://jitpack.io' } 22 | } 23 | 24 | dependencies { 25 | classpath 'com.android.tools.build:gradle:3.3.0' 26 | } 27 | } 28 | 29 | rootProject.allprojects { 30 | repositories { 31 | google() 32 | jcenter() 33 | maven { url 'https://jitpack.io' } 34 | } 35 | } 36 | 37 | apply plugin: 'com.android.library' 38 | 39 | android { 40 | compileSdkVersion 28 41 | 42 | compileOptions { 43 | sourceCompatibility JavaVersion.VERSION_1_8 44 | targetCompatibility JavaVersion.VERSION_1_8 45 | } 46 | 47 | defaultConfig { 48 | minSdkVersion 23 49 | targetSdkVersion 28 50 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 51 | } 52 | lintOptions { 53 | disable 'InvalidPackage' 54 | } 55 | } 56 | 57 | dependencies { 58 | implementation 'com.google.code.gson:gson:2.8.5' 59 | implementation 'com.github.bootpay:client_android_java:3.0.53' 60 | } -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | -------------------------------------------------------------------------------- /android/gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | ############################################################################## 4 | ## 5 | ## Gradle start up script for UN*X 6 | ## 7 | ############################################################################## 8 | 9 | # Attempt to set APP_HOME 10 | # Resolve links: $0 may be a link 11 | PRG="$0" 12 | # Need this for relative symlinks. 13 | while [ -h "$PRG" ] ; do 14 | ls=`ls -ld "$PRG"` 15 | link=`expr "$ls" : '.*-> \(.*\)$'` 16 | if expr "$link" : '/.*' > /dev/null; then 17 | PRG="$link" 18 | else 19 | PRG=`dirname "$PRG"`"/$link" 20 | fi 21 | done 22 | SAVED="`pwd`" 23 | cd "`dirname \"$PRG\"`/" >/dev/null 24 | APP_HOME="`pwd -P`" 25 | cd "$SAVED" >/dev/null 26 | 27 | APP_NAME="Gradle" 28 | APP_BASE_NAME=`basename "$0"` 29 | 30 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 31 | DEFAULT_JVM_OPTS="" 32 | 33 | # Use the maximum available, or set MAX_FD != -1 to use that value. 34 | MAX_FD="maximum" 35 | 36 | warn () { 37 | echo "$*" 38 | } 39 | 40 | die () { 41 | echo 42 | echo "$*" 43 | echo 44 | exit 1 45 | } 46 | 47 | # OS specific support (must be 'true' or 'false'). 48 | cygwin=false 49 | msys=false 50 | darwin=false 51 | nonstop=false 52 | case "`uname`" in 53 | CYGWIN* ) 54 | cygwin=true 55 | ;; 56 | Darwin* ) 57 | darwin=true 58 | ;; 59 | MINGW* ) 60 | msys=true 61 | ;; 62 | NONSTOP* ) 63 | nonstop=true 64 | ;; 65 | esac 66 | 67 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 68 | 69 | # Determine the Java command to use to start the JVM. 70 | if [ -n "$JAVA_HOME" ] ; then 71 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 72 | # IBM's JDK on AIX uses strange locations for the executables 73 | JAVACMD="$JAVA_HOME/jre/sh/java" 74 | else 75 | JAVACMD="$JAVA_HOME/bin/java" 76 | fi 77 | if [ ! -x "$JAVACMD" ] ; then 78 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 79 | 80 | Please set the JAVA_HOME variable in your environment to match the 81 | location of your Java installation." 82 | fi 83 | else 84 | JAVACMD="java" 85 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 86 | 87 | Please set the JAVA_HOME variable in your environment to match the 88 | location of your Java installation." 89 | fi 90 | 91 | # Increase the maximum file descriptors if we can. 92 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then 93 | MAX_FD_LIMIT=`ulimit -H -n` 94 | if [ $? -eq 0 ] ; then 95 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 96 | MAX_FD="$MAX_FD_LIMIT" 97 | fi 98 | ulimit -n $MAX_FD 99 | if [ $? -ne 0 ] ; then 100 | warn "Could not set maximum file descriptor limit: $MAX_FD" 101 | fi 102 | else 103 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 104 | fi 105 | fi 106 | 107 | # For Darwin, add options to specify how the application appears in the dock 108 | if $darwin; then 109 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 110 | fi 111 | 112 | # For Cygwin, switch paths to Windows format before running java 113 | if $cygwin ; then 114 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 115 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 116 | JAVACMD=`cygpath --unix "$JAVACMD"` 117 | 118 | # We build the pattern for arguments to be converted via cygpath 119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 120 | SEP="" 121 | for dir in $ROOTDIRSRAW ; do 122 | ROOTDIRS="$ROOTDIRS$SEP$dir" 123 | SEP="|" 124 | done 125 | OURCYGPATTERN="(^($ROOTDIRS))" 126 | # Add a user-defined pattern to the cygpath arguments 127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 129 | fi 130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 131 | i=0 132 | for arg in "$@" ; do 133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 135 | 136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 138 | else 139 | eval `echo args$i`="\"$arg\"" 140 | fi 141 | i=$((i+1)) 142 | done 143 | case $i in 144 | (0) set -- ;; 145 | (1) set -- "$args0" ;; 146 | (2) set -- "$args0" "$args1" ;; 147 | (3) set -- "$args0" "$args1" "$args2" ;; 148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 154 | esac 155 | fi 156 | 157 | # Escape application args 158 | save () { 159 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done 160 | echo " " 161 | } 162 | APP_ARGS=$(save "$@") 163 | 164 | # Collect all arguments for the java command, following the shell quoting and substitution rules 165 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" 166 | 167 | # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong 168 | if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then 169 | cd "$(dirname "$0")" 170 | fi 171 | 172 | exec "$JAVACMD" "$@" 173 | -------------------------------------------------------------------------------- /android/gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | set DIRNAME=%~dp0 12 | if "%DIRNAME%" == "" set DIRNAME=. 13 | set APP_BASE_NAME=%~n0 14 | set APP_HOME=%DIRNAME% 15 | 16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 17 | set DEFAULT_JVM_OPTS= 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windows variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | 53 | :win9xME_args 54 | @rem Slurp the command line arguments. 55 | set CMD_LINE_ARGS= 56 | set _SKIP=2 57 | 58 | :win9xME_args_slurp 59 | if "x%~1" == "x" goto execute 60 | 61 | set CMD_LINE_ARGS=%* 62 | 63 | :execute 64 | @rem Setup the command line 65 | 66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 67 | 68 | @rem Execute Gradle 69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 70 | 71 | :end 72 | @rem End local scope for the variables with windows NT shell 73 | if "%ERRORLEVEL%"=="0" goto mainEnd 74 | 75 | :fail 76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 77 | rem the _cmd.exe /c_ return code! 78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 79 | exit /b 1 80 | 81 | :mainEnd 82 | if "%OS%"=="Windows_NT" endlocal 83 | 84 | :omega 85 | -------------------------------------------------------------------------------- /android/local.properties: -------------------------------------------------------------------------------- 1 | sdk.dir=/Users/jaceshim/Library/Android/sdk 2 | flutter.sdk=/Volumes/jacedata/workspace/tool/flutter -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'bootpay_flutter' 2 | -------------------------------------------------------------------------------- /android/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /android/src/main/java/jaceshim/bootpay_flutter/BootpayActivity.java: -------------------------------------------------------------------------------- 1 | package jaceshim.bootpay_flutter; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | import android.util.Log; 6 | import com.google.gson.Gson; 7 | import jaceshim.bootpay_flutter.models.PayParam; 8 | import kr.co.bootpay.Bootpay; 9 | import kr.co.bootpay.BootpayAnalytics; 10 | import kr.co.bootpay.BootpayBuilder; 11 | import kr.co.bootpay.BootpayFlutterActivity; 12 | import kr.co.bootpay.enums.Method; 13 | 14 | import java.util.HashMap; 15 | import java.util.Map; 16 | import java.util.Objects; 17 | 18 | import static jaceshim.bootpay_flutter.Constans.PAY_PARAM_KEY; 19 | import static jaceshim.bootpay_flutter.Constans.PAY_RESULT_DATA_KEY; 20 | 21 | /** 22 | * 결제화면 Activity 23 | * @author jaceshim 24 | */ 25 | public class BootpayActivity extends BootpayFlutterActivity { 26 | private final String TAG = this.getClass().getSimpleName(); 27 | 28 | @Override 29 | protected void onCreate(Bundle savedInstanceState) { 30 | super.onCreate(savedInstanceState); 31 | Log.d(TAG, "payParam in intent : " + this.getIntent().getStringExtra(PAY_PARAM_KEY)); 32 | final PayParam params = new Gson().fromJson(this.getIntent().getStringExtra(PAY_PARAM_KEY), PayParam.class); 33 | Log.d(TAG, "payParam : " + params.toString()); 34 | bootpayRequest(params); 35 | } 36 | 37 | @Override 38 | protected void onDestroy() { 39 | super.onDestroy(); 40 | } 41 | 42 | @Override 43 | public void onBackPressed() { 44 | Map data = new HashMap<>(); 45 | // 결제완료전 back버튼 터치시 사용자 결제취소로 처리. 46 | data.put("action", "BootpayCancel"); 47 | bindResult(new Gson().toJson(data)); 48 | // back버튼 터치시 결제를 중지 상태로 처리한다. 밑에 super.onBackPressed() 결과값 설정보다 먼저 호출하면 결과값 설정이 안되니 주의요망! 49 | super.onBackPressed(); 50 | } 51 | 52 | @Override 53 | protected void onPostResume() { 54 | super.onPostResume(); 55 | } 56 | 57 | private void bootpayRequest(PayParam params) { 58 | try { 59 | String bootpayId = params.getApplicationId(); 60 | Log.d(TAG, "bootpayId : " + bootpayId); 61 | BootpayAnalytics.init(this, bootpayId); 62 | Log.d(TAG, "Bootpay 결제요청 파라미터 : " + params); 63 | 64 | int paymentAmount = Integer.parseInt(Objects.requireNonNull(params.getPrice())); 65 | 66 | final BootpayBuilder bootpayBuilder = Bootpay.init(getFragmentManager()) 67 | .setContext(this) 68 | .setApplicationId(bootpayId) // 해당 프로젝트(안드로이드)의 application id 값 69 | .setPG(params.getPg()) // 결제할 PG 사 70 | .setMethod(getPaymentMethod(params.getMethod())) // 결제수단 71 | .setName(params.getName()) // 결제할 상품명 72 | .setOrderId(params.getOrderId()) // 결제 고유번호 73 | .setPrice(paymentAmount) // 결제할 금액 74 | .setItems(params.getItems()) 75 | .setBootUser(params.getUserInfo()) 76 | .setBootExtra(params.getExtra()); 77 | // .setParams(params.getParams()) 78 | // .isShowAgree(params.isShowAgreeWindow()); 79 | 80 | final String accountExpireAt = params.getAccountExpireAt(); 81 | if (accountExpireAt != null && ! accountExpireAt.isEmpty()) { 82 | bootpayBuilder.setAccountExpireAt(accountExpireAt); 83 | } 84 | 85 | bootpayBuilder.onConfirm(this) 86 | .onDone(this) 87 | .onReady(this) 88 | .onCancel(this) 89 | .onError(this) 90 | .onClose(this) 91 | .request(); 92 | } catch (Exception e) { 93 | Log.d("bootpay error", e.getMessage()); 94 | bindResult(e.getMessage()); 95 | } 96 | 97 | } 98 | 99 | private Method getPaymentMethod(String paymentMethod) { 100 | if (paymentMethod == null || paymentMethod.isEmpty()) { 101 | return Method.SELECT; 102 | } 103 | return Method.valueOf(paymentMethod.toUpperCase()); 104 | } 105 | 106 | @Override 107 | public void onError(String message) { 108 | Log.d("bootpay error", message); 109 | bindResult(message); 110 | this.finish(); 111 | } 112 | 113 | @Override 114 | public void onCancel(String message) { 115 | Log.d("bootpay cancel", message); 116 | bindResult(message); 117 | this.finish(); 118 | } 119 | 120 | @Override 121 | public void onClose(String message) { 122 | Log.d("bootpay close", "close"); 123 | this.finish(); 124 | } 125 | 126 | @Override 127 | public void onReady(String message) { 128 | Log.d("bootpay ready", message); 129 | } 130 | 131 | @Override 132 | public void onConfirm(String message) { 133 | Log.d("bootpay confirm", message); 134 | Bootpay.confirm(message); 135 | } 136 | 137 | @Override 138 | public void onDone(String message) { 139 | Log.d("bootpay done", message); 140 | bindResult(message); 141 | this.finish(); 142 | } 143 | 144 | void bindResult(String message) { 145 | Intent resultIntent = new Intent(); 146 | resultIntent.putExtra(PAY_RESULT_DATA_KEY, message); 147 | 148 | // result code는 의미 없음 149 | setResult(900, resultIntent); 150 | } 151 | } -------------------------------------------------------------------------------- /android/src/main/java/jaceshim/bootpay_flutter/BootpayFlutterPlugin.java: -------------------------------------------------------------------------------- 1 | package jaceshim.bootpay_flutter; 2 | 3 | import android.app.Activity; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | import android.util.Log; 7 | import com.google.gson.Gson; 8 | import io.flutter.plugin.common.MethodCall; 9 | import io.flutter.plugin.common.MethodChannel; 10 | import io.flutter.plugin.common.MethodChannel.MethodCallHandler; 11 | import io.flutter.plugin.common.MethodChannel.Result; 12 | import io.flutter.plugin.common.PluginRegistry; 13 | import io.flutter.plugin.common.PluginRegistry.Registrar; 14 | 15 | import java.util.Map; 16 | 17 | import static jaceshim.bootpay_flutter.Constans.*; 18 | 19 | /** 20 | * BootpayFlutterPlugin 21 | * @author jaceshim 22 | */ 23 | public class BootpayFlutterPlugin implements MethodCallHandler, PluginRegistry.ActivityResultListener { 24 | private final String TAG = this.getClass().getSimpleName(); 25 | private static final String CHANNEL_NAME = "jaceshim/bootpay_flutter"; 26 | private Activity activity; 27 | private Context context; 28 | private MethodChannel.Result methodChannelResult; 29 | 30 | private BootpayFlutterPlugin(Activity activity, Context activeContext) { 31 | this.activity = activity; 32 | this.context = context; 33 | } 34 | 35 | public static void registerWith(Registrar registrar) { 36 | final MethodChannel channel = new MethodChannel(registrar.messenger(), CHANNEL_NAME); 37 | final BootpayFlutterPlugin instance = new BootpayFlutterPlugin(registrar.activity(), registrar.activeContext()); 38 | registrar.addActivityResultListener(instance); 39 | channel.setMethodCallHandler(instance); 40 | } 41 | 42 | @Override 43 | public void onMethodCall(MethodCall methodCall, Result result) { 44 | this.methodChannelResult = result; 45 | Map params = methodCall.arguments(); 46 | switch (methodCall.method) { 47 | case "doPay": 48 | pay(params); 49 | break; 50 | default: 51 | result.notImplemented(); 52 | } 53 | } 54 | 55 | public void pay(Map params) { 56 | Log.d(TAG, "결제요청 파라미터 : " + params.toString()); 57 | 58 | final Intent intent = new Intent(this.activity, BootpayActivity.class); 59 | intent.putExtra(PAY_PARAM_KEY, new Gson().toJson(params)); 60 | intent.putExtra(REQ_CODE_KEY, Constans.PaymentReqCode.PAY.getCode()); 61 | this.activity.startActivityForResult(intent, PAY_ACTIVITY_REQ_CODE); 62 | } 63 | 64 | @Override 65 | public boolean onActivityResult(int requestCode, int resultCode, Intent intent) { 66 | if (requestCode != PAY_ACTIVITY_REQ_CODE) { 67 | return false; 68 | } 69 | 70 | Log.d(TAG, "결제처리 요청코드 " + requestCode); 71 | Log.d(TAG, "결제처리 결과코드 " + resultCode); 72 | 73 | try { 74 | final String rawResultData = intent.getStringExtra(PAY_RESULT_DATA_KEY); 75 | Log.d(TAG, "결제처리 결과 " + rawResultData); 76 | if (rawResultData != null) { 77 | Map resultDada = new Gson().fromJson(rawResultData, Map.class); 78 | finishWithSuccess(resultDada); 79 | } else { 80 | finishWithError("결제응답값 없음", "결제응답값 없음"); 81 | } 82 | } catch (Exception e) { 83 | finishWithError("결제처리 에러", e.getMessage()); 84 | Log.d(TAG, "bootpay 결제처리 오류 : " + e.getMessage()); 85 | } 86 | return true; 87 | } 88 | 89 | /** 90 | * Flutter MethodChannel로 성공 응답을 전달한다. 91 | */ 92 | private void finishWithSuccess(Map resultDada) { 93 | System.out.println("success data : " + resultDada.toString()); 94 | this.methodChannelResult.success(resultDada); 95 | } 96 | 97 | /** 98 | * Flutter MethodChannel로 에러(실패) 응답을 전달한다. 99 | */ 100 | private void finishWithError(String errorCode, String errorMessage) { 101 | this.methodChannelResult.error(errorCode, errorMessage, null); 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /android/src/main/java/jaceshim/bootpay_flutter/Constans.java: -------------------------------------------------------------------------------- 1 | package jaceshim.bootpay_flutter; 2 | 3 | /** 4 | * constans for bootpay flutter 5 | * @author jaceshim 6 | */ 7 | public class Constans { 8 | /** 9 | * 결제처리시 결과처리 onActivityResult에서 결제처리를 구분하기 위한 용도로 사용함. 10 | */ 11 | public static final int PAY_ACTIVITY_REQ_CODE = 90; 12 | /** 13 | * {@link BootpayActivity} 호출시 req를 구분짖기 위해 {@link android.content.Intent}로 전달될 파라미터값의 key 14 | */ 15 | public static final String REQ_CODE_KEY = "reqCode"; 16 | /** 17 | * {@link BootpayFlutterPlugin}에서 {@link BootpayActivity}호출시 {@link android.content.Intent} 로 전달될 파라미터값의 key 18 | */ 19 | public static final String PAY_PARAM_KEY = "payParams"; 20 | 21 | /** 22 | * {@link BootpayActivity}에서 결제관련 처리 이후 {@link android.content.Intent} 로 전달될 결과값의 key 23 | */ 24 | public static final String PAY_RESULT_DATA_KEY = "payResultData"; 25 | 26 | 27 | /** 28 | * Payment Request Code 29 | * 본 enum은 {@link BootpayFlutterPlugin}와 {@link BootpayActivity}간 결제,취소 요청을 구분하기 위해 사용함. 30 | */ 31 | enum PaymentReqCode { 32 | PAY(10), CANCEL(20); 33 | int code; 34 | PaymentReqCode(int code) { 35 | this.code = code; 36 | } 37 | 38 | public int getCode() { 39 | return this.code; 40 | } 41 | } 42 | /** 43 | * Payment Result Code 44 | * 본 enum은 {@link BootpayFlutterPlugin}와 {@link BootpayActivity}간 처리후 결과를 구분하기 위해 사용함. 45 | */ 46 | enum PaymentResultCode { 47 | SUCCESS(100), CANCEL(200), ERROR(300); 48 | int code; 49 | 50 | PaymentResultCode(int code) { 51 | this.code = code; 52 | } 53 | public int getCode() { 54 | return this.code; 55 | } 56 | 57 | static PaymentResultCode of(int code) { 58 | for (PaymentResultCode paymentResultCode : PaymentResultCode.values()) { 59 | if (paymentResultCode.getCode() == code) { 60 | return paymentResultCode; 61 | } 62 | } 63 | throw new IllegalStateException("PaymentResultCode not found : " + code); 64 | } 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /android/src/main/java/jaceshim/bootpay_flutter/models/PayParam.java: -------------------------------------------------------------------------------- 1 | package jaceshim.bootpay_flutter.models; 2 | 3 | import kr.co.bootpay.model.BootExtra; 4 | import kr.co.bootpay.model.BootUser; 5 | import kr.co.bootpay.model.Item; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * 결제 요청 파라미터 11 | * @author jaceshim 12 | */ 13 | public class PayParam { 14 | /** 15 | * 실 결제 금액 16 | */ 17 | String price; 18 | 19 | /** 20 | * SDK용 Application ID (Android, iOS 각각 관리되는 값) 21 | */ 22 | String applicationId; 23 | 24 | /** 25 | * 결제창에 보여질 이름 26 | */ 27 | String name; 28 | 29 | /** 30 | * PG 명 31 | */ 32 | String pg; 33 | 34 | /** 35 | * 결제수단, 입력하지 않으면 결제수단 선택부터 화면이 시작합니다. 36 | */ 37 | String method; 38 | 39 | /** 40 | * 부트페이 정보 동의 창 보이기 여부 41 | */ 42 | boolean showAgreeWindow; 43 | 44 | /** 45 | * 결제 아이템 목록 46 | */ 47 | List items; 48 | 49 | /** 50 | * 사용자(구매자) 정보 51 | */ 52 | BootUser userInfo; 53 | 54 | /** 55 | * 고유 주문번호로, 생성하신 값을 보내주셔야 합니다. 56 | */ 57 | String orderId; 58 | 59 | /** 60 | * pg결제후 콜백받을 변수 map 61 | * // fixme: gson deserialized시에 type문제 해결 후 주석제거. 62 | */ 63 | // Map params; 64 | 65 | /** 66 | * 가상계좌 입금기간 제한 ( yyyy-mm-dd 포멧으로 입력해주세요. 가상계좌만 적용됩니다. ) 67 | */ 68 | String accountExpireAt; 69 | 70 | BootExtra extra; 71 | 72 | public String getPrice() { 73 | return price; 74 | } 75 | 76 | public void setPrice(String price) { 77 | this.price = price; 78 | } 79 | 80 | public String getApplicationId() { 81 | return applicationId; 82 | } 83 | 84 | public void setApplicationId(String applicationId) { 85 | this.applicationId = applicationId; 86 | } 87 | 88 | public String getName() { 89 | return name; 90 | } 91 | 92 | public void setName(String name) { 93 | this.name = name; 94 | } 95 | 96 | public String getPg() { 97 | return pg; 98 | } 99 | 100 | public void setPg(String pg) { 101 | this.pg = pg; 102 | } 103 | 104 | public String getMethod() { 105 | return method; 106 | } 107 | 108 | public void setMethod(String method) { 109 | this.method = method; 110 | } 111 | 112 | public boolean isShowAgreeWindow() { 113 | return showAgreeWindow; 114 | } 115 | 116 | public void setShowAgreeWindow(boolean showAgreeWindow) { 117 | this.showAgreeWindow = showAgreeWindow; 118 | } 119 | 120 | public List getItems() { 121 | return items; 122 | } 123 | 124 | public void setItems(List items) { 125 | this.items = items; 126 | } 127 | 128 | public BootUser getUserInfo() { 129 | return userInfo; 130 | } 131 | 132 | public void setUserInfo(BootUser userInfo) { 133 | this.userInfo = userInfo; 134 | } 135 | 136 | public String getOrderId() { 137 | return orderId; 138 | } 139 | 140 | public void setOrderId(String orderId) { 141 | this.orderId = orderId; 142 | } 143 | 144 | // public Map getParams() { 145 | // return params; 146 | // } 147 | // 148 | // public void setParams(Map params) { 149 | // this.params = params; 150 | // } 151 | 152 | public String getAccountExpireAt() { 153 | return accountExpireAt; 154 | } 155 | 156 | public void setAccountExpireAt(String accountExpireAt) { 157 | this.accountExpireAt = accountExpireAt; 158 | } 159 | 160 | public BootExtra getExtra() { 161 | return extra; 162 | } 163 | 164 | public void setExtra(BootExtra extra) { 165 | this.extra = extra; 166 | } 167 | } 168 | -------------------------------------------------------------------------------- /example/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # Visual Studio Code related 19 | .vscode/ 20 | 21 | # Flutter/Dart/Pub related 22 | **/doc/api/ 23 | .dart_tool/ 24 | .flutter-plugins 25 | .packages 26 | .pub-cache/ 27 | .pub/ 28 | /build/ 29 | 30 | # Android related 31 | **/android/**/gradle-wrapper.jar 32 | **/android/.gradle 33 | **/android/captures/ 34 | **/android/gradlew 35 | **/android/gradlew.bat 36 | **/android/local.properties 37 | **/android/**/GeneratedPluginRegistrant.java 38 | 39 | # iOS/XCode related 40 | **/ios/**/*.mode1v3 41 | **/ios/**/*.mode2v3 42 | **/ios/**/*.moved-aside 43 | **/ios/**/*.pbxuser 44 | **/ios/**/*.perspectivev3 45 | **/ios/**/*sync/ 46 | **/ios/**/.sconsign.dblite 47 | **/ios/**/.tags* 48 | **/ios/**/.vagrant/ 49 | **/ios/**/DerivedData/ 50 | **/ios/**/Icon? 51 | **/ios/**/Pods/ 52 | **/ios/**/.symlinks/ 53 | **/ios/**/profile 54 | **/ios/**/xcuserdata 55 | **/ios/.generated/ 56 | **/ios/Flutter/App.framework 57 | **/ios/Flutter/Flutter.framework 58 | **/ios/Flutter/Generated.xcconfig 59 | **/ios/Flutter/app.flx 60 | **/ios/Flutter/app.zip 61 | **/ios/Flutter/flutter_assets/ 62 | **/ios/ServiceDefinitions.json 63 | **/ios/Runner/GeneratedPluginRegistrant.* 64 | 65 | # Exceptions to above rules. 66 | !**/ios/**/default.mode1v3 67 | !**/ios/**/default.mode2v3 68 | !**/ios/**/default.pbxuser 69 | !**/ios/**/default.perspectivev3 70 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages 71 | -------------------------------------------------------------------------------- /example/.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: 0ba67226ee62d6c9d663a6f8410fb4b2f1076046 8 | channel: unknown 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /example/README.md: -------------------------------------------------------------------------------- 1 | # bootpay_flutter_example 2 | 3 | Demonstrates how to use the bootpay_flutter plugin. 4 | 5 | ## Getting Started 6 | 7 | This project is a starting point for a Flutter application. 8 | 9 | A few resources to get you started if this is your first Flutter project: 10 | 11 | - [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) 12 | - [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) 13 | 14 | For help getting started with Flutter, view our 15 | [online documentation](https://flutter.dev/docs), which offers tutorials, 16 | samples, guidance on mobile development, and a full API reference. 17 | -------------------------------------------------------------------------------- /example/android/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | android 4 | Project android created by Buildship. 5 | 6 | 7 | 8 | 9 | org.eclipse.buildship.core.gradleprojectbuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.buildship.core.gradleprojectnature 16 | 17 | 18 | -------------------------------------------------------------------------------- /example/android/.settings/org.eclipse.buildship.core.prefs: -------------------------------------------------------------------------------- 1 | connection.project.dir= 2 | eclipse.preferences.version=1 3 | -------------------------------------------------------------------------------- /example/android/app/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /example/android/app/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | app 4 | Project app created by Buildship. 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.buildship.core.gradleprojectbuilder 15 | 16 | 17 | 18 | 19 | 20 | org.eclipse.jdt.core.javanature 21 | org.eclipse.buildship.core.gradleprojectnature 22 | 23 | 24 | -------------------------------------------------------------------------------- /example/android/app/.settings/org.eclipse.buildship.core.prefs: -------------------------------------------------------------------------------- 1 | connection.project.dir=.. 2 | eclipse.preferences.version=1 3 | -------------------------------------------------------------------------------- /example/android/app/bin/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 28 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 "jaceshim.bootpay_flutter_example" 37 | minSdkVersion 23 38 | targetSdkVersion 28 39 | versionCode flutterVersionCode.toInteger() 40 | versionName flutterVersionName 41 | testInstrumentationRunner "android.support.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 | } 52 | 53 | flutter { 54 | source '../..' 55 | } 56 | 57 | dependencies { 58 | testImplementation 'junit:junit:4.12' 59 | androidTestImplementation 'com.android.support.test:runner:1.0.2' 60 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' 61 | } 62 | -------------------------------------------------------------------------------- /example/android/app/bin/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/android/app/bin/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 9 | 13 | 20 | 24 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /example/android/app/bin/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /example/android/app/bin/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/example/android/app/bin/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/bin/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/example/android/app/bin/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/bin/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/example/android/app/bin/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/bin/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/example/android/app/bin/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/bin/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/example/android/app/bin/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/bin/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /example/android/app/bin/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/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 28 29 | buildToolsVersion '28.0.3' 30 | 31 | lintOptions { 32 | disable 'InvalidPackage' 33 | } 34 | 35 | defaultConfig { 36 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 37 | applicationId "jaceshim.bootpay_flutter_example" 38 | minSdkVersion 23 39 | targetSdkVersion 28 40 | versionCode flutterVersionCode.toInteger() 41 | versionName flutterVersionName 42 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 43 | } 44 | 45 | buildTypes { 46 | release { 47 | // TODO: Add your own signing config for the release build. 48 | // Signing with the debug keys for now, so `flutter run --release` works. 49 | signingConfig signingConfigs.debug 50 | } 51 | } 52 | } 53 | 54 | flutter { 55 | source '../..' 56 | } 57 | 58 | dependencies { 59 | testImplementation 'junit:junit:4.12' 60 | androidTestImplementation 'androidx.test:runner:1.2.0' 61 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' 62 | } 63 | -------------------------------------------------------------------------------- /example/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 8 | 12 | 19 | 23 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /example/android/app/src/main/java/jaceshim/bootpay_flutter_example/MainActivity.java: -------------------------------------------------------------------------------- 1 | package jaceshim.bootpay_flutter_example; 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 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /example/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /example/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | repositories { 3 | google() 4 | jcenter() 5 | } 6 | 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:3.2.1' 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 | -------------------------------------------------------------------------------- /example/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.enableJetifier=true 3 | android.useAndroidX=true -------------------------------------------------------------------------------- /example/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-4.10.2-all.zip 7 | -------------------------------------------------------------------------------- /example/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 | -------------------------------------------------------------------------------- /example/ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 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 | 8.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /example/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /example/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /example/ios/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | platform :ios, '11.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 parse_KV_file(file, separator='=') 14 | file_abs_path = File.expand_path(file) 15 | if !File.exists? file_abs_path 16 | return []; 17 | end 18 | pods_ary = [] 19 | skip_line_start_symbols = ["#", "/"] 20 | File.foreach(file_abs_path) { |line| 21 | next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } 22 | plugin = line.split(pattern=separator) 23 | if plugin.length == 2 24 | podname = plugin[0].strip() 25 | path = plugin[1].strip() 26 | podpath = File.expand_path("#{path}", file_abs_path) 27 | pods_ary.push({:name => podname, :path => podpath}); 28 | else 29 | puts "Invalid plugin specification: #{line}" 30 | end 31 | } 32 | return pods_ary 33 | end 34 | 35 | target 'Runner' do 36 | use_frameworks! 37 | 38 | # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock 39 | # referring to absolute paths on developers' machines. 40 | system('rm -rf .symlinks') 41 | system('mkdir -p .symlinks/plugins') 42 | 43 | # Flutter Pods 44 | generated_xcode_build_settings = parse_KV_file('./Flutter/Generated.xcconfig') 45 | if generated_xcode_build_settings.empty? 46 | puts "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter packages get is executed first." 47 | end 48 | generated_xcode_build_settings.map { |p| 49 | if p[:name] == 'FLUTTER_FRAMEWORK_DIR' 50 | symlink = File.join('.symlinks', 'flutter') 51 | File.symlink(File.dirname(p[:path]), symlink) 52 | pod 'Flutter', :path => File.join(symlink, File.basename(p[:path])) 53 | end 54 | } 55 | 56 | # Plugin Pods 57 | plugin_pods = parse_KV_file('../.flutter-plugins') 58 | plugin_pods.map { |p| 59 | symlink = File.join('.symlinks', 'plugins', p[:name]) 60 | File.symlink(p[:path], symlink) 61 | pod p[:name], :path => File.join(symlink, 'ios') 62 | } 63 | end 64 | 65 | post_install do |installer| 66 | installer.pods_project.targets.each do |target| 67 | target.build_configurations.each do |config| 68 | config.build_settings['ENABLE_BITCODE'] = 'NO' 69 | end 70 | end 71 | end 72 | -------------------------------------------------------------------------------- /example/ios/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - bootpay_flutter (0.0.1): 3 | - Flutter 4 | - SwiftyBootpay (= 2.1.18) 5 | - CryptoSwift (1.0.0) 6 | - Flutter (1.0.0) 7 | - SwiftyBootpay (2.1.18): 8 | - CryptoSwift 9 | 10 | DEPENDENCIES: 11 | - bootpay_flutter (from `.symlinks/plugins/bootpay_flutter/ios`) 12 | - Flutter (from `.symlinks/flutter/ios`) 13 | 14 | SPEC REPOS: 15 | https://github.com/cocoapods/specs.git: 16 | - CryptoSwift 17 | - SwiftyBootpay 18 | 19 | EXTERNAL SOURCES: 20 | bootpay_flutter: 21 | :path: ".symlinks/plugins/bootpay_flutter/ios" 22 | Flutter: 23 | :path: ".symlinks/flutter/ios" 24 | 25 | SPEC CHECKSUMS: 26 | bootpay_flutter: 35bfdc4632a4e38c8cbeb77ff798fb829fd082e2 27 | CryptoSwift: d81eeaa59dc5a8d03720fe919a6fd07b51f7439f 28 | Flutter: 9d0fac939486c9aba2809b7982dfdbb47a7b0296 29 | SwiftyBootpay: d05eedd055094c0490f99bd6f850085ae352bea7 30 | 31 | PODFILE CHECKSUM: 58760ca3c5878cb71ae11bd6eeff33fd4ce06e4f 32 | 33 | COCOAPODS: 1.5.3 34 | -------------------------------------------------------------------------------- /example/ios/Runner.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 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 | 3B80C3941E831B6300D905FE /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; }; 13 | 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B80C3931E831B6300D905FE /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 14 | 4B65FCE76E51D5FBC7ED66BD /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 037C3C2341A8B8073DC27EF5 /* Pods_Runner.framework */; }; 15 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 16 | 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; }; 17 | 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 9740EEBA1CF902C7004384FC /* Flutter.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 18 | 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; }; 19 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 20 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 21 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; 22 | /* End PBXBuildFile section */ 23 | 24 | /* Begin PBXCopyFilesBuildPhase section */ 25 | 9705A1C41CF9048500538489 /* Embed Frameworks */ = { 26 | isa = PBXCopyFilesBuildPhase; 27 | buildActionMask = 2147483647; 28 | dstPath = ""; 29 | dstSubfolderSpec = 10; 30 | files = ( 31 | 3B80C3951E831B6300D905FE /* App.framework in Embed Frameworks */, 32 | 9705A1C71CF904A300538489 /* Flutter.framework in Embed Frameworks */, 33 | ); 34 | name = "Embed Frameworks"; 35 | runOnlyForDeploymentPostprocessing = 0; 36 | }; 37 | /* End PBXCopyFilesBuildPhase section */ 38 | 39 | /* Begin PBXFileReference section */ 40 | 037C3C2341A8B8073DC27EF5 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 41 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 42 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 43 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; 44 | 3B80C3931E831B6300D905FE /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/App.framework; sourceTree = ""; }; 45 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 46 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 47 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; 48 | 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 49 | 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 50 | 9740EEBA1CF902C7004384FC /* Flutter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Flutter.framework; path = Flutter/Flutter.framework; sourceTree = ""; }; 51 | 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 52 | 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 53 | 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 54 | 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 55 | 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 56 | /* End PBXFileReference section */ 57 | 58 | /* Begin PBXFrameworksBuildPhase section */ 59 | 97C146EB1CF9000F007C117D /* Frameworks */ = { 60 | isa = PBXFrameworksBuildPhase; 61 | buildActionMask = 2147483647; 62 | files = ( 63 | 9705A1C61CF904A100538489 /* Flutter.framework in Frameworks */, 64 | 3B80C3941E831B6300D905FE /* App.framework in Frameworks */, 65 | 4B65FCE76E51D5FBC7ED66BD /* Pods_Runner.framework in Frameworks */, 66 | ); 67 | runOnlyForDeploymentPostprocessing = 0; 68 | }; 69 | /* End PBXFrameworksBuildPhase section */ 70 | 71 | /* Begin PBXGroup section */ 72 | 9740EEB11CF90186004384FC /* Flutter */ = { 73 | isa = PBXGroup; 74 | children = ( 75 | 3B80C3931E831B6300D905FE /* App.framework */, 76 | 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, 77 | 9740EEBA1CF902C7004384FC /* Flutter.framework */, 78 | 9740EEB21CF90195004384FC /* Debug.xcconfig */, 79 | 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, 80 | 9740EEB31CF90195004384FC /* Generated.xcconfig */, 81 | ); 82 | name = Flutter; 83 | sourceTree = ""; 84 | }; 85 | 97C146E51CF9000F007C117D = { 86 | isa = PBXGroup; 87 | children = ( 88 | 9740EEB11CF90186004384FC /* Flutter */, 89 | 97C146F01CF9000F007C117D /* Runner */, 90 | 97C146EF1CF9000F007C117D /* Products */, 91 | A81A1D94BDFFCF2CE2C4F950 /* Pods */, 92 | A38222D79B6B8838AB3A2E53 /* Frameworks */, 93 | ); 94 | sourceTree = ""; 95 | }; 96 | 97C146EF1CF9000F007C117D /* Products */ = { 97 | isa = PBXGroup; 98 | children = ( 99 | 97C146EE1CF9000F007C117D /* Runner.app */, 100 | ); 101 | name = Products; 102 | sourceTree = ""; 103 | }; 104 | 97C146F01CF9000F007C117D /* Runner */ = { 105 | isa = PBXGroup; 106 | children = ( 107 | 97C146FA1CF9000F007C117D /* Main.storyboard */, 108 | 97C146FD1CF9000F007C117D /* Assets.xcassets */, 109 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 110 | 97C147021CF9000F007C117D /* Info.plist */, 111 | 97C146F11CF9000F007C117D /* Supporting Files */, 112 | 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 113 | 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 114 | 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, 115 | 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, 116 | ); 117 | path = Runner; 118 | sourceTree = ""; 119 | }; 120 | 97C146F11CF9000F007C117D /* Supporting Files */ = { 121 | isa = PBXGroup; 122 | children = ( 123 | ); 124 | name = "Supporting Files"; 125 | sourceTree = ""; 126 | }; 127 | A38222D79B6B8838AB3A2E53 /* Frameworks */ = { 128 | isa = PBXGroup; 129 | children = ( 130 | 037C3C2341A8B8073DC27EF5 /* Pods_Runner.framework */, 131 | ); 132 | name = Frameworks; 133 | sourceTree = ""; 134 | }; 135 | A81A1D94BDFFCF2CE2C4F950 /* Pods */ = { 136 | isa = PBXGroup; 137 | children = ( 138 | ); 139 | name = Pods; 140 | sourceTree = ""; 141 | }; 142 | /* End PBXGroup section */ 143 | 144 | /* Begin PBXNativeTarget section */ 145 | 97C146ED1CF9000F007C117D /* Runner */ = { 146 | isa = PBXNativeTarget; 147 | buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; 148 | buildPhases = ( 149 | 1BB64479F55DAF9C11628B59 /* [CP] Check Pods Manifest.lock */, 150 | 9740EEB61CF901F6004384FC /* Run Script */, 151 | 97C146EA1CF9000F007C117D /* Sources */, 152 | 97C146EB1CF9000F007C117D /* Frameworks */, 153 | 97C146EC1CF9000F007C117D /* Resources */, 154 | 9705A1C41CF9048500538489 /* Embed Frameworks */, 155 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */, 156 | D42C2342E293A23B4E75CBC2 /* [CP] Embed Pods Frameworks */, 157 | ); 158 | buildRules = ( 159 | ); 160 | dependencies = ( 161 | ); 162 | name = Runner; 163 | productName = Runner; 164 | productReference = 97C146EE1CF9000F007C117D /* Runner.app */; 165 | productType = "com.apple.product-type.application"; 166 | }; 167 | /* End PBXNativeTarget section */ 168 | 169 | /* Begin PBXProject section */ 170 | 97C146E61CF9000F007C117D /* Project object */ = { 171 | isa = PBXProject; 172 | attributes = { 173 | LastUpgradeCheck = 0910; 174 | ORGANIZATIONNAME = "The Chromium Authors"; 175 | TargetAttributes = { 176 | 97C146ED1CF9000F007C117D = { 177 | CreatedOnToolsVersion = 7.3.1; 178 | LastSwiftMigration = 0910; 179 | }; 180 | }; 181 | }; 182 | buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; 183 | compatibilityVersion = "Xcode 3.2"; 184 | developmentRegion = English; 185 | hasScannedForEncodings = 0; 186 | knownRegions = ( 187 | en, 188 | Base, 189 | ); 190 | mainGroup = 97C146E51CF9000F007C117D; 191 | productRefGroup = 97C146EF1CF9000F007C117D /* Products */; 192 | projectDirPath = ""; 193 | projectRoot = ""; 194 | targets = ( 195 | 97C146ED1CF9000F007C117D /* Runner */, 196 | ); 197 | }; 198 | /* End PBXProject section */ 199 | 200 | /* Begin PBXResourcesBuildPhase section */ 201 | 97C146EC1CF9000F007C117D /* Resources */ = { 202 | isa = PBXResourcesBuildPhase; 203 | buildActionMask = 2147483647; 204 | files = ( 205 | 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, 206 | 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, 207 | 9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */, 208 | 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, 209 | 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, 210 | ); 211 | runOnlyForDeploymentPostprocessing = 0; 212 | }; 213 | /* End PBXResourcesBuildPhase section */ 214 | 215 | /* Begin PBXShellScriptBuildPhase section */ 216 | 1BB64479F55DAF9C11628B59 /* [CP] Check Pods Manifest.lock */ = { 217 | isa = PBXShellScriptBuildPhase; 218 | buildActionMask = 2147483647; 219 | files = ( 220 | ); 221 | inputFileListPaths = ( 222 | ); 223 | inputPaths = ( 224 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 225 | "${PODS_ROOT}/Manifest.lock", 226 | ); 227 | name = "[CP] Check Pods Manifest.lock"; 228 | outputFileListPaths = ( 229 | ); 230 | outputPaths = ( 231 | "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", 232 | ); 233 | runOnlyForDeploymentPostprocessing = 0; 234 | shellPath = /bin/sh; 235 | 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"; 236 | showEnvVarsInLog = 0; 237 | }; 238 | 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { 239 | isa = PBXShellScriptBuildPhase; 240 | buildActionMask = 2147483647; 241 | files = ( 242 | ); 243 | inputPaths = ( 244 | ); 245 | name = "Thin Binary"; 246 | outputPaths = ( 247 | ); 248 | runOnlyForDeploymentPostprocessing = 0; 249 | shellPath = /bin/sh; 250 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" thin"; 251 | }; 252 | 9740EEB61CF901F6004384FC /* Run Script */ = { 253 | isa = PBXShellScriptBuildPhase; 254 | buildActionMask = 2147483647; 255 | files = ( 256 | ); 257 | inputPaths = ( 258 | ); 259 | name = "Run Script"; 260 | outputPaths = ( 261 | ); 262 | runOnlyForDeploymentPostprocessing = 0; 263 | shellPath = /bin/sh; 264 | shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; 265 | }; 266 | D42C2342E293A23B4E75CBC2 /* [CP] Embed Pods Frameworks */ = { 267 | isa = PBXShellScriptBuildPhase; 268 | buildActionMask = 2147483647; 269 | files = ( 270 | ); 271 | inputFileListPaths = ( 272 | ); 273 | inputPaths = ( 274 | "${SRCROOT}/Pods/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh", 275 | "${BUILT_PRODUCTS_DIR}/CryptoSwift/CryptoSwift.framework", 276 | "${PODS_ROOT}/../.symlinks/flutter/ios/Flutter.framework", 277 | ); 278 | name = "[CP] Embed Pods Frameworks"; 279 | outputFileListPaths = ( 280 | ); 281 | outputPaths = ( 282 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CryptoSwift.framework", 283 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Flutter.framework", 284 | ); 285 | runOnlyForDeploymentPostprocessing = 0; 286 | shellPath = /bin/sh; 287 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\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 | 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, 298 | 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, 299 | ); 300 | runOnlyForDeploymentPostprocessing = 0; 301 | }; 302 | /* End PBXSourcesBuildPhase section */ 303 | 304 | /* Begin PBXVariantGroup section */ 305 | 97C146FA1CF9000F007C117D /* Main.storyboard */ = { 306 | isa = PBXVariantGroup; 307 | children = ( 308 | 97C146FB1CF9000F007C117D /* Base */, 309 | ); 310 | name = Main.storyboard; 311 | sourceTree = ""; 312 | }; 313 | 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { 314 | isa = PBXVariantGroup; 315 | children = ( 316 | 97C147001CF9000F007C117D /* Base */, 317 | ); 318 | name = LaunchScreen.storyboard; 319 | sourceTree = ""; 320 | }; 321 | /* End PBXVariantGroup section */ 322 | 323 | /* Begin XCBuildConfiguration section */ 324 | 249021D3217E4FDB00AE95B9 /* Profile */ = { 325 | isa = XCBuildConfiguration; 326 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 327 | buildSettings = { 328 | ALWAYS_SEARCH_USER_PATHS = NO; 329 | CLANG_ANALYZER_NONNULL = YES; 330 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 331 | CLANG_CXX_LIBRARY = "libc++"; 332 | CLANG_ENABLE_MODULES = YES; 333 | CLANG_ENABLE_OBJC_ARC = YES; 334 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 335 | CLANG_WARN_BOOL_CONVERSION = YES; 336 | CLANG_WARN_COMMA = YES; 337 | CLANG_WARN_CONSTANT_CONVERSION = YES; 338 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 339 | CLANG_WARN_EMPTY_BODY = YES; 340 | CLANG_WARN_ENUM_CONVERSION = YES; 341 | CLANG_WARN_INFINITE_RECURSION = YES; 342 | CLANG_WARN_INT_CONVERSION = YES; 343 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 344 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 345 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 346 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 347 | CLANG_WARN_STRICT_PROTOTYPES = YES; 348 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 349 | CLANG_WARN_UNREACHABLE_CODE = YES; 350 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 351 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 352 | COPY_PHASE_STRIP = NO; 353 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 354 | ENABLE_NS_ASSERTIONS = NO; 355 | ENABLE_STRICT_OBJC_MSGSEND = YES; 356 | GCC_C_LANGUAGE_STANDARD = gnu99; 357 | GCC_NO_COMMON_BLOCKS = YES; 358 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 359 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 360 | GCC_WARN_UNDECLARED_SELECTOR = YES; 361 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 362 | GCC_WARN_UNUSED_FUNCTION = YES; 363 | GCC_WARN_UNUSED_VARIABLE = YES; 364 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 365 | MTL_ENABLE_DEBUG_INFO = NO; 366 | SDKROOT = iphoneos; 367 | TARGETED_DEVICE_FAMILY = "1,2"; 368 | VALIDATE_PRODUCT = YES; 369 | }; 370 | name = Profile; 371 | }; 372 | 249021D4217E4FDB00AE95B9 /* Profile */ = { 373 | isa = XCBuildConfiguration; 374 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 375 | buildSettings = { 376 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 377 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 378 | DEVELOPMENT_TEAM = S8QB4VV633; 379 | ENABLE_BITCODE = NO; 380 | FRAMEWORK_SEARCH_PATHS = ( 381 | "$(inherited)", 382 | "$(PROJECT_DIR)/Flutter", 383 | ); 384 | INFOPLIST_FILE = Runner/Info.plist; 385 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 386 | LIBRARY_SEARCH_PATHS = ( 387 | "$(inherited)", 388 | "$(PROJECT_DIR)/Flutter", 389 | ); 390 | PRODUCT_BUNDLE_IDENTIFIER = jaceshim.bootpayFlutterExample; 391 | PRODUCT_NAME = "$(TARGET_NAME)"; 392 | SWIFT_VERSION = 4.0; 393 | VERSIONING_SYSTEM = "apple-generic"; 394 | }; 395 | name = Profile; 396 | }; 397 | 97C147031CF9000F007C117D /* Debug */ = { 398 | isa = XCBuildConfiguration; 399 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 400 | buildSettings = { 401 | ALWAYS_SEARCH_USER_PATHS = NO; 402 | CLANG_ANALYZER_NONNULL = YES; 403 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 404 | CLANG_CXX_LIBRARY = "libc++"; 405 | CLANG_ENABLE_MODULES = YES; 406 | CLANG_ENABLE_OBJC_ARC = YES; 407 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 408 | CLANG_WARN_BOOL_CONVERSION = YES; 409 | CLANG_WARN_COMMA = YES; 410 | CLANG_WARN_CONSTANT_CONVERSION = YES; 411 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 412 | CLANG_WARN_EMPTY_BODY = YES; 413 | CLANG_WARN_ENUM_CONVERSION = YES; 414 | CLANG_WARN_INFINITE_RECURSION = YES; 415 | CLANG_WARN_INT_CONVERSION = YES; 416 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 417 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 418 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 419 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 420 | CLANG_WARN_STRICT_PROTOTYPES = YES; 421 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 422 | CLANG_WARN_UNREACHABLE_CODE = YES; 423 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 424 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 425 | COPY_PHASE_STRIP = NO; 426 | DEBUG_INFORMATION_FORMAT = dwarf; 427 | ENABLE_STRICT_OBJC_MSGSEND = YES; 428 | ENABLE_TESTABILITY = YES; 429 | GCC_C_LANGUAGE_STANDARD = gnu99; 430 | GCC_DYNAMIC_NO_PIC = NO; 431 | GCC_NO_COMMON_BLOCKS = YES; 432 | GCC_OPTIMIZATION_LEVEL = 0; 433 | GCC_PREPROCESSOR_DEFINITIONS = ( 434 | "DEBUG=1", 435 | "$(inherited)", 436 | ); 437 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 438 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 439 | GCC_WARN_UNDECLARED_SELECTOR = YES; 440 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 441 | GCC_WARN_UNUSED_FUNCTION = YES; 442 | GCC_WARN_UNUSED_VARIABLE = YES; 443 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 444 | MTL_ENABLE_DEBUG_INFO = YES; 445 | ONLY_ACTIVE_ARCH = YES; 446 | SDKROOT = iphoneos; 447 | TARGETED_DEVICE_FAMILY = "1,2"; 448 | }; 449 | name = Debug; 450 | }; 451 | 97C147041CF9000F007C117D /* Release */ = { 452 | isa = XCBuildConfiguration; 453 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 454 | buildSettings = { 455 | ALWAYS_SEARCH_USER_PATHS = NO; 456 | CLANG_ANALYZER_NONNULL = YES; 457 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 458 | CLANG_CXX_LIBRARY = "libc++"; 459 | CLANG_ENABLE_MODULES = YES; 460 | CLANG_ENABLE_OBJC_ARC = YES; 461 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 462 | CLANG_WARN_BOOL_CONVERSION = YES; 463 | CLANG_WARN_COMMA = YES; 464 | CLANG_WARN_CONSTANT_CONVERSION = YES; 465 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 466 | CLANG_WARN_EMPTY_BODY = YES; 467 | CLANG_WARN_ENUM_CONVERSION = YES; 468 | CLANG_WARN_INFINITE_RECURSION = YES; 469 | CLANG_WARN_INT_CONVERSION = YES; 470 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 471 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 472 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 473 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 474 | CLANG_WARN_STRICT_PROTOTYPES = YES; 475 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 476 | CLANG_WARN_UNREACHABLE_CODE = YES; 477 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 478 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 479 | COPY_PHASE_STRIP = NO; 480 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 481 | ENABLE_NS_ASSERTIONS = NO; 482 | ENABLE_STRICT_OBJC_MSGSEND = YES; 483 | GCC_C_LANGUAGE_STANDARD = gnu99; 484 | GCC_NO_COMMON_BLOCKS = YES; 485 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 486 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 487 | GCC_WARN_UNDECLARED_SELECTOR = YES; 488 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 489 | GCC_WARN_UNUSED_FUNCTION = YES; 490 | GCC_WARN_UNUSED_VARIABLE = YES; 491 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 492 | MTL_ENABLE_DEBUG_INFO = NO; 493 | SDKROOT = iphoneos; 494 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 495 | TARGETED_DEVICE_FAMILY = "1,2"; 496 | VALIDATE_PRODUCT = YES; 497 | }; 498 | name = Release; 499 | }; 500 | 97C147061CF9000F007C117D /* Debug */ = { 501 | isa = XCBuildConfiguration; 502 | baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; 503 | buildSettings = { 504 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 505 | CLANG_ENABLE_MODULES = YES; 506 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 507 | ENABLE_BITCODE = NO; 508 | FRAMEWORK_SEARCH_PATHS = ( 509 | "$(inherited)", 510 | "$(PROJECT_DIR)/Flutter", 511 | ); 512 | INFOPLIST_FILE = Runner/Info.plist; 513 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 514 | LIBRARY_SEARCH_PATHS = ( 515 | "$(inherited)", 516 | "$(PROJECT_DIR)/Flutter", 517 | ); 518 | PRODUCT_BUNDLE_IDENTIFIER = jaceshim.bootpayFlutterExample; 519 | PRODUCT_NAME = "$(TARGET_NAME)"; 520 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 521 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 522 | SWIFT_SWIFT3_OBJC_INFERENCE = On; 523 | SWIFT_VERSION = 4.0; 524 | VERSIONING_SYSTEM = "apple-generic"; 525 | }; 526 | name = Debug; 527 | }; 528 | 97C147071CF9000F007C117D /* Release */ = { 529 | isa = XCBuildConfiguration; 530 | baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; 531 | buildSettings = { 532 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 533 | CLANG_ENABLE_MODULES = YES; 534 | CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; 535 | ENABLE_BITCODE = NO; 536 | FRAMEWORK_SEARCH_PATHS = ( 537 | "$(inherited)", 538 | "$(PROJECT_DIR)/Flutter", 539 | ); 540 | INFOPLIST_FILE = Runner/Info.plist; 541 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 542 | LIBRARY_SEARCH_PATHS = ( 543 | "$(inherited)", 544 | "$(PROJECT_DIR)/Flutter", 545 | ); 546 | PRODUCT_BUNDLE_IDENTIFIER = jaceshim.bootpayFlutterExample; 547 | PRODUCT_NAME = "$(TARGET_NAME)"; 548 | SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; 549 | SWIFT_SWIFT3_OBJC_INFERENCE = On; 550 | SWIFT_VERSION = 4.0; 551 | VERSIONING_SYSTEM = "apple-generic"; 552 | }; 553 | name = Release; 554 | }; 555 | /* End XCBuildConfiguration section */ 556 | 557 | /* Begin XCConfigurationList section */ 558 | 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { 559 | isa = XCConfigurationList; 560 | buildConfigurations = ( 561 | 97C147031CF9000F007C117D /* Debug */, 562 | 97C147041CF9000F007C117D /* Release */, 563 | 249021D3217E4FDB00AE95B9 /* Profile */, 564 | ); 565 | defaultConfigurationIsVisible = 0; 566 | defaultConfigurationName = Release; 567 | }; 568 | 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { 569 | isa = XCConfigurationList; 570 | buildConfigurations = ( 571 | 97C147061CF9000F007C117D /* Debug */, 572 | 97C147071CF9000F007C117D /* Release */, 573 | 249021D4217E4FDB00AE95B9 /* Profile */, 574 | ); 575 | defaultConfigurationIsVisible = 0; 576 | defaultConfigurationName = Release; 577 | }; 578 | /* End XCConfigurationList section */ 579 | }; 580 | rootObject = 97C146E61CF9000F007C117D /* Project object */; 581 | } 582 | -------------------------------------------------------------------------------- /example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 33 | 34 | 40 | 41 | 42 | 43 | 44 | 45 | 56 | 58 | 64 | 65 | 66 | 67 | 68 | 69 | 75 | 77 | 83 | 84 | 85 | 86 | 88 | 89 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /example/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildSystemType 6 | Original 7 | 8 | 9 | -------------------------------------------------------------------------------- /example/ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /example/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 | -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /example/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 | -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /example/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. -------------------------------------------------------------------------------- /example/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 | -------------------------------------------------------------------------------- /example/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 | -------------------------------------------------------------------------------- /example/ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | bootpay_flutter_example 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | $(FLUTTER_BUILD_NAME) 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | UIInterfaceOrientationLandscapeLeft 33 | UIInterfaceOrientationLandscapeRight 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | UIViewControllerBasedStatusBarAppearance 43 | 44 | NSAppTransportSecurity 45 | 46 | NSAllowsArbitraryLoads 47 | 48 | 49 | CFBundleURLTypes 50 | 51 | 52 | CFBundleTypeRole 53 | Editor 54 | CFBundleURLName 55 | jaceshim.bootpaySample 56 | CFBundleURLSchemes 57 | 58 | jaceshimBootpaySample 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /example/ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" -------------------------------------------------------------------------------- /example/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'dart:io'; 3 | 4 | import 'package:bootpay_flutter/bootpay_flutter.dart'; 5 | import 'package:flutter/material.dart'; 6 | 7 | void main() => runApp(MyApp()); 8 | 9 | class MyApp extends StatefulWidget { 10 | @override 11 | _MyAppState createState() => _MyAppState(); 12 | } 13 | 14 | class _MyAppState extends State { 15 | String _paymentResult = ''; 16 | 17 | @override 18 | void initState() { 19 | super.initState(); 20 | } 21 | 22 | Future doPay() async { 23 | String bootpayApplicationId; 24 | if (Platform.isAndroid) { 25 | bootpayApplicationId = "59a4d326396fa607cbe75de5"; // 안드로이드용 bootpay applicationId 26 | } else { 27 | bootpayApplicationId = "59a4d328396fa607b9e75de6"; // ios용 bootpay applicationId 28 | } 29 | 30 | String paymentResult; 31 | final UserInfo userInfo = UserInfo(username: "홍길동", email: "test@test.com"); 32 | final PayParam payParam = PayParam( 33 | price: "1000", 34 | applicationId: bootpayApplicationId, // your_bootpay_id (Android or iOS) 35 | name: "bootpay_flutter_테스트_결제", 36 | userInfo: userInfo, 37 | orderId: "BootpayTest000001"); 38 | 39 | try { 40 | final PayResult result = await BootpayFlutter.pay(payParam); 41 | if (result.action == "BootpayDone") { 42 | print("결제 성공"); 43 | } else if (result.action == "BootpayCancel") { 44 | // 사용자가 결제완료전에 결제를 중지한 상태. 45 | print("사용자 결제 취소"); 46 | } else if (result.action == "BootpayError") { 47 | print("결제 에러"); 48 | } 49 | paymentResult = result.toString(); 50 | } on Exception { 51 | paymentResult = 'Payment Failed.'; 52 | } 53 | 54 | setState(() { 55 | _paymentResult = paymentResult; 56 | }); 57 | } 58 | 59 | @override 60 | Widget build(BuildContext context) { 61 | return MaterialApp( 62 | home: Scaffold( 63 | appBar: AppBar( 64 | title: const Text('Bootpay flutter example app'), 65 | ), 66 | body: Column( 67 | children: [ 68 | Center( 69 | child: Text('Payment Result : $_paymentResult'), 70 | ), 71 | SizedBox(height: 10), 72 | MaterialButton( 73 | onPressed: () async { 74 | await doPay(); 75 | }, 76 | child: Text("결제 테스트"), 77 | ) 78 | ], 79 | )), 80 | ); 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /example/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 | url: "https://pub.dartlang.org" 9 | source: hosted 10 | version: "2.3.0" 11 | boolean_selector: 12 | dependency: transitive 13 | description: 14 | name: boolean_selector 15 | url: "https://pub.dartlang.org" 16 | source: hosted 17 | version: "1.0.5" 18 | bootpay_flutter: 19 | dependency: "direct dev" 20 | description: 21 | path: ".." 22 | relative: true 23 | source: path 24 | version: "1.0.1" 25 | charcode: 26 | dependency: transitive 27 | description: 28 | name: charcode 29 | url: "https://pub.dartlang.org" 30 | source: hosted 31 | version: "1.1.2" 32 | collection: 33 | dependency: transitive 34 | description: 35 | name: collection 36 | url: "https://pub.dartlang.org" 37 | source: hosted 38 | version: "1.14.11" 39 | cupertino_icons: 40 | dependency: "direct main" 41 | description: 42 | name: cupertino_icons 43 | url: "https://pub.dartlang.org" 44 | source: hosted 45 | version: "0.1.2" 46 | flutter: 47 | dependency: "direct main" 48 | description: flutter 49 | source: sdk 50 | version: "0.0.0" 51 | flutter_test: 52 | dependency: "direct dev" 53 | description: flutter 54 | source: sdk 55 | version: "0.0.0" 56 | matcher: 57 | dependency: transitive 58 | description: 59 | name: matcher 60 | url: "https://pub.dartlang.org" 61 | source: hosted 62 | version: "0.12.5" 63 | meta: 64 | dependency: transitive 65 | description: 66 | name: meta 67 | url: "https://pub.dartlang.org" 68 | source: hosted 69 | version: "1.1.7" 70 | path: 71 | dependency: transitive 72 | description: 73 | name: path 74 | url: "https://pub.dartlang.org" 75 | source: hosted 76 | version: "1.6.4" 77 | pedantic: 78 | dependency: transitive 79 | description: 80 | name: pedantic 81 | url: "https://pub.dartlang.org" 82 | source: hosted 83 | version: "1.8.0+1" 84 | quiver: 85 | dependency: transitive 86 | description: 87 | name: quiver 88 | url: "https://pub.dartlang.org" 89 | source: hosted 90 | version: "2.0.5" 91 | sky_engine: 92 | dependency: transitive 93 | description: flutter 94 | source: sdk 95 | version: "0.0.99" 96 | source_span: 97 | dependency: transitive 98 | description: 99 | name: source_span 100 | url: "https://pub.dartlang.org" 101 | source: hosted 102 | version: "1.5.5" 103 | stack_trace: 104 | dependency: transitive 105 | description: 106 | name: stack_trace 107 | url: "https://pub.dartlang.org" 108 | source: hosted 109 | version: "1.9.3" 110 | stream_channel: 111 | dependency: transitive 112 | description: 113 | name: stream_channel 114 | url: "https://pub.dartlang.org" 115 | source: hosted 116 | version: "2.0.0" 117 | string_scanner: 118 | dependency: transitive 119 | description: 120 | name: string_scanner 121 | url: "https://pub.dartlang.org" 122 | source: hosted 123 | version: "1.0.5" 124 | term_glyph: 125 | dependency: transitive 126 | description: 127 | name: term_glyph 128 | url: "https://pub.dartlang.org" 129 | source: hosted 130 | version: "1.1.0" 131 | test_api: 132 | dependency: transitive 133 | description: 134 | name: test_api 135 | url: "https://pub.dartlang.org" 136 | source: hosted 137 | version: "0.2.5" 138 | typed_data: 139 | dependency: transitive 140 | description: 141 | name: typed_data 142 | url: "https://pub.dartlang.org" 143 | source: hosted 144 | version: "1.1.6" 145 | vector_math: 146 | dependency: transitive 147 | description: 148 | name: vector_math 149 | url: "https://pub.dartlang.org" 150 | source: hosted 151 | version: "2.0.8" 152 | sdks: 153 | dart: ">=2.2.2 <3.0.0" 154 | -------------------------------------------------------------------------------- /example/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: bootpay_flutter_example 2 | description: Demonstrates how to use the bootpay_flutter plugin. 3 | publish_to: 'none' 4 | 5 | environment: 6 | sdk: ">=2.1.0 <3.0.0" 7 | 8 | dependencies: 9 | flutter: 10 | sdk: flutter 11 | 12 | # The following adds the Cupertino Icons font to your application. 13 | # Use with the CupertinoIcons class for iOS style icons. 14 | cupertino_icons: ^0.1.2 15 | 16 | dev_dependencies: 17 | flutter_test: 18 | sdk: flutter 19 | 20 | bootpay_flutter: 21 | path: ../ 22 | 23 | # For information on the generic Dart part of this file, see the 24 | # following page: https://www.dartlang.org/tools/pub/pubspec 25 | 26 | # The following section is specific to Flutter. 27 | flutter: 28 | 29 | # The following line ensures that the Material Icons font is 30 | # included with your application, so that you can use the icons in 31 | # the material Icons class. 32 | uses-material-design: true 33 | 34 | # To add assets to your application, add an assets section, like this: 35 | # assets: 36 | # - images/a_dot_burr.jpeg 37 | # - images/a_dot_ham.jpeg 38 | 39 | # An image asset can refer to one or more resolution-specific "variants", see 40 | # https://flutter.dev/assets-and-images/#resolution-aware. 41 | 42 | # For details regarding adding assets from package dependencies, see 43 | # https://flutter.dev/assets-and-images/#from-packages 44 | 45 | # To add custom fonts to your application, add a fonts section here, 46 | # in this "flutter" section. Each entry in this list should have a 47 | # "family" key with the font family name, and a "fonts" key with a 48 | # list giving the asset and other descriptors for the font. For 49 | # example: 50 | # fonts: 51 | # - family: Schyler 52 | # fonts: 53 | # - asset: fonts/Schyler-Regular.ttf 54 | # - asset: fonts/Schyler-Italic.ttf 55 | # style: italic 56 | # - family: Trajan Pro 57 | # fonts: 58 | # - asset: fonts/TrajanPro.ttf 59 | # - asset: fonts/TrajanPro_Bold.ttf 60 | # weight: 700 61 | # 62 | # For details regarding fonts from package dependencies, 63 | # see https://flutter.dev/custom-fonts/#from-packages 64 | -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | .vagrant/ 3 | .sconsign.dblite 4 | .svn/ 5 | 6 | .DS_Store 7 | *.swp 8 | profile 9 | 10 | DerivedData/ 11 | build/ 12 | GeneratedPluginRegistrant.h 13 | GeneratedPluginRegistrant.m 14 | 15 | .generated/ 16 | 17 | *.pbxuser 18 | *.mode1v3 19 | *.mode2v3 20 | *.perspectivev3 21 | 22 | !default.pbxuser 23 | !default.mode1v3 24 | !default.mode2v3 25 | !default.perspectivev3 26 | 27 | xcuserdata 28 | 29 | *.moved-aside 30 | 31 | *.pyc 32 | *sync/ 33 | Icon? 34 | .tags* 35 | 36 | /Flutter/Generated.xcconfig 37 | -------------------------------------------------------------------------------- /ios/Assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jaceshim/bootpay_flutter/4515ba73ddcb847a1484be163e2a662290d5a4cd/ios/Assets/.gitkeep -------------------------------------------------------------------------------- /ios/Classes/BootpayFlutterPlugin.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | @interface BootpayFlutterPlugin : NSObject 4 | @end 5 | -------------------------------------------------------------------------------- /ios/Classes/BootpayFlutterPlugin.m: -------------------------------------------------------------------------------- 1 | #import "BootpayFlutterPlugin.h" 2 | #import 3 | 4 | @implementation BootpayFlutterPlugin 5 | + (void)registerWithRegistrar:(NSObject*)registrar { 6 | [SwiftBootpayFlutterPlugin registerWithRegistrar:registrar]; 7 | } 8 | @end 9 | -------------------------------------------------------------------------------- /ios/Classes/BootpayViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BootpayViewController.swift 3 | // Runner 4 | // 5 | // Created by Jace Shim on 03/06/2019. 6 | // Copyright © 2019 The Chromium Authors. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import UIKit 11 | import SwiftyBootpay 12 | 13 | class BootpayViewController: UIViewController { 14 | var vc: BootpayController! 15 | var payParam: Dictionary = [:] 16 | var payResult: Dictionary = [:] 17 | var flutterResult:FlutterResult? 18 | 19 | override func viewDidLoad() { 20 | super.viewDidLoad() 21 | doPay() 22 | } 23 | 24 | override func didReceiveMemoryWarning() { 25 | super.didReceiveMemoryWarning() 26 | // Dispose of any resources that can be recreated. 27 | } 28 | 29 | func doPay() { 30 | print("payParams : ", payParam) 31 | 32 | var userInfo: [String: String] = [:] 33 | // 구매자 정보 34 | // let userInfoStr = params?["userInfo"] as String 35 | let userInfoOfParams = payParam["userInfo"] as! Dictionary 36 | 37 | if let username = userInfoOfParams["username"] as? String { 38 | userInfo["username"] = username 39 | } 40 | 41 | if let email = userInfoOfParams["email"] as? String { 42 | userInfo["email"] = email 43 | } 44 | 45 | if let addr = userInfoOfParams["addr"] as? String { 46 | userInfo["addr"] = addr 47 | } else { 48 | userInfo["addr"] = "" 49 | } 50 | 51 | if let cellphone = userInfoOfParams["phone"] as? String { 52 | userInfo["phone"] = cellphone 53 | } else { 54 | userInfo["phone"] = "" 55 | } 56 | 57 | vc = BootpayController() 58 | 59 | let payPrice:NSString = payParam["price"] as! NSString 60 | 61 | // 주문정보 - 실제 결제창에 반영되는 정보 62 | let payMethod = payParam["method"] as? String ?? "" 63 | vc.params { 64 | $0.price = payPrice.doubleValue // 결제할 금액 65 | $0.name = payParam["name"] as! String // 결제할 상품명 66 | $0.order_id = payParam["orderId"] as! String //고유 주문번호로, 생성하신 값을 보내주셔야 합니다. 67 | $0.user_info = userInfo // 구매자 정보 68 | $0.pg = payParam["pg"] as? String ?? ""// 결제할 PG사 69 | $0.phone = userInfo["phone"]!// 구매자 휴대폰 번호 70 | $0.method = payMethod.lowercased()// 결제수단 71 | $0.sendable = self // 이벤트를 처리할 protocol receiver 72 | // $0.quotas = [0,2,3] // // 5만원 이상일 경우 할부 허용범위 설정 가능, (예제는 일시불, 2개월 할부, 3개월 할부 허용) 73 | } 74 | 75 | 76 | self.view.addSubview(vc.view) 77 | } 78 | 79 | func convertToDictionary(text: String) -> [String: Any]? { 80 | if let data = text.data(using: .utf8) { 81 | do { 82 | return try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] 83 | } catch { 84 | print(error.localizedDescription) 85 | } 86 | } 87 | return nil 88 | } 89 | } 90 | 91 | 92 | //MARK: Bootpay Callback Protocol 93 | extension BootpayViewController: BootpayRequestProtocol { 94 | // 에러가 났을때 호출되는 부분 95 | func onError(data: [String: Any]) { 96 | buildResults(data: data) 97 | } 98 | 99 | // 가상계좌 입금 계좌번호가 발급되면 호출되는 함수입니다. 100 | func onReady(data: [String: Any]) { 101 | } 102 | 103 | // 결제가 진행되기 바로 직전 호출되는 함수로, 주로 재고처리 등의 로직이 수행 104 | func onConfirm(data: [String: Any]) { 105 | let iWantPay = true 106 | if iWantPay == true { // 재고가 있을 경우. 107 | vc.transactionConfirm(data: data) // 결제 승인 108 | } else { // 재고가 없어 중간에 결제창을 닫고 싶을 경우 109 | vc.removePaymentWindow() 110 | } 111 | } 112 | 113 | // 결제 취소시 호출 114 | func onCancel(data: [String: Any]) { 115 | buildResults(data: data) 116 | } 117 | 118 | // 결제완료시 호출 119 | // 아이템 지급 등 데이터 동기화 로직을 수행합니다 120 | func onDone(data: [String: Any]) { 121 | buildResults(data: data) 122 | } 123 | 124 | //결제창이 닫힐때 실행되는 부분 125 | func onClose() { 126 | vc.dismiss() //결제창 종료 127 | // 이전화면으로 128 | 129 | // // AppDelegate 객체의 인스턴스를 가져온다. 130 | // let ad = UIApplication.shared.delegate as? AppDelegate 131 | // ad?.payResult = self.payResult 132 | 133 | self.flutterResult?(self.payResult) 134 | 135 | // 이전 화면으로 복귀한다. 136 | self.presentingViewController?.dismiss(animated: true) 137 | } 138 | 139 | func buildResults(data: Dictionary) { 140 | self.payResult = data 141 | } 142 | } 143 | -------------------------------------------------------------------------------- /ios/Classes/SwiftBootpayFlutterPlugin.swift: -------------------------------------------------------------------------------- 1 | import Flutter 2 | import UIKit 3 | import SwiftyBootpay 4 | 5 | public class SwiftBootpayFlutterPlugin: NSObject, FlutterPlugin { 6 | 7 | public static func register(with registrar: FlutterPluginRegistrar) { 8 | let channel = FlutterMethodChannel(name: "jaceshim/bootpay_flutter", binaryMessenger: registrar.messenger()) 9 | let instance = SwiftBootpayFlutterPlugin() 10 | registrar.addMethodCallDelegate(instance, channel: channel) 11 | } 12 | 13 | public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { 14 | let rootViewController = UIApplication.shared.keyWindow?.rootViewController 15 | let payParam: Dictionary = call.arguments as! Dictionary 16 | // bootpay api key 17 | let bootpayApplicationId = payParam["applicationId"] as! String 18 | BootpayAnalytics.sharedInstance.appLaunch(application_id: bootpayApplicationId) 19 | 20 | if ("doPay" == call.method) { 21 | let bootpayViewController = BootpayViewController() 22 | bootpayViewController.payParam = payParam; 23 | bootpayViewController.flutterResult = result 24 | rootViewController?.present(bootpayViewController, animated: true, completion: nil) 25 | } else { 26 | result(FlutterMethodNotImplemented) 27 | } 28 | } 29 | 30 | func applicationWillResignActive(_ application: UIApplication) { 31 | BootpayAnalytics.sharedInstance.sessionActive(active: false) 32 | } 33 | 34 | func applicationDidBecomeActive(_ application: UIApplication) { 35 | BootpayAnalytics.sharedInstance.sessionActive(active: true) 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /ios/bootpay_flutter.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html 3 | # 4 | Pod::Spec.new do |s| 5 | s.name = 'bootpay_flutter' 6 | s.version = '0.0.1' 7 | s.summary = 'Bootpay payment moudle for flutter' 8 | s.description = <<-DESC 9 | Bootpay payment moudle for flutter 10 | DESC 11 | s.homepage = 'https://facebook.com/jaceshi.kr' 12 | s.license = { :file => '../LICENSE' } 13 | s.author = { 'Jace Shim' => 'https://facebook.com/jaceshi.kr' } 14 | s.source = { :path => '.' } 15 | s.source_files = 'Classes/**/*' 16 | s.public_header_files = 'Classes/**/*.h' 17 | s.dependency 'Flutter' 18 | s.dependency 'SwiftyBootpay', '3.0.492' 19 | 20 | s.static_framework = true 21 | 22 | s.ios.deployment_target = '11.0' 23 | end 24 | 25 | -------------------------------------------------------------------------------- /lib/bootpay_flutter.dart: -------------------------------------------------------------------------------- 1 | import 'dart:async'; 2 | import 'dart:convert'; 3 | 4 | import 'package:flutter/services.dart'; 5 | 6 | /// Bootpay payment modules for Flutter 7 | class BootpayFlutter { 8 | static const MethodChannel _channel = const MethodChannel('jaceshim/bootpay_flutter'); 9 | 10 | static Future pay(PayParam payParam) async { 11 | final Map result = await _channel.invokeMethod( 12 | "doPay", 13 | payParam.toJson(), 14 | ); 15 | String resultJson = json.encode(result); 16 | 17 | if (result != null) { 18 | return PayResult( 19 | action: result["action"], 20 | receiptId: result["receipt_id"], 21 | amount: result["amount"], 22 | cardNo: result["card_no"], 23 | cardCode: result["card_code"], 24 | cardName: result["card_name"], 25 | cardQuota: result["card_quota"], 26 | // params: result["params"], 27 | itemName: result["item_name"], 28 | orderId: result["order_id"], 29 | url: result["url"], 30 | price: result["price"], 31 | taxFee: result["tax_free"], 32 | paymentName: result["payment_name"], 33 | pgName: result["pg_name"], 34 | pg: result["pg"], 35 | method: result["method"], 36 | methodName: result["method_name"], 37 | paymentGroup: result["payment_group"], 38 | paymentGroupName: result["payment_group_name"], 39 | requestedAt: result["requested_at"], 40 | bankcode: result["bankcode"], 41 | bankname: result["bankname"], 42 | username: result["username"], 43 | accounthodler: result["accounthodler"], 44 | account: result["account"], 45 | expiredate: result["expiredate"], 46 | resultJson: resultJson, 47 | ); 48 | } 49 | 50 | throw Exception("bootpay result null : ${payParam.toString()}"); 51 | } 52 | } 53 | 54 | /// 결제요청 파라미터 55 | class PayParam { 56 | /// 실 결제 금액 57 | String price; 58 | 59 | /// SDK용 Application ID (Android, iOS 각각 관리되는 값) 60 | String applicationId; 61 | 62 | /// 결제창에 보여질 이름 63 | String name; 64 | 65 | /// PG 명 66 | String pg; 67 | 68 | /// 결제수단, 입력하지 않으면 결제수단 선택부터 화면이 시작합니다. 69 | String method; 70 | 71 | /// 부트페이 정보 동의 창 보이기 여부 72 | bool showAgreeWindow; 73 | 74 | /// 결제 아이템 목록 75 | List items; 76 | 77 | /// 사용자(구매자) 정보 78 | UserInfo userInfo; 79 | 80 | /// 고유 주문번호로, 생성하신 값을 보내주셔야 합니다. 81 | String orderId; 82 | 83 | /// pg결제후 콜백받을 변수 map 84 | Map params; 85 | 86 | /// 가상계좌 입금기간 제한 ( yyyy-mm-dd 포멧으로 입력해주세요. 가상계좌만 적용됩니다. ) 87 | String accountExpireAt; 88 | 89 | Extra extra; 90 | 91 | PayParam({this.price, this.applicationId, this.name, this.pg = "", this.method = "", this.showAgreeWindow = false, this.items = const [], this.userInfo, this.orderId, this.params, this.accountExpireAt, this.extra}); 92 | 93 | PayParam.fromJson(Map json) 94 | : this.price = json["price"], 95 | this.applicationId = json["applicationId"], 96 | this.name = json["name"], 97 | this.pg = json["pg"], 98 | this.method = json["method"], 99 | this.showAgreeWindow = json["showAgreeWindow"], 100 | this.items = (json["items"] as List).map((i) => Item.fromJson(i)).toList(), 101 | this.userInfo = UserInfo.fromJson(json["userInfo"]), 102 | this.orderId = json["orderId"], 103 | this.params = jsonDecode(json["params"]), 104 | this.accountExpireAt = json["accountExpireAt"], 105 | this.extra = Extra.fromJson(json["extra"]); 106 | 107 | Map toJson() => { 108 | "price": this.price, 109 | "applicationId": this.applicationId, 110 | "name": this.name, 111 | "pg": this.pg, 112 | "method": this.method, 113 | "showAgreeWindow": this.showAgreeWindow, 114 | "items": this.items.map((i) => i.toJson()).toList(), 115 | "userInfo": this.userInfo?.toJson(), 116 | "orderId": this.orderId, 117 | "params": jsonEncode(this.params), 118 | "accountExpireAt": this.accountExpireAt, 119 | "extra": this.extra?.toJson(), 120 | }; 121 | 122 | /// PG enum값을 String으로 변환하여 얻는ㅂ다. 123 | static String getPG(PG pg) { 124 | return pg.toString().split(".").last; 125 | } 126 | 127 | @override 128 | String toString() { 129 | return 'PayParam{price: $price, applicationId: $applicationId, name: $name, pg: $pg, method: $method, showAgreeWindow: $showAgreeWindow, items: $items, userInfo: $userInfo, orderId: $orderId, params: $params, accountExpireAt: $accountExpireAt, extra: $extra}'; 130 | } 131 | } 132 | 133 | /// 결제요청 결과 134 | class PayResult { 135 | String status; 136 | String action; 137 | String receiptId; 138 | num amount; 139 | String cardNo; 140 | String cardCode; 141 | String cardName; 142 | String cardQuota; 143 | Map params; 144 | String itemName; 145 | String orderId; 146 | String url; 147 | num price; 148 | num taxFee; 149 | String paymentName; 150 | String pgName; 151 | String pg; 152 | String method; 153 | String methodName; 154 | String paymentGroup; 155 | String paymentGroupName; 156 | String requestedAt; 157 | String bankcode; 158 | String bankname; 159 | String username; 160 | String accounthodler; 161 | String account; 162 | String expiredate; 163 | String resultJson; 164 | 165 | PayResult({ 166 | this.status, 167 | this.action, 168 | this.receiptId, 169 | this.amount, 170 | this.cardNo, 171 | this.cardCode, 172 | this.cardName, 173 | this.cardQuota, 174 | this.params, 175 | this.itemName, 176 | this.orderId, 177 | this.url, 178 | this.price, 179 | this.taxFee, 180 | this.paymentName, 181 | this.pgName, 182 | this.pg, 183 | this.method, 184 | this.methodName, 185 | this.paymentGroup, 186 | this.paymentGroupName, 187 | this.requestedAt, 188 | this.bankcode, 189 | this.bankname, 190 | this.username, 191 | this.accounthodler, 192 | this.account, 193 | this.expiredate, 194 | this.resultJson, 195 | }); 196 | 197 | @override 198 | String toString() { 199 | return 'PayResult{status: $status, action: $action, receiptId: $receiptId, amount: $amount, cardNo: $cardNo, cardCode: $cardCode, cardName: $cardName, cardQuota: $cardQuota, params: $params, itemName: $itemName, orderId: $orderId, url: $url, price: $price, taxFee: $taxFee, paymentName: $paymentName, pgName: $pgName, pg: $pg, method: $method, methodName: $methodName, paymentGroup: $paymentGroup, paymentGroupName: $paymentGroupName, requestedAt: $requestedAt, bankcode: $bankcode, bankname: $bankname, username: $username, accounthodler: $accounthodler, account: $account, expiredate: $expiredate, resultJson: $resultJson}'; 200 | } 201 | } 202 | 203 | /// 사용자(구매자) 정보 204 | class UserInfo { 205 | /// 사용자 이름 206 | String username; 207 | 208 | /// 사용자 이메일 209 | String email; 210 | 211 | /// 사용자 주소 212 | String addr; 213 | 214 | /// 사용자 휴대폰 번호 215 | String phone; 216 | 217 | UserInfo({this.username, this.email, this.addr, this.phone}); 218 | 219 | UserInfo.fromJson(Map json) 220 | : this.username = json["username"], 221 | this.email = json["email"], 222 | this.addr = json["addr"], 223 | this.phone = json["phone"]; 224 | 225 | Map toJson() => { 226 | "username": this.username, 227 | "email": this.email, 228 | "addr": this.addr, 229 | "phone": this.phone, 230 | }; 231 | 232 | @override 233 | String toString() { 234 | return 'UserInfo{username: $username, email: $email, addr: $addr, phone: $phone}'; 235 | } 236 | } 237 | 238 | /// 결제 아이템 239 | class Item { 240 | /// 상품명 241 | String itemName; 242 | 243 | /// 수량 244 | int qty; 245 | 246 | /// 해당 상품을 구분짓는 primary key 247 | String unique; 248 | 249 | /// 상품 단가 250 | int price; 251 | 252 | /// 대표 상품의 카테고리 상, 50글자 이내 253 | String cat1; 254 | 255 | /// 대표 상품의 카테고리 중, 50글자 이내 256 | String cat2; 257 | 258 | /// 대표상품의 카테고리 하, 50글자 이내 259 | String cat3; 260 | 261 | Item({this.itemName, this.qty, this.unique, this.price, this.cat1, this.cat2, this.cat3}); 262 | 263 | Item.fromJson(Map json) 264 | : this.itemName = json["itemName"], 265 | this.qty = json["qty"], 266 | this.unique = json["unique"], 267 | this.price = json["price"], 268 | this.cat1 = json["cat1"], 269 | this.cat2 = json["cat2"], 270 | this.cat3 = json["cat3"]; 271 | 272 | Map toJson() => { 273 | "itemName": this.itemName, 274 | "qty": this.qty, 275 | "unique": this.unique, 276 | "price": this.price, 277 | "cat1": this.cat1, 278 | "cat2": this.cat2, 279 | "cat3": this.cat3, 280 | }; 281 | 282 | @override 283 | String toString() { 284 | return 'Item{itemName: $itemName, qty: $qty, unique: $unique, price: $price, cat1: $cat1, cat2: $cat2, cat3: $cat3}'; 285 | } 286 | } 287 | 288 | class Extra { 289 | /// 정기 결제 시작일 - 시작일을 지정하지 않으면 그 날 당일로부터 결제가 가능한 Billing key 지급 290 | String startAt; 291 | 292 | /// 정기결제 만료일 - 기간 없음 - 무제한 293 | String endAt; 294 | 295 | /// 가상계좌 사용시 사용, 가상계좌 결과창을 볼지(1), 말지(0), 미설정시 봄(1) 296 | int vbankResult; 297 | 298 | /// 결제금액이 5만원 이상시 할부개월 허용범위를 설정할 수 있음, [0(일시불), 2개월, 3개월] 허용, 미설정시 12개월까지 허용 299 | String quota; 300 | 301 | Extra({this.startAt, this.endAt, this.vbankResult, this.quota}); 302 | 303 | Extra.fromJson(Map json) 304 | : this.startAt = json["startAt"], 305 | this.endAt = json["endAt"], 306 | this.vbankResult = json["vbankResult"], 307 | this.quota = json["quota"]; 308 | 309 | Map toJson() => { 310 | "startAt": this.startAt, 311 | "endAt": this.endAt, 312 | "vbankResult": this.vbankResult, 313 | "quota": this.quota, 314 | }; 315 | 316 | @override 317 | String toString() { 318 | return 'Extra{startAt: $startAt, endAt: $endAt, vbankResult: $vbankResult, quota: $quota}'; 319 | } 320 | } 321 | 322 | /// 결제사 PG 323 | enum PG { 324 | KCP, 325 | DANAL, 326 | INICIS, 327 | NICEPAY, 328 | LGUP, 329 | PAYAPP, 330 | KAKAO, 331 | PAYCO, 332 | KICC, 333 | EASYPAY, 334 | JTNET, 335 | TPAY, 336 | MOBILIANS, 337 | PAYLETTER, 338 | BOOTPAY, 339 | } 340 | -------------------------------------------------------------------------------- /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 | url: "https://pub.dartlang.org" 9 | source: hosted 10 | version: "2.3.0" 11 | boolean_selector: 12 | dependency: transitive 13 | description: 14 | name: boolean_selector 15 | url: "https://pub.dartlang.org" 16 | source: hosted 17 | version: "1.0.5" 18 | charcode: 19 | dependency: transitive 20 | description: 21 | name: charcode 22 | url: "https://pub.dartlang.org" 23 | source: hosted 24 | version: "1.1.2" 25 | collection: 26 | dependency: transitive 27 | description: 28 | name: collection 29 | url: "https://pub.dartlang.org" 30 | source: hosted 31 | version: "1.14.11" 32 | flutter: 33 | dependency: "direct main" 34 | description: flutter 35 | source: sdk 36 | version: "0.0.0" 37 | flutter_test: 38 | dependency: "direct dev" 39 | description: flutter 40 | source: sdk 41 | version: "0.0.0" 42 | matcher: 43 | dependency: transitive 44 | description: 45 | name: matcher 46 | url: "https://pub.dartlang.org" 47 | source: hosted 48 | version: "0.12.5" 49 | meta: 50 | dependency: transitive 51 | description: 52 | name: meta 53 | url: "https://pub.dartlang.org" 54 | source: hosted 55 | version: "1.1.7" 56 | path: 57 | dependency: transitive 58 | description: 59 | name: path 60 | url: "https://pub.dartlang.org" 61 | source: hosted 62 | version: "1.6.4" 63 | pedantic: 64 | dependency: transitive 65 | description: 66 | name: pedantic 67 | url: "https://pub.dartlang.org" 68 | source: hosted 69 | version: "1.8.0+1" 70 | quiver: 71 | dependency: transitive 72 | description: 73 | name: quiver 74 | url: "https://pub.dartlang.org" 75 | source: hosted 76 | version: "2.0.5" 77 | sky_engine: 78 | dependency: transitive 79 | description: flutter 80 | source: sdk 81 | version: "0.0.99" 82 | source_span: 83 | dependency: transitive 84 | description: 85 | name: source_span 86 | url: "https://pub.dartlang.org" 87 | source: hosted 88 | version: "1.5.5" 89 | stack_trace: 90 | dependency: transitive 91 | description: 92 | name: stack_trace 93 | url: "https://pub.dartlang.org" 94 | source: hosted 95 | version: "1.9.3" 96 | stream_channel: 97 | dependency: transitive 98 | description: 99 | name: stream_channel 100 | url: "https://pub.dartlang.org" 101 | source: hosted 102 | version: "2.0.0" 103 | string_scanner: 104 | dependency: transitive 105 | description: 106 | name: string_scanner 107 | url: "https://pub.dartlang.org" 108 | source: hosted 109 | version: "1.0.5" 110 | term_glyph: 111 | dependency: transitive 112 | description: 113 | name: term_glyph 114 | url: "https://pub.dartlang.org" 115 | source: hosted 116 | version: "1.1.0" 117 | test_api: 118 | dependency: transitive 119 | description: 120 | name: test_api 121 | url: "https://pub.dartlang.org" 122 | source: hosted 123 | version: "0.2.5" 124 | typed_data: 125 | dependency: transitive 126 | description: 127 | name: typed_data 128 | url: "https://pub.dartlang.org" 129 | source: hosted 130 | version: "1.1.6" 131 | vector_math: 132 | dependency: transitive 133 | description: 134 | name: vector_math 135 | url: "https://pub.dartlang.org" 136 | source: hosted 137 | version: "2.0.8" 138 | sdks: 139 | dart: ">=2.2.2 <3.0.0" 140 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: bootpay_flutter 2 | description: This plugin is payment modules of Bootpay for Flutter version. 3 | version: 1.0.1 4 | author: Jace Shim 5 | homepage: https://github.com/jaceshim/bootpay_flutter 6 | 7 | environment: 8 | sdk: ">=2.1.0 <3.0.0" 9 | 10 | dependencies: 11 | flutter: 12 | sdk: flutter 13 | 14 | dev_dependencies: 15 | flutter_test: 16 | sdk: flutter 17 | 18 | flutter: 19 | plugin: 20 | androidPackage: jaceshim.bootpay_flutter 21 | pluginClass: BootpayFlutterPlugin 22 | -------------------------------------------------------------------------------- /test/bootpay_flutter_test.dart: -------------------------------------------------------------------------------- 1 | void main() {} 2 | --------------------------------------------------------------------------------