├── .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 |
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 |
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 |
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 |
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 |
--------------------------------------------------------------------------------