├── .gitignore
├── .idea
├── codeStyles
│ └── Project.xml
├── libraries
│ ├── Dart_Packages.xml
│ ├── Dart_SDK.xml
│ ├── Flutter_Plugins.xml
│ └── Flutter_for_Android.xml
├── misc.xml
├── modules.xml
├── runConfigurations
│ └── main_dart.xml
├── vcs.xml
└── workspace.xml
├── .metadata
├── README.md
├── android
├── .gitignore
├── .idea
│ ├── caches
│ │ └── build_file_checksums.ser
│ ├── codeStyles
│ │ └── Project.xml
│ ├── gradle.xml
│ ├── misc.xml
│ ├── modules.xml
│ └── runConfigurations.xml
├── app
│ ├── build.gradle
│ ├── google-services.json
│ ├── src
│ │ └── main
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── ic_launcher-web.png
│ │ │ ├── java
│ │ │ └── maugost
│ │ │ │ └── girlies
│ │ │ │ ├── FacebookLogin.java
│ │ │ │ ├── MainActivity.java
│ │ │ │ └── creditcarddesign
│ │ │ │ ├── CardEditActivity.java
│ │ │ │ ├── CardSelector.java
│ │ │ │ ├── CreditCardUtils.java
│ │ │ │ ├── CreditCardView.java
│ │ │ │ ├── FlipAnimator.java
│ │ │ │ ├── pager
│ │ │ │ ├── CardCVVFragment.java
│ │ │ │ ├── CardExpiryFragment.java
│ │ │ │ ├── CardFragmentAdapter.java
│ │ │ │ ├── CardNameFragment.java
│ │ │ │ ├── CardNumberFragment.java
│ │ │ │ ├── CreditCardFragment.java
│ │ │ │ ├── IActionListener.java
│ │ │ │ └── IFocus.java
│ │ │ │ └── views
│ │ │ │ └── HeightWrappingViewPager.java
│ │ │ └── res
│ │ │ ├── drawable-hdpi
│ │ │ ├── gradient_line1.xml
│ │ │ ├── ic_back.png
│ │ │ ├── ic_checkmark.png
│ │ │ ├── ic_next.png
│ │ │ └── ic_password.png
│ │ │ ├── drawable
│ │ │ ├── card_color_round_rect_blue.xml
│ │ │ ├── card_color_round_rect_brown.xml
│ │ │ ├── card_color_round_rect_default.xml
│ │ │ ├── card_color_round_rect_green.xml
│ │ │ ├── card_color_round_rect_pink.xml
│ │ │ ├── card_color_round_rect_purple.xml
│ │ │ ├── chip.xml
│ │ │ ├── chip_inner.xml
│ │ │ ├── chip_yellow.xml
│ │ │ ├── chip_yellow_inner.xml
│ │ │ ├── circle_blue3.xml
│ │ │ ├── circle_white.xml
│ │ │ ├── curve_blue09_a.xml
│ │ │ ├── curve_blue09_b.xml
│ │ │ ├── curve_blue09_button.xml
│ │ │ ├── curve_blue3.xml
│ │ │ ├── discover_back.xml
│ │ │ ├── discover_back_bg.xml
│ │ │ ├── ic_billing_amex_logo.png
│ │ │ ├── ic_billing_amex_logo1.png
│ │ │ ├── ic_billing_discover_logo.png
│ │ │ ├── ic_billing_mastercard_logo.png
│ │ │ ├── ic_billing_visa_logo.png
│ │ │ ├── img_amex_center_face.png
│ │ │ ├── launch_background.xml
│ │ │ ├── master_back.xml
│ │ │ ├── mastercard_back_bg.xml
│ │ │ ├── red_button.xml
│ │ │ ├── sign_strip.png
│ │ │ ├── sign_strip_mod.xml
│ │ │ ├── visacard_back.xml
│ │ │ └── visacard_back_bg.xml
│ │ │ ├── layout
│ │ │ ├── activity_card_edit.xml
│ │ │ ├── activity_fb_login.xml
│ │ │ ├── activity_main.xml
│ │ │ ├── back_card.xml
│ │ │ ├── front_card.xml
│ │ │ ├── front_card_outline.xml
│ │ │ ├── lyt_card_cvv.xml
│ │ │ ├── lyt_card_expiry.xml
│ │ │ ├── lyt_card_holder_name.xml
│ │ │ ├── lyt_card_number.xml
│ │ │ └── view_creditcard.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
│ │ │ ├── colors.xml
│ │ │ ├── dimens.xml
│ │ │ ├── strings.xml
│ │ │ └── styles.xml
│ └── tmplibs
│ │ └── flutter.jar
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
├── assets
└── images
│ ├── avatar.png
│ ├── cart_empty.jpg
│ ├── cart_empty.png
│ ├── empty.png
│ ├── facebook.png
│ ├── fast_food_cart.jpg
│ ├── girlies_logo.png
│ ├── girlies_text.png
│ ├── girlies_text.psd
│ ├── girlies_text_colored.png
│ ├── girlies_text_small.png
│ ├── girlies_text_support.png
│ ├── google_logo.png
│ ├── ic_launcher.png
│ ├── no_internet.jpeg
│ ├── no_internet.png
│ ├── no_internet_access.png
│ └── twitter.png
├── flutter_01.log
├── girlies.iml
├── girlies_android.iml
├── ios
├── .gitignore
├── Flutter
│ ├── AppFrameworkInfo.plist
│ ├── Debug.xcconfig
│ └── Release.xcconfig
├── Runner.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ └── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ └── contents.xcworkspacedata
└── Runner
│ ├── AppDelegate.h
│ ├── AppDelegate.m
│ ├── 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
│ ├── GoogleService-Info.plist
│ ├── Info.plist
│ └── main.m
├── lib
├── app
│ ├── accounts
│ │ ├── help.dart
│ │ ├── login.dart
│ │ └── signup.dart
│ ├── alert_dialog.dart
│ ├── button.dart
│ ├── channel_methods.dart
│ ├── data.dart
│ ├── girlies_app.dart
│ ├── progress.dart
│ └── screens
│ │ ├── about_us.dart
│ │ ├── app_chat.dart
│ │ ├── boutique.dart
│ │ ├── boutique_item.dart
│ │ ├── cart.dart
│ │ ├── delivery_address.dart
│ │ ├── favorites.dart
│ │ ├── order_history.dart
│ │ ├── order_item.dart
│ │ ├── order_notification.dart
│ │ ├── payment.dart
│ │ ├── profile.dart
│ │ └── profile_settings.dart
├── main.dart
├── models
│ ├── base.dart
│ ├── fbconn.dart
│ └── ref_time.dart
├── navigation.dart
└── support
│ ├── girlies_support.dart
│ └── screens
│ ├── account_recovery.dart
│ ├── account_search.dart
│ ├── add_categories.dart
│ ├── add_prodcuts.dart
│ ├── boutique_store.dart
│ ├── chat_screen.dart
│ ├── edit_prodcuts.dart
│ ├── messages.dart
│ ├── order_search.dart
│ ├── requests.dart
│ ├── support_chat.dart
│ ├── support_order_history.dart
│ └── support_orders.dart
├── pubspec.lock
├── pubspec.yaml
├── screenshots
├── ss1.png
├── ss10.png
├── ss11.png
├── ss12.png
├── ss13.png
├── ss14.png
├── ss15.png
├── ss16.png
├── ss17.png
├── ss18.png
├── ss19.png
├── ss2.png
├── ss20.png
├── ss21.png
├── ss22.png
├── ss3.png
├── ss4.png
├── ss5.png
├── ss6.png
├── ss7.png
├── ss8.png
└── ss9.png
└── test
└── widget_test.dart
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | .dart_tool/
3 |
4 | .packages
5 | .pub/
6 |
7 | build/
8 |
9 | .flutter-plugins
10 |
--------------------------------------------------------------------------------
/.idea/codeStyles/Project.xml:
--------------------------------------------------------------------------------
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 |
--------------------------------------------------------------------------------
/.idea/libraries/Dart_SDK.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/.idea/libraries/Flutter_Plugins.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/.idea/libraries/Flutter_for_Android.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
17 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.idea/runConfigurations/main_dart.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.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: 44b7e7d3f42f050a79712daab253af06e9daf530
8 | channel: beta
9 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # flutter_girlies_store
2 |
3 | A Shopping / E-commerce application built with flutter from scratch.
4 |
5 | ## Screenshots
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | ### Show some :heart: and star the repo to support the project
20 |
21 | This project isn't complete and it's not yet perfect but still under the development phase, please feel free to study the source code and checkout my new youtube channel were i'd be guiding and explaining the steps i took to build the App from scratch....
22 |
23 | Here is a repository containing links of all the example apps demonstrating features/functionality/integrations in [Flutter](https://flutter.io/) application development.
24 |
25 | ## Pawan's YouTube Channel
26 |
27 | [MTechViral](https://www.youtube.com/c/MTechViral)
28 |
29 | ## Pawan's Facebook Group
30 |
31 | [Let's Flutter](https://www.facebook.com/groups/425920117856409/)
32 |
33 | ## My YouTube Channel
34 |
35 | [iamMaugost](https://www.youtube.com/channel/UCk3NXffAF04kM3q5uPXMU-Q/about)
36 |
37 |
38 |
39 |
40 | # Pull Requests
41 |
42 | I welcome and encourage all pull requests. It usually will take me within 24-48 hours to respond to any issue or request. Here are some basic rules to follow to ensure timely addition of your request:
43 |
44 | 1. Match coding style (braces, spacing, etc.) This is best achieved using `Reformat Code` feature of Android Studio `CMD`+`Option`+`L` on Mac and `CTRL` + `ALT` + `L` on Linux + Windows .
45 | 2. If its a feature, bugfix, or anything please only change code to what you specify.
46 | 3. Please keep PR titles easy to read and descriptive of changes, this will make them easier to merge :)
47 | 4. Pull requests _must_ be made against `develop` branch. Any other branch (unless specified by the maintainers) will get rejected.
48 | 5. Check for existing [issues](https://github.com/mtellect/FlutterGirliesStore/issues) first, before filing an issue.
49 | 6. Make sure you follow the set standard as all other projects in this repo do
50 | 7. Have fun!
51 |
52 | ### Created & Maintained By
53 |
54 | [Maugost_Mtellect](https://github.com/mtellect/)
55 |
56 | > If you found this project helpful or you learned something from the source code and want to thank me, consider buying me a cup of :coffee:
57 | >
58 | > *Bitcoin wallet address: 1K2wivc2xy7tTjsmHhNzq7wwEHoyHfS64n
59 |
60 |
61 | # License
62 |
63 | Copyright 2018 Maugost Mtellect
64 |
65 | Licensed under the Apache License, Version 2.0 (the "License");
66 | you may not use this file except in compliance with the License.
67 | You may obtain a copy of the License at
68 |
69 | http://www.apache.org/licenses/LICENSE-2.0
70 |
71 | Unless required by applicable law or agreed to in writing, software
72 | distributed under the License is distributed on an "AS IS" BASIS,
73 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
74 | See the License for the specific language governing permissions and
75 | limitations under the License.
76 |
77 |
78 | ## Getting Started
79 |
80 | For help getting started with Flutter, view our online [documentation](https://flutter.io/).
81 |
82 | For help on editing package code, view the [documentation](https://flutter.io/developing-packages/).
--------------------------------------------------------------------------------
/android/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | *.class
3 | .gradle
4 | /local.properties
5 | /.idea/workspace.xml
6 | /.idea/libraries
7 | .DS_Store
8 | /build
9 | /captures
10 | GeneratedPluginRegistrant.java
11 |
--------------------------------------------------------------------------------
/android/.idea/caches/build_file_checksums.ser:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/.idea/caches/build_file_checksums.ser
--------------------------------------------------------------------------------
/android/.idea/codeStyles/Project.xml:
--------------------------------------------------------------------------------
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 |
--------------------------------------------------------------------------------
/android/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
26 |
27 |
--------------------------------------------------------------------------------
/android/.idea/misc.xml:
--------------------------------------------------------------------------------
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 |
--------------------------------------------------------------------------------
/android/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/android/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/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 | apply plugin: 'com.android.application'
15 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
16 |
17 | android {
18 | compileSdkVersion 27
19 |
20 | lintOptions {
21 | disable 'InvalidPackage'
22 | }
23 |
24 | defaultConfig {
25 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
26 | applicationId "maugost.girlies"
27 | minSdkVersion 17
28 | targetSdkVersion 27
29 | versionCode 1
30 | versionName "1.0"
31 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
32 | multiDexEnabled true
33 | }
34 |
35 | buildTypes {
36 | release {
37 | // TODO: Add your own signing config for the release build.
38 | // Signing with the debug keys for now, so `flutter run --release` works.
39 | signingConfig signingConfigs.debug
40 | }
41 | }
42 | }
43 |
44 | flutter {
45 | source '../..'
46 | }
47 |
48 | dependencies {
49 | testImplementation 'junit:junit:4.12'
50 | androidTestImplementation 'com.android.support.test:runner:1.0.1'
51 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
52 | compile 'com.facebook.android:facebook-android-sdk:4.33.0'
53 | compile 'com.android.support:multidex:1.0.1'
54 | // compile('com.twitter.sdk.android:twitter:2.3.2@aar') {
55 | // transitive = true;
56 | // }
57 | compile 'com.github.mukeshsolanki:social-login-helper:1.0.2'
58 | //compileOnly files('tmplibs/flutter.jar')
59 | api 'co.paystack.android:paystack:3.0.10'
60 | api "com.android.support:appcompat-v7:27.1.1"
61 | api "com.android.support:cardview-v7:27.1.1"
62 | api 'com.github.ozodrukh:CircularReveal:1.3.1'
63 | api 'io.card:android-sdk:5.5.1'
64 | compile 'cards.pay:paycardsrecognizer:1.0.0'
65 | }
66 |
67 | apply plugin: 'com.google.gms.google-services'
--------------------------------------------------------------------------------
/android/app/google-services.json:
--------------------------------------------------------------------------------
1 | {
2 | "project_info": {
3 | "project_number": "186548206272",
4 | "firebase_url": "https://girlies-9b320.firebaseio.com",
5 | "project_id": "girlies-9b320",
6 | "storage_bucket": "girlies-9b320.appspot.com"
7 | },
8 | "client": [
9 | {
10 | "client_info": {
11 | "mobilesdk_app_id": "1:186548206272:android:2ce01318e597d435",
12 | "android_client_info": {
13 | "package_name": "maugost.girlies"
14 | }
15 | },
16 | "oauth_client": [
17 | {
18 | "client_id": "186548206272-aj9vsomac84831kcgn5cnqe1k7apgeh7.apps.googleusercontent.com",
19 | "client_type": 1,
20 | "android_info": {
21 | "package_name": "maugost.girlies",
22 | "certificate_hash": "43bffec9c0c300155ffaaebc517eedcc66001bc2"
23 | }
24 | },
25 | {
26 | "client_id": "186548206272-jbb697ahj400sfqbm14k5ae18finjr02.apps.googleusercontent.com",
27 | "client_type": 3
28 | }
29 | ],
30 | "api_key": [
31 | {
32 | "current_key": "AIzaSyCGynE_RQjJz_TpYG26T7a8rjRWJmJYCMY"
33 | }
34 | ],
35 | "services": {
36 | "analytics_service": {
37 | "status": 1
38 | },
39 | "appinvite_service": {
40 | "status": 2,
41 | "other_platform_oauth_client": [
42 | {
43 | "client_id": "186548206272-a9l34rp2140cf2cum28h41qlpoe7h8si.apps.googleusercontent.com",
44 | "client_type": 2,
45 | "ios_info": {
46 | "bundle_id": "maugost.girlies"
47 | }
48 | },
49 | {
50 | "client_id": "186548206272-jbb697ahj400sfqbm14k5ae18finjr02.apps.googleusercontent.com",
51 | "client_type": 3
52 | }
53 | ]
54 | },
55 | "ads_service": {
56 | "status": 2
57 | }
58 | }
59 | }
60 | ],
61 | "configuration_version": "1"
62 | }
--------------------------------------------------------------------------------
/android/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
9 |
10 |
11 |
12 |
17 |
22 |
29 |
33 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
64 |
66 |
67 |
70 |
71 |
72 |
73 |
--------------------------------------------------------------------------------
/android/app/src/main/ic_launcher-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/ic_launcher-web.png
--------------------------------------------------------------------------------
/android/app/src/main/java/maugost/girlies/FacebookLogin.java:
--------------------------------------------------------------------------------
1 | package maugost.girlies;
2 |
3 | import android.content.Intent;
4 | import android.os.Bundle;
5 | import android.support.v7.app.AppCompatActivity;
6 | import android.view.View;
7 | import android.widget.Button;
8 | import android.widget.TextView;
9 |
10 | import com.facebook.FacebookSdk;
11 | import com.facebook.appevents.AppEventsLogger;
12 | import com.mukeshsolanki.sociallogin.facebook.FacebookHelper;
13 | import com.mukeshsolanki.sociallogin.facebook.FacebookListener;
14 | import com.mukeshsolanki.sociallogin.google.GoogleHelper;
15 | import com.mukeshsolanki.sociallogin.google.GoogleListener;
16 | import com.mukeshsolanki.sociallogin.instagram.InstagramHelper;
17 | import com.mukeshsolanki.sociallogin.instagram.InstagramListener;
18 | import com.mukeshsolanki.sociallogin.twitter.TwitterHelper;
19 | import com.mukeshsolanki.sociallogin.twitter.TwitterListener;
20 | import java.util.Locale;
21 |
22 | public class FacebookLogin extends AppCompatActivity
23 | implements FacebookListener, TwitterListener, GoogleListener, InstagramListener,
24 | View.OnClickListener {
25 |
26 | private Button mFacebookButton, mTwitterButton, mGoogleButton, mInstagramButton;
27 | private TextView mDataTextView;
28 | private FacebookHelper mFacebook;
29 | private TwitterHelper mTwitter;
30 | private GoogleHelper mGoogle;
31 | private InstagramHelper mInstagram;
32 |
33 | @Override protected void onCreate(Bundle savedInstanceState) {
34 | super.onCreate(savedInstanceState);
35 | setContentView(R.layout.activity_fb_login);
36 | FacebookSdk.setApplicationId(getResources().getString(R.string.facebook_app_id));
37 | FacebookSdk.sdkInitialize(this);
38 | AppEventsLogger.activateApp(this);
39 | mFacebook = new FacebookHelper(this);
40 | initialize();
41 | }
42 |
43 | private void initialize() {
44 | mFacebookButton = (Button) findViewById(R.id.facebook_button);
45 | mGoogleButton = (Button) findViewById(R.id.google_button);
46 | mTwitterButton = (Button) findViewById(R.id.twitter_button);
47 | mInstagramButton = (Button) findViewById(R.id.instagram_button);
48 | mDataTextView = (TextView) findViewById(R.id.data_received_text_view);
49 |
50 | mFacebookButton.setOnClickListener(this);
51 | mGoogleButton.setOnClickListener(this);
52 | mTwitterButton.setOnClickListener(this);
53 | mInstagramButton.setOnClickListener(this);
54 |
55 | mFacebook = new FacebookHelper(this);
56 | //mTwitter = new TwitterHelper(this, this, "Your Twitter Api Key", "Your Twitter Api Secret");
57 | mGoogle = new GoogleHelper(this, this, null);
58 | mInstagram = new InstagramHelper(this, this, "Your Client Id", "Your Client Secret", "Your call back url");
59 | }
60 |
61 | @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {
62 | super.onActivityResult(requestCode, resultCode, data);
63 | mFacebook.onActivityResult(requestCode, resultCode, data);
64 | //mTwitter.onActivityResult(requestCode, resultCode, data);
65 | mGoogle.onActivityResult(requestCode, resultCode, data);
66 | }
67 |
68 | @Override public void onTwitterError(String errorMessage) {
69 | }
70 |
71 | @Override public void onTwitterSignIn(String authToken, String secret, long userId) {
72 | mDataTextView.setText(
73 | String.format(Locale.US, "User id:%d\n\nAuthToken:%s\n\nAuthSecret:%s", userId, authToken,
74 | secret));
75 | }
76 |
77 | @Override public void onFbSignInFail(String errorMessage) {
78 | mDataTextView.setText(errorMessage);
79 | }
80 |
81 | @Override public void onFbSignInSuccess(String authToken, String userId) {
82 | mDataTextView.setText(
83 | String.format(Locale.US, "User id:%s\n\nAuthToken:%s", userId, authToken));
84 | }
85 |
86 | @Override public void onFBSignOut() {
87 | mDataTextView.setText("Signed out of Facebook");
88 | }
89 |
90 | @Override public void onGoogleAuthSignIn(String authToken, String userId) {
91 | mDataTextView.setText(
92 | String.format(Locale.US, "User id:%s\n\nAuthToken:%s", userId, authToken));
93 | }
94 |
95 | @Override public void onGoogleAuthSignInFailed(String errorMessage) {
96 | mDataTextView.setText(errorMessage);
97 | }
98 |
99 | @Override public void onGoogleAuthSignOut() {
100 | mDataTextView.setText("Signed out of google");
101 | }
102 |
103 | @Override public void onClick(View v) {
104 | switch (v.getId()) {
105 | case R.id.facebook_button:
106 | mFacebook.performSignIn(this);
107 | break;
108 | case R.id.twitter_button:
109 | mTwitter.performSignIn(this);
110 | break;
111 | case R.id.google_button:
112 | mGoogle.performSignIn(this);
113 | break;
114 | case R.id.instagram_button:
115 | mInstagram.performSignIn();
116 | break;
117 | }
118 | }
119 |
120 | @Override public void onInstagramSignInFail(String errorMessage) {
121 | mDataTextView.setText(errorMessage);
122 | }
123 |
124 | @Override public void onInstagramSignInSuccess(String authToken, String userId) {
125 | mDataTextView.setText(
126 | String.format(Locale.US, "User id:%s\n\nAuthToken:%s", userId, authToken));
127 | }
128 | }
129 |
--------------------------------------------------------------------------------
/android/app/src/main/java/maugost/girlies/creditcarddesign/CardSelector.java:
--------------------------------------------------------------------------------
1 | package maugost.girlies.creditcarddesign;
2 | import maugost.girlies.R;
3 |
4 | /**
5 | * Created by Harish on 01/01/16.
6 | */
7 | public class CardSelector {
8 |
9 | public static final CardSelector VISA = new CardSelector(R.drawable.card_color_round_rect_purple, R.drawable.chip, R.drawable.chip_inner, android.R.color.transparent, R.drawable.ic_billing_visa_logo, CardSelector.CVV_LENGHT_DEFAULT);
10 | public static final CardSelector MASTER = new CardSelector(R.drawable.card_color_round_rect_pink, R.drawable.chip_yellow, R.drawable.chip_yellow_inner, android.R.color.transparent, R.drawable.ic_billing_mastercard_logo, CardSelector.CVV_LENGHT_DEFAULT);
11 | public static final CardSelector AMEX = new CardSelector(R.drawable.card_color_round_rect_green, android.R.color.transparent, android.R.color.transparent, R.drawable.img_amex_center_face, R.drawable.ic_billing_amex_logo1, CardSelector.CVV_LENGHT_AMEX);
12 | public static final CardSelector DISCOVER = new CardSelector(R.drawable.card_color_round_rect_brown, android.R.color.transparent, android.R.color.transparent, android.R.color.transparent, R.drawable.ic_billing_discover_logo, CardSelector.CVV_LENGHT_DEFAULT);
13 | public static final CardSelector DEFAULT = new CardSelector(R.drawable.card_color_round_rect_default, R.drawable.chip, R.drawable.chip_inner, android.R.color.transparent, android.R.color.transparent, CardSelector.CVV_LENGHT_DEFAULT);
14 |
15 | public static final int CVV_LENGHT_DEFAULT = 3;
16 | public static final int CVV_LENGHT_AMEX = 4;
17 |
18 |
19 | private int mResCardId;
20 | private int mResChipOuterId;
21 | private int mResChipInnerId;
22 | private int mResCenterImageId;
23 | private int mResLogoId;
24 | private int mCvvLength = CVV_LENGHT_DEFAULT;
25 |
26 | public CardSelector(int mDrawableCard, int mDrawableChipOuter, int mDrawableChipInner, int mDrawableCenterImage, int logoId, int cvvLength) {
27 | this.mResCardId = mDrawableCard;
28 | this.mResChipOuterId = mDrawableChipOuter;
29 | this.mResChipInnerId = mDrawableChipInner;
30 | this.mResCenterImageId = mDrawableCenterImage;
31 | this.mResLogoId = logoId;
32 | this.mCvvLength = cvvLength;
33 | }
34 |
35 | public int getResCardId() {
36 | return mResCardId;
37 | }
38 |
39 | public void setResCardId(int mResCardId) {
40 | this.mResCardId = mResCardId;
41 | }
42 |
43 | public int getResChipOuterId() {
44 | return mResChipOuterId;
45 | }
46 |
47 | public void setResChipOuterId(int mResChipOuterId) {
48 | this.mResChipOuterId = mResChipOuterId;
49 | }
50 |
51 | public int getResChipInnerId() {
52 | return mResChipInnerId;
53 | }
54 |
55 | public void setResChipInnerId(int mResChipInnerId) {
56 | this.mResChipInnerId = mResChipInnerId;
57 | }
58 |
59 | public int getResCenterImageId() {
60 | return mResCenterImageId;
61 | }
62 |
63 | public void setResCenterImageId(int mResCenterImageId) {
64 | this.mResCenterImageId = mResCenterImageId;
65 | }
66 |
67 | public int getResLogoId() {
68 | return mResLogoId;
69 | }
70 |
71 | public void setResLogoId(int mResLogoId) {
72 | this.mResLogoId = mResLogoId;
73 | }
74 |
75 | public int getCvvLength() {
76 | return mCvvLength;
77 | }
78 |
79 | public void setCvvLength(int mCvvLength) {
80 | this.mCvvLength = mCvvLength;
81 | }
82 |
83 | public static CardSelector selectCardType(CreditCardUtils.CardType cardType) {
84 | switch(cardType) {
85 | case AMEX_CARD:
86 | return AMEX;
87 | case DISCOVER_CARD:
88 | return DISCOVER;
89 | case MASTER_CARD:
90 | return MASTER;
91 | case VISA_CARD:
92 | return VISA;
93 | default:
94 | return DEFAULT;
95 | }
96 | }
97 |
98 | public static CardSelector selectCard(String cardNumber) {
99 | if (cardNumber != null && cardNumber.length() >= 1) {
100 | CreditCardUtils.CardType cardType = CreditCardUtils.selectCardType(cardNumber);
101 | CardSelector selector = selectCardType(cardType);
102 |
103 | if ((selector != DEFAULT) && (cardNumber.length() >= 3)) {
104 | int[] drawables = {R.drawable.card_color_round_rect_brown, R.drawable.card_color_round_rect_green, R.drawable.card_color_round_rect_pink, R.drawable.card_color_round_rect_purple, R.drawable.card_color_round_rect_blue};
105 | int hash = cardNumber.substring(0, 3).hashCode();
106 |
107 | if (hash < 0) {
108 | hash = hash * -1;
109 | }
110 |
111 | int index = hash % drawables.length;
112 |
113 | int chipIndex = hash % 3;
114 | int[] chipOuter = {R.drawable.chip, R.drawable.chip_yellow, android.R.color.transparent};
115 | int[] chipInner = {R.drawable.chip_inner, R.drawable.chip_yellow_inner, android.R.color.transparent};
116 |
117 | selector.setResCardId(drawables[index]);
118 | selector.setResChipOuterId(chipOuter[chipIndex]);
119 | selector.setResChipInnerId(chipInner[chipIndex]);
120 |
121 | return selector;
122 | }
123 | }
124 |
125 | return DEFAULT;
126 | }
127 | }
128 |
--------------------------------------------------------------------------------
/android/app/src/main/java/maugost/girlies/creditcarddesign/CreditCardUtils.java:
--------------------------------------------------------------------------------
1 | package maugost.girlies.creditcarddesign;
2 |
3 | import android.support.annotation.NonNull;
4 |
5 | import java.util.Calendar;
6 | import java.util.regex.Pattern;
7 |
8 | /**
9 | * Created by Harish on 03/01/16.
10 | */
11 | public class CreditCardUtils {
12 | public enum CardType {
13 | UNKNOWN_CARD, AMEX_CARD, MASTER_CARD, VISA_CARD, DISCOVER_CARD
14 | }
15 |
16 | private static final String PATTERN_AMEX = "^3(4|7)[0-9 ]*";
17 | private static final String PATTERN_VISA = "^4[0-9 ]*";
18 | private static final String PATTERN_MASTER = "^5[0-9 ]*";
19 | private static final String PATTERN_DISCOVER = "^6[0-9 ]*";
20 |
21 | public static final int MAX_LENGTH_CARD_NUMBER = 16;
22 | public static final int MAX_LENGTH_CARD_NUMBER_AMEX = 15;
23 |
24 | public static final String CARD_NUMBER_FORMAT = "XXXX XXXX XXXX XXXX";
25 | public static final String CARD_NUMBER_FORMAT_AMEX = "XXXX XXXXXX XXXXX";
26 |
27 | public static final String PAYSTACK_API = "paystackAPI";
28 | public static final String BACKEND_URL = "backendURL";
29 | public static final String TRANSACTION_ID = "transactionID";
30 | public static final String EMAIL = "email";
31 | public static final String PAYMENT_FOR = "payment_for";
32 | public static final String POSITION = "position";
33 | public static final String AMOUNT = "amount";
34 | public static final String CURRENCY = "currency";
35 | public static final String EXTRA_CARD_NUMBER = "card_number";
36 | public static final String EXTRA_CARD_CVV = "card_cvv";
37 | public static final String EXTRA_CARD_EXPIRY = "card_expiry";
38 | public static final String EXTRA_CARD_HOLDER_NAME = "card_holder_name";
39 | public static final String EXTRA_CARD_SHOW_CARD_SIDE = "card_side";
40 | public static final String EXTRA_VALIDATE_EXPIRY_DATE = "expiry_date";
41 | public static final String EXTRA_ENTRY_START_PAGE = "start_page";
42 |
43 | public static final int CARD_SIDE_FRONT = 1,CARD_SIDE_BACK=0;
44 |
45 | public static final int CARD_NUMBER_PAGE = 0, CARD_EXPIRY_PAGE = 1;
46 | public static final int CARD_CVV_PAGE = 3, CARD_NAME_PAGE = 2;
47 |
48 | public static final String SPACE_SEPERATOR = " ";
49 | public static final String SLASH_SEPERATOR = "/";
50 | public static final char CHAR_X = 'X';
51 |
52 | public static String handleCardNumber(String inputCardNumber) {
53 |
54 | return handleCardNumber(inputCardNumber,SPACE_SEPERATOR);
55 | }
56 |
57 | public static CardType selectCardType(String cardNumber) {
58 | Pattern pCardType = Pattern.compile(PATTERN_VISA);
59 | if(pCardType.matcher(cardNumber).matches())
60 | return CardType.VISA_CARD;
61 | pCardType = Pattern.compile(PATTERN_MASTER);
62 | if(pCardType.matcher(cardNumber).matches())
63 | return CardType.MASTER_CARD;
64 | pCardType = Pattern.compile(PATTERN_AMEX);
65 | if(pCardType.matcher(cardNumber).matches())
66 | return CardType.AMEX_CARD;
67 | pCardType = Pattern.compile(PATTERN_DISCOVER);
68 | if(pCardType.matcher(cardNumber).matches())
69 | return CardType.DISCOVER_CARD;
70 | return CardType.UNKNOWN_CARD;
71 | }
72 |
73 | public static int selectCardLength(CardType cardType) {
74 | return cardType == CardType.AMEX_CARD ? MAX_LENGTH_CARD_NUMBER_AMEX : MAX_LENGTH_CARD_NUMBER;
75 | }
76 |
77 | public static String handleCardNumber(String inputCardNumber, String seperator) {
78 | String unformattedText = inputCardNumber.replace(seperator, "");
79 | CardType cardType = selectCardType(inputCardNumber);
80 | String format = (cardType == CardType.AMEX_CARD) ? CARD_NUMBER_FORMAT_AMEX : CARD_NUMBER_FORMAT;
81 | StringBuilder sbFormattedNumber = new StringBuilder();
82 | for(int iIdx = 0, jIdx = 0; (iIdx < format.length()) && (unformattedText.length() > jIdx); iIdx++) {
83 | if(format.charAt(iIdx) == CHAR_X)
84 | sbFormattedNumber.append(unformattedText.charAt(jIdx++));
85 | else
86 | sbFormattedNumber.append(format.charAt(iIdx));
87 | }
88 |
89 | return sbFormattedNumber.toString();
90 | }
91 |
92 | public static String formatCardNumber(String inputCardNumber, String seperator) {
93 | String unformattedText = inputCardNumber.replace(seperator, "");
94 | CardType cardType = selectCardType(inputCardNumber);
95 | String format = (cardType == CardType.AMEX_CARD) ? CARD_NUMBER_FORMAT_AMEX : CARD_NUMBER_FORMAT;
96 | StringBuilder sbFormattedNumber = new StringBuilder();
97 | for(int iIdx = 0, jIdx = 0; iIdx < format.length(); iIdx++) {
98 | if((format.charAt(iIdx) == CHAR_X) && (unformattedText.length() > jIdx))
99 | sbFormattedNumber.append(unformattedText.charAt(jIdx++));
100 | else
101 | sbFormattedNumber.append(format.charAt(iIdx));
102 | }
103 |
104 | return sbFormattedNumber.toString().replace(SPACE_SEPERATOR, SPACE_SEPERATOR + SPACE_SEPERATOR);
105 | }
106 |
107 | public static String handleExpiration(String month, String year) {
108 |
109 | return handleExpiration(month+year);
110 | }
111 |
112 |
113 | public static String handleExpiration(@NonNull String dateYear) {
114 |
115 | String expiryString = dateYear.replace(SLASH_SEPERATOR, "");
116 |
117 | String text;
118 | if(expiryString.length() >= 2) {
119 | String mm = expiryString.substring(0, 2);
120 | String yy;
121 | text = mm;
122 |
123 | try {
124 | if (Integer.parseInt(mm) > 12) {
125 | mm = "12"; // Cannot be more than 12.
126 | }
127 | }
128 | catch (Exception e) {
129 | mm = "01";
130 | }
131 |
132 | if(expiryString.length() >=4) {
133 | yy = expiryString.substring(2,4);
134 |
135 | try{
136 | Integer.parseInt(yy);
137 | }catch (Exception e) {
138 |
139 | Calendar calendar = Calendar.getInstance();
140 | int year = calendar.get(Calendar.YEAR);
141 | yy = String.valueOf(year).substring(2);
142 | }
143 |
144 | text = mm + SLASH_SEPERATOR + yy;
145 |
146 | }
147 | else if(expiryString.length() > 2){
148 | yy = expiryString.substring(2);
149 | text = mm + SLASH_SEPERATOR + yy;
150 | }
151 | }
152 | else {
153 | text = expiryString;
154 | }
155 |
156 | return text;
157 | }
158 | }
159 |
--------------------------------------------------------------------------------
/android/app/src/main/java/maugost/girlies/creditcarddesign/FlipAnimator.java:
--------------------------------------------------------------------------------
1 | package maugost.girlies.creditcarddesign;
2 |
3 | import android.graphics.Camera;
4 | import android.graphics.Matrix;
5 | import android.view.View;
6 | import android.view.animation.AccelerateDecelerateInterpolator;
7 | import android.view.animation.Animation;
8 | import android.view.animation.Transformation;
9 |
10 | public class FlipAnimator extends Animation {
11 |
12 | public static final int DIRECTION_X = 1, DIRECTION_Y = 2, DIRECTION_Z = 3;
13 | private Camera camera;
14 |
15 | private View fromView;
16 |
17 | private View toView;
18 |
19 | private final float centerX;
20 |
21 | private final float centerY;
22 |
23 | private boolean forward = true;
24 |
25 | private boolean visibilitySwapped;
26 |
27 | private int rotationDirection = DIRECTION_X;
28 |
29 | private int translateDirection = DIRECTION_Z;
30 |
31 | /**
32 | * Creates a 3D flip animation between two views. If forward is true, its
33 | * assumed that view1 is "visible" and view2 is "gone" before the animation
34 | * starts. At the end of the animation, view1 will be "gone" and view2 will
35 | * be "visible". If forward is false, the reverse is assumed.
36 | *
37 | * @param fromView First view in the transition.
38 | * @param toView Second view in the transition.
39 | * @param centerX The center of the views in the x-axis.
40 | * @param centerY The center of the views in the y-axis.
41 | */
42 | public FlipAnimator(View fromView, View toView, int centerX, int centerY) {
43 | this.fromView = fromView;
44 | this.toView = toView;
45 | this.centerX = centerX;
46 | this.centerY = centerY;
47 |
48 | setDuration(500);
49 | setFillAfter(true);
50 | setInterpolator(new AccelerateDecelerateInterpolator());
51 | }
52 |
53 | public int getRotationDirection() {
54 | return rotationDirection;
55 | }
56 |
57 | public void setRotationDirection(int rotationDirection) {
58 | this.rotationDirection = rotationDirection;
59 | }
60 |
61 | public int getTranslateDirection() {
62 | return translateDirection;
63 | }
64 |
65 | public void setTranslateDirection(int translateDirection) {
66 | this.translateDirection = translateDirection;
67 | }
68 |
69 | public void reverse() {
70 | forward = false;
71 | View temp = toView;
72 | toView = fromView;
73 | fromView = temp;
74 | }
75 |
76 | @Override
77 | public void initialize(int width, int height, int parentWidth, int parentHeight) {
78 | super.initialize(width, height, parentWidth, parentHeight);
79 | camera = new Camera();
80 | }
81 |
82 | @Override
83 | protected void applyTransformation(float interpolatedTime, Transformation t) {
84 | // Angle around the y-axis of the rotation at the given time. It is
85 | // calculated both in radians and in the equivalent degrees.
86 | final double radians = Math.PI * interpolatedTime;
87 | float degrees = (float) (180.0 * radians / Math.PI);
88 |
89 | // Once we reach the midpoint in the animation, we need to hide the
90 | // source view and show the destination view. We also need to change
91 | // the angle by 180 degrees so that the destination does not come in
92 | // flipped around. This is the main problem with SDK sample, it does not
93 | // do this.
94 | if (interpolatedTime >= 0.5f) {
95 | degrees -= 180.f;
96 |
97 | if (!visibilitySwapped) {
98 | fromView.setVisibility(View.GONE);
99 | toView.setVisibility(View.VISIBLE);
100 |
101 | visibilitySwapped = true;
102 | }
103 | }
104 |
105 | if (forward)
106 | degrees = -degrees;
107 |
108 | final Matrix matrix = t.getMatrix();
109 |
110 | camera.save();
111 |
112 | if(translateDirection == DIRECTION_Z) {
113 | camera.translate(0.0f, 0.0f, (float) (150.0 * Math.sin(radians)));
114 | }
115 | else if(translateDirection == DIRECTION_Y) {
116 | camera.translate(0.0f, (float) (150.0 * Math.sin(radians)), 0.0f);
117 | }
118 | else {
119 | camera.translate( (float) (150.0 * Math.sin(radians)), 0.0f, 0.0f);
120 | }
121 |
122 | if(rotationDirection == DIRECTION_Z) {
123 | camera.rotateZ(degrees);
124 | }
125 | else if(rotationDirection == DIRECTION_Y) {
126 | camera.rotateY(degrees);
127 | }
128 | else {
129 | camera.rotateX(degrees);
130 | }
131 |
132 | camera.getMatrix(matrix);
133 | camera.restore();
134 |
135 | matrix.preTranslate(-centerX, -centerY);
136 | matrix.postTranslate(centerX, centerY);
137 | }
138 | }
--------------------------------------------------------------------------------
/android/app/src/main/java/maugost/girlies/creditcarddesign/pager/CardCVVFragment.java:
--------------------------------------------------------------------------------
1 | package maugost.girlies.creditcarddesign.pager;
2 | import maugost.girlies.R;
3 |
4 | import android.os.Bundle;
5 | import android.support.annotation.Nullable;
6 | import android.text.Editable;
7 | import android.text.InputFilter;
8 | import android.view.LayoutInflater;
9 | import android.view.View;
10 | import android.view.ViewGroup;
11 | import android.widget.EditText;
12 |
13 | import maugost.girlies.creditcarddesign.CardEditActivity;
14 | import maugost.girlies.creditcarddesign.CardSelector;
15 |
16 | import static maugost.girlies.creditcarddesign.CreditCardUtils.EXTRA_CARD_CVV;
17 |
18 |
19 | /**
20 | * Created by sharish on 9/1/15.
21 | */
22 | public class CardCVVFragment extends CreditCardFragment {
23 |
24 |
25 | private int mMaxCVV = CardSelector.CVV_LENGHT_DEFAULT;
26 |
27 | CardEditActivity cardEditActivity;
28 |
29 | @Override
30 | public void onCreate(@Nullable Bundle savedInstanceState) {
31 | super.onCreate(savedInstanceState);
32 | cardEditActivity = (CardEditActivity)getActivity();
33 | }
34 |
35 |
36 | public CardCVVFragment() {
37 | }
38 |
39 | public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle state) {
40 | View v = inflater.inflate(R.layout.lyt_card_cvv, group, false);
41 | cardEditActivity.mCardCVVView = (EditText) v.findViewById(R.id.card_cvv);
42 |
43 | String cvv = null;
44 | if (getArguments() != null && getArguments().containsKey(EXTRA_CARD_CVV)) {
45 | cvv = getArguments().getString(EXTRA_CARD_CVV);
46 | }
47 |
48 | if (cvv == null) {
49 | cvv = "";
50 | }
51 |
52 | cardEditActivity.mCardCVVView.setText(cvv);
53 | cardEditActivity.mCardCVVView.addTextChangedListener(this);
54 |
55 | return v;
56 | }
57 |
58 | @Override
59 | public void afterTextChanged(Editable s) {
60 | onEdit(s.toString());
61 | if (s.length() == mMaxCVV) {
62 | cardEditActivity.setKeyboardVisibility(false);
63 | cardEditActivity.proceed_but.setVisibility(View.VISIBLE);
64 | //onComplete();
65 | }else{
66 | cardEditActivity.proceed_but.setVisibility(View.GONE);
67 | }
68 | }
69 |
70 | @Override
71 | public void focus() {
72 | if (isAdded()) {
73 | cardEditActivity.mCardCVVView.selectAll();
74 | }
75 | }
76 |
77 | public void setMaxCVV(int maxCVVLength) {
78 | if (cardEditActivity.mCardCVVView != null && (cardEditActivity.mCardCVVView.getText().toString().length() > maxCVVLength)) {
79 | cardEditActivity.mCardCVVView.setText(cardEditActivity.mCardCVVView.getText().toString().substring(0, maxCVVLength));
80 | }
81 |
82 | InputFilter[] FilterArray = new InputFilter[1];
83 | FilterArray[0] = new InputFilter.LengthFilter(maxCVVLength);
84 | cardEditActivity.mCardCVVView.setFilters(FilterArray);
85 | mMaxCVV = maxCVVLength;
86 | String hintCVV = "";
87 | for (int i = 0; i < maxCVVLength; i++) {
88 | hintCVV += "X";
89 | }
90 | cardEditActivity.mCardCVVView.setHint(hintCVV);
91 | }
92 | }
93 |
--------------------------------------------------------------------------------
/android/app/src/main/java/maugost/girlies/creditcarddesign/pager/CardExpiryFragment.java:
--------------------------------------------------------------------------------
1 | package maugost.girlies.creditcarddesign.pager;
2 | import maugost.girlies.R;
3 | import android.os.Bundle;
4 | import android.support.annotation.Nullable;
5 | import android.text.Editable;
6 | import android.view.LayoutInflater;
7 | import android.view.View;
8 | import android.view.ViewGroup;
9 | import android.widget.EditText;
10 |
11 | import maugost.girlies.creditcarddesign.CardEditActivity;
12 | import maugost.girlies.creditcarddesign.CreditCardUtils;
13 |
14 | import java.util.Calendar;
15 |
16 | import static maugost.girlies.creditcarddesign.CreditCardUtils.*;
17 |
18 |
19 | /**
20 | * Created by sharish on 9/1/15.
21 | */
22 | public class CardExpiryFragment extends CreditCardFragment {
23 |
24 |
25 |
26 | private boolean mValidateCard = true;
27 |
28 | CardEditActivity cardEditActivity;
29 |
30 | @Override
31 | public void onCreate(@Nullable Bundle savedInstanceState) {
32 | super.onCreate(savedInstanceState);
33 | cardEditActivity = (CardEditActivity)getActivity();
34 | }
35 |
36 |
37 | public CardExpiryFragment() {
38 |
39 | }
40 |
41 | public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle state) {
42 |
43 | View v = inflater.inflate(R.layout.lyt_card_expiry, group, false);
44 | cardEditActivity.cardExpiryView = (EditText) v.findViewById(R.id.card_expiry);
45 |
46 | String expiry = "";
47 |
48 | Bundle args = getArguments();
49 |
50 | if(args != null) {
51 |
52 | if(args.containsKey(EXTRA_CARD_EXPIRY)) {
53 | expiry = getArguments().getString(EXTRA_CARD_EXPIRY);
54 | }
55 |
56 | mValidateCard = args.getBoolean(EXTRA_VALIDATE_EXPIRY_DATE, true);
57 | }
58 |
59 | if(expiry == null) {
60 | expiry = "";
61 | }
62 |
63 | cardEditActivity.cardExpiryView.setText(expiry);
64 |
65 | cardEditActivity.cardExpiryView.addTextChangedListener(this);
66 |
67 | return v;
68 | }
69 |
70 | @Override
71 | public void afterTextChanged(Editable s) {
72 |
73 | String text = s.toString().replace(CreditCardUtils.SLASH_SEPERATOR, "");
74 |
75 | String month, year="";
76 | if(text.length() >= 2) {
77 | month = text.substring(0, 2);
78 |
79 | if(text.length() > 2) {
80 | year = text.substring(2);
81 | }
82 |
83 | if(mValidateCard) {
84 | int mm = Integer.parseInt(month);
85 |
86 | if (mm <= 0 || mm >= 13) {
87 | cardEditActivity.cardExpiryView.setError(getString(R.string.error_invalid_month));
88 | return;
89 | }
90 |
91 | if (text.length() >= 4) {
92 |
93 | int yy = Integer.parseInt(year);
94 |
95 | final Calendar calendar = Calendar.getInstance();
96 | int currentYear = calendar.get(Calendar.YEAR);
97 | int currentMonth = calendar.get(Calendar.MONTH) + 1;
98 |
99 | int millenium = (currentYear / 1000) * 1000;
100 |
101 |
102 | if (yy + millenium < currentYear) {
103 | cardEditActivity.cardExpiryView.setError(getString(R.string.error_card_expired));
104 | return;
105 | } else if (yy + millenium == currentYear && mm < currentMonth) {
106 | cardEditActivity.cardExpiryView.setError(getString(R.string.error_card_expired));
107 | return;
108 | }
109 | }
110 | }
111 |
112 | }
113 | else {
114 | month = text;
115 | }
116 |
117 | int previousLength = cardEditActivity.cardExpiryView.getText().length();
118 | int cursorPosition = cardEditActivity.cardExpiryView.getSelectionEnd();
119 |
120 | text = CreditCardUtils.handleExpiration(month,year);
121 |
122 | cardEditActivity.cardExpiryView.removeTextChangedListener(this);
123 | cardEditActivity.cardExpiryView.setText(text);
124 | cardEditActivity.cardExpiryView.setSelection(text.length());
125 | cardEditActivity.cardExpiryView.addTextChangedListener(this);
126 |
127 | int modifiedLength = text.length();
128 |
129 | if(modifiedLength <= previousLength && cursorPosition < modifiedLength) {
130 | cardEditActivity.cardExpiryView.setSelection(cursorPosition);
131 | }
132 |
133 | onEdit(text);
134 |
135 | if(text.length() == 5) {
136 | onComplete();
137 | }
138 |
139 | }
140 |
141 |
142 | @Override
143 | public void focus() {
144 |
145 | if(isAdded()) {
146 | cardEditActivity.cardExpiryView.selectAll();
147 | }
148 | }
149 |
150 |
151 | public void onSaveInstanceState(Bundle outState) {
152 |
153 | outState.putBoolean(EXTRA_VALIDATE_EXPIRY_DATE, mValidateCard);
154 | super.onSaveInstanceState(outState);
155 | }
156 |
157 | public void onActivityCreated(Bundle instate) {
158 |
159 | if(instate != null) {
160 | mValidateCard = instate.getBoolean(EXTRA_VALIDATE_EXPIRY_DATE, mValidateCard);
161 | }
162 |
163 | super.onActivityCreated(instate);
164 | }
165 | }
166 |
--------------------------------------------------------------------------------
/android/app/src/main/java/maugost/girlies/creditcarddesign/pager/CardFragmentAdapter.java:
--------------------------------------------------------------------------------
1 | package maugost.girlies.creditcarddesign.pager;
2 | import android.os.Bundle;
3 | import android.os.Parcelable;
4 | import android.support.v4.app.Fragment;
5 | import android.support.v4.app.FragmentManager;
6 | import android.support.v4.app.FragmentStatePagerAdapter;
7 |
8 | /**
9 | * Created by sharish on 9/1/15.
10 | */
11 | public class CardFragmentAdapter extends FragmentStatePagerAdapter implements IActionListener {
12 |
13 | public void focus(int position) {
14 | ((IFocus) getItem(position)).focus();
15 | }
16 |
17 | public interface ICardEntryCompleteListener {
18 | void onCardEntryComplete(int currentIndex);
19 |
20 | void onCardEntryEdit(int currentIndex, String entryValue);
21 | }
22 |
23 | private final CardNumberFragment mCardNumberFragment;
24 | private final CardExpiryFragment mCardExpiryFragment;
25 | private final CardCVVFragment mCardCVVFragment;
26 | private final CardNameFragment mCardNameFragment;
27 |
28 | private ICardEntryCompleteListener mCardEntryCompleteListener;
29 |
30 | public CardFragmentAdapter(FragmentManager fm, Bundle args) {
31 | super(fm);
32 |
33 | mCardCVVFragment = new CardCVVFragment();
34 | mCardCVVFragment.setArguments(args);
35 |
36 | mCardNameFragment = new CardNameFragment();
37 | mCardNameFragment.setArguments(args);
38 |
39 | mCardNumberFragment = new CardNumberFragment();
40 | mCardNumberFragment.setArguments(args);
41 |
42 | mCardExpiryFragment = new CardExpiryFragment();
43 | mCardExpiryFragment.setArguments(args);
44 |
45 | mCardNameFragment.setActionListener(this);
46 | mCardNumberFragment.setActionListener(this);
47 | mCardExpiryFragment.setActionListener(this);
48 | mCardCVVFragment.setActionListener(this);
49 | }
50 |
51 | public void setOnCardEntryCompleteListener(ICardEntryCompleteListener listener) {
52 | this.mCardEntryCompleteListener = listener;
53 | }
54 |
55 | @Override
56 | public Fragment getItem(int position) {
57 | return new Fragment[]{mCardNumberFragment, mCardExpiryFragment, mCardNameFragment,mCardCVVFragment}[position];
58 | }
59 |
60 | @Override
61 | public int getCount() {
62 | return 4;
63 | }
64 |
65 |
66 | @Override
67 | public void onActionComplete(CreditCardFragment fragment) {
68 | int index = getIndex(fragment);
69 | if (index >= 0 && mCardEntryCompleteListener != null) {
70 | mCardEntryCompleteListener.onCardEntryComplete(index);
71 | }
72 | }
73 |
74 | public int getIndex(CreditCardFragment fragment) {
75 | int index = -1;
76 | if (fragment == mCardNumberFragment) {
77 | index = 0;
78 | } else if (fragment == mCardExpiryFragment) {
79 | index = 1;
80 | } else if (fragment ==mCardNameFragment) {
81 | index = 2;
82 | } else if (fragment == mCardCVVFragment) {
83 | index = 3;
84 | }
85 |
86 | return index;
87 | }
88 |
89 | public void setMaxCVV(int maxCVV) {
90 | if (mCardCVVFragment != null) {
91 | mCardCVVFragment.setMaxCVV(maxCVV);
92 | }
93 | }
94 |
95 | @Override
96 | public void onEdit(CreditCardFragment fragment, String edit) {
97 | int index = getIndex(fragment);
98 |
99 | if (index >= 0 && mCardEntryCompleteListener != null) {
100 | mCardEntryCompleteListener.onCardEntryEdit(index, edit);
101 | }
102 | }
103 |
104 | @Override
105 | public void restoreState(Parcelable parcelable, ClassLoader classLoader) {
106 | //do nothing here! no call to super.restoreState(parcelable, classLoader);
107 | }
108 | }
109 |
--------------------------------------------------------------------------------
/android/app/src/main/java/maugost/girlies/creditcarddesign/pager/CardNameFragment.java:
--------------------------------------------------------------------------------
1 | package maugost.girlies.creditcarddesign.pager;
2 | import maugost.girlies.R;
3 |
4 | import android.os.Bundle;
5 | import android.support.annotation.Nullable;
6 | import android.text.Editable;
7 | import android.view.LayoutInflater;
8 | import android.view.View;
9 | import android.view.ViewGroup;
10 | import android.widget.EditText;
11 |
12 | import maugost.girlies.creditcarddesign.CardEditActivity;
13 |
14 | import static maugost.girlies.creditcarddesign.CreditCardUtils.EXTRA_CARD_HOLDER_NAME;
15 |
16 | /**
17 | * Created by sharish on 9/1/15.
18 | */
19 | public class CardNameFragment extends CreditCardFragment {
20 |
21 |
22 | CardEditActivity cardEditActivity;
23 |
24 | @Override
25 | public void onCreate(@Nullable Bundle savedInstanceState) {
26 | super.onCreate(savedInstanceState);
27 | cardEditActivity = (CardEditActivity)getActivity();
28 | }
29 |
30 |
31 | public CardNameFragment() {
32 |
33 | }
34 |
35 | public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle state) {
36 |
37 | View v = inflater.inflate(R.layout.lyt_card_holder_name, group,false);
38 | cardEditActivity.mCardNameView = (EditText) v.findViewById(R.id.card_name);
39 |
40 | String name = "";
41 | if(getArguments() != null && getArguments().containsKey(EXTRA_CARD_HOLDER_NAME)) {
42 | name = getArguments().getString(EXTRA_CARD_HOLDER_NAME);
43 | }
44 |
45 |
46 | if(name == null) {
47 | name = "";
48 | }
49 |
50 | cardEditActivity.mCardNameView.setText(name);
51 | cardEditActivity.mCardNameView.addTextChangedListener(this);
52 |
53 | return v;
54 | }
55 |
56 | @Override
57 | public void afterTextChanged(Editable s) {
58 |
59 | onEdit(s.toString());
60 | if(s.length() == getResources().getInteger(R.integer.card_name_len)) {
61 | onComplete();
62 | }
63 | }
64 |
65 | @Override
66 | public void focus() {
67 |
68 | if(isAdded()) {
69 | cardEditActivity.mCardNameView.selectAll();
70 | }
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/android/app/src/main/java/maugost/girlies/creditcarddesign/pager/CardNumberFragment.java:
--------------------------------------------------------------------------------
1 | package maugost.girlies.creditcarddesign.pager;
2 |
3 | import android.os.Bundle;
4 | import android.support.annotation.Nullable;
5 | import android.text.Editable;
6 | import android.view.LayoutInflater;
7 | import android.view.View;
8 | import android.view.ViewGroup;
9 | import android.widget.EditText;
10 |
11 | import maugost.girlies.R;
12 | import maugost.girlies.creditcarddesign.CardEditActivity;
13 | import maugost.girlies.creditcarddesign.CreditCardUtils;
14 |
15 | import static maugost.girlies.creditcarddesign.CreditCardUtils.*;
16 |
17 | /**
18 | * Created by sharish on 9/1/15.
19 | */
20 | public class CardNumberFragment extends CreditCardFragment {
21 |
22 | CardEditActivity cardEditActivity;
23 |
24 | @Override
25 | public void onCreate(@Nullable Bundle savedInstanceState) {
26 | super.onCreate(savedInstanceState);
27 | cardEditActivity = (CardEditActivity)getActivity();
28 | }
29 |
30 | public CardNumberFragment() {
31 | }
32 |
33 | public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle state) {
34 | View v = inflater.inflate(R.layout.lyt_card_number, group, false);
35 | cardEditActivity.mCardNumberView = (EditText) v.findViewById(R.id.card_number_field);
36 |
37 | String number = "";
38 |
39 | if (getArguments() != null && getArguments().containsKey(EXTRA_CARD_NUMBER)) {
40 | number = getArguments().getString(EXTRA_CARD_NUMBER);
41 | }
42 |
43 | if (number == null) {
44 | number = "";
45 | }
46 |
47 | cardEditActivity.mCardNumberView.setText(number);
48 | cardEditActivity.mCardNumberView.addTextChangedListener(this);
49 |
50 | return v;
51 | }
52 |
53 |
54 | @Override
55 | public void afterTextChanged(Editable s) {
56 | int cursorPosition = cardEditActivity.mCardNumberView.getSelectionEnd();
57 | int previousLength = cardEditActivity.mCardNumberView.getText().length();
58 |
59 | String cardNumber = CreditCardUtils.handleCardNumber(s.toString());
60 | int modifiedLength = cardNumber.length();
61 |
62 | cardEditActivity.mCardNumberView.removeTextChangedListener(this);
63 | cardEditActivity.mCardNumberView.setText(cardNumber);
64 | String rawCardNumber = cardNumber.replace(CreditCardUtils.SPACE_SEPERATOR, "");
65 | CreditCardUtils.CardType cardType = CreditCardUtils.selectCardType(rawCardNumber);
66 | int maxLengthWithSpaces = ((cardType == CreditCardUtils.CardType.AMEX_CARD) ? CARD_NUMBER_FORMAT_AMEX : CARD_NUMBER_FORMAT).length();
67 | cardEditActivity.mCardNumberView.setSelection(cardNumber.length() > maxLengthWithSpaces ? maxLengthWithSpaces : cardNumber.length());
68 | cardEditActivity.mCardNumberView.addTextChangedListener(this);
69 |
70 | if (modifiedLength <= previousLength && cursorPosition < modifiedLength) {
71 | cardEditActivity.mCardNumberView.setSelection(cursorPosition);
72 | }
73 |
74 | onEdit(cardNumber);
75 |
76 | if (rawCardNumber.length() == CreditCardUtils.selectCardLength(cardType)) {
77 | onComplete();
78 | }
79 | }
80 |
81 | @Override
82 | public void focus() {
83 | if (isAdded()) {
84 | cardEditActivity.mCardNumberView.selectAll();
85 | }
86 | }
87 | }
88 |
--------------------------------------------------------------------------------
/android/app/src/main/java/maugost/girlies/creditcarddesign/pager/CreditCardFragment.java:
--------------------------------------------------------------------------------
1 | package maugost.girlies.creditcarddesign.pager;
2 |
3 | import android.support.v4.app.Fragment;
4 | import android.text.TextWatcher;
5 |
6 | /**
7 | * Created by sharish on 9/1/15.
8 | */
9 | public abstract class CreditCardFragment extends Fragment implements TextWatcher, IFocus {
10 |
11 | protected IActionListener mActionListener;
12 |
13 | public void setActionListener(IActionListener listener) {
14 | mActionListener = listener;
15 | }
16 |
17 | @Override
18 | public void beforeTextChanged(CharSequence s, int start, int count, int after) {
19 |
20 | }
21 |
22 | @Override
23 | public void onTextChanged(CharSequence s, int start, int before, int count) {
24 |
25 | }
26 |
27 |
28 | public void onEdit(String edit) {
29 |
30 | if(mActionListener != null) {
31 | mActionListener.onEdit(this,edit);
32 | }
33 |
34 | }
35 |
36 | public void onComplete() {
37 |
38 | if(mActionListener != null) {
39 | mActionListener.onActionComplete(this);
40 | }
41 |
42 | }
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/android/app/src/main/java/maugost/girlies/creditcarddesign/pager/IActionListener.java:
--------------------------------------------------------------------------------
1 | package maugost.girlies.creditcarddesign.pager;
2 |
3 | public interface IActionListener {
4 | void onActionComplete(CreditCardFragment fragment);
5 | void onEdit(CreditCardFragment fragment, String edit);
6 |
7 | }
--------------------------------------------------------------------------------
/android/app/src/main/java/maugost/girlies/creditcarddesign/pager/IFocus.java:
--------------------------------------------------------------------------------
1 | package maugost.girlies.creditcarddesign.pager;
2 |
3 | /**
4 | * Created by Harish on 17/01/16.
5 | */
6 | public interface IFocus {
7 | void focus();
8 | }
9 |
--------------------------------------------------------------------------------
/android/app/src/main/java/maugost/girlies/creditcarddesign/views/HeightWrappingViewPager.java:
--------------------------------------------------------------------------------
1 | package maugost.girlies.creditcarddesign.views;
2 |
3 | import android.content.Context;
4 | import android.support.v4.view.ViewPager;
5 | import android.util.AttributeSet;
6 | import android.view.View;
7 |
8 | public class HeightWrappingViewPager extends ViewPager {
9 |
10 | public HeightWrappingViewPager(Context context) {
11 | super(context);
12 | }
13 |
14 | public HeightWrappingViewPager(Context context, AttributeSet attrs) {
15 | super(context, attrs);
16 | }
17 |
18 | @Override
19 | protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
20 | super.onMeasure(widthMeasureSpec, heightMeasureSpec);
21 | View firstChild = getChildAt(0);
22 | firstChild.measure(widthMeasureSpec, heightMeasureSpec);
23 | super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(firstChild.getMeasuredHeight(), MeasureSpec.EXACTLY));
24 | }
25 | }
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-hdpi/gradient_line1.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-hdpi/ic_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/res/drawable-hdpi/ic_back.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-hdpi/ic_checkmark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/res/drawable-hdpi/ic_checkmark.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-hdpi/ic_next.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/res/drawable-hdpi/ic_next.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-hdpi/ic_password.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/res/drawable-hdpi/ic_password.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/card_color_round_rect_blue.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
12 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/card_color_round_rect_brown.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/card_color_round_rect_default.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/card_color_round_rect_green.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/card_color_round_rect_pink.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
12 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/card_color_round_rect_purple.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
11 |
12 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/chip.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/chip_inner.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/chip_yellow.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/chip_yellow_inner.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/circle_blue3.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/circle_white.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/curve_blue09_a.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/curve_blue09_b.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/curve_blue09_button.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
8 |
11 |
15 |
17 |
18 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/curve_blue3.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/discover_back.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
15 |
16 |
20 |
21 |
22 |
28 |
29 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/discover_back_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
11 |
12 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/ic_billing_amex_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/res/drawable/ic_billing_amex_logo.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/ic_billing_amex_logo1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/res/drawable/ic_billing_amex_logo1.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/ic_billing_discover_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/res/drawable/ic_billing_discover_logo.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/ic_billing_mastercard_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/res/drawable/ic_billing_mastercard_logo.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/ic_billing_visa_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/res/drawable/ic_billing_visa_logo.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/img_amex_center_face.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/res/drawable/img_amex_center_face.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | -
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/master_back.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
15 |
16 |
20 |
21 |
22 |
28 |
29 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/mastercard_back_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
11 |
12 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/red_button.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
8 |
11 |
15 |
17 |
18 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/sign_strip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/res/drawable/sign_strip.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/sign_strip_mod.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/visacard_back.xml:
--------------------------------------------------------------------------------
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 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/visacard_back_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
9 |
11 |
12 |
--------------------------------------------------------------------------------
/android/app/src/main/res/layout/activity_fb_login.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
17 |
18 |
24 |
25 |
30 |
31 |
36 |
37 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/android/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
10 |
11 |
18 |
19 |
26 |
27 |
37 |
38 |
48 |
49 |
50 |
55 |
56 |
69 |
70 |
83 |
84 |
92 |
100 |
101 |
102 |
111 |
112 |
121 |
122 |
123 |
124 |
125 |
134 |
135 |
144 |
145 |
155 |
156 |
157 |
158 |
159 |
160 |
--------------------------------------------------------------------------------
/android/app/src/main/res/layout/back_card.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
17 |
18 |
30 |
31 |
40 |
41 |
--------------------------------------------------------------------------------
/android/app/src/main/res/layout/front_card.xml:
--------------------------------------------------------------------------------
1 |
8 |
9 |
15 |
16 |
34 |
35 |
36 |
37 |
54 |
55 |
60 |
61 |
66 |
67 |
77 |
78 |
94 |
95 |
96 |
97 |
98 |
99 |
104 |
105 |
115 |
116 |
132 |
133 |
134 |
135 |
136 |
137 |
--------------------------------------------------------------------------------
/android/app/src/main/res/layout/front_card_outline.xml:
--------------------------------------------------------------------------------
1 |
8 |
9 |
16 |
17 |
23 |
24 |
25 |
36 |
37 |
38 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/android/app/src/main/res/layout/lyt_card_cvv.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
10 |
21 |
22 |
27 |
28 |
29 |
35 |
36 |
37 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/android/app/src/main/res/layout/lyt_card_expiry.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
20 |
21 |
26 |
27 |
28 |
34 |
35 |
36 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/android/app/src/main/res/layout/lyt_card_holder_name.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
20 |
21 |
26 |
27 |
28 |
34 |
35 |
36 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/android/app/src/main/res/layout/lyt_card_number.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
19 |
20 |
25 |
26 |
27 |
33 |
34 |
35 |
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/android/app/src/main/res/layout/view_creditcard.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
15 |
16 |
17 |
18 |
19 |
24 |
25 |
26 |
27 |
28 |
29 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | #3F51B5
5 | #303F9F
6 | #FF4081
7 |
8 | #1fc055
9 | #d4edfa
10 | #e0e4e4
11 | #fbe191
12 | #eed280
13 |
14 | #5515a9
15 | #651dc4
16 |
17 | #ff0000
18 | #e50000
19 | #cc0000
20 | #b20000
21 |
22 | #00000000
23 |
24 | #000000
25 | #fff3f3f3
26 |
27 | #8470ff
28 | #7664e5
29 | #6959cc
30 | #5c4eb2
31 | #4f4399
32 | #42387f
33 | #342c66
34 | #b1342c66
35 | #27214c
36 | #1a1633
37 | #0d0b19
38 | #000000
39 |
40 | #8470ff
41 | #907eff
42 | #928cff
43 | #a89aff
44 | #b5a9ff
45 | #c1b7ff
46 | #cdc5ff
47 | #dad4ff
48 | #06534949
49 | #08534949
50 |
51 | #ffffff
52 |
53 | #108b4c
54 | #1caf57
55 |
56 | #5D8BF2
57 | #3545AE
58 |
59 | #d04c84
60 | #d04882
61 |
62 | #363434
63 | #434141
64 |
65 | #800000
66 | #A52A2A
67 |
68 | @color/orange5
69 |
70 | #991155
71 |
72 | #991155
73 | #991155
74 |
75 |
76 |
77 |
78 |
79 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 16dp
4 | 16dp
5 |
6 | 12dp
7 | 18dp
8 | 16dp
9 | 2dp
10 | 13sp
11 | 19sp
12 | 20sp
13 | 8dp
14 | 16dp
15 | 20dp
16 | 16sp
17 |
18 |
19 | #88FFFFFF
20 | #FBFBFB
21 | #ff9e9e9e
22 | #7F000000
23 | #FFFFFF
24 |
25 | 2dp
26 | 1dp
27 |
28 |
29 | 300dp
30 | 180dp
31 | 54dp
32 | 36dp
33 | 28dp
34 | 16dp
35 | 48dp
36 | 48dp
37 | 75dp
38 | 75dp
39 |
40 |
41 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | Paystack Example
3 | Hello world!
4 | Settings
5 | Card number
6 | CVV
7 | MM
8 | YYYY
9 | Create token
10 | No card yet
11 | No token
12 | Token was null
13 | Unable to get token
14 | 4123450131001381
15 | 883
16 | 01
17 | 2020
18 | No transaction yet
19 | Amount in Kobo
20 |
21 | NEXT
22 | PREVIOUS
23 | DONE
24 | JOHN MATTHEW
25 | CARD HOLDER
26 | EXPIRY
27 | MM/YY
28 | CARD EXPIRY
29 | MM/YY
30 | 0000
31 | NAME ON CARD
32 | Invalid month
33 | Card expired
34 | 25
35 |
36 |
37 | 1760850590627259
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
16 |
17 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/android/app/tmplibs/flutter.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/app/tmplibs/flutter.jar
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | repositories {
3 | google()
4 | jcenter()
5 | mavenCentral()
6 | }
7 |
8 | dependencies {
9 | classpath 'com.android.tools.build:gradle:3.1.2'
10 | //classpath 'com.google.gms:google-services:3.3.1'
11 | classpath 'org.robolectric:robolectric-gradle-plugin:1.1.0'
12 | classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
13 | classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
14 | //classpath 'com.google.gms:google-services:3.3.1'
15 | classpath 'com.android.tools.build:gradle:3.1.2'
16 | classpath 'com.google.gms:google-services:3.2.0'
17 | classpath 'org.robolectric:robolectric-gradle-plugin:1.1.0'
18 | classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
19 | classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
20 |
21 | }
22 | }
23 |
24 | allprojects {
25 | repositories {
26 | google()
27 | jcenter()
28 | mavenCentral()
29 | maven { url 'https://maven.fabric.io/public' }
30 | maven { url "https://jitpack.io" }
31 | maven { url "http://pay.cards/maven" }
32 | }
33 | }
34 |
35 | rootProject.buildDir = '../build'
36 | subprojects {
37 | project.buildDir = "${rootProject.buildDir}/${project.name}"
38 | }
39 | subprojects {
40 | project.evaluationDependsOn(':app')
41 | }
42 |
43 | task clean(type: Delete) {
44 | delete rootProject.buildDir
45 | }
46 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/android/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Wed May 23 10:08:03 WAT 2018
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.4-all.zip
7 |
--------------------------------------------------------------------------------
/android/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | ##############################################################################
4 | ##
5 | ## Gradle start up script for UN*X
6 | ##
7 | ##############################################################################
8 |
9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
10 | DEFAULT_JVM_OPTS=""
11 |
12 | APP_NAME="Gradle"
13 | APP_BASE_NAME=`basename "$0"`
14 |
15 | # Use the maximum available, or set MAX_FD != -1 to use that value.
16 | MAX_FD="maximum"
17 |
18 | warn ( ) {
19 | echo "$*"
20 | }
21 |
22 | die ( ) {
23 | echo
24 | echo "$*"
25 | echo
26 | exit 1
27 | }
28 |
29 | # OS specific support (must be 'true' or 'false').
30 | cygwin=false
31 | msys=false
32 | darwin=false
33 | case "`uname`" in
34 | CYGWIN* )
35 | cygwin=true
36 | ;;
37 | Darwin* )
38 | darwin=true
39 | ;;
40 | MINGW* )
41 | msys=true
42 | ;;
43 | esac
44 |
45 | # Attempt to set APP_HOME
46 | # Resolve links: $0 may be a link
47 | PRG="$0"
48 | # Need this for relative symlinks.
49 | while [ -h "$PRG" ] ; do
50 | ls=`ls -ld "$PRG"`
51 | link=`expr "$ls" : '.*-> \(.*\)$'`
52 | if expr "$link" : '/.*' > /dev/null; then
53 | PRG="$link"
54 | else
55 | PRG=`dirname "$PRG"`"/$link"
56 | fi
57 | done
58 | SAVED="`pwd`"
59 | cd "`dirname \"$PRG\"`/" >/dev/null
60 | APP_HOME="`pwd -P`"
61 | cd "$SAVED" >/dev/null
62 |
63 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
64 |
65 | # Determine the Java command to use to start the JVM.
66 | if [ -n "$JAVA_HOME" ] ; then
67 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
68 | # IBM's JDK on AIX uses strange locations for the executables
69 | JAVACMD="$JAVA_HOME/jre/sh/java"
70 | else
71 | JAVACMD="$JAVA_HOME/bin/java"
72 | fi
73 | if [ ! -x "$JAVACMD" ] ; then
74 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
75 |
76 | Please set the JAVA_HOME variable in your environment to match the
77 | location of your Java installation."
78 | fi
79 | else
80 | JAVACMD="java"
81 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
82 |
83 | Please set the JAVA_HOME variable in your environment to match the
84 | location of your Java installation."
85 | fi
86 |
87 | # Increase the maximum file descriptors if we can.
88 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
89 | MAX_FD_LIMIT=`ulimit -H -n`
90 | if [ $? -eq 0 ] ; then
91 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
92 | MAX_FD="$MAX_FD_LIMIT"
93 | fi
94 | ulimit -n $MAX_FD
95 | if [ $? -ne 0 ] ; then
96 | warn "Could not set maximum file descriptor limit: $MAX_FD"
97 | fi
98 | else
99 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
100 | fi
101 | fi
102 |
103 | # For Darwin, add options to specify how the application appears in the dock
104 | if $darwin; then
105 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
106 | fi
107 |
108 | # For Cygwin, switch paths to Windows format before running java
109 | if $cygwin ; then
110 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
111 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
112 | JAVACMD=`cygpath --unix "$JAVACMD"`
113 |
114 | # We build the pattern for arguments to be converted via cygpath
115 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
116 | SEP=""
117 | for dir in $ROOTDIRSRAW ; do
118 | ROOTDIRS="$ROOTDIRS$SEP$dir"
119 | SEP="|"
120 | done
121 | OURCYGPATTERN="(^($ROOTDIRS))"
122 | # Add a user-defined pattern to the cygpath arguments
123 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
124 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
125 | fi
126 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
127 | i=0
128 | for arg in "$@" ; do
129 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
130 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
131 |
132 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
133 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
134 | else
135 | eval `echo args$i`="\"$arg\""
136 | fi
137 | i=$((i+1))
138 | done
139 | case $i in
140 | (0) set -- ;;
141 | (1) set -- "$args0" ;;
142 | (2) set -- "$args0" "$args1" ;;
143 | (3) set -- "$args0" "$args1" "$args2" ;;
144 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
145 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
146 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
147 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
148 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
149 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
150 | esac
151 | fi
152 |
153 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
154 | function splitJvmOpts() {
155 | JVM_OPTS=("$@")
156 | }
157 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
158 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
159 |
160 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
161 |
--------------------------------------------------------------------------------
/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 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
12 | set DEFAULT_JVM_OPTS=
13 |
14 | set DIRNAME=%~dp0
15 | if "%DIRNAME%" == "" set DIRNAME=.
16 | set APP_BASE_NAME=%~n0
17 | set APP_HOME=%DIRNAME%
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 Windowz variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 | if "%@eval[2+2]" == "4" goto 4NT_args
53 |
54 | :win9xME_args
55 | @rem Slurp the command line arguments.
56 | set CMD_LINE_ARGS=
57 | set _SKIP=2
58 |
59 | :win9xME_args_slurp
60 | if "x%~1" == "x" goto execute
61 |
62 | set CMD_LINE_ARGS=%*
63 | goto execute
64 |
65 | :4NT_args
66 | @rem Get arguments from the 4NT Shell from JP Software
67 | set CMD_LINE_ARGS=%$
68 |
69 | :execute
70 | @rem Setup the command line
71 |
72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if "%ERRORLEVEL%"=="0" goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
85 | exit /b 1
86 |
87 | :mainEnd
88 | if "%OS%"=="Windows_NT" endlocal
89 |
90 | :omega
91 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/assets/images/avatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/assets/images/avatar.png
--------------------------------------------------------------------------------
/assets/images/cart_empty.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/assets/images/cart_empty.jpg
--------------------------------------------------------------------------------
/assets/images/cart_empty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/assets/images/cart_empty.png
--------------------------------------------------------------------------------
/assets/images/empty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/assets/images/empty.png
--------------------------------------------------------------------------------
/assets/images/facebook.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/assets/images/facebook.png
--------------------------------------------------------------------------------
/assets/images/fast_food_cart.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/assets/images/fast_food_cart.jpg
--------------------------------------------------------------------------------
/assets/images/girlies_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/assets/images/girlies_logo.png
--------------------------------------------------------------------------------
/assets/images/girlies_text.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/assets/images/girlies_text.png
--------------------------------------------------------------------------------
/assets/images/girlies_text.psd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/assets/images/girlies_text.psd
--------------------------------------------------------------------------------
/assets/images/girlies_text_colored.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/assets/images/girlies_text_colored.png
--------------------------------------------------------------------------------
/assets/images/girlies_text_small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/assets/images/girlies_text_small.png
--------------------------------------------------------------------------------
/assets/images/girlies_text_support.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/assets/images/girlies_text_support.png
--------------------------------------------------------------------------------
/assets/images/google_logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/assets/images/google_logo.png
--------------------------------------------------------------------------------
/assets/images/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/assets/images/ic_launcher.png
--------------------------------------------------------------------------------
/assets/images/no_internet.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/assets/images/no_internet.jpeg
--------------------------------------------------------------------------------
/assets/images/no_internet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/assets/images/no_internet.png
--------------------------------------------------------------------------------
/assets/images/no_internet_access.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/assets/images/no_internet_access.png
--------------------------------------------------------------------------------
/assets/images/twitter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/assets/images/twitter.png
--------------------------------------------------------------------------------
/flutter_01.log:
--------------------------------------------------------------------------------
1 | Flutter crash report; please file at https://github.com/flutter/flutter/issues.
2 |
3 | ## command
4 |
5 | flutter build bundle --suppress-analytics --target C:\Users\MAUGOST\Desktop\girlies\girlies\lib\main.dart --preview-dart-2 --depfile C:\Users\MAUGOST\Desktop\girlies\girlies\build\app\intermediates\flutter\debug/snapshot_blob.bin.d --asset-dir C:\Users\MAUGOST\Desktop\girlies\girlies\build\app\intermediates\flutter\debug/flutter_assets
6 |
7 | ## exception
8 |
9 | RangeError: RangeError (index): Invalid value: Only valid value is 0: 1
10 |
11 | ```
12 | #0 List.[] (dart:core-patch/dart:core/growable_array.dart:141)
13 | #1 readDepfile (package:flutter_tools/src/base/fingerprint.dart:174)
14 |
15 | #2 Fingerprinter._getPaths (package:flutter_tools/src/base/fingerprint.dart:88)
16 |
17 | #3 Fingerprinter.doesFingerprintMatch (package:flutter_tools/src/base/fingerprint.dart:60)
18 |
19 | #4 KernelCompiler.compile (package:flutter_tools/src/compile.dart:104)
20 |
21 | #5 build (package:flutter_tools/src/bundle.dart:74)
22 |
23 | #6 BuildBundleCommand.runCommand (package:flutter_tools/src/commands/build_bundle.dart:67)
24 |
25 | #7 FlutterCommand.verifyThenRunCommand (package:flutter_tools/src/runner/flutter_command.dart:344)
26 |
27 | #8 FlutterCommand.run. (package:flutter_tools/src/runner/flutter_command.dart:279)
28 |
29 | #9 AppContext.run. (package:flutter_tools/src/base/context.dart:142)
30 |
31 | #10 _rootRun (dart:async/zone.dart:1126)
32 | #11 _CustomZone.run (dart:async/zone.dart:1023)
33 | #12 runZoned (dart:async/zone.dart:1501)
34 | #13 AppContext.run (package:flutter_tools/src/base/context.dart:141)
35 |
36 | #14 FlutterCommand.run (package:flutter_tools/src/runner/flutter_command.dart:270)
37 | #15 CommandRunner.runCommand (package:args/command_runner.dart:194)
38 |
39 | #16 FlutterCommandRunner.runCommand. (package:flutter_tools/src/runner/flutter_command_runner.dart:309)
40 |
41 | #17 AppContext.run. (package:flutter_tools/src/base/context.dart:142)
42 |
43 | #18 _rootRun (dart:async/zone.dart:1126)
44 | #19 _CustomZone.run (dart:async/zone.dart:1023)
45 | #20 runZoned (dart:async/zone.dart:1501)
46 | #21 AppContext.run (package:flutter_tools/src/base/context.dart:141)
47 |
48 | #22 FlutterCommandRunner.runCommand (package:flutter_tools/src/runner/flutter_command_runner.dart:265)
49 |
50 | #23 CommandRunner.run. (package:args/command_runner.dart:109)
51 | #24 new Future.sync (dart:async/future.dart:222)
52 | #25 CommandRunner.run (package:args/command_runner.dart:109)
53 | #26 FlutterCommandRunner.run (package:flutter_tools/src/runner/flutter_command_runner.dart:174)
54 | #27 run. (package:flutter_tools/runner.dart:54)
55 |
56 | #28 AppContext.run. (package:flutter_tools/src/base/context.dart:142)
57 |
58 | #29 _rootRun (dart:async/zone.dart:1126)
59 | #30 _CustomZone.run (dart:async/zone.dart:1023)
60 | #31 runZoned (dart:async/zone.dart:1501)
61 | #32 AppContext.run (package:flutter_tools/src/base/context.dart:141)
62 |
63 | #33 runInContext (package:flutter_tools/src/context_runner.dart:43)
64 |
65 | #34 run (package:flutter_tools/runner.dart:49)
66 | #35 main (package:flutter_tools/executable.dart:49)
67 |
68 | #36 main (file:///C:/Users/MAUGOST/Downloads/Compressed/flutter_windows_v0.2.8-beta/flutter/packages/flutter_tools/bin/flutter_tools.dart:8)
69 | #37 _startIsolate. (dart:isolate-patch/dart:isolate/isolate_patch.dart:277)
70 | #38 _RawReceivePortImpl._handleMessage (dart:isolate-patch/dart:isolate/isolate_patch.dart:165)
71 | ```
72 |
73 | ## flutter doctor
74 |
75 | ```
76 | [✓] Flutter (Channel beta, v0.4.4, on Microsoft Windows [Version 10.0.16299.431], locale en-US)
77 | • Flutter version 0.4.4 at C:\Users\MAUGOST\Downloads\Compressed\flutter_windows_v0.2.8-beta\flutter
78 | • Framework revision f9bb4289e9 (3 weeks ago), 2018-05-11 21:44:54 -0700
79 | • Engine revision 06afdfe54e
80 | • Dart version 2.0.0-dev.54.0.flutter-46ab040e58
81 |
82 | [!] Android toolchain - develop for Android devices (Android SDK 27.0.3)
83 | • Android SDK at C:/Users/MAUGOST/Documents/SDK
84 | • Android NDK location not configured (optional; useful for native profiling support)
85 | • Platform android-27, build-tools 27.0.3
86 | • ANDROID_HOME = C:/Users/MAUGOST/Documents/SDK
87 | • Java binary at: C:\Program Files\Android\android-studio-ide-171.4392136-windows\android-studio\jre\bin\java
88 | • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b02)
89 | ! Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses
90 |
91 | [✓] Android Studio (version 2.3)
92 | • Android Studio at C:\Program Files\Android\Android Studio
93 | ✗ Flutter plugin not installed; this adds Flutter specific functionality.
94 | ✗ Dart plugin not installed; this adds Dart specific functionality.
95 | • Java version OpenJDK Runtime Environment (build 1.8.0_112-release-b06)
96 |
97 | [✓] Android Studio (version 3.1)
98 | • Android Studio at C:\Program Files\Android\android-studio-ide-171.4392136-windows\android-studio
99 | • Flutter plugin version 25.0.1
100 | • Dart plugin version 173.4700
101 | • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1024-b02)
102 |
103 | [✓] Android Studio (version 3.0)
104 | • Android Studio at C:\Program Files\Android\android studio ide\android-studio
105 | • Flutter plugin version 23.2.1
106 | • Dart plugin version 171.4424
107 | • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-915-b01)
108 |
109 | [✓] VS Code, 64-bit edition (version 1.23.1)
110 | • VS Code at C:\Program Files\Microsoft VS Code
111 | • Dart Code extension version 2.12.1
112 |
113 | [✓] Connected devices (1 available)
114 | • M5 Plus • LFBQNRFITWHQWWRS • android-arm64 • Android 5.1 (API 22)
115 |
116 | ! Doctor found issues in 1 category.
117 | ```
118 |
--------------------------------------------------------------------------------
/girlies.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/girlies_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 |
--------------------------------------------------------------------------------
/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/app.flx
37 | /Flutter/app.zip
38 | /Flutter/flutter_assets/
39 | /Flutter/App.framework
40 | /Flutter/Flutter.framework
41 | /Flutter/Generated.xcconfig
42 | /ServiceDefinitions.json
43 |
44 | Pods/
45 |
--------------------------------------------------------------------------------
/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 | UIRequiredDeviceCapabilities
24 |
25 | arm64
26 |
27 | MinimumOSVersion
28 | 8.0
29 |
30 |
31 |
--------------------------------------------------------------------------------
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Generated.xcconfig"
2 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner/AppDelegate.h:
--------------------------------------------------------------------------------
1 | #import
2 | #import
3 |
4 | @interface AppDelegate : FlutterAppDelegate
5 |
6 | @end
7 |
--------------------------------------------------------------------------------
/ios/Runner/AppDelegate.m:
--------------------------------------------------------------------------------
1 | #include "AppDelegate.h"
2 | #include "GeneratedPluginRegistrant.h"
3 |
4 | @implementation AppDelegate
5 |
6 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
7 | [GeneratedPluginRegistrant registerWithRegistry:self];
8 | // Override point for customization after application launch.
9 | return [super application:application didFinishLaunchingWithOptions:launchOptions];
10 | }
11 |
12 | @end
13 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "20x20",
5 | "idiom" : "iphone",
6 | "filename" : "Icon-App-20x20@2x.png",
7 | "scale" : "2x"
8 | },
9 | {
10 | "size" : "20x20",
11 | "idiom" : "iphone",
12 | "filename" : "Icon-App-20x20@3x.png",
13 | "scale" : "3x"
14 | },
15 | {
16 | "size" : "29x29",
17 | "idiom" : "iphone",
18 | "filename" : "Icon-App-29x29@1x.png",
19 | "scale" : "1x"
20 | },
21 | {
22 | "size" : "29x29",
23 | "idiom" : "iphone",
24 | "filename" : "Icon-App-29x29@2x.png",
25 | "scale" : "2x"
26 | },
27 | {
28 | "size" : "29x29",
29 | "idiom" : "iphone",
30 | "filename" : "Icon-App-29x29@3x.png",
31 | "scale" : "3x"
32 | },
33 | {
34 | "size" : "40x40",
35 | "idiom" : "iphone",
36 | "filename" : "Icon-App-40x40@2x.png",
37 | "scale" : "2x"
38 | },
39 | {
40 | "size" : "40x40",
41 | "idiom" : "iphone",
42 | "filename" : "Icon-App-40x40@3x.png",
43 | "scale" : "3x"
44 | },
45 | {
46 | "size" : "60x60",
47 | "idiom" : "iphone",
48 | "filename" : "Icon-App-60x60@2x.png",
49 | "scale" : "2x"
50 | },
51 | {
52 | "size" : "60x60",
53 | "idiom" : "iphone",
54 | "filename" : "Icon-App-60x60@3x.png",
55 | "scale" : "3x"
56 | },
57 | {
58 | "size" : "20x20",
59 | "idiom" : "ipad",
60 | "filename" : "Icon-App-20x20@1x.png",
61 | "scale" : "1x"
62 | },
63 | {
64 | "size" : "20x20",
65 | "idiom" : "ipad",
66 | "filename" : "Icon-App-20x20@2x.png",
67 | "scale" : "2x"
68 | },
69 | {
70 | "size" : "29x29",
71 | "idiom" : "ipad",
72 | "filename" : "Icon-App-29x29@1x.png",
73 | "scale" : "1x"
74 | },
75 | {
76 | "size" : "29x29",
77 | "idiom" : "ipad",
78 | "filename" : "Icon-App-29x29@2x.png",
79 | "scale" : "2x"
80 | },
81 | {
82 | "size" : "40x40",
83 | "idiom" : "ipad",
84 | "filename" : "Icon-App-40x40@1x.png",
85 | "scale" : "1x"
86 | },
87 | {
88 | "size" : "40x40",
89 | "idiom" : "ipad",
90 | "filename" : "Icon-App-40x40@2x.png",
91 | "scale" : "2x"
92 | },
93 | {
94 | "size" : "76x76",
95 | "idiom" : "ipad",
96 | "filename" : "Icon-App-76x76@1x.png",
97 | "scale" : "1x"
98 | },
99 | {
100 | "size" : "76x76",
101 | "idiom" : "ipad",
102 | "filename" : "Icon-App-76x76@2x.png",
103 | "scale" : "2x"
104 | },
105 | {
106 | "size" : "83.5x83.5",
107 | "idiom" : "ipad",
108 | "filename" : "Icon-App-83.5x83.5@2x.png",
109 | "scale" : "2x"
110 | },
111 | {
112 | "size" : "1024x1024",
113 | "idiom" : "ios-marketing",
114 | "filename" : "Icon-App-1024x1024@1x.png",
115 | "scale" : "1x"
116 | }
117 | ],
118 | "info" : {
119 | "version" : 1,
120 | "author" : "xcode"
121 | }
122 | }
123 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/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.
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/ios/Runner/GoogleService-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | AD_UNIT_ID_FOR_BANNER_TEST
6 | ca-app-pub-3940256099942544/2934735716
7 | AD_UNIT_ID_FOR_INTERSTITIAL_TEST
8 | ca-app-pub-3940256099942544/4411468910
9 | CLIENT_ID
10 | 186548206272-a9l34rp2140cf2cum28h41qlpoe7h8si.apps.googleusercontent.com
11 | REVERSED_CLIENT_ID
12 | com.googleusercontent.apps.186548206272-a9l34rp2140cf2cum28h41qlpoe7h8si
13 | API_KEY
14 | AIzaSyAMPlHdzrVXuwM55JzA2QeAYNSJrNS1GUY
15 | GCM_SENDER_ID
16 | 186548206272
17 | PLIST_VERSION
18 | 1
19 | BUNDLE_ID
20 | maugost.girlies
21 | PROJECT_ID
22 | girlies-9b320
23 | STORAGE_BUCKET
24 | girlies-9b320.appspot.com
25 | IS_ADS_ENABLED
26 |
27 | IS_ANALYTICS_ENABLED
28 |
29 | IS_APPINVITE_ENABLED
30 |
31 | IS_GCM_ENABLED
32 |
33 | IS_SIGNIN_ENABLED
34 |
35 | GOOGLE_APP_ID
36 | 1:186548206272:ios:2ce01318e597d435
37 | DATABASE_URL
38 | https://girlies-9b320.firebaseio.com
39 |
40 |
--------------------------------------------------------------------------------
/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 | girlies
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1
23 | LSRequiresIPhoneOS
24 |
25 | UILaunchStoryboardName
26 | LaunchScreen
27 | UIMainStoryboardFile
28 | Main
29 | UIRequiredDeviceCapabilities
30 |
31 | arm64
32 |
33 | UISupportedInterfaceOrientations
34 |
35 | UIInterfaceOrientationPortrait
36 | UIInterfaceOrientationLandscapeLeft
37 | UIInterfaceOrientationLandscapeRight
38 |
39 | UISupportedInterfaceOrientations~ipad
40 |
41 | UIInterfaceOrientationPortrait
42 | UIInterfaceOrientationPortraitUpsideDown
43 | UIInterfaceOrientationLandscapeLeft
44 | UIInterfaceOrientationLandscapeRight
45 |
46 | UIViewControllerBasedStatusBarAppearance
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/ios/Runner/main.m:
--------------------------------------------------------------------------------
1 | #import
2 | #import
3 | #import "AppDelegate.h"
4 |
5 | int main(int argc, char * argv[]) {
6 | @autoreleasepool {
7 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/lib/app/alert_dialog.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:girlies/app/button.dart';
3 |
4 | class CustomAlertDialog extends StatelessWidget {
5 | final double borderRadius;
6 | final String text;
7 | final String btnText;
8 | final String setTitle;
9 | final String setMessage;
10 | final VoidCallback onDismiss;
11 | final VoidCallback onProceed;
12 |
13 | CustomAlertDialog({
14 | Key key,
15 | this.borderRadius = 10.0,
16 | this.text,
17 | this.setTitle,
18 | this.setMessage,
19 | this.onDismiss,
20 | this.onProceed,
21 | this.btnText,
22 | }) : super(key: key);
23 |
24 | @override
25 | Widget build(BuildContext context) {
26 | // TODO: implement build
27 | return new AlertDialog(
28 | title: new Text(setTitle),
29 | content: new Text(setMessage),
30 | actions: [
31 | new CustomButton(
32 | setTopMargin: 5.0,
33 | setBottomMargin: 10.0,
34 | setLeftMargin: 10.0,
35 | setrightMargin: 10.0,
36 | setBtnWidth: 150.0,
37 | setBtnHeight: 40.0,
38 | setBtnRaduis: 25.0,
39 | setBtnColor: Colors.pink[900],
40 | setBtnText: btnText == null ? 'Proceed' : btnText,
41 | setBtnTextColor: Colors.white,
42 | onBtnClicked: onProceed,
43 | ),
44 | ],
45 | );
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/lib/app/button.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class CustomButton extends StatelessWidget {
4 | Icon icon;
5 | final double setTopMargin;
6 | final double setBottomMargin;
7 | final double setrightMargin;
8 | final double setLeftMargin;
9 | final double setBtnHeight;
10 | final double setBtnWidth;
11 | final double setBtnRaduis;
12 | final String setBtnText;
13 | final Color setBtnColor, setBtnTextColor;
14 | final VoidCallback onBtnClicked;
15 | final Icon setBtnIcon;
16 |
17 | //final VoidCallback onTap;
18 |
19 | CustomButton(
20 | {this.setTopMargin,
21 | this.setBottomMargin,
22 | this.setrightMargin,
23 | this.setLeftMargin,
24 | this.setBtnRaduis,
25 | this.setBtnText,
26 | this.setBtnColor,
27 | this.setBtnTextColor,
28 | this.onBtnClicked,
29 | this.setBtnHeight,
30 | this.setBtnWidth,
31 | this.setBtnIcon});
32 |
33 | @override
34 | Widget build(BuildContext context) {
35 | // TODO: implement build
36 | return new Container(
37 | width: setBtnWidth,
38 | height: setBtnHeight,
39 | margin: new EdgeInsets.only(
40 | bottom: setBottomMargin,
41 | top: setTopMargin,
42 | right: setrightMargin,
43 | left: setLeftMargin),
44 | decoration: new BoxDecoration(
45 | color: setBtnColor,
46 | borderRadius: new BorderRadius.all(Radius.circular(setBtnRaduis)),
47 | border: new Border.all(
48 | color: const Color.fromRGBO(221, 221, 221, 1.0),
49 | )),
50 | child: new RaisedButton(
51 | onPressed: onBtnClicked,
52 | color: setBtnColor,
53 | child: new Text(
54 | setBtnText,
55 | style: new TextStyle(
56 | fontSize: 15.0,
57 | color: setBtnTextColor,
58 | fontWeight: FontWeight.w400),
59 | ),
60 | ),
61 | );
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/lib/app/channel_methods.dart:
--------------------------------------------------------------------------------
1 | import 'dart:async';
2 |
3 | import 'package:flutter/services.dart';
4 |
5 | class GirliesChannels {
6 | static const MethodChannel _channel =
7 | const MethodChannel('maugost.com/paystack_flutter');
8 |
9 | static Future get platformVersion async {
10 | final String version = await _channel.invokeMethod('getPlatformVersion');
11 | return version;
12 | }
13 |
14 | static Future get facebookLogin async {
15 | final String token = await _channel.invokeMethod('facebookLogin');
16 | return token;
17 | }
18 |
19 | static Future get facebookLogout async {
20 | final String version = await _channel.invokeMethod('facebookLogout');
21 | return version;
22 | }
23 |
24 | static Future connectToPaystack(Map args) async {
25 | final String version = await _channel.invokeMethod('payWithPaystack', args);
26 | return version;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/lib/app/data.dart:
--------------------------------------------------------------------------------
1 | import 'package:girlies/models/fbconn.dart';
2 |
3 | class AppData {
4 | static const String email = "myEmail";
5 | static const String password = "myPassword";
6 | static const String phoneNumber = "phoneNumber";
7 | static const String fullName = "fullName";
8 | static const String state = "state";
9 | static const String homeAddress = "homeAddress";
10 | static const String homeDescription = "homeDescription";
11 | static const String profileImgURL = "profileImgURL";
12 | static const String deliveryAddress = "deliveryAddress";
13 | static const String userID = "userID";
14 | static String currentUserID;
15 | static const String isAdmin = "isAdmin";
16 | static const String timeCreated = "timeCreated";
17 | static const String keyID = "keyID";
18 | static const String itemQuantity = "itemQuantity";
19 | static const String isFavorite = "isFavorite";
20 | static const String messageKeyID = "messageKeyID";
21 | static const String messageID = "messageID";
22 | static const String myMessages = "myMessages";
23 | static const String messageText = "messageText";
24 | static const String messageImageUrl = "messageImageUrl";
25 | static const String messageSender = "messageSender";
26 | static const String messageSenderUID = "messageSenderUID";
27 | static const String messageReceiverUID = "messageReceiverUID";
28 | static const String messageSenderEmail = "messageSenderEmail";
29 | static const String messageSenderName = "messageSenderName";
30 | static const String messageSenderImage = "messageSenderImage";
31 | static const String messageRead = "messageRead";
32 | static const String messageTime = "messageTime";
33 | static const String messageSeen = "messageSeen";
34 |
35 | static const String orderSenderName = "orderSenderName";
36 | static const String orderSenderImg = "orderSenderImg";
37 | static const String orderAmount = "orderAmount";
38 | static const String noOforders = "noOforders";
39 | static const String orderType = "orderType";
40 | static const String orderTime = "orderTime";
41 | static const String orderStatus = "orderStatus";
42 | static const String orderSeen = "orderSeen";
43 | static const String orderRead = "orderRead";
44 | static const int TYPE_PAYNOW_OUTSIDE_UMUAHIA = 0;
45 | static const int TYPE_PAYNOW_WITHIN_UMUAHIA = 1;
46 | static const int TYPE_PAYNOW_ONLY_UMUAHIA = 2;
47 | static const int STATUS_PENDING = 0;
48 | static const int STATUS_COMPLETE = 1;
49 | static const int STATUS_DECLINED = 2;
50 | static const int STATUS_REJECTED = 3;
51 |
52 | static final String supportUID = "08143733836Girlies";
53 | static const String supportID = "supportID";
54 | static const String senderID = "senderID";
55 | static const String receiverID = "senderID";
56 | static const String partyID = "partyID";
57 | static const String parties = "parties";
58 | static const String messageRoomDB = "messageRoomDB";
59 | static const String conversationsDB = "conversationsDB";
60 |
61 | static const String EMAIL = "myEmail";
62 | static const String PASSWORD = "myPassword";
63 | static const String PHONE_NUMBER = 'phoneNumber';
64 | static const String FULL_NAME = 'fullName';
65 | static const String APP_NAME = 'appName';
66 | static const String USER_DB = 'users_db';
67 | static const String KEY_ID = 'keyId';
68 | static const String OBJECT_ID = 'objectId';
69 | static const String USER_ID = 'userId';
70 | static const String USERNAME = 'userName';
71 | static const String ERROR_MSG = 'errorMsg';
72 | static const String PROFILE_IMG_URL = 'profileIMG';
73 | static const String PROFILE_IMAGES = 'profileImages';
74 | static const String MENU_ITEMS = 'menuItems';
75 | static const String MENU_ITEM_TITLE = 'menuTitle';
76 | static const String MENU_ITEM_IMG = 'menuIMG';
77 | static const String MENU_ITEM_ICON = 'menuIcon';
78 |
79 | static const String productName = "productName";
80 | static const String productCategory = "productCategory";
81 | static const String productCategories = "productCategories";
82 | static const String categoryImgURL = "categoryImgURL";
83 | static const String categoryName = "categoryName";
84 | static const String productPrice = "productPrice";
85 | static const String productImagesURL = "productImageURL";
86 | static const String productSizesAvailable = "productSizesAvailable";
87 | static const String productColorsAvailable = "productColorsAvailable";
88 | static const String productNoInStock = "productNoInStock";
89 | static const String productDescription = "productDescription";
90 |
91 | static const String userDB = "userDB";
92 | static const String adminDB = "adminDB";
93 | static const String cartDB = "cartDB";
94 | static const String orderNotifyDB = "orderNotifyDB";
95 | static const String orderHistoryDB = "orderHistoryDB";
96 | static const String favoriteDB = "favoriteDB";
97 | static const String messagesDB = "messagesDB";
98 | static const String userOrdersDB = "userOrdersDB";
99 | static const String adminOrdersDB = "adminOrdersDB";
100 | static const String notifyAdminOrderDB = "notifyAdminOrderDB";
101 | static const String productsDB = "productsDB";
102 | static const String categoriesDB = "categoriesDB";
103 |
104 | static const String loginStatusMsg = "Login Successfull";
105 | static const String signStatusMsg = "Account Created Successfully";
106 | static FbConn boutiqueFbConn;
107 | }
108 |
--------------------------------------------------------------------------------
/lib/app/progress.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 |
4 | class ProgressBar extends StatelessWidget {
5 |
6 | final Color backgroundColor;
7 | final Color color;
8 | final Color containerColor;
9 | final double borderRadius;
10 | final String text;
11 | //final VoidCallback onTap;
12 |
13 | ProgressBar(
14 | {Key key,
15 | this.backgroundColor = Colors.black54,
16 | this.color = Colors.white,
17 | this.containerColor = Colors.transparent,
18 | this.borderRadius = 10.0,
19 | this.text
20 | }) : super(key: key);
21 |
22 |
23 |
24 | @override
25 | Widget build(BuildContext context) {
26 | return new Scaffold(
27 | backgroundColor: backgroundColor,
28 | body: new Stack(
29 | children: [
30 | new Center(
31 | child: new Container(
32 | width: 150.0,
33 | height: 150.0,
34 | decoration: new BoxDecoration(
35 | color: containerColor,
36 | borderRadius: new BorderRadius.all(
37 | new Radius.circular(borderRadius))),
38 | ),
39 | ),
40 | new Center(
41 | child: _getCenterContent(),
42 | )
43 | ],
44 | ));
45 | }
46 |
47 | Widget _getCenterContent() {
48 | if (text == null || text.isEmpty) {
49 | return _getCircularProgress();
50 | }
51 |
52 | return new Center(
53 | child: new Column(
54 | mainAxisAlignment: MainAxisAlignment.center,
55 | children: [
56 | _getCircularProgress(),
57 | new Container(
58 | margin: const EdgeInsets.fromLTRB(0.0, 15.0, 0.0, 0.0),
59 | child: new Text(
60 | text,
61 | style: new TextStyle(color: color),
62 | ),
63 | )
64 | ],
65 | ),
66 | );
67 | }
68 |
69 | Widget _getCircularProgress() {
70 | return new CircularProgressIndicator(
71 | valueColor: new AlwaysStoppedAnimation(color));
72 | }
73 |
74 |
75 | }
76 |
77 |
78 |
--------------------------------------------------------------------------------
/lib/main.dart:
--------------------------------------------------------------------------------
1 | import 'package:firebase_database/firebase_database.dart';
2 | import 'package:flutter/foundation.dart';
3 | import 'package:flutter/material.dart';
4 | import 'package:girlies/app/girlies_app.dart';
5 | import 'package:girlies/navigation.dart';
6 | import 'package:girlies/support/girlies_support.dart';
7 |
8 | void main() {
9 | FirebaseDatabase.instance.setPersistenceEnabled(true);
10 | FirebaseDatabase.instance.setPersistenceCacheSizeBytes(1000000000);
11 | FirebaseDatabase.instance.reference().keepSynced(true);
12 | runApp(new MyApp());
13 | }
14 |
15 | var routes = {
16 | ScreenNavigator.login: (BuildContext context) {
17 | return null;
18 | },
19 | ScreenNavigator.signup: (BuildContext context) {
20 | return null;
21 | },
22 | ScreenNavigator.girlie: (BuildContext context) {
23 | return new GirliesApp();
24 | },
25 | ScreenNavigator.support: (BuildContext context) {
26 | return GirliesSupport();
27 | },
28 | ScreenNavigator.controller: (BuildContext context) {
29 | return null;
30 | },
31 | };
32 |
33 | final ThemeData kIOSTheme = new ThemeData(
34 | primarySwatch: Colors.pink,
35 | primaryColor: Color(0xFF991155),
36 | primaryColorBrightness: Brightness.light);
37 |
38 | final ThemeData kDefaultTheme = new ThemeData(
39 | primarySwatch: Colors.pink,
40 | accentColor: Color(0xFF991155),
41 | primaryColor: Color(0xFF991155),
42 | splashColor: Colors.pink[900]);
43 |
44 | class MyApp extends StatelessWidget {
45 | /*keytool -list -v -keystore C:\Users\MAUGOST\.android\debug.keystore -alias androiddebugkey -storepass android -keypass android*/
46 | // 1D:70:80:2D:53:71:89:AB:D2:24:F0:FB:36:71:25:61
47 |
48 | // keytool -exportcert -alias androiddebugkey -keystore "C:\Users\MAUGOST\.android\debug.keystore" | "C:\Users\MAUGOST\Documents\openssl-0.9.8k_WIN32\bin\openssl" sha1 -binary | "C:\Users\MAUGOST\Documents\openssl-0.9.8k_WIN32\bin\openssl" base64
49 |
50 | static const appColors = ColorSwatch(0xFF991155, {
51 | "appColor": Color(0xFF991155),
52 | 100: Color(0xFFff1d8e),
53 | 200: Color(0xFFe51a7f),
54 | 300: Color(0xFFcc1771),
55 | 400: Color(0xFFb21463),
56 | 500: Color(0xFF991155),
57 | 600: Color(0xFF7f0e47),
58 | 700: Color(0xFF660b38),
59 | 800: Color(0xFF4c082a),
60 | 900: Color(0xFF33051c),
61 | 1000: Color(0xFF19020e),
62 | 0000: Color(0xFF000000),
63 | });
64 | // This widget is the root of your application.
65 | @override
66 | Widget build(BuildContext context) {
67 | return new MaterialApp(
68 | debugShowCheckedModeBanner: false,
69 | title: 'Girlies',
70 | theme: defaultTargetPlatform == TargetPlatform.iOS
71 | ? kIOSTheme
72 | : kDefaultTheme,
73 | home: new GirliesApp(),
74 | routes: routes,
75 | );
76 | }
77 | }
78 |
79 | class MyHomePage extends StatefulWidget {
80 | MyHomePage({Key key, this.title}) : super(key: key);
81 |
82 | final String title;
83 |
84 | @override
85 | _MyHomePageState createState() => new _MyHomePageState();
86 | }
87 |
88 | class _MyHomePageState extends State {
89 | int _counter = 0;
90 |
91 | void _incrementCounter() {
92 | setState(() {
93 | _counter++;
94 | });
95 | }
96 |
97 | @override
98 | Widget build(BuildContext context) {
99 | return new Scaffold(
100 | appBar: new AppBar(
101 | title: new Text(widget.title),
102 | ),
103 | body: new Center(
104 | child: new Column(
105 | mainAxisAlignment: MainAxisAlignment.center,
106 | children: [
107 | new Text(
108 | 'You have pushed the button this many times:',
109 | ),
110 | new Text(
111 | '$_counter',
112 | style: Theme.of(context).textTheme.display1,
113 | ),
114 | ],
115 | ),
116 | ),
117 | floatingActionButton: new FloatingActionButton(
118 | onPressed: _incrementCounter,
119 | tooltip: 'Increment',
120 | child: new Icon(Icons.add),
121 | ), // This trailing comma makes auto-formatting nicer for build methods.
122 | );
123 | }
124 | }
125 |
--------------------------------------------------------------------------------
/lib/models/ref_time.dart:
--------------------------------------------------------------------------------
1 | import 'package:timeago/timeago.dart';
2 |
3 | class TimeAgo {
4 | DateTime newTime;
5 |
6 | int oneHour = 3600000;
7 | int oneMin = 60000;
8 | int oneSec = 1000;
9 |
10 | TimeAgo();
11 |
12 | String timeUpdater(DateTime loadedTime) {
13 | final now = new DateTime.now();
14 | final difference = now.difference(loadedTime);
15 | //new Timer.periodic(new Duration(seconds: 1), (_) => timeUpdater(time));
16 | return /*timeText =*/ timeAgo(now.subtract(difference));
17 | }
18 |
19 | String getAltTimeAgo(int milliseconds) {
20 | int newHours = getHoursAgoInt(milliseconds);
21 | int newMinutes = getMinutesAgoInt(milliseconds);
22 | int newSeconds = getSecondsAgoInt(milliseconds);
23 | int newTimeAgo;
24 | String timeAgo;
25 |
26 | //String timeAgo = newTimeAgo == 0 ? "now" : newTimeAgo.toString();
27 | return timeAgo;
28 | }
29 |
30 | String getTimeAgo(int time) {
31 | int newHours = getHoursAgoInt(time);
32 | int newMinutes = getMinutesAgoInt(time);
33 | int newSeconds = getSecondsAgoInt(time);
34 | //int newTimeAgo = newHours == 0 ? newMinutes :? newMinutes == 0 ? 0;
35 | int newTimeAgo;
36 | String timeAgo;
37 | if (newHours > 0) {
38 | newTimeAgo = newHours;
39 | timeAgo = getHoursString(newTimeAgo);
40 | //timeAgo = newTimeAgo.toString() + " hrs Ago";
41 | } else if (newHours <= 0) {
42 | newTimeAgo = newMinutes;
43 | timeAgo = getMinutesString(newTimeAgo);
44 | } else if (newMinutes > 0) {
45 | timeAgo = getMinutesString(newTimeAgo);
46 | } else if (newSeconds <= 0) {
47 | newTimeAgo = 0;
48 | timeAgo = getSecondsString(newTimeAgo);
49 | }
50 |
51 | //String timeAgo = newTimeAgo == 0 ? "now" : newTimeAgo.toString();
52 | return timeAgo;
53 | }
54 |
55 | String getHoursAgoString(int time) {
56 | DateTime oldTime = new DateTime.fromMillisecondsSinceEpoch(time);
57 | DateTime currentTime = new DateTime.now();
58 | int newTime = currentTime.hour - oldTime.hour;
59 | String hoursAgo = newTime.toString() == "1"
60 | ? newTime.toString() + "hr Ago"
61 | : newTime.toString() + "hrs Ago";
62 | return hoursAgo;
63 | }
64 |
65 | String getMinutesAgoString(int time) {
66 | DateTime oldTime =
67 | new DateTime.fromMillisecondsSinceEpoch(time, isUtc: true);
68 | DateTime currentTime = new DateTime.now();
69 | int newTime = currentTime.minute - oldTime.minute;
70 | String hoursAgo =
71 | newTime.toString() == "0" ? "now" : newTime.toString() + "minutes Ago";
72 | return hoursAgo;
73 | }
74 |
75 | String getCompleteTime(int time) {
76 | DateTime oldTime = new DateTime.fromMillisecondsSinceEpoch(time);
77 |
78 | List listTime = oldTime.toIso8601String().split("T");
79 | List currentTime = listTime[1].split(".");
80 | List splitTime = currentTime[0].split(":");
81 |
82 | String hours = splitTime[0];
83 | String mins = splitTime[1];
84 | String secs = splitTime[2];
85 | int intOfHrs = num.parse(hours);
86 | String timeOfDay = intOfHrs >= 12 ? "PM" : "AM";
87 | String hoursAgo = "$hours:$mins $timeOfDay";
88 | return hoursAgo;
89 | }
90 |
91 | String getSecondsAgoString(int time) {
92 | DateTime oldTime = new DateTime.fromMillisecondsSinceEpoch(time);
93 | DateTime currentTime = new DateTime.now();
94 | int newTime = currentTime.second - oldTime.second;
95 | String hoursAgo = newTime.toString() == "1"
96 | ? newTime.toString() + "second Ago"
97 | : newTime.toString() + "seconds Ago";
98 | return hoursAgo;
99 | }
100 |
101 | String getHoursString(int time) {
102 | String hoursAgo = time.toString() == "1"
103 | ? time.toString() + "hr Ago"
104 | : time.toString() + "hrs Ago";
105 | return hoursAgo;
106 | }
107 |
108 | String getMinutesString(int time) {
109 | String hoursAgo = time.toString() == "1"
110 | ? time.toString() + "minutue Ago"
111 | : time.toString() + "minutues Ago";
112 | return hoursAgo;
113 | }
114 |
115 | String getSecondsString(int time) {
116 | return "now";
117 | }
118 |
119 | int getHoursAgoInt(int time) {
120 | DateTime oldTime = new DateTime.fromMillisecondsSinceEpoch(time);
121 | DateTime currentTime = new DateTime.now();
122 | int newTime = currentTime.hour - oldTime.hour;
123 | return newTime;
124 | }
125 |
126 | int getMinutesAgoInt(int time) {
127 | DateTime oldTime = new DateTime.fromMillisecondsSinceEpoch(time);
128 | DateTime currentTime = new DateTime.now();
129 | int newTime = currentTime.minute - oldTime.minute;
130 | return newTime;
131 | }
132 |
133 | int getSecondsAgoInt(int time) {
134 | DateTime oldTime = new DateTime.fromMillisecondsSinceEpoch(time);
135 | DateTime currentTime = new DateTime.now();
136 | int newTime = currentTime.second - oldTime.second;
137 | return newTime;
138 | }
139 | }
140 |
--------------------------------------------------------------------------------
/lib/navigation.dart:
--------------------------------------------------------------------------------
1 | class ScreenNavigator {
2 | static const String support = "/support";
3 | static const String controller = "/controller";
4 | static const String girlie = "/girlie";
5 | static const String login = "/login";
6 | static const String signup = "/signUp";
7 | }
8 |
--------------------------------------------------------------------------------
/pubspec.yaml:
--------------------------------------------------------------------------------
1 | name: girlies
2 | description: A new Flutter application.
3 |
4 | dependencies:
5 | flutter:
6 | sdk: flutter
7 | flutter_parallax: "^0.1.1"
8 | image_picker: "^0.4.1"
9 | google_sign_in: "^3.0.3+1"
10 | firebase_analytics: "^1.0.0"
11 | firebase_auth: "^0.5.10"
12 | firebase_database: "^1.0.0"
13 | firebase_storage: "^0.3.5"
14 | flutter_redux: "^0.5.0"
15 | redux: "^3.0.0"
16 | timeago: "^1.2.5"
17 | local_notifications:
18 | shared_preferences: "^0.4.2"
19 | flutter_image_pick_crop: "^0.0.1"
20 | flutter_multiple_image_picker: "^0.0.1"
21 | circle_indicator: "^0.0.7"
22 | #paystack_flutter: "^0.0.2"
23 | # The following adds the Cupertino Icons font to your application.
24 | # Use with the CupertinoIcons class for iOS style icons.
25 | cupertino_icons: ^0.1.0
26 |
27 | dev_dependencies:
28 | flutter_test:
29 | sdk: flutter
30 |
31 |
32 | # For information on the generic Dart part of this file, see the
33 | # following page: https://www.dartlang.org/tools/pub/pubspec
34 |
35 | # The following section is specific to Flutter.
36 | flutter:
37 |
38 | # The following line ensures that the Material Icons font is
39 | # included with your application, so that you can use the icons in
40 | # the material Icons class.
41 | uses-material-design: true
42 |
43 | # To add assets to your application, add an assets section, like this:
44 | # assets:
45 | # - images/a_dot_burr.jpeg
46 | # - images/a_dot_ham.jpeg
47 |
48 | assets:
49 | - assets/images/fast_food_cart.jpg
50 | - assets/images/cart_empty.jpg
51 | - assets/images/cart_empty.png
52 | - assets/images/no_internet.jpeg
53 | - assets/images/avatar.png
54 | - assets/images/girlies_logo.png
55 | - assets/images/empty.png
56 | - assets/images/facebook.png
57 | - assets/images/google_logo.png
58 | - assets/images/twitter.png
59 | - assets/images/girlies_text.png
60 | - assets/images/girlies_text_colored.png
61 | - assets/images/ic_launcher.png
62 | - assets/images/girlies_text_small.png
63 | - assets/images/girlies_text_support.png
64 | - assets/images/no_internet_access.png
65 |
66 | # An image asset can refer to one or more resolution-specific "variants", see
67 | # https://flutter.io/assets-and-images/#resolution-aware.
68 |
69 | # For details regarding adding assets from package dependencies, see
70 | # https://flutter.io/assets-and-images/#from-packages
71 |
72 | # To add custom fonts to your application, add a fonts section here,
73 | # in this "flutter" section. Each entry in this list should have a
74 | # "family" key with the font family name, and a "fonts" key with a
75 | # list giving the asset and other descriptors for the font. For
76 | # example:
77 | # fonts:
78 | # - family: Schyler
79 | # fonts:
80 | # - asset: fonts/Schyler-Regular.ttf
81 | # - asset: fonts/Schyler-Italic.ttf
82 | # style: italic
83 | # - family: Trajan Pro
84 | # fonts:
85 | # - asset: fonts/TrajanPro.ttf
86 | # - asset: fonts/TrajanPro_Bold.ttf
87 | # weight: 700
88 | #
89 | # For details regarding fonts from package dependencies,
90 | # see https://flutter.io/custom-fonts/#from-packages
91 |
--------------------------------------------------------------------------------
/screenshots/ss1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/screenshots/ss1.png
--------------------------------------------------------------------------------
/screenshots/ss10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/screenshots/ss10.png
--------------------------------------------------------------------------------
/screenshots/ss11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/screenshots/ss11.png
--------------------------------------------------------------------------------
/screenshots/ss12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/screenshots/ss12.png
--------------------------------------------------------------------------------
/screenshots/ss13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/screenshots/ss13.png
--------------------------------------------------------------------------------
/screenshots/ss14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/screenshots/ss14.png
--------------------------------------------------------------------------------
/screenshots/ss15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/screenshots/ss15.png
--------------------------------------------------------------------------------
/screenshots/ss16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/screenshots/ss16.png
--------------------------------------------------------------------------------
/screenshots/ss17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/screenshots/ss17.png
--------------------------------------------------------------------------------
/screenshots/ss18.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/screenshots/ss18.png
--------------------------------------------------------------------------------
/screenshots/ss19.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/screenshots/ss19.png
--------------------------------------------------------------------------------
/screenshots/ss2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/screenshots/ss2.png
--------------------------------------------------------------------------------
/screenshots/ss20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/screenshots/ss20.png
--------------------------------------------------------------------------------
/screenshots/ss21.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/screenshots/ss21.png
--------------------------------------------------------------------------------
/screenshots/ss22.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/screenshots/ss22.png
--------------------------------------------------------------------------------
/screenshots/ss3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/screenshots/ss3.png
--------------------------------------------------------------------------------
/screenshots/ss4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/screenshots/ss4.png
--------------------------------------------------------------------------------
/screenshots/ss5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/screenshots/ss5.png
--------------------------------------------------------------------------------
/screenshots/ss6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/screenshots/ss6.png
--------------------------------------------------------------------------------
/screenshots/ss7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/screenshots/ss7.png
--------------------------------------------------------------------------------
/screenshots/ss8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/screenshots/ss8.png
--------------------------------------------------------------------------------
/screenshots/ss9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mtellect/FlutterGirliesStore/4d8ba1ff856dbf284032d480f7d9ba4d292d327f/screenshots/ss9.png
--------------------------------------------------------------------------------
/test/widget_test.dart:
--------------------------------------------------------------------------------
1 | // This is a basic Flutter widget test.
2 | // To perform an interaction with a widget in your test, use the WidgetTester utility that Flutter
3 | // provides. For example, you can send tap and scroll gestures. You can also use WidgetTester to
4 | // find child widgets in the widget tree, read text, and verify that the values of widget properties
5 | // are correct.
6 |
7 | import 'package:flutter/material.dart';
8 | import 'package:flutter_test/flutter_test.dart';
9 |
10 | import 'package:girlies/main.dart';
11 |
12 | void main() {
13 | testWidgets('Counter increments smoke test', (WidgetTester tester) async {
14 | // Build our app and trigger a frame.
15 | await tester.pumpWidget(new MyApp());
16 |
17 | // Verify that our counter starts at 0.
18 | expect(find.text('0'), findsOneWidget);
19 | expect(find.text('1'), findsNothing);
20 |
21 | // Tap the '+' icon and trigger a frame.
22 | await tester.tap(find.byIcon(Icons.add));
23 | await tester.pump();
24 |
25 | // Verify that our counter has incremented.
26 | expect(find.text('0'), findsNothing);
27 | expect(find.text('1'), findsOneWidget);
28 | });
29 | }
30 |
--------------------------------------------------------------------------------