Showing preview only (2,330K chars total). Download the full file or copy to clipboard to get everything.
Repository: appditto/blaise_wallet_flutter
Branch: master
Commit: a6891caafff3
Files: 330
Total size: 2.1 MB
Directory structure:
gitextract_ckzg3n8o/
├── .github/
│ └── workflows/
│ ├── ci.yml
│ ├── deploy_beta.yml
│ ├── deploy_release.yml
│ ├── deploy_release_android.yml
│ └── deploy_release_ios.yml
├── .gitignore
├── LICENSE
├── README.md
├── android/
│ ├── Gemfile
│ ├── app/
│ │ ├── build.gradle
│ │ ├── google-services.json
│ │ ├── proguard-rules.pro
│ │ └── src/
│ │ ├── debug/
│ │ │ └── AndroidManifest.xml
│ │ ├── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── appditto/
│ │ │ │ └── blaise/
│ │ │ │ ├── LegacyStorage.java
│ │ │ │ ├── MainActivity.java
│ │ │ │ ├── MultidexApplication.java
│ │ │ │ └── Vault.java
│ │ │ └── res/
│ │ │ ├── drawable/
│ │ │ │ └── launch_background.xml
│ │ │ ├── drawable-v24/
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── mipmap-anydpi-v26/
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ ├── values/
│ │ │ │ └── styles.xml
│ │ │ └── xml/
│ │ │ └── network_security_config.xml
│ │ └── profile/
│ │ └── AndroidManifest.xml
│ ├── build.gradle
│ ├── fastlane/
│ │ ├── Appfile
│ │ ├── Fastfile
│ │ ├── flutter_build.sh
│ │ ├── flutter_test.sh
│ │ └── metadata/
│ │ └── android/
│ │ └── en-US/
│ │ ├── changelogs/
│ │ │ ├── 1.txt
│ │ │ ├── 17.txt
│ │ │ ├── 18.txt
│ │ │ ├── 20.txt
│ │ │ ├── 22.txt
│ │ │ ├── 23.txt
│ │ │ └── 24.txt
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ ├── title.txt
│ │ └── video.txt
│ ├── gradle/
│ │ └── wrapper/
│ │ └── gradle-wrapper.properties
│ ├── gradle.properties
│ └── settings.gradle
├── assets/
│ ├── animation_get_account.flr
│ ├── animation_get_account_copper.flr
│ ├── animation_get_account_dark.flr
│ ├── animation_name_change.flr
│ ├── animation_name_change_copper.flr
│ ├── animation_name_change_dark.flr
│ ├── animation_sale.flr
│ ├── animation_sale_copper.flr
│ ├── animation_sale_dark.flr
│ ├── animation_search.flr
│ ├── animation_send.flr
│ ├── animation_send_copper.flr
│ ├── animation_send_dark.flr
│ ├── animation_transfer.flr
│ ├── animation_transfer_copper.flr
│ ├── animation_transfer_dark.flr
│ ├── animation_welcome.flr
│ ├── animation_welcome_copper.flr
│ ├── animation_welcome_dark.flr
│ └── country_phone_map.json
├── bin/
│ ├── arb_to_pojson.py
│ ├── pojson_to_arb.py
│ ├── poupdate.py
│ └── settings.py.example
├── ci/
│ ├── get_version.sh
│ ├── tag_version.sh
│ └── upload_android_github.sh
├── ios/
│ ├── Flutter/
│ │ ├── AppFrameworkInfo.plist
│ │ ├── Debug.xcconfig
│ │ ├── Flutter.podspec
│ │ └── Release.xcconfig
│ ├── Gemfile
│ ├── Podfile
│ ├── Runner/
│ │ ├── AppDelegate.h
│ │ ├── AppDelegate.m
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ └── LaunchImage.imageset/
│ │ │ ├── Contents.json
│ │ │ └── README.md
│ │ ├── Base.lproj/
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── GoogleService-Info.plist
│ │ ├── Info.plist
│ │ ├── Runner-Bridging-Header.h
│ │ ├── Runner.entitlements
│ │ ├── clipboard.swift
│ │ └── main.m
│ ├── Runner.xcodeproj/
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace/
│ │ │ └── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ └── xcschemes/
│ │ └── Runner.xcscheme
│ ├── Runner.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ └── IDEWorkspaceChecks.plist
│ └── fastlane/
│ ├── Appfile
│ ├── Deliverfile
│ ├── Fastfile
│ ├── Matchfile
│ ├── flutter_build.sh
│ ├── flutter_test.sh
│ └── metadata/
│ ├── copyright.txt
│ ├── en-US/
│ │ ├── apple_tv_privacy_policy.txt
│ │ ├── description.txt
│ │ ├── keywords.txt
│ │ ├── marketing_url.txt
│ │ ├── name.txt
│ │ ├── privacy_url.txt
│ │ ├── promotional_text.txt
│ │ ├── release_notes.txt
│ │ ├── subtitle.txt
│ │ └── support_url.txt
│ ├── primary_category.txt
│ ├── primary_first_sub_category.txt
│ ├── primary_second_sub_category.txt
│ ├── secondary_category.txt
│ ├── secondary_first_sub_category.txt
│ └── secondary_second_sub_category.txt
├── lib/
│ ├── appstate_container.dart
│ ├── bus/
│ │ ├── authenticated_event.dart
│ │ ├── conn_status_event.dart
│ │ ├── contact_added_event.dart
│ │ ├── contact_modified_event.dart
│ │ ├── contact_removed_event.dart
│ │ ├── daemon_changed_event.dart
│ │ ├── disable_lock_timeout_event.dart
│ │ ├── events.dart
│ │ ├── new_operation_event.dart
│ │ ├── payload_changed_event.dart
│ │ ├── price_event.dart
│ │ ├── subscribe_event.dart
│ │ └── update_history_event.dart
│ ├── constants.dart
│ ├── l10n/
│ │ ├── intl_ar.arb
│ │ ├── intl_ca.arb
│ │ ├── intl_de.arb
│ │ ├── intl_en.arb
│ │ ├── intl_es.arb
│ │ ├── intl_messages.arb
│ │ ├── intl_tr.arb
│ │ ├── intl_zh-Hans.arb
│ │ ├── messages_all.dart
│ │ ├── messages_ar.dart
│ │ ├── messages_ca.dart
│ │ ├── messages_de.dart
│ │ ├── messages_en.dart
│ │ ├── messages_es.dart
│ │ ├── messages_messages.dart
│ │ ├── messages_tr.dart
│ │ └── messages_zh-Hans.dart
│ ├── localization.dart
│ ├── main.dart
│ ├── model/
│ │ ├── authentication_method.dart
│ │ ├── available_currency.dart
│ │ ├── available_languages.dart
│ │ ├── available_themes.dart
│ │ ├── db/
│ │ │ ├── appdb.dart
│ │ │ ├── contact.dart
│ │ │ └── contact.g.dart
│ │ ├── lock_timeout.dart
│ │ ├── notification_enabled.dart
│ │ ├── setting_item.dart
│ │ └── unlock_setting.dart
│ ├── network/
│ │ ├── http_client.dart
│ │ ├── model/
│ │ │ ├── base_request.dart
│ │ │ ├── request/
│ │ │ │ ├── borrow_request.dart
│ │ │ │ ├── borrow_request.g.dart
│ │ │ │ ├── fcm_delete_account_request.dart
│ │ │ │ ├── fcm_delete_account_request.g.dart
│ │ │ │ ├── fcm_update_bulk_request.dart
│ │ │ │ ├── fcm_update_bulk_request.g.dart
│ │ │ │ ├── fcm_update_request.dart
│ │ │ │ ├── fcm_update_request.g.dart
│ │ │ │ ├── freepasa_get_request.dart
│ │ │ │ ├── freepasa_get_request.g.dart
│ │ │ │ ├── freepasa_verify_request.dart
│ │ │ │ ├── freepasa_verify_request.g.dart
│ │ │ │ ├── getborrowed_request.dart
│ │ │ │ ├── getborrowed_request.g.dart
│ │ │ │ ├── subscribe_request.dart
│ │ │ │ └── subscribe_request.g.dart
│ │ │ ├── request_item.dart
│ │ │ └── response/
│ │ │ ├── accounts_response_borrowed.dart
│ │ │ ├── accounts_response_borrowed.g.dart
│ │ │ ├── borrow_response.dart
│ │ │ ├── borrow_response.g.dart
│ │ │ ├── error_response.dart
│ │ │ ├── error_response.g.dart
│ │ │ ├── getborrowed_response.dart
│ │ │ ├── getborrowed_response.g.dart
│ │ │ ├── price_response.dart
│ │ │ ├── price_response.g.dart
│ │ │ ├── subscribe_response.dart
│ │ │ └── subscribe_response.g.dart
│ │ └── ws_client.dart
│ ├── service_locator.dart
│ ├── store/
│ │ ├── account/
│ │ │ ├── account.dart
│ │ │ └── account.g.dart
│ │ └── wallet/
│ │ ├── wallet.dart
│ │ └── wallet.g.dart
│ ├── themes.dart
│ ├── ui/
│ │ ├── account/
│ │ │ ├── account.dart
│ │ │ ├── operation_details_sheet.dart
│ │ │ ├── operation_sheet.dart
│ │ │ ├── other_operations/
│ │ │ │ ├── change_name/
│ │ │ │ │ ├── change_name_sheet.dart
│ │ │ │ │ ├── changed_name_sheet.dart
│ │ │ │ │ └── changing_name_sheet.dart
│ │ │ │ ├── delist_for_sale/
│ │ │ │ │ ├── delisted_for_sale.dart
│ │ │ │ │ └── delisting_for_sale.dart
│ │ │ │ ├── list_for_sale/
│ │ │ │ │ ├── list_for_sale_sheet.dart
│ │ │ │ │ ├── listed_for_sale_sheet.dart
│ │ │ │ │ └── listing_for_sale_sheet.dart
│ │ │ │ ├── private_sale/
│ │ │ │ │ ├── create_private_sale_sheet.dart
│ │ │ │ │ ├── created_private_sale_sheet.dart
│ │ │ │ │ └── creating_private_sale_sheet.dart
│ │ │ │ └── transfer_account/
│ │ │ │ ├── transfer_account_sheet.dart
│ │ │ │ ├── transferred_account_sheet.dart
│ │ │ │ └── transferring_account_sheet.dart
│ │ │ ├── receive/
│ │ │ │ ├── receive_sheet.dart
│ │ │ │ └── request_sheet.dart
│ │ │ └── send/
│ │ │ ├── send_sheet.dart
│ │ │ ├── sending_sheet.dart
│ │ │ └── sent_sheet.dart
│ │ ├── intro/
│ │ │ ├── intro_backup_confirm.dart
│ │ │ ├── intro_decrypt_and_import_private_key.dart
│ │ │ ├── intro_import_private_key.dart
│ │ │ ├── intro_new_private_key.dart
│ │ │ ├── intro_security_first.dart
│ │ │ └── intro_welcome.dart
│ │ ├── lockscreen/
│ │ │ └── lock_screen.dart
│ │ ├── overview/
│ │ │ ├── buy_account_sheet.dart
│ │ │ ├── confirm_free_account_sheet.dart
│ │ │ ├── get_account_sheet.dart
│ │ │ ├── get_free_account_sheet.dart
│ │ │ ├── overview.dart
│ │ │ └── public_key_overview_sheet.dart
│ │ ├── settings/
│ │ │ ├── backup_private_key/
│ │ │ │ ├── backup_private_key_sheet.dart
│ │ │ │ ├── encrypt_private_key_sheet.dart
│ │ │ │ ├── encrypted_private_key_sheet.dart
│ │ │ │ └── unencrypted_private_key_sheet.dart
│ │ │ ├── change_daemon_sheet.dart
│ │ │ ├── contacts/
│ │ │ │ ├── add_contact_sheet.dart
│ │ │ │ ├── contact_detail_sheet.dart
│ │ │ │ └── contacts.dart
│ │ │ ├── public_key_sheet.dart
│ │ │ ├── security.dart
│ │ │ └── settings.dart
│ │ ├── util/
│ │ │ ├── app_icons.dart
│ │ │ ├── formatters.dart
│ │ │ ├── margins.dart
│ │ │ ├── routes.dart
│ │ │ └── text_styles.dart
│ │ └── widgets/
│ │ ├── account_card.dart
│ │ ├── app_text_field.dart
│ │ ├── buttons.dart
│ │ ├── error_container.dart
│ │ ├── fee_container.dart
│ │ ├── operation_list_item.dart
│ │ ├── overlay_dialog.dart
│ │ ├── payload.dart
│ │ ├── pin_screen.dart
│ │ ├── placeholder_account_card.dart
│ │ ├── placeholder_operation_list_item.dart
│ │ ├── reactive_refresh.dart
│ │ ├── settings_list_item.dart
│ │ ├── sheets.dart
│ │ ├── svg_repaint.dart
│ │ ├── tap_outside_unfocus.dart
│ │ └── webview.dart
│ └── util/
│ ├── authentication.dart
│ ├── haptic_util.dart
│ ├── number_util.dart
│ ├── pascal_util.dart
│ ├── salsa20crypt.dart
│ ├── sharedprefs_util.dart
│ ├── ui_util.dart
│ ├── user_data_util.dart
│ └── vault.dart
├── pubspec.yaml
└── test/
├── common/
│ ├── base58_test.dart
│ ├── coding/
│ │ └── pascal/
│ │ ├── accountname_coder_test.dart
│ │ ├── accountnumber_coder_test.dart
│ │ ├── currency_coder_test.dart
│ │ ├── keys/
│ │ │ ├── curve_coder_test.dart
│ │ │ ├── privatekey_coder_test.dart
│ │ │ └── publickey_coder_test.dart
│ │ ├── ophash_coder_test.dart
│ │ └── optype_coder_test.dart
│ ├── fixtures/
│ │ ├── operation_hash.dart
│ │ ├── privatekey.dart
│ │ └── publickey.dart
│ ├── model/
│ │ ├── AccountName_test.dart
│ │ ├── AccountNumber_test.dart
│ │ ├── Currency_test.dart
│ │ ├── OperationHash_test.dart
│ │ └── keys/
│ │ ├── Curves_test.dart
│ │ ├── KeyPair_test.dart
│ │ ├── PrivateKey_test.dart
│ │ └── PublicKey_test.dart
│ ├── sha_test.dart
│ └── util_test.dart
├── crypto/
│ ├── encrypt/
│ │ ├── aes/
│ │ │ └── cbcpkcs7_test.dart
│ │ └── pascal/
│ │ ├── ecies_crypt_test.dart
│ │ ├── kdf_test.dart
│ │ └── privatekey_crypt_test.dart
│ ├── fixtures/
│ │ ├── ecies.dart
│ │ └── privatekey.dart
│ └── keys_test.dart
├── json_rpc/
│ └── model/
│ ├── pascal_account_test.dart
│ ├── pascal_block_test.dart
│ ├── pascal_operation_test.dart
│ └── request/
│ ├── executeoperations_request_test.dart
│ ├── findaccounts_request_test.dart
│ ├── findoperation_request_test.dart
│ ├── getaccount_request_test.dart
│ ├── getaccountoperations_test.dart
│ ├── getblock_request_test.dart
│ ├── getblockoperation_request_test.dart
│ ├── getblockoperations_test.dart
│ ├── getblocks_request_test.dart
│ ├── getpendings_request_test.dart
│ └── getwalletaccounts_request_test.dart
└── signing/
└── operations/
├── buyaccount_operation_test.dart
├── changeaccountinfo_operation_test.dart
├── changekey_operation_test.dart
├── changekeysigned_operation_test.dart
├── delist_forsale_operation_test.dart
├── list_forsale_operation_test.dart
└── transaction_operation_test.dart
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/workflows/ci.yml
================================================
name: CI
on:
push:
branches: [ master ]
jobs:
run_tests:
name: Run tests
runs-on: self-hosted
steps:
- uses: actions/checkout@master
- name: Run tests
run: |
flutter pub get
flutter test
build_android:
name: Build android app
needs: run_tests
runs-on: self-hosted
steps:
- uses: actions/checkout@master
- name: Build artifacts
working-directory: android
env:
FLUTTER_PATH: /Users/adapps/flutter
ANDROID_SDK_PATH: /Users/adapps/Library/Android/Sdk
GEM_HOME: ~/.gems
run: |
echo flutter.sdk=${{ env.FLUTTER_PATH }} > local.properties
echo sdk.dir=${{ env.ANDROID_SDK_PATH }} >> local.properties
echo flutter.buildMode=release >> local.properties
echo storeFile=${{ secrets.ANDROID_KEYSTORE_PATH }} > key.properties
echo keyAlias=${{ secrets.ANDROID_KEY_ALIAS }} >> key.properties
echo keyPassword=${{ secrets.ANDROID_KEY_PASSWORD }} >> key.properties
echo storePassword=${{ secrets.ANDROID_KEY_STORE_PASSWORD }} >> key.properties
/usr/local/bin/fastlane build_android production:true
rm -f key.properties
- name: Upload APK
if: success()
uses: actions/upload-artifact@v1
with:
name: android-apk
path: build/app/outputs/apk/release/app-release.apk
- name: Upload Bundle
if: success()
uses: actions/upload-artifact@v1
with:
name: android-aab
path: build/app/outputs/bundle/release/app-release.aab
build_ios:
name: Build iOS app
needs: run_tests
runs-on: self-hosted
steps:
- uses: actions/checkout@master
- name: Build artifacts
working-directory: ios
env:
FASTLANE_PASSWORD: ${{ secrets.FASTLANE_PASSWORD }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
TEMP_KEYCHAIN_NAME: ${{ secrets.TEMP_KEYCHAIN_NAME }}
TEMP_KEYCHAIN_PASSWORD: ${{ secrets.TEMP_KEYCHAIN_PASSWORD }}
API_KEY_ID: ${{ secrets.FASTLANE_API_KEY_ID }}
API_KEY_ISSUER: ${{ secrets.FASTLANE_API_KEY_ISSUER }}
API_KEY_FILEPATH: ${{ secrets.FASTLANE_API_KEY_FILEPATH }}
GEM_HOME: ~/.gems
run: |
/usr/local/bin/fastlane build_ios
- name: Upload IPA
if: success()
uses: actions/upload-artifact@v1
with:
name: ios-ipa
path: ios/Runner.ipa
================================================
FILE: .github/workflows/deploy_beta.yml
================================================
name: DEPLOY_BETA
on:
push:
tags:
- 'v*-beta'
jobs:
run_tests:
name: Run tests
runs-on: self-hosted
steps:
- uses: actions/checkout@master
- name: Run tests
run: |
flutter pub get
flutter test
build_android:
name: Build android app
needs: run_tests
runs-on: self-hosted
steps:
- uses: actions/checkout@master
- name: Build artifacts
working-directory: android
env:
FLUTTER_PATH: /Users/adapps/flutter
ANDROID_SDK_PATH: /Users/adapps/Library/Android/Sdk
GEM_HOME: ~/.gems
run: |
echo flutter.sdk=${{ env.FLUTTER_PATH }} > local.properties
echo sdk.dir=${{ env.ANDROID_SDK_PATH }} >> local.properties
echo flutter.buildMode=release >> local.properties
echo storeFile=${{ secrets.ANDROID_KEYSTORE_PATH }} > key.properties
echo keyAlias=${{ secrets.ANDROID_KEY_ALIAS }} >> key.properties
echo keyPassword=${{ secrets.ANDROID_KEY_PASSWORD }} >> key.properties
echo storePassword=${{ secrets.ANDROID_KEY_STORE_PASSWORD }} >> key.properties
/usr/local/bin/fastlane build_android production:true
rm -f key.properties
- name: Upload APK
if: success()
uses: actions/upload-artifact@v1
with:
name: android-apk
path: build/app/outputs/apk/release/app-release.apk
- name: Upload Bundle
if: success()
uses: actions/upload-artifact@v1
with:
name: android-aab
path: build/app/outputs/bundle/release/app-release.aab
build_ios:
name: Build iOS app
needs: run_tests
runs-on: self-hosted
steps:
- uses: actions/checkout@master
- name: Build artifacts
working-directory: ios
env:
FASTLANE_PASSWORD: ${{ secrets.FASTLANE_PASSWORD }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
TEMP_KEYCHAIN_NAME: ${{ secrets.TEMP_KEYCHAIN_NAME }}
TEMP_KEYCHAIN_PASSWORD: ${{ secrets.TEMP_KEYCHAIN_PASSWORD }}
API_KEY_ID: ${{ secrets.FASTLANE_API_KEY_ID }}
API_KEY_ISSUER: ${{ secrets.FASTLANE_API_KEY_ISSUER }}
API_KEY_FILEPATH: ${{ secrets.FASTLANE_API_KEY_FILEPATH }}
GEM_HOME: ~/.gems
run: |
/usr/local/bin/fastlane build_ios
- name: Upload IPA
if: success()
uses: actions/upload-artifact@v1
with:
name: ios-ipa
path: ios/Runner.ipa
deploy_android:
name: Deploy android internal
needs: build_android
runs-on: self-hosted
steps:
- uses: actions/checkout@master
- name: Download AAB
uses: actions/download-artifact@v2
with:
name: android-aab
- name: Set workspace in env
run: echo "workspace=$GITHUB_WORKSPACE" >> $GITHUB_ENV
- name: Deploy android
if: success()
working-directory: android
env:
AAB_PATH: ${{ env.workspace }}/app-release.aab
GEM_HOME: ~/.gems
run: |
/usr/local/bin/fastlane deploy_android internal:true
deploy_ios:
name: Deploy iOS testflight
needs: build_ios
runs-on: self-hosted
steps:
- uses: actions/checkout@master
- name: Download IPA
uses: actions/download-artifact@v2
with:
name: ios-ipa
- name: Set workspace in env
run: echo "workspace=$GITHUB_WORKSPACE" >> $GITHUB_ENV
- name: Deploy iOS
if: success()
working-directory: ios
env:
IPA_PATH: ${{ env.workspace }}/Runner.ipa
FASTLANE_PASSWORD: ${{ secrets.FASTLANE_PASSWORD }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
API_KEY_ID: ${{ secrets.FASTLANE_API_KEY_ID }}
API_KEY_ISSUER: ${{ secrets.FASTLANE_API_KEY_ISSUER }}
API_KEY_FILEPATH: ${{ secrets.FASTLANE_API_KEY_FILEPATH }}
GEM_HOME: ~/.gems
run: |
/usr/local/bin/fastlane deploy_ios testflight:true
================================================
FILE: .github/workflows/deploy_release.yml
================================================
name: DEPLOY_RELEASE
on:
push:
tags:
- 'v*-release'
jobs:
run_tests:
name: Run tests
runs-on: self-hosted
steps:
- uses: actions/checkout@master
- name: Run tests
run: |
flutter pub get
flutter test
build_android:
name: Build android app
needs: run_tests
runs-on: self-hosted
steps:
- uses: actions/checkout@master
- name: Build artifacts
working-directory: android
env:
FLUTTER_PATH: /Users/adapps/flutter
ANDROID_SDK_PATH: /Users/adapps/Library/Android/Sdk
GEM_HOME: ~/.gems
run: |
echo flutter.sdk=${{ env.FLUTTER_PATH }} > local.properties
echo sdk.dir=${{ env.ANDROID_SDK_PATH }} >> local.properties
echo flutter.buildMode=release >> local.properties
echo storeFile=${{ secrets.ANDROID_KEYSTORE_PATH }} > key.properties
echo keyAlias=${{ secrets.ANDROID_KEY_ALIAS }} >> key.properties
echo keyPassword=${{ secrets.ANDROID_KEY_PASSWORD }} >> key.properties
echo storePassword=${{ secrets.ANDROID_KEY_STORE_PASSWORD }} >> key.properties
/usr/local/bin/fastlane build_android production:true
rm -f key.properties
- name: Upload APK
if: success()
uses: actions/upload-artifact@v1
with:
name: android-apk
path: build/app/outputs/apk/release/app-release.apk
- name: Upload Bundle
if: success()
uses: actions/upload-artifact@v1
with:
name: android-aab
path: build/app/outputs/bundle/release/app-release.aab
build_ios:
name: Build iOS app
needs: run_tests
runs-on: self-hosted
steps:
- uses: actions/checkout@master
- name: Build artifacts
working-directory: ios
env:
FASTLANE_PASSWORD: ${{ secrets.FASTLANE_PASSWORD }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
TEMP_KEYCHAIN_NAME: ${{ secrets.TEMP_KEYCHAIN_NAME }}
TEMP_KEYCHAIN_PASSWORD: ${{ secrets.TEMP_KEYCHAIN_PASSWORD }}
API_KEY_ID: ${{ secrets.FASTLANE_API_KEY_ID }}
API_KEY_ISSUER: ${{ secrets.FASTLANE_API_KEY_ISSUER }}
API_KEY_FILEPATH: ${{ secrets.FASTLANE_API_KEY_FILEPATH }}
GEM_HOME: ~/.gems
run: |
/usr/local/bin/fastlane build_ios
- name: Upload IPA
if: success()
uses: actions/upload-artifact@v1
with:
name: ios-ipa
path: ios/Runner.ipa
deploy_android:
name: Deploy android production
needs: build_android
runs-on: self-hosted
steps:
- uses: actions/checkout@master
- name: Download AAB
uses: actions/download-artifact@v2
with:
name: android-aab
- name: Set workspace in env
run: echo "workspace=$GITHUB_WORKSPACE" >> $GITHUB_ENV
- name: Deploy android
if: success()
working-directory: android
env:
AAB_PATH: ${{ env.workspace }}/app-release.aab
GEM_HOME: ~/.gems
run: |
/usr/local/bin/fastlane deploy_android production:true
deploy_ios:
name: Deploy iOS production
needs: build_ios
runs-on: self-hosted
steps:
- uses: actions/checkout@master
- name: Download IPA
uses: actions/download-artifact@v2
with:
name: ios-ipa
- name: Set workspace in env
run: echo "workspace=$GITHUB_WORKSPACE" >> $GITHUB_ENV
- name: Deploy iOS
if: success()
working-directory: ios
env:
IPA_PATH: ${{ env.workspace }}/Runner.ipa
FASTLANE_PASSWORD: ${{ secrets.FASTLANE_PASSWORD }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
API_KEY_ID: ${{ secrets.FASTLANE_API_KEY_ID }}
API_KEY_ISSUER: ${{ secrets.FASTLANE_API_KEY_ISSUER }}
API_KEY_FILEPATH: ${{ secrets.FASTLANE_API_KEY_FILEPATH }}
GEM_HOME: ~/.gems
run: |
/usr/local/bin/fastlane deploy_ios
================================================
FILE: .github/workflows/deploy_release_android.yml
================================================
name: DEPLOY_RELEASE
on:
push:
tags:
- 'v*-release-android'
jobs:
run_tests:
name: Run tests
runs-on: self-hosted
steps:
- uses: actions/checkout@master
- name: Run tests
run: |
flutter pub get
flutter test
build_android:
name: Build android app
needs: run_tests
runs-on: self-hosted
steps:
- uses: actions/checkout@master
- name: Build artifacts
working-directory: android
env:
FLUTTER_PATH: /Users/adapps/flutter
ANDROID_SDK_PATH: /Users/adapps/Library/Android/Sdk
GEM_HOME: ~/.gems
run: |
echo flutter.sdk=${{ env.FLUTTER_PATH }} > local.properties
echo sdk.dir=${{ env.ANDROID_SDK_PATH }} >> local.properties
echo flutter.buildMode=release >> local.properties
echo storeFile=${{ secrets.ANDROID_KEYSTORE_PATH }} > key.properties
echo keyAlias=${{ secrets.ANDROID_KEY_ALIAS }} >> key.properties
echo keyPassword=${{ secrets.ANDROID_KEY_PASSWORD }} >> key.properties
echo storePassword=${{ secrets.ANDROID_KEY_STORE_PASSWORD }} >> key.properties
/usr/local/bin/fastlane build_android production:true
rm -f key.properties
- name: Upload APK
if: success()
uses: actions/upload-artifact@v1
with:
name: android-apk
path: build/app/outputs/apk/release/app-release.apk
- name: Upload Bundle
if: success()
uses: actions/upload-artifact@v1
with:
name: android-aab
path: build/app/outputs/bundle/release/app-release.aab
deploy_android:
name: Deploy android production
needs: build_android
runs-on: self-hosted
steps:
- uses: actions/checkout@master
- name: Download AAB
uses: actions/download-artifact@v2
with:
name: android-aab
- name: Set workspace in env
run: echo "workspace=$GITHUB_WORKSPACE" >> $GITHUB_ENV
- name: Deploy android
if: success()
working-directory: android
env:
AAB_PATH: ${{ env.workspace }}/app-release.aab
GEM_HOME: ~/.gems
run: |
/usr/local/bin/fastlane deploy_android production:true
================================================
FILE: .github/workflows/deploy_release_ios.yml
================================================
name: DEPLOY_RELEASE
on:
push:
tags:
- 'v*-release-ios'
jobs:
run_tests:
name: Run tests
runs-on: self-hosted
steps:
- uses: actions/checkout@master
- name: Run tests
run: |
flutter pub get
flutter test
build_ios:
name: Build iOS app
needs: run_tests
runs-on: self-hosted
steps:
- uses: actions/checkout@master
- name: Build artifacts
working-directory: ios
env:
FASTLANE_PASSWORD: ${{ secrets.FASTLANE_PASSWORD }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
TEMP_KEYCHAIN_NAME: ${{ secrets.TEMP_KEYCHAIN_NAME }}
TEMP_KEYCHAIN_PASSWORD: ${{ secrets.TEMP_KEYCHAIN_PASSWORD }}
API_KEY_ID: ${{ secrets.FASTLANE_API_KEY_ID }}
API_KEY_ISSUER: ${{ secrets.FASTLANE_API_KEY_ISSUER }}
API_KEY_FILEPATH: ${{ secrets.FASTLANE_API_KEY_FILEPATH }}
GEM_HOME: ~/.gems
run: |
/usr/local/bin/fastlane build_ios
- name: Upload IPA
if: success()
uses: actions/upload-artifact@v1
with:
name: ios-ipa
path: ios/Runner.ipa
deploy_ios:
name: Deploy iOS production
needs: build_ios
runs-on: self-hosted
steps:
- uses: actions/checkout@master
- name: Download IPA
uses: actions/download-artifact@v2
with:
name: ios-ipa
- name: Set workspace in env
run: echo "workspace=$GITHUB_WORKSPACE" >> $GITHUB_ENV
- name: Deploy iOS
if: success()
working-directory: ios
env:
IPA_PATH: ${{ env.workspace }}/Runner.ipa
FASTLANE_PASSWORD: ${{ secrets.FASTLANE_PASSWORD }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
API_KEY_ID: ${{ secrets.FASTLANE_API_KEY_ID }}
API_KEY_ISSUER: ${{ secrets.FASTLANE_API_KEY_ISSUER }}
API_KEY_FILEPATH: ${{ secrets.FASTLANE_API_KEY_FILEPATH }}
GEM_HOME: ~/.gems
run: |
/usr/local/bin/fastlane deploy_ios
================================================
FILE: .gitignore
================================================
# Miscellaneous
*.class
*.lock
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
# Eclipse project files
.classpath
.project
.metadata
.settings
# IntelliJ related
*.iml
*.ipr
*.iws
.idea/
# Visual Studio Code related
.vscode/
# Flutter repo-specific
/bin/cache/
/bin/mingit/
/dev/benchmarks/mega_gallery/
/dev/bots/.recipe_deps
/dev/bots/android_tools/
/dev/docs/doc/
/dev/docs/flutter.docs.zip
/dev/docs/lib/
/dev/docs/pubspec.yaml
/packages/flutter/coverage/
version
# packages file containing multi-root paths
.packages.generated
# Flutter/Dart/Pub related
**/doc/api/
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.packages
.pub-cache/
.pub/
build/
flutter_*.png
linked_*.ds
unlinked.ds
unlinked_spec.ds
# Android related
**/android/**/gradle-wrapper.jar
**/android/.gradle
**/android/captures/
**/android/gradlew
**/android/gradlew.bat
**/android/local.properties
**/android/**/GeneratedPluginRegistrant.java
**/android/key.properties
*.jks
# iOS/XCode related
**/ios/**/*.mode1v3
**/ios/**/*.mode2v3
**/ios/**/*.moved-aside
**/ios/**/*.pbxuser
**/ios/**/*.perspectivev3
**/ios/**/*sync/
**/ios/**/.sconsign.dblite
**/ios/**/.tags*
**/ios/**/.vagrant/
**/ios/**/DerivedData/
**/ios/**/Icon?
**/ios/**/Pods/
**/ios/**/.symlinks/
**/ios/**/profile
**/ios/**/xcuserdata
**/ios/.generated/
**/ios/Flutter/flutter_export_environment.sh
**/ios/Flutter/App.framework
**/ios/Flutter/Flutter.framework
**/ios/Flutter/Generated.xcconfig
**/ios/Flutter/app.flx
**/ios/Flutter/app.zip
**/ios/Flutter/flutter_assets/
**/ios/ServiceDefinitions.json
**/ios/Runner/GeneratedPluginRegistrant.*
**/ios/*.ipa
**/ios/*.app.dSYM.zip
**/ios/flutter_export_environment.sh
# Coverage
coverage/
# Exceptions to above rules.
!**/ios/**/default.mode1v3
!**/ios/**/default.mode2v3
!**/ios/**/default.pbxuser
!**/ios/**/default.perspectivev3
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
# Translations
lib/l10n/*.json
bin/settings.py
# Fastlane
android/fastlane/report.xml
ios/fastlane/README.md
ios/fastlane/report.xml
ios/fastlane/Preview.html
ios/fastlane/metadata/review_information
ios/fastlane/metadata/trade_representative_contact_information
================================================
FILE: LICENSE
================================================
The Blaise logo, animations, and all assets in the "assets" folder are copyrighted by Appditto LLC and used by permission for this project only.
All code is copyrighted by Appditto LLC under the MIT license.
Copyright (c) 2019-2022 Appditto LLC
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
# Blaise - Simple, Sleek & Secure PASCAL Wallet
[](https://github.com/appditto/blaise_wallet_flutter/releases) [](https://github.com/appditto/blaise_wallet_flutter/blob/master/LICENSE) [[](https://github.com/appditto/blaise_wallet_flutter/actions?query=workflow%3ACI) [](https://twitter.com/intent/follow?screen_name=Appditto)
## What is Blaise?

Blaise is a cross-platform mobile wallet for the PASCAL cryptocurrency. It is written in Dart using [Flutter](https://flutter.io).
 
Private keys are stored on the device and never transmitted to the server. Signing and other low-level operations are performed using [PascalDart](https://pub.dev/packages/pascaldart)
| Link | Description |
| :----- | :------ |
[blaisewallet.com](https://blaisewallet.com) | Blaise Homepage
[pascalcoin.org](https://pascalcoin.org) | PACAL Cryptocurrency Homepage
[appditto.com](https://appditto.com) | Appditto Homepage
## Server
Blaise can interact with any PascalCoin Daemon, a high-performance Python server is used for push notifications, periodic price updates, and the PASA purchase APIs.
Blaise's backend server source code can be found [here](https://github.com/appditto/blaise_wallet_server)
## Contributing
* Fork the repository and clone it to your local machine
* Follow the instructions [here](https://flutter.io/docs/get-started/install) to install the Flutter SDK
* Setup [Android Studio](https://flutter.io/docs/development/tools/android-studio) or [Visual Studio Code](https://flutter.io/docs/development/tools/vs-code).
## Building
Android: `flutter build apk`
iOS: `flutter build ios`
If you have a connected device or emulator you can run and deploy the app with `flutter run`
## Have a question?
If you need any help, feel free to file an issue if you do not manage to find a solution.
## License
Blaise is released under the MIT License
### Update translations
```
flutter pub pub run intl_translation:extract_to_arb --output-dir=lib/l10n lib/localization.dart
flutter pub pub run intl_translation:generate_from_arb --output-dir=lib/l10n \
--no-use-deferred-loading lib/localization.dart lib/l10n/intl_*.arb
```
================================================
FILE: android/Gemfile
================================================
source "https://rubygems.org"
gem "fastlane"
================================================
FILE: android/app/build.gradle
================================================
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
apply plugin: 'com.google.gms.google-services'
def keystoreProperties = new Properties()
def keystorePropertiesFile = rootProject.file('key.properties')
if (keystorePropertiesFile.exists()) {
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}
android {
compileSdkVersion 31
lintOptions {
disable 'InvalidPackage'
}
defaultConfig {
applicationId "com.appditto.blaise"
minSdkVersion 19
targetSdkVersion 31
multiDexEnabled true
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
signingConfigs {
release {
if (keystorePropertiesFile.exists()) {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile file(keystoreProperties['storeFile'])
storePassword keystoreProperties['storePassword']
}
}
}
buildTypes {
release {
if (keystorePropertiesFile.exists()) {
signingConfig signingConfigs.release
minifyEnabled true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
} else {
signingConfig signingConfigs.debug
}
}
}
}
flutter {
source '../..'
}
dependencies {
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.11"
implementation "com.bottlerocketstudios:vault:1.4.2"
implementation "androidx.multidex:multidex:2.0.0"
}
================================================
FILE: android/app/google-services.json
================================================
{
"project_info": {
"project_number": "786466973238",
"firebase_url": "https://blaise-a22fa.firebaseio.com",
"project_id": "blaise-a22fa",
"storage_bucket": "blaise-a22fa.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:786466973238:android:59d3b6ab52a943d3",
"android_client_info": {
"package_name": "com.appditto.blaise"
}
},
"oauth_client": [
{
"client_id": "786466973238-luvav6kcq097806661753c4jh98q7dre.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyAb7sG6W-UFHg9Fbb5Mx3LaIkE5e3wxrwo"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "786466973238-luvav6kcq097806661753c4jh98q7dre.apps.googleusercontent.com",
"client_type": 3
}
]
}
}
}
],
"configuration_version": "1"
}
================================================
FILE: android/app/proguard-rules.pro
================================================
-dontwarn android.**
## Flutter wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.** { *; }
-keep class io.flutter.util.** { *; }
-keep class io.flutter.view.** { *; }
-keep class io.flutter.** { *; }
-keep class io.flutter.plugins.** { *; }
## Blaise
-keep class com.appditto.** { *; }
## QR Scanner
-keep class com.apptreesoftware.** { *; }
## Webview plugin
-keep class com.flutter_webview_plugin.** { *; }
## Realm
-keep class io.realm.** { *; }
## Vault
-keep class com.bottlerocketstudios.** { *; }
## File picker
-keep class androidx.lifecycle.DefaultLifecycleObserver
================================================
FILE: android/app/src/debug/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.appditto.blaise">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
================================================
FILE: android/app/src/main/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.appditto.blaise">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.USE_BIOMETRIC"/>
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<!-- io.flutter.app.FlutterApplication is an android.app.Application that
calls FlutterMain.startInitialization(this); in its onCreate method.
In most cases you can leave this as-is, but you if you want to provide
additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here. -->
<application
android:name=".MultidexApplication"
android:label="Blaise"
android:icon="@mipmap/ic_launcher"
android:networkSecurityConfig="@xml/network_security_config">
<meta-data
android:name="flutterEmbedding"
android:value="2" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/ic_status_bar" />
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize"
android:allowBackup="false">
<!-- This keeps the window background of the activity showing
until Flutter renders its first frame. It can be removed if
there is no splash screen (such as the default splash screen
defined in @style/LaunchTheme). -->
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name="com.apptreesoftware.barcodescan.BarcodeScannerActivity"/>
</application>
</manifest>
================================================
FILE: android/app/src/main/java/com/appditto/blaise/LegacyStorage.java
================================================
package com.appditto.blaise;
import android.util.Base64;
public class LegacyStorage {
public String getSecret() {
return generateEncryptionKey();
}
private String generateEncryptionKey() {
if (Vault.getVault().getString(Vault.ENCRYPTION_KEY_NAME, null) == null) {
Vault.getVault()
.edit()
.putString(Vault.ENCRYPTION_KEY_NAME,
Base64.encodeToString(Vault.generateKey(), Base64.DEFAULT))
.apply();
}
return Vault.getVault().getString(Vault.ENCRYPTION_KEY_NAME, null);
}
}
================================================
FILE: android/app/src/main/java/com/appditto/blaise/MainActivity.java
================================================
package com.appditto.blaise;
import android.os.Bundle;
import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterFragmentActivity;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugins.GeneratedPluginRegistrant;
import io.flutter.view.FlutterMain;
public class MainActivity extends FlutterFragmentActivity {
private static final String CHANNEL = "fappchannel";
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine);
new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL)
.setMethodCallHandler(
(call, result) -> {
if (call.method.equals("getSecret")) {
result.success(new LegacyStorage().getSecret());
} else {
result.notImplemented();
}
}
);
}
}
================================================
FILE: android/app/src/main/java/com/appditto/blaise/MultidexApplication.java
================================================
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package com.appditto.blaise;
import android.util.Base64;
import android.app.Activity;
import android.app.Application;
import androidx.annotation.CallSuper;
import android.content.Context;
import androidx.multidex.MultiDex;
import io.flutter.view.FlutterMain;
/**
* Flutter implementation of {@link android.app.Application}, managing
* application-level global initializations.
*/
public class MultidexApplication extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
@Override
@CallSuper
public void onCreate() {
super.onCreate();
try {
Vault.initializeVault(this);
generateEncryptionKey();
} catch (Exception e) {
}
FlutterMain.startInitialization(this);
}
private Activity mCurrentActivity = null;
public Activity getCurrentActivity() {
return mCurrentActivity;
}
public void setCurrentActivity(Activity mCurrentActivity) {
this.mCurrentActivity = mCurrentActivity;
}
/**
* generate an encryption key and store in the vault
*/
private void generateEncryptionKey() {
if (Vault.getVault().getString(Vault.ENCRYPTION_KEY_NAME, null) == null) {
Vault.getVault()
.edit()
.putString(Vault.ENCRYPTION_KEY_NAME,
Base64.encodeToString(Vault.generateKey(), Base64.DEFAULT))
.apply();
}
}
}
================================================
FILE: android/app/src/main/java/com/appditto/blaise/Vault.java
================================================
package com.appditto.blaise;
import android.content.Context;
import com.bottlerocketstudios.vault.SharedPreferenceVault;
import com.bottlerocketstudios.vault.SharedPreferenceVaultFactory;
import com.bottlerocketstudios.vault.SharedPreferenceVaultRegistry;
import java.security.GeneralSecurityException;
import java.security.SecureRandom;
public class Vault {
public static final String ENCRYPTION_KEY_NAME = "key";
private static final String TAG = Vault.class.getSimpleName();
private static final String AUTOMATICALLY_KEYED_PREF_FILE_NAME = "com.appditto.blaise.automaticallyKeyedPref";
private static final String AUTOMATICALLY_KEYED_KEY_FILE_NAME = "com.appditto.blaise.automaticallyKeyedKey";
private static final String AUTOMATICALLY_KEYED_KEY_ALIAS = "com.appditto.blaise.automaticallyKeyed";
private static final int AUTOMATICALLY_KEYED_KEY_INDEX = 3;
private static final String AUTOMATICALLY_KEYED_PRESHARED_SECRET = "8.b;(xYpB<Af$NvtM-#TUqSG";
public static boolean initializeVault(Context context) {
try {
initKeyedVault(context);
return true;
} catch (GeneralSecurityException e) {
}
return false;
}
/**
* Create a vault that will automatically key itself initially with a random key.
*/
private static void initKeyedVault(Context context) throws GeneralSecurityException {
SharedPreferenceVault sharedPreferenceVault = SharedPreferenceVaultFactory
.getAppKeyedCompatAes256Vault(
context,
AUTOMATICALLY_KEYED_PREF_FILE_NAME,
AUTOMATICALLY_KEYED_KEY_FILE_NAME,
AUTOMATICALLY_KEYED_KEY_ALIAS,
AUTOMATICALLY_KEYED_KEY_INDEX,
AUTOMATICALLY_KEYED_PRESHARED_SECRET
);
SharedPreferenceVaultRegistry
.getInstance()
.addVault(
AUTOMATICALLY_KEYED_KEY_INDEX,
AUTOMATICALLY_KEYED_PREF_FILE_NAME,
AUTOMATICALLY_KEYED_KEY_ALIAS,
sharedPreferenceVault
);
}
/**
* Encapsulates index knowledge.
*/
public static SharedPreferenceVault getVault() {
return SharedPreferenceVaultRegistry.getInstance().getVault(AUTOMATICALLY_KEYED_KEY_INDEX);
}
/**
* Generate a secret key for use with encryption / decryption
*/
public static byte[] generateKey() {
byte[] key = new byte[64];
new SecureRandom().nextBytes(key);
return key;
}
}
================================================
FILE: android/app/src/main/res/drawable/launch_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/white" />
<!-- You can insert your own image assets here -->
<!-- <item>
<bitmap
android:gravity="center"
android:src="@mipmap/launch_image" />
</item> -->
</layer-list>
================================================
FILE: android/app/src/main/res/drawable-v24/ic_launcher_background.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:pathData="M0,0h108v108h-108z"
android:strokeWidth="1"
android:fillType="evenOdd"
android:strokeColor="#00000000">
<aapt:attr name="android:fillColor">
<gradient
android:startY="0"
android:startX="0"
android:endY="108"
android:endX="108"
android:type="linear">
<item android:offset="0" android:color="#FFFFFFFF"/>
<item android:offset="1" android:color="#FFE2DBD3"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M53.961,53.961m-32,0a32,32 0,1 1,64 0a32,32 0,1 1,-64 0"
android:strokeWidth="1"
android:fillType="evenOdd"
android:strokeColor="#00000000">
<aapt:attr name="android:fillColor">
<gradient
android:startY="21.960999"
android:startX="85.961"
android:endY="85.961"
android:endX="21.960999"
android:type="linear">
<item android:offset="0" android:color="#FFFCC642"/>
<item android:offset="1" android:color="#FFF7941F"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M53.961,53.961m-32,0a32,32 0,1 1,64 0a32,32 0,1 1,-64 0"
android:strokeWidth="1"
android:fillType="evenOdd"
android:strokeColor="#00000000">
<aapt:attr name="android:fillColor">
<gradient
android:gradientRadius="63.228214"
android:centerX="34.02683"
android:centerY="29.371035"
android:type="radial">
<item android:offset="0" android:color="#26FFFFFF"/>
<item android:offset="1" android:color="#00FFFFFF"/>
</gradient>
</aapt:attr>
</path>
</vector>
================================================
FILE: android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
================================================
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:pathData="M67.222,39.277L68.31,39.138C70.056,44.288 69.169,48.465 65.648,51.671C62.127,54.877 56.099,55.698 47.565,54.134L36.969,43.132L58.472,40.392L56.856,39.881L58.282,35.094L62.139,39.309L63.394,35.094L67.222,39.277ZM94,94L63.633,94L40.124,69.469L46.742,69.469L48.781,56.186L53.494,56.186L53.125,59.156L55.531,59.156L55.863,56.186L58.646,56.186L58.281,59.156L60.688,59.156L60.985,56.186C65.976,55.323 69.071,53.496 70.27,50.705C71.47,47.914 70.816,44.058 68.31,39.138L94,65.897L94,94Z"
android:strokeAlpha="0.35"
android:strokeWidth="1"
android:fillType="evenOdd"
android:strokeColor="#00000000"
android:fillAlpha="0.35">
<aapt:attr name="android:fillColor">
<gradient
android:startY="53.847736"
android:startX="54.57417"
android:endY="71.34273"
android:endX="69.587006"
android:type="linear">
<item android:offset="0" android:color="#FFC78200"/>
<item android:offset="1" android:color="#00C78200"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M55.521,38.191L55.875,35.094L58.281,35.094L57.927,38.191L60.677,38.191L61.031,35.094L63.438,35.094L63.083,38.191L65.385,38.191C73.546,38.191 73.546,56.186 64.012,56.186L61.027,56.186L60.688,59.156L58.281,59.156L58.621,56.186L55.871,56.186L55.531,59.156L53.125,59.156L53.464,56.186L48.781,56.186L46.742,69.469L40.124,69.469L44.643,45.955L50.523,45.955L49.847,51.097C55.823,51.097 59.992,51.097 62.355,51.097C65.9,51.097 66.5,43.132 63.219,43.132C61.031,43.132 52.281,43.132 36.969,43.132L40.124,38.191L55.521,38.191Z"
android:strokeWidth="1"
android:fillType="evenOdd"
android:strokeColor="#00000000">
<aapt:attr name="android:fillColor">
<gradient
android:startY="38.267662"
android:startX="40.075287"
android:endY="56.159637"
android:endX="62.724014"
android:type="linear">
<item android:offset="0" android:color="#FFFFFFFF"/>
<item android:offset="1" android:color="#FFEDE6DE"/>
</gradient>
</aapt:attr>
</path>
</vector>
================================================
FILE: android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>
================================================
FILE: android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>
================================================
FILE: android/app/src/main/res/values/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="LaunchTheme" parent="Theme.AppCompat.NoActionBar">
<!-- Show a splash screen on the activity. Automatically removed when
Flutter draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
</style>
</resources>
================================================
FILE: android/app/src/main/res/xml/network_security_config.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">explorer.pascalcoin.org</domain>
</domain-config>
</network-security-config>
================================================
FILE: android/app/src/profile/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.appditto.blaise">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
================================================
FILE: android/build.gradle
================================================
buildscript {
ext.kotlin_version = '1.4.31'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.4'
}
}
allprojects {
repositories {
google()
jcenter()
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(':app')
}
task clean(type: Delete) {
delete rootProject.buildDir
}
================================================
FILE: android/fastlane/Appfile
================================================
json_key_file("~/appditto/keys/playapi_key.json") # Path to the json secret file - Follow https://docs.fastlane.tools/actions/supply/#setup to get one
package_name("com.appditto.blaise") # e.g. com.krausefx.app
================================================
FILE: android/fastlane/Fastfile
================================================
# This file contains the fastlane.tools configuration
# You can find the documentation at https://docs.fastlane.tools
#
# For a list of all available actions, check out
#
# https://docs.fastlane.tools/actions
#
# For a list of all available plugins, check out
#
# https://docs.fastlane.tools/plugins/available-plugins
#
default_platform(:android)
platform :android do
before_all do |lane, options|
update_fastlane
end
desc "Build android aab and apk"
lane :build_android do |options|
sh "./flutter_build.sh --clean"
sh "./flutter_build.sh --apk"
end
desc "Deploy (Upload to play store)"
lane :deploy_android do |options|
upload_to_play_store(
track: options[:production] ? 'production' : options[:internal] ? 'internal' : options[:alpha] ? 'alpha' : 'beta',
aab: ENV['AAB_PATH'],
skip_upload_images: true,
skip_upload_screenshots: true,
)
end
end
================================================
FILE: android/fastlane/flutter_build.sh
================================================
#!/bin/bash
cd ../../
if [ "$1" == "--clean" ]
then
echo "Running clean..."
flutter clean
else
echo "Skipping clean..."
fi
if [ "$1" == "--apk" ]
then
echo "Building APK..."
flutter build apk --release
else
echo "Building AAB..."
flutter build appbundle --release
fi
================================================
FILE: android/fastlane/flutter_test.sh
================================================
#!/bin/bash
cd ../../
echo "Running tests"
flutter test
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/1.txt
================================================
Initial Beta Release
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/17.txt
================================================
- Add themes to QR scanner
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/18.txt
================================================
- Add themes to QR scanner
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/20.txt
================================================
- Improve QR Scanner reliability on some devices
- Add Catalan language
- Performance improvements and bug fixes
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/22.txt
================================================
- Live chat removed
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/23.txt
================================================
- General bug fixes & improvements
================================================
FILE: android/fastlane/metadata/android/en-US/changelogs/24.txt
================================================
- Disallow 0-fee transactions
- Android 12 compatibility
- Performance improvements
- Bug fixes
================================================
FILE: android/fastlane/metadata/android/en-US/full_description.txt
================================================
Features:
- Create a new Pascal wallet or import an existing one
- Manage multiple Pascal accounts (PASAs)
- Send Pascal instantly to anyone, anywhere in the world
- Change account names, transfer accounts, or list them for sale
- Manage contacts in an intuitive, easy-to-use address book
- View your accounts operations history
- Easily obtain new accounts by borrowing them or using the built-in freepasa integration
- Receive push notifications when you receive Pascal
- If you have questions, we can help - get live support directly from the developers
IMPORTANT:
Remember to backup your private key and store it in a safe place. It is the only way to recover your funds if you sign out of the wallet or lose your device! If someone else gets your unencrypted private key, they will have full control over your funds.
For support:
help@appditto.com
PascalCoin website:
https://pascalcoin.org
================================================
FILE: android/fastlane/metadata/android/en-US/short_description.txt
================================================
Simple, Sleek, & Secure Pascal Wallet
================================================
FILE: android/fastlane/metadata/android/en-US/title.txt
================================================
Blaise - Pascal Wallet
================================================
FILE: android/fastlane/metadata/android/en-US/video.txt
================================================
================================================
FILE: android/gradle/wrapper/gradle-wrapper.properties
================================================
#Fri Jun 23 08:50:38 CEST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-all.zip
================================================
FILE: android/gradle.properties
================================================
org.gradle.jvmargs=-Xmx1536M
android.enableJetifier=true
android.useAndroidX=true
android.enableR8=true
================================================
FILE: android/settings.gradle
================================================
include ':app'
def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
def plugins = new Properties()
def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
if (pluginsFile.exists()) {
pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
}
plugins.each { name, path ->
def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
include ":$name"
project(":$name").projectDir = pluginDirectory
}
================================================
FILE: assets/country_phone_map.json
================================================
[
{
"iso": "AF",
"text": "Afghanistan (+93)"
},
{
"iso": "AL",
"text": "Albania (+355)"
},
{
"iso": "DZ",
"text": "Algeria (+213)"
},
{
"iso": "AS",
"text": "American Samoa (+1)"
},
{
"iso": "AD",
"text": "Andorra (+376)"
},
{
"iso": "AO",
"text": "Angola (+244)"
},
{
"iso": "AI",
"text": "Anguilla (+1)"
},
{
"iso": "AG",
"text": "Antigua & Barbuda (+1)"
},
{
"iso": "AR",
"text": "Argentina (+54)"
},
{
"iso": "AM",
"text": "Armenia (+374)"
},
{
"iso": "AW",
"text": "Aruba (+297)"
},
{
"iso": "AC",
"text": "Ascension Island (+247)"
},
{
"iso": "AU",
"text": "Australia (+61)"
},
{
"iso": "AT",
"text": "Austria (+43)"
},
{
"iso": "AZ",
"text": "Azerbaijan (+994)"
},
{
"iso": "BS",
"text": "Bahamas (+1)"
},
{
"iso": "BH",
"text": "Bahrain (+973)"
},
{
"iso": "BD",
"text": "Bangladesh (+880)"
},
{
"iso": "BB",
"text": "Barbados (+1)"
},
{
"iso": "BY",
"text": "Belarus (+375)"
},
{
"iso": "BE",
"text": "Belgium (+32)"
},
{
"iso": "BZ",
"text": "Belize (+501)"
},
{
"iso": "BJ",
"text": "Benin (+229)"
},
{
"iso": "BM",
"text": "Bermuda (+1)"
},
{
"iso": "BT",
"text": "Bhutan (+975)"
},
{
"iso": "BO",
"text": "Bolivia (+591)"
},
{
"iso": "BA",
"text": "Bosnia & Herzegovina (+387)"
},
{
"iso": "BW",
"text": "Botswana (+267)"
},
{
"iso": "BR",
"text": "Brazil (+55)"
},
{
"iso": "IO",
"text": "British Indian Ocean Territory (+246)"
},
{
"iso": "VG",
"text": "British Virgin Islands (+1)"
},
{
"iso": "BN",
"text": "Brunei (+673)"
},
{
"iso": "BG",
"text": "Bulgaria (+359)"
},
{
"iso": "BF",
"text": "Burkina Faso (+226)"
},
{
"iso": "BI",
"text": "Burundi (+257)"
},
{
"iso": "KH",
"text": "Cambodia (+855)"
},
{
"iso": "CM",
"text": "Cameroon (+237)"
},
{
"iso": "CA",
"text": "Canada (+1)"
},
{
"iso": "CV",
"text": "Cape Verde (+238)"
},
{
"iso": "BQ",
"text": "Caribbean Netherlands (+599)"
},
{
"iso": "KY",
"text": "Cayman Islands (+1)"
},
{
"iso": "CF",
"text": "Central African Republic (+236)"
},
{
"iso": "TD",
"text": "Chad (+235)"
},
{
"iso": "CL",
"text": "Chile (+56)"
},
{
"iso": "CN",
"text": "China (+86)"
},
{
"iso": "CX",
"text": "Christmas Island (+61)"
},
{
"iso": "CC",
"text": "Cocos (Keeling) Islands (+61)"
},
{
"iso": "CO",
"text": "Colombia (+57)"
},
{
"iso": "KM",
"text": "Comoros (+269)"
},
{
"iso": "CG",
"text": "Congo - Brazzaville (+242)"
},
{
"iso": "CD",
"text": "Congo - Kinshasa (+243)"
},
{
"iso": "CK",
"text": "Cook Islands (+682)"
},
{
"iso": "CR",
"text": "Costa Rica (+506)"
},
{
"iso": "HR",
"text": "Croatia (+385)"
},
{
"iso": "CU",
"text": "Cuba (+53)"
},
{
"iso": "CW",
"text": "Curaçao (+599)"
},
{
"iso": "CY",
"text": "Cyprus (+357)"
},
{
"iso": "CZ",
"text": "Czechia (+420)"
},
{
"iso": "CI",
"text": "Côte d’Ivoire (+225)"
},
{
"iso": "DK",
"text": "Denmark (+45)"
},
{
"iso": "DJ",
"text": "Djibouti (+253)"
},
{
"iso": "DM",
"text": "Dominica (+1)"
},
{
"iso": "DO",
"text": "Dominican Republic (+1)"
},
{
"iso": "EC",
"text": "Ecuador (+593)"
},
{
"iso": "EG",
"text": "Egypt (+20)"
},
{
"iso": "SV",
"text": "El Salvador (+503)"
},
{
"iso": "GQ",
"text": "Equatorial Guinea (+240)"
},
{
"iso": "ER",
"text": "Eritrea (+291)"
},
{
"iso": "EE",
"text": "Estonia (+372)"
},
{
"iso": "ET",
"text": "Ethiopia (+251)"
},
{
"iso": "FK",
"text": "Falkland Islands (+500)"
},
{
"iso": "FO",
"text": "Faroe Islands (+298)"
},
{
"iso": "FJ",
"text": "Fiji (+679)"
},
{
"iso": "FI",
"text": "Finland (+358)"
},
{
"iso": "FR",
"text": "France (+33)"
},
{
"iso": "GF",
"text": "French Guiana (+594)"
},
{
"iso": "PF",
"text": "French Polynesia (+689)"
},
{
"iso": "GA",
"text": "Gabon (+241)"
},
{
"iso": "GM",
"text": "Gambia (+220)"
},
{
"iso": "GE",
"text": "Georgia (+995)"
},
{
"iso": "DE",
"text": "Germany (+49)"
},
{
"iso": "GH",
"text": "Ghana (+233)"
},
{
"iso": "GI",
"text": "Gibraltar (+350)"
},
{
"iso": "GR",
"text": "Greece (+30)"
},
{
"iso": "GL",
"text": "Greenland (+299)"
},
{
"iso": "GD",
"text": "Grenada (+1)"
},
{
"iso": "GP",
"text": "Guadeloupe (+590)"
},
{
"iso": "GU",
"text": "Guam (+1)"
},
{
"iso": "GT",
"text": "Guatemala (+502)"
},
{
"iso": "GG",
"text": "Guernsey (+44)"
},
{
"iso": "GN",
"text": "Guinea (+224)"
},
{
"iso": "GW",
"text": "Guinea-Bissau (+245)"
},
{
"iso": "GY",
"text": "Guyana (+592)"
},
{
"iso": "HT",
"text": "Haiti (+509)"
},
{
"iso": "HN",
"text": "Honduras (+504)"
},
{
"iso": "HK",
"text": "Hong Kong SAR China (+852)"
},
{
"iso": "HU",
"text": "Hungary (+36)"
},
{
"iso": "IS",
"text": "Iceland (+354)"
},
{
"iso": "IN",
"text": "India (+91)"
},
{
"iso": "ID",
"text": "Indonesia (+62)"
},
{
"iso": "IR",
"text": "Iran (+98)"
},
{
"iso": "IQ",
"text": "Iraq (+964)"
},
{
"iso": "IE",
"text": "Ireland (+353)"
},
{
"iso": "IM",
"text": "Isle of Man (+44)"
},
{
"iso": "IL",
"text": "Israel (+972)"
},
{
"iso": "IT",
"text": "Italy (+39)"
},
{
"iso": "JM",
"text": "Jamaica (+1)"
},
{
"iso": "JP",
"text": "Japan (+81)"
},
{
"iso": "JE",
"text": "Jersey (+44)"
},
{
"iso": "JO",
"text": "Jordan (+962)"
},
{
"iso": "KZ",
"text": "Kazakhstan (+7)"
},
{
"iso": "KE",
"text": "Kenya (+254)"
},
{
"iso": "KI",
"text": "Kiribati (+686)"
},
{
"iso": "XK",
"text": "Kosovo (+383)"
},
{
"iso": "KW",
"text": "Kuwait (+965)"
},
{
"iso": "KG",
"text": "Kyrgyzstan (+996)"
},
{
"iso": "LA",
"text": "Laos (+856)"
},
{
"iso": "LV",
"text": "Latvia (+371)"
},
{
"iso": "LB",
"text": "Lebanon (+961)"
},
{
"iso": "LS",
"text": "Lesotho (+266)"
},
{
"iso": "LR",
"text": "Liberia (+231)"
},
{
"iso": "LY",
"text": "Libya (+218)"
},
{
"iso": "LI",
"text": "Liechtenstein (+423)"
},
{
"iso": "LT",
"text": "Lithuania (+370)"
},
{
"iso": "LU",
"text": "Luxembourg (+352)"
},
{
"iso": "MO",
"text": "Macau SAR China (+853)"
},
{
"iso": "MK",
"text": "Macedonia (+389)"
},
{
"iso": "MG",
"text": "Madagascar (+261)"
},
{
"iso": "MW",
"text": "Malawi (+265)"
},
{
"iso": "MY",
"text": "Malaysia (+60)"
},
{
"iso": "MV",
"text": "Maldives (+960)"
},
{
"iso": "ML",
"text": "Mali (+223)"
},
{
"iso": "MT",
"text": "Malta (+356)"
},
{
"iso": "MH",
"text": "Marshall Islands (+692)"
},
{
"iso": "MQ",
"text": "Martinique (+596)"
},
{
"iso": "MR",
"text": "Mauritania (+222)"
},
{
"iso": "MU",
"text": "Mauritius (+230)"
},
{
"iso": "YT",
"text": "Mayotte (+262)"
},
{
"iso": "MX",
"text": "Mexico (+52)"
},
{
"iso": "FM",
"text": "Micronesia (+691)"
},
{
"iso": "MD",
"text": "Moldova (+373)"
},
{
"iso": "MC",
"text": "Monaco (+377)"
},
{
"iso": "MN",
"text": "Mongolia (+976)"
},
{
"iso": "ME",
"text": "Montenegro (+382)"
},
{
"iso": "MS",
"text": "Montserrat (+1)"
},
{
"iso": "MA",
"text": "Morocco (+212)"
},
{
"iso": "MZ",
"text": "Mozambique (+258)"
},
{
"iso": "MM",
"text": "Myanmar (Burma) (+95)"
},
{
"iso": "NA",
"text": "Namibia (+264)"
},
{
"iso": "NR",
"text": "Nauru (+674)"
},
{
"iso": "NP",
"text": "Nepal (+977)"
},
{
"iso": "NL",
"text": "Netherlands (+31)"
},
{
"iso": "NC",
"text": "New Caledonia (+687)"
},
{
"iso": "NZ",
"text": "New Zealand (+64)"
},
{
"iso": "NI",
"text": "Nicaragua (+505)"
},
{
"iso": "NE",
"text": "Niger (+227)"
},
{
"iso": "NG",
"text": "Nigeria (+234)"
},
{
"iso": "NU",
"text": "Niue (+683)"
},
{
"iso": "NF",
"text": "Norfolk Island (+672)"
},
{
"iso": "KP",
"text": "North Korea (+850)"
},
{
"iso": "MP",
"text": "Northern Mariana Islands (+1)"
},
{
"iso": "NO",
"text": "Norway (+47)"
},
{
"iso": "OM",
"text": "Oman (+968)"
},
{
"iso": "PK",
"text": "Pakistan (+92)"
},
{
"iso": "PW",
"text": "Palau (+680)"
},
{
"iso": "PS",
"text": "Palestinian Territories (+970)"
},
{
"iso": "PA",
"text": "Panama (+507)"
},
{
"iso": "PG",
"text": "Papua New Guinea (+675)"
},
{
"iso": "PY",
"text": "Paraguay (+595)"
},
{
"iso": "PE",
"text": "Peru (+51)"
},
{
"iso": "PH",
"text": "Philippines (+63)"
},
{
"iso": "PL",
"text": "Poland (+48)"
},
{
"iso": "PT",
"text": "Portugal (+351)"
},
{
"iso": "PR",
"text": "Puerto Rico (+1)"
},
{
"iso": "QA",
"text": "Qatar (+974)"
},
{
"iso": "RO",
"text": "Romania (+40)"
},
{
"iso": "RU",
"text": "Russia (+7)"
},
{
"iso": "RW",
"text": "Rwanda (+250)"
},
{
"iso": "RE",
"text": "Réunion (+262)"
},
{
"iso": "WS",
"text": "Samoa (+685)"
},
{
"iso": "SM",
"text": "San Marino (+378)"
},
{
"iso": "SA",
"text": "Saudi Arabia (+966)"
},
{
"iso": "SN",
"text": "Senegal (+221)"
},
{
"iso": "RS",
"text": "Serbia (+381)"
},
{
"iso": "SC",
"text": "Seychelles (+248)"
},
{
"iso": "SL",
"text": "Sierra Leone (+232)"
},
{
"iso": "SG",
"text": "Singapore (+65)"
},
{
"iso": "SX",
"text": "Sint Maarten (+1)"
},
{
"iso": "SK",
"text": "Slovakia (+421)"
},
{
"iso": "SI",
"text": "Slovenia (+386)"
},
{
"iso": "SB",
"text": "Solomon Islands (+677)"
},
{
"iso": "SO",
"text": "Somalia (+252)"
},
{
"iso": "ZA",
"text": "South Africa (+27)"
},
{
"iso": "KR",
"text": "South Korea (+82)"
},
{
"iso": "SS",
"text": "South Sudan (+211)"
},
{
"iso": "ES",
"text": "Spain (+34)"
},
{
"iso": "LK",
"text": "Sri Lanka (+94)"
},
{
"iso": "BL",
"text": "St. Barthélemy (+590)"
},
{
"iso": "SH",
"text": "St. Helena (+290)"
},
{
"iso": "KN",
"text": "St. Kitts & Nevis (+1)"
},
{
"iso": "LC",
"text": "St. Lucia (+1)"
},
{
"iso": "MF",
"text": "St. Martin (+590)"
},
{
"iso": "PM",
"text": "St. Pierre & Miquelon (+508)"
},
{
"iso": "VC",
"text": "St. Vincent & Grenadines (+1)"
},
{
"iso": "SD",
"text": "Sudan (+249)"
},
{
"iso": "SR",
"text": "Suriname (+597)"
},
{
"iso": "SJ",
"text": "Svalbard & Jan Mayen (+47)"
},
{
"iso": "SZ",
"text": "Swaziland (+268)"
},
{
"iso": "SE",
"text": "Sweden (+46)"
},
{
"iso": "CH",
"text": "Switzerland (+41)"
},
{
"iso": "SY",
"text": "Syria (+963)"
},
{
"iso": "ST",
"text": "São Tomé & Príncipe (+239)"
},
{
"iso": "TW",
"text": "Taiwan (+886)"
},
{
"iso": "TJ",
"text": "Tajikistan (+992)"
},
{
"iso": "TZ",
"text": "Tanzania (+255)"
},
{
"iso": "TH",
"text": "Thailand (+66)"
},
{
"iso": "TL",
"text": "Timor-Leste (+670)"
},
{
"iso": "TG",
"text": "Togo (+228)"
},
{
"iso": "TK",
"text": "Tokelau (+690)"
},
{
"iso": "TO",
"text": "Tonga (+676)"
},
{
"iso": "TT",
"text": "Trinidad & Tobago (+1)"
},
{
"iso": "TA",
"text": "Tristan da Cunha (+290)"
},
{
"iso": "TN",
"text": "Tunisia (+216)"
},
{
"iso": "TR",
"text": "Turkey (+90)"
},
{
"iso": "TM",
"text": "Turkmenistan (+993)"
},
{
"iso": "TC",
"text": "Turks & Caicos Islands (+1)"
},
{
"iso": "TV",
"text": "Tuvalu (+688)"
},
{
"iso": "VI",
"text": "U.S. Virgin Islands (+1)"
},
{
"iso": "UG",
"text": "Uganda (+256)"
},
{
"iso": "UA",
"text": "Ukraine (+380)"
},
{
"iso": "AE",
"text": "United Arab Emirates (+971)"
},
{
"iso": "GB",
"text": "United Kingdom (+44)"
},
{
"iso": "US",
"text": "United States (+1)"
},
{
"iso": "UY",
"text": "Uruguay (+598)"
},
{
"iso": "UZ",
"text": "Uzbekistan (+998)"
},
{
"iso": "VU",
"text": "Vanuatu (+678)"
},
{
"iso": "VA",
"text": "Vatican City (+39)"
},
{
"iso": "VE",
"text": "Venezuela (+58)"
},
{
"iso": "VN",
"text": "Vietnam (+84)"
},
{
"iso": "WF",
"text": "Wallis & Futuna (+681)"
},
{
"iso": "EH",
"text": "Western Sahara (+212)"
},
{
"iso": "YE",
"text": "Yemen (+967)"
},
{
"iso": "ZM",
"text": "Zambia (+260)"
},
{
"iso": "ZW",
"text": "Zimbabwe (+263)"
},
{
"iso": "AX",
"text": "Åland Islands (+358)"
}
]
================================================
FILE: bin/arb_to_pojson.py
================================================
#!/usr/bin/env python
import argparse
import json
import sys
parser = argparse.ArgumentParser()
parser.add_argument('-f', '--file', help='Path to arb file', required=True)
options = parser.parse_args()
if not options.file.endswith("arb"):
print(f"Can't process {options.file}, file must be a .arb")
parser.print_help()
sys.exit(0)
out_file = options.file.replace(".arb", ".json")
ret = []
with open(options.file) as arb_file:
data = json.load(arb_file)
obj = {}
for key, value in data.items():
if key.startswith("@@"):
continue
if key.startswith("@"):
obj['context'] = value['description']
ret.append(obj)
obj = {}
else:
obj['reference'] = key
obj['term'] = value.replace("\n", "<newline>")
with open(out_file, 'w') as outf:
json.dump(ret, outf, indent=4, ensure_ascii=False)
print(f"Wrote {out_file}")
================================================
FILE: bin/pojson_to_arb.py
================================================
#!/usr/bin/env python
import argparse
import json
import sys
parser = argparse.ArgumentParser()
parser.add_argument('-f', '--file', help='Path to json file', required=True)
options = parser.parse_args()
if not options.file.endswith("json"):
print(f"Can't process {options.file}, file must be a .jon")
parser.print_help()
sys.exit(0)
out_file = options.file.replace(".json", ".arb")
ret = {}
with open(options.file) as json_file:
data = json.load(json_file)
for obj in data:
ret[obj['reference']] = obj['definition'].replace("<newline>", "\n")
with open(out_file, 'w') as outf:
json.dump(ret, outf, indent=2, ensure_ascii=False)
print(f"Wrote {out_file}")
================================================
FILE: bin/poupdate.py
================================================
import os
import json
import subprocess
from poeditor import POEditorAPI
from settings import PO_API_KEY, PROJECT_ID
client = POEditorAPI(api_token=PO_API_KEY)
languages = client.list_project_languages(PROJECT_ID)
language_codes = []
for l in languages:
if l['percentage'] > 50:
language_codes.append(l['code'])
for code in language_codes:
print(f"Downloading {code}...")
client.export(PROJECT_ID, code, file_type='json', local_file=f'lib/l10n/intl_{code}.json')
print(f"Downloaded {code}")
for fname in os.listdir('lib/l10n'):
if fname.endswith('.json'):
fname = f'lib/l10n/{fname}'
out_file = fname.replace(".json", ".arb")
ret = {}
with open(fname) as json_file:
data = json.load(json_file)
for obj in data:
if 'reference' in obj and 'definition' in obj and obj['definition'] is not None:
ret[obj['reference']] = obj['definition'].replace("<newline>", "\n")
with open(out_file, 'w') as outf:
json.dump(ret, outf, indent=2, ensure_ascii=False)
print(f"Wrote {out_file}")
os.remove(fname)
subprocess.run('flutter pub pub run intl_translation:generate_from_arb --output-dir=lib/l10n --no-use-deferred-loading lib/localization.dart lib/l10n/intl_*.arb', shell=True)
================================================
FILE: bin/settings.py.example
================================================
PO_API_KEY='1234'
PROJECT_ID=1234
================================================
FILE: ci/get_version.sh
================================================
#!/bin/bash
# Parse yaml file
parse_yaml() {
local prefix=$2
local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo @|tr @ '\034')
sed -ne "s|^\($s\)\($w\)$s:$s\"\(.*\)\"$s\$|\1$fs\2$fs\3|p" \
-e "s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $1 |
awk -F$fs '{
indent = length($1)/2;
vname[indent] = $2;
for (i in vname) {if (i > indent) {delete vname[i]}}
if (length($3) > 0) {
vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
printf("%s%s%s=\"%s\"\n", "'$prefix'",vn, $2, $3);
}
}'
}
get_version() {
# Read pubspec
eval $(parse_yaml pubspec.yaml "config_")
# Get VERSION
echo "v$(echo $config_version | cut -f1 -d"+")"
}
================================================
FILE: ci/tag_version.sh
================================================
#!/bin/bash
source ./ci/get_version.sh
VERSION=$(get_version)
GITHUB_OAUTH_BASIC="${GITHUB_API_TOKEN}:x-oauth-basic"
AUTH="Authorization: token $GITHUB_API_TOKEN"
GH_PUBLISH="$GH_REPO/releases"
# See if TAG exists
#export GIT_DIR=./.git
#if git rev-parse $VERSION >/dev/null 2>&1
#then
# echo "Tag already exists"
# exit 0
#fi
#echo "Tag not found, creating..."
#git tag -d $VERSION
#git tag $VERSION HEAD
#git push origin :$VERSION
#git push origin $VERSION
#if [ $? -ne 0 ]
#then
# echo "Fatal, failed to push tag $VERSION"
# exit 1
#fi
pubresponse=$(curl -u "$GITHUB_OAUTH_BASIC" -sH "$AUTH" --data '{"tag_name":"'"$VERSION"'", "name":"Blaise '"${VERSION}"'", "draft":false, "prerelease":false}' $GH_PUBLISH)
if [[ "$pubresponse" == *"already_exists"* ]]; then
echo "Tag already exists, skipping"
exit 0
elif [[ "$pubresponse" == *"Validation Failed"* ]]; then
echo "Error! ${pubresponse}"
exit 1
fi
echo "Release created"
exit 0
================================================
FILE: ci/upload_android_github.sh
================================================
#!/bin/bash
#
# Based on:
# https://gist.github.com/stefanbuck/ce788fee19ab6eb0b4447a85fc99f447
#
# Uploads our android release APK to a corresponding release on github releases page
#
source ./ci/get_version.sh
VERSION=$(get_version)
# Define variables.
GH_TAGS="$GH_REPO/releases/tags/$VERSION"
GH_PUBLISH="$GH_REPO/releases"
WGET_ARGS="--content-disposition --auth-no-challenge --no-cookie"
CURL_ARGS="-LJO#"
filename=./build/app/outputs/apk/release/app-release.apk
GITHUB_OAUTH_BASIC="${GITHUB_API_TOKEN}:x-oauth-basic"
AUTH="Authorization: token $GITHUB_API_TOKEN"
# Validate token.
curl -o /dev/null -sH "$AUTH" $GH_REPO || { echo "Error: Invalid repo, token or network issue!"; exit 1; }
# Read asset tags.
response=$(curl -u "$GITHUB_OAUTH_BASIC" -sH "$AUTH" $GH_TAGS)
# Get ID of the asset based on given filename.
eval $(echo "$response" | grep -m 1 "id.:" | grep -w id | tr : = | tr -cd '[[:alnum:]]=')
[ "$id" ] || {
echo "Error: Failed to get release id for tag: $VERSION";
echo "$response" awk 'length($0)<100' >&2;
exit 1;
}
# Upload asset
echo "Uploading asset... $localAssetPath" >&2
# Construct url
GH_ASSET="https://uploads.github.com/repos/$GH_OWNER/$GH_REPO_NAME/releases/$id/assets?name=blaise_${VERSION}.apk"
curl -u "$GITHUB_OAUTH_BASIC" --data-binary @"$filename" -H "$AUTH" -H "Content-Type: application/octet-stream" $GH_ASSET
================================================
FILE: ios/Flutter/AppFrameworkInfo.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleExecutable</key>
<string>App</string>
<key>CFBundleIdentifier</key>
<string>io.flutter.flutter.app</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>App</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>MinimumOSVersion</key>
<string>9.0</string>
</dict>
</plist>
================================================
FILE: ios/Flutter/Debug.xcconfig
================================================
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
#include "Generated.xcconfig"
================================================
FILE: ios/Flutter/Flutter.podspec
================================================
#
# NOTE: This podspec is NOT to be published. It is only used as a local source!
# This is a generated file; do not edit or check into version control.
#
Pod::Spec.new do |s|
s.name = 'Flutter'
s.version = '1.0.0'
s.summary = 'High-performance, high-fidelity mobile apps.'
s.homepage = 'https://flutter.io'
s.license = { :type => 'MIT' }
s.author = { 'Flutter Dev Team' => 'flutter-dev@googlegroups.com' }
s.source = { :git => 'https://github.com/flutter/engine', :tag => s.version.to_s }
s.ios.deployment_target = '9.0'
# Framework linking is handled by Flutter tooling, not CocoaPods.
# Add a placeholder to satisfy `s.dependency 'Flutter'` plugin podspecs.
s.vendored_frameworks = 'path/to/nothing'
end
================================================
FILE: ios/Flutter/Release.xcconfig
================================================
#include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
#include "Generated.xcconfig"
================================================
FILE: ios/Gemfile
================================================
source "https://rubygems.org"
gem "fastlane"
gem "cocoapods"
================================================
FILE: ios/Podfile
================================================
# Uncomment this line to define a global platform for your project
# platform :ios, '9.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'
project 'Runner', {
'Debug' => :debug,
'Profile' => :release,
'Release' => :release,
}
def flutter_root
generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
unless File.exist?(generated_xcode_build_settings_path)
raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
end
File.foreach(generated_xcode_build_settings_path) do |line|
matches = line.match(/FLUTTER_ROOT\=(.*)/)
return matches[1].strip if matches
end
raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
end
require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
flutter_ios_podfile_setup
target 'Runner' do
use_frameworks!
use_modular_headers!
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
end
post_install do |installer|
installer.pods_project.targets.each do |target|
flutter_additional_ios_build_settings(target)
end
end
================================================
FILE: ios/Runner/AppDelegate.h
================================================
#import <Flutter/Flutter.h>
#import <UIKit/UIKit.h>
@interface AppDelegate : FlutterAppDelegate
- (void)lc_setAlternateIconName:(NSString*)iconName;
@end
================================================
FILE: ios/Runner/AppDelegate.m
================================================
#include "AppDelegate.h"
#include "GeneratedPluginRegistrant.h"
#import "Runner-Swift.h"
@implementation AppDelegate
- (void)lc_setAlternateIconName:(NSString*)iconName
{
if ([[UIApplication sharedApplication] respondsToSelector:@selector(supportsAlternateIcons)] &&
[[UIApplication sharedApplication] supportsAlternateIcons])
{
NSMutableString *selectorString = [[NSMutableString alloc] initWithCapacity:40];
[selectorString appendString:@"_setAlternate"];
[selectorString appendString:@"IconName:"];
[selectorString appendString:@"completionHandler:"];
SEL selector = NSSelectorFromString(selectorString);
IMP imp = [[UIApplication sharedApplication] methodForSelector:selector];
void (*func)(id, SEL, id, id) = (void *)imp;
if (func)
{
func([UIApplication sharedApplication], selector, iconName, ^(NSError * _Nullable error) {});
}
}
}
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
FlutterViewController* controller = (FlutterViewController*)self.window.rootViewController;
FlutterMethodChannel* appChannel = [FlutterMethodChannel
methodChannelWithName:@"fappchannel"
binaryMessenger:controller];
[appChannel setMethodCallHandler:^(FlutterMethodCall* call, FlutterResult result) {
if ([@"changeIcon" isEqualToString:call.method]) {
NSDictionary *arguments = [call arguments];
NSString *icon = arguments[@"icon"];
if (icon == NULL || icon.length == 0) {
result([FlutterError errorWithCode:@"error"
message:@"Icon is required"
details:nil]);
return;
}
if ([@"Light" isEqualToString:icon ]) {
[self lc_setAlternateIconName:nil];
} else if ([@"Dark" isEqualToString:icon]) {
[self lc_setAlternateIconName:@"Dark"];
} else if ([@"Copper" isEqualToString:icon]) {
[self lc_setAlternateIconName:@"Copper"];
}
} else if ([@"setSecureClipboardItem" isEqualToString:call.method]) {
NSDictionary *arguments = [call arguments];
NSString *value = arguments[@"value"];
[SecureClipboard setClipboardItem:value];
} else {
result(FlutterMethodNotImplemented);
}
}];
[GeneratedPluginRegistrant registerWithRegistry:self];
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
@end
================================================
FILE: ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
================================================
{
"images" : [
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "20x20",
"idiom" : "iphone",
"filename" : "Icon-App-20x20@3x.png",
"scale" : "3x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "iphone",
"filename" : "Icon-App-29x29@3x.png",
"scale" : "3x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "iphone",
"filename" : "Icon-App-40x40@3x.png",
"scale" : "3x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@2x.png",
"scale" : "2x"
},
{
"size" : "60x60",
"idiom" : "iphone",
"filename" : "Icon-App-60x60@3x.png",
"scale" : "3x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@1x.png",
"scale" : "1x"
},
{
"size" : "20x20",
"idiom" : "ipad",
"filename" : "Icon-App-20x20@2x.png",
"scale" : "2x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@1x.png",
"scale" : "1x"
},
{
"size" : "29x29",
"idiom" : "ipad",
"filename" : "Icon-App-29x29@2x.png",
"scale" : "2x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@1x.png",
"scale" : "1x"
},
{
"size" : "40x40",
"idiom" : "ipad",
"filename" : "Icon-App-40x40@2x.png",
"scale" : "2x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@1x.png",
"scale" : "1x"
},
{
"size" : "76x76",
"idiom" : "ipad",
"filename" : "Icon-App-76x76@2x.png",
"scale" : "2x"
},
{
"size" : "83.5x83.5",
"idiom" : "ipad",
"filename" : "Icon-App-83.5x83.5@2x.png",
"scale" : "2x"
},
{
"size" : "1024x1024",
"idiom" : "ios-marketing",
"filename" : "Icon-App-1024x1024@1x.png",
"scale" : "1x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "universal",
"filename" : "LaunchImage.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"filename" : "LaunchImage@2x.png",
"scale" : "2x"
},
{
"idiom" : "universal",
"filename" : "LaunchImage@3x.png",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
================================================
# Launch Screen Assets
You can customize the launch screen with your own desired assets by replacing the image files in this directory.
You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
================================================
FILE: ios/Runner/Base.lproj/LaunchScreen.storyboard
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/>
<viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
</imageView>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/>
<constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/>
</constraints>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
<resources>
<image name="LaunchImage" width="168" height="185"/>
</resources>
</document>
================================================
FILE: ios/Runner/Base.lproj/Main.storyboard
================================================
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
</dependencies>
<scenes>
<!--Flutter View Controller-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
<viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
</scene>
</scenes>
</document>
================================================
FILE: ios/Runner/GoogleService-Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CLIENT_ID</key>
<string>786466973238-8v19gq83o927niadorolmvts501v3jn6.apps.googleusercontent.com</string>
<key>REVERSED_CLIENT_ID</key>
<string>com.googleusercontent.apps.786466973238-8v19gq83o927niadorolmvts501v3jn6</string>
<key>API_KEY</key>
<string>AIzaSyC-BXfz1vd342KBhsEK-7HwkVDZ9OFGCbg</string>
<key>GCM_SENDER_ID</key>
<string>786466973238</string>
<key>PLIST_VERSION</key>
<string>1</string>
<key>BUNDLE_ID</key>
<string>com.appditto.blaise</string>
<key>PROJECT_ID</key>
<string>blaise-a22fa</string>
<key>STORAGE_BUCKET</key>
<string>blaise-a22fa.appspot.com</string>
<key>IS_ADS_ENABLED</key>
<false></false>
<key>IS_ANALYTICS_ENABLED</key>
<false></false>
<key>IS_APPINVITE_ENABLED</key>
<true></true>
<key>IS_GCM_ENABLED</key>
<true></true>
<key>IS_SIGNIN_ENABLED</key>
<true></true>
<key>GOOGLE_APP_ID</key>
<string>1:786466973238:ios:59d3b6ab52a943d3</string>
<key>DATABASE_URL</key>
<string>https://blaise-a22fa.firebaseio.com</string>
</dict>
</plist>
================================================
FILE: ios/Runner/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleDisplayName</key>
<string>Blaise</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>blaise_wallet_flutter</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(FLUTTER_BUILD_NAME)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>$(FLUTTER_BUILD_NUMBER)</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSCameraUsageDescription</key>
<string>Camera permission is required for barcode scanning.</string>
<key>NSFaceIDUsageDescription</key>
<string>App needs to authenticate using faces.</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>This app requires access to the photo library.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>This app requires access to the photo library.</string>
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
<string>remote-notification</string>
</array>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>CFBundleIcons</key>
<dict>
<key>CFBundlePrimaryIcon</key>
<dict>
<key>CFBundleIconFiles</key>
<array>
<string>Icon-App</string>
</array>
<key>UIPrerenderedIcon</key>
<false/>
</dict>
<key>CFBundleAlternateIcons</key>
<dict>
<key>Dark</key>
<dict>
<key>CFBundleIconFiles</key>
<array>
<string>Dark-Icon-App</string>
</array>
<key>UIPrerenderedIcon</key>
<false/>
</dict>
<key>Copper</key>
<dict>
<key>CFBundleIconFiles</key>
<array>
<string>Copper-Icon-App</string>
</array>
<key>UIPrerenderedIcon</key>
<false/>
</dict>
</dict>
</dict>
</dict>
</plist>
================================================
FILE: ios/Runner/Runner-Bridging-Header.h
================================================
//
// Use this file to import your target's public headers that you would like to expose to Swift.
//
================================================
FILE: ios/Runner/Runner.entitlements
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>aps-environment</key>
<string>development</string>
</dict>
</plist>
================================================
FILE: ios/Runner/clipboard.swift
================================================
import Foundation
import UIKit
import MobileCoreServices
@objcMembers class SecureClipboard: NSObject {
static func setClipboardItem(_ value: String) {
let pasteboardItems = [[
kUTTypePlainText as String: value
]]
let pasteboardOptions : [UIPasteboard.OptionsKey: Any] = [
UIPasteboard.OptionsKey.expirationDate: Date().addingTimeInterval(60 * 2),
UIPasteboard.OptionsKey.localOnly: true
]
UIPasteboard.general.setItems(pasteboardItems, options: pasteboardOptions)
}
}
================================================
FILE: ios/Runner/main.m
================================================
#import <Flutter/Flutter.h>
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char* argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
================================================
FILE: ios/Runner.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 50;
objects = {
/* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
24FF04FFD6FD224422092912 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 42074951F44019CE5ACED5F2 /* Pods_Runner.framework */; };
3961A6B22304917B0088A4FD /* Dark-Icon-App@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3961A6A92304917A0088A4FD /* Dark-Icon-App@3x.png */; };
3961A6B32304917B0088A4FD /* Icon-App@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3961A6AA2304917A0088A4FD /* Icon-App@3x.png */; };
3961A6B42304917B0088A4FD /* Dark-Icon-App@1x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3961A6AB2304917A0088A4FD /* Dark-Icon-App@1x.png */; };
3961A6B52304917B0088A4FD /* Icon-App@1x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3961A6AC2304917A0088A4FD /* Icon-App@1x.png */; };
3961A6B62304917B0088A4FD /* Copper-Icon-App@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3961A6AD2304917A0088A4FD /* Copper-Icon-App@3x.png */; };
3961A6B72304917B0088A4FD /* Dark-Icon-App@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3961A6AE2304917A0088A4FD /* Dark-Icon-App@2x.png */; };
3961A6B82304917B0088A4FD /* Copper-Icon-App@1x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3961A6AF2304917A0088A4FD /* Copper-Icon-App@1x.png */; };
3961A6B92304917B0088A4FD /* Copper-Icon-App@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3961A6B02304917A0088A4FD /* Copper-Icon-App@2x.png */; };
3961A6BA2304917B0088A4FD /* Icon-App@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 3961A6B12304917B0088A4FD /* Icon-App@2x.png */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
761828152358E8C4001F6E1D /* clipboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761828142358E8C4001F6E1D /* clipboard.swift */; };
7693980122F353FF009A1CF6 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 7693980022F353FF009A1CF6 /* GoogleService-Info.plist */; };
978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; };
97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
9705A1C41CF9048500538489 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
2D7AF7B673C6DFA1AB52610D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
3961A6A92304917A0088A4FD /* Dark-Icon-App@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Dark-Icon-App@3x.png"; sourceTree = "<group>"; };
3961A6AA2304917A0088A4FD /* Icon-App@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-App@3x.png"; sourceTree = "<group>"; };
3961A6AB2304917A0088A4FD /* Dark-Icon-App@1x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Dark-Icon-App@1x.png"; sourceTree = "<group>"; };
3961A6AC2304917A0088A4FD /* Icon-App@1x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-App@1x.png"; sourceTree = "<group>"; };
3961A6AD2304917A0088A4FD /* Copper-Icon-App@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Copper-Icon-App@3x.png"; sourceTree = "<group>"; };
3961A6AE2304917A0088A4FD /* Dark-Icon-App@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Dark-Icon-App@2x.png"; sourceTree = "<group>"; };
3961A6AF2304917A0088A4FD /* Copper-Icon-App@1x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Copper-Icon-App@1x.png"; sourceTree = "<group>"; };
3961A6B02304917A0088A4FD /* Copper-Icon-App@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Copper-Icon-App@2x.png"; sourceTree = "<group>"; };
3961A6B12304917B0088A4FD /* Icon-App@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Icon-App@2x.png"; sourceTree = "<group>"; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
42074951F44019CE5ACED5F2 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
761828142358E8C4001F6E1D /* clipboard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = clipboard.swift; sourceTree = "<group>"; };
766334DC22D66099008DDB1D /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
7693980022F353FF009A1CF6 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
7693980222F35413009A1CF6 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
95A7889671BF4F1B90796A25 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
A4ECA53D14AF7F1AF649555F /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
97C146EB1CF9000F007C117D /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
24FF04FFD6FD224422092912 /* Pods_Runner.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
0782DE0FD6A6B5B3DE006797 /* Pods */ = {
isa = PBXGroup;
children = (
95A7889671BF4F1B90796A25 /* Pods-Runner.debug.xcconfig */,
A4ECA53D14AF7F1AF649555F /* Pods-Runner.release.xcconfig */,
2D7AF7B673C6DFA1AB52610D /* Pods-Runner.profile.xcconfig */,
);
name = Pods;
sourceTree = "<group>";
};
3961A6BB230491C40088A4FD /* resources */ = {
isa = PBXGroup;
children = (
3961A6AF2304917A0088A4FD /* Copper-Icon-App@1x.png */,
3961A6B02304917A0088A4FD /* Copper-Icon-App@2x.png */,
3961A6AD2304917A0088A4FD /* Copper-Icon-App@3x.png */,
3961A6AB2304917A0088A4FD /* Dark-Icon-App@1x.png */,
3961A6AE2304917A0088A4FD /* Dark-Icon-App@2x.png */,
3961A6A92304917A0088A4FD /* Dark-Icon-App@3x.png */,
3961A6AC2304917A0088A4FD /* Icon-App@1x.png */,
3961A6B12304917B0088A4FD /* Icon-App@2x.png */,
3961A6AA2304917A0088A4FD /* Icon-App@3x.png */,
);
path = resources;
sourceTree = "<group>";
};
9740EEB11CF90186004384FC /* Flutter */ = {
isa = PBXGroup;
children = (
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
9740EEB21CF90195004384FC /* Debug.xcconfig */,
7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
9740EEB31CF90195004384FC /* Generated.xcconfig */,
);
name = Flutter;
sourceTree = "<group>";
};
97C146E51CF9000F007C117D = {
isa = PBXGroup;
children = (
9740EEB11CF90186004384FC /* Flutter */,
97C146F01CF9000F007C117D /* Runner */,
97C146EF1CF9000F007C117D /* Products */,
0782DE0FD6A6B5B3DE006797 /* Pods */,
B45E5D8B972749CD5E5098A6 /* Frameworks */,
);
sourceTree = "<group>";
};
97C146EF1CF9000F007C117D /* Products */ = {
isa = PBXGroup;
children = (
97C146EE1CF9000F007C117D /* Runner.app */,
);
name = Products;
sourceTree = "<group>";
};
97C146F01CF9000F007C117D /* Runner */ = {
isa = PBXGroup;
children = (
3961A6BB230491C40088A4FD /* resources */,
7693980222F35413009A1CF6 /* Runner.entitlements */,
7693980022F353FF009A1CF6 /* GoogleService-Info.plist */,
7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */,
7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */,
97C146FA1CF9000F007C117D /* Main.storyboard */,
97C146FD1CF9000F007C117D /* Assets.xcassets */,
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
97C147021CF9000F007C117D /* Info.plist */,
97C146F11CF9000F007C117D /* Supporting Files */,
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
766334DC22D66099008DDB1D /* Runner-Bridging-Header.h */,
761828142358E8C4001F6E1D /* clipboard.swift */,
);
path = Runner;
sourceTree = "<group>";
};
97C146F11CF9000F007C117D /* Supporting Files */ = {
isa = PBXGroup;
children = (
97C146F21CF9000F007C117D /* main.m */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
B45E5D8B972749CD5E5098A6 /* Frameworks */ = {
isa = PBXGroup;
children = (
42074951F44019CE5ACED5F2 /* Pods_Runner.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
97C146ED1CF9000F007C117D /* Runner */ = {
isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
2975C03BF22FC6C9407CF999 /* [CP] Check Pods Manifest.lock */,
9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
D745A3CD92FDF2233DC810C1 /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = Runner;
productName = Runner;
productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 1300;
ORGANIZATIONNAME = "The Chromium Authors";
TargetAttributes = {
97C146ED1CF9000F007C117D = {
CreatedOnToolsVersion = 7.3.1;
DevelopmentTeam = 44R7KF7645;
LastSwiftMigration = 1020;
ProvisioningStyle = Automatic;
SystemCapabilities = {
com.apple.BackgroundModes = {
enabled = 1;
};
com.apple.Push = {
enabled = 1;
};
};
};
};
};
buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
compatibilityVersion = "Xcode 3.2";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
);
mainGroup = 97C146E51CF9000F007C117D;
productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
97C146ED1CF9000F007C117D /* Runner */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
97C146EC1CF9000F007C117D /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
3961A6B22304917B0088A4FD /* Dark-Icon-App@3x.png in Resources */,
3961A6B52304917B0088A4FD /* Icon-App@1x.png in Resources */,
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
3961A6B62304917B0088A4FD /* Copper-Icon-App@3x.png in Resources */,
3961A6BA2304917B0088A4FD /* Icon-App@2x.png in Resources */,
7693980122F353FF009A1CF6 /* GoogleService-Info.plist in Resources */,
3961A6B32304917B0088A4FD /* Icon-App@3x.png in Resources */,
3961A6B72304917B0088A4FD /* Dark-Icon-App@2x.png in Resources */,
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
3961A6B82304917B0088A4FD /* Copper-Icon-App@1x.png in Resources */,
3961A6B42304917B0088A4FD /* Dark-Icon-App@1x.png in Resources */,
3961A6B92304917B0088A4FD /* Copper-Icon-App@2x.png in Resources */,
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
2975C03BF22FC6C9407CF999 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Thin Binary";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Run Script";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
};
D745A3CD92FDF2233DC810C1 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh",
"${BUILT_PRODUCTS_DIR}/DKImagePickerController/DKImagePickerController.framework",
"${BUILT_PRODUCTS_DIR}/DKPhotoGallery/DKPhotoGallery.framework",
"${BUILT_PRODUCTS_DIR}/FMDB/FMDB.framework",
"${BUILT_PRODUCTS_DIR}/FirebaseCore/FirebaseCore.framework",
"${BUILT_PRODUCTS_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework",
"${BUILT_PRODUCTS_DIR}/FirebaseInstallations/FirebaseInstallations.framework",
"${BUILT_PRODUCTS_DIR}/FirebaseMessaging/FirebaseMessaging.framework",
"${BUILT_PRODUCTS_DIR}/GoogleDataTransport/GoogleDataTransport.framework",
"${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework",
"${BUILT_PRODUCTS_DIR}/MTBBarcodeScanner/MTBBarcodeScanner.framework",
"${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework",
"${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework",
"${BUILT_PRODUCTS_DIR}/SwiftyGif/SwiftyGif.framework",
"${BUILT_PRODUCTS_DIR}/barcode_scan/barcode_scan.framework",
"${BUILT_PRODUCTS_DIR}/device_info/device_info.framework",
"${BUILT_PRODUCTS_DIR}/file_picker/file_picker.framework",
"${BUILT_PRODUCTS_DIR}/flutter_secure_storage/flutter_secure_storage.framework",
"${BUILT_PRODUCTS_DIR}/flutter_webview_plugin/flutter_webview_plugin.framework",
"${BUILT_PRODUCTS_DIR}/local_auth/local_auth.framework",
"${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework",
"${BUILT_PRODUCTS_DIR}/package_info/package_info.framework",
"${BUILT_PRODUCTS_DIR}/path_provider_ios/path_provider_ios.framework",
"${BUILT_PRODUCTS_DIR}/share/share.framework",
"${BUILT_PRODUCTS_DIR}/shared_preferences_ios/shared_preferences_ios.framework",
"${BUILT_PRODUCTS_DIR}/sqflite/sqflite.framework",
"${BUILT_PRODUCTS_DIR}/vibrate/vibrate.framework",
);
name = "[CP] Embed Pods Frameworks";
outputPaths = (
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DKImagePickerController.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DKPhotoGallery.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FMDB.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCore.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCoreDiagnostics.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseInstallations.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseMessaging.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleDataTransport.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleUtilities.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MTBBarcodeScanner.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBLPromises.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftyGif.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/barcode_scan.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/device_info.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/file_picker.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_secure_storage.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/flutter_webview_plugin.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/local_auth.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/nanopb.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/package_info.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider_ios.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/share.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared_preferences_ios.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sqflite.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/vibrate.framework",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
97C146EA1CF9000F007C117D /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */,
97C146F31CF9000F007C117D /* main.m in Sources */,
761828152358E8C4001F6E1D /* clipboard.swift in Sources */,
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
97C146FA1CF9000F007C117D /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
97C146FB1CF9000F007C117D /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
97C147001CF9000F007C117D /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
249021D3217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Profile;
};
249021D4217E4FDB00AE95B9 /* Profile */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = 44R7KF7645;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 10.3;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
PRODUCT_BUNDLE_IDENTIFIER = com.appditto.blaise;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OBJC_INTERFACE_HEADER_NAME = "Runner-Swift.h";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
VERSIONING_SYSTEM = "apple-generic";
};
name = Profile;
};
97C147031CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
97C147041CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 9.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
TARGETED_DEVICE_FAMILY = "1,2";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
97C147061CF9000F007C117D /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = 44R7KF7645;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 10.3;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
PRODUCT_BUNDLE_IDENTIFIER = com.appditto.blaise;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OBJC_INTERFACE_HEADER_NAME = "Runner-Swift.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
};
97C147071CF9000F007C117D /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = 44R7KF7645;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
INFOPLIST_FILE = Runner/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 10.3;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
);
PRODUCT_BUNDLE_IDENTIFIER = com.appditto.blaise;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OBJC_INTERFACE_HEADER_NAME = "Runner-Swift.h";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
VERSIONING_SYSTEM = "apple-generic";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
97C147031CF9000F007C117D /* Debug */,
97C147041CF9000F007C117D /* Release */,
249021D3217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
isa = XCConfigurationList;
buildConfigurations = (
97C147061CF9000F007C117D /* Debug */,
97C147071CF9000F007C117D /* Release */,
249021D4217E4FDB00AE95B9 /* Profile */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 97C146E61CF9000F007C117D /* Project object */;
}
================================================
FILE: ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "self:">
</FileRef>
</Workspace>
================================================
FILE: ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1300"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</MacroExpansion>
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Profile"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "97C146ED1CF9000F007C117D"
BuildableName = "Runner.app"
BlueprintName = "Runner"
ReferencedContainer = "container:Runner.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
================================================
FILE: ios/Runner.xcworkspace/contents.xcworkspacedata
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:Runner.xcodeproj">
</FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">
</FileRef>
</Workspace>
================================================
FILE: ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IDEDidComputeMac32BitWarning</key>
<true/>
</dict>
</plist>
================================================
FILE: ios/fastlane/Appfile
================================================
app_identifier("com.appditto.blaise") # The bundle identifier of your app
apple_id("appdittoapps@gmail.com") # Your Apple email address
itc_team_id("119652752") # App Store Connect Team ID
team_id("44R7KF7645") # Developer Portal Team ID
# For more information about the Appfile, see:
# https://docs.fastlane.tools/advanced/#appfile
================================================
FILE: ios/fastlane/Deliverfile
================================================
release_notes({
'default' => File.read('./fastlane/metadata/en-US/release_notes.txt'),
'en-US' => File.read('./fastlane/metadata/en-US/release_notes.txt')
});
submission_information({
add_id_info_serves_ads: false,
add_id_info_tracks_action: false,
add_id_info_tracks_install: false,
add_id_info_uses_idfa: false,
content_rights_has_rights: true,
content_rights_contains_third_party_content: true,
export_compliance_platform: 'ios',
export_compliance_compliance_required: false,
export_compliance_encryption_updated: false,
export_compliance_app_type: nil,
export_compliance_uses_encryption: true,
export_compliance_is_exempt: true,
export_compliance_contains_third_party_cryptography: true,
export_compliance_contains_proprietary_cryptography: false,
export_compliance_available_on_french_store: true
});
================================================
FILE: ios/fastlane/Fastfile
================================================
# This file contains the fastlane.tools configuration
# You can find the documentation at https://docs.fastlane.tools
#
# For a list of all available actions, check out
#
# https://docs.fastlane.tools/actions
#
# For a list of all available plugins, check out
#
# https://docs.fastlane.tools/plugins/available-plugins
#
default_platform(:ios)
TEMP_KEYCHAIN_NAME_DEFAULT = "fastlane_flutter"
TEMP_KEYCHAN_PASSWORD_DEFAULT = "temppassword"
SIGH_PROVISIONING_PROFILE_NAME = "com.appditto.blaise AppStore"
def delete_temp_keychain(name)
delete_keychain(
name: name
) if File.exist? File.expand_path("~/Library/Keychains/#{name}-db")
end
def create_temp_keychain(name, password)
create_keychain(
name: name,
password: password,
unlock: false,
timeout: 0
)
end
def ensure_temp_keychain(name, password)
delete_temp_keychain(name)
create_temp_keychain(name, password)
end
platform :ios do
before_all do |lane, options|
update_fastlane
end
desc "Build & sign iOS app"
lane :build_ios do |options|
begin
sh "cp -Rp ../Runner.xcodeproj ../Runner.xcodeproj.bak"
keychain_name = ENV['TEMP_KEYCHAIN_NAME'] || TEMP_KEYCHAIN_NAME_DEFAULT
keychain_password = ENV['TEMP_KEYCHAIN_PASSWORD'] || TEMP_KEYCHAN_PASSWORD_DEFAULT
ensure_temp_keychain(keychain_name, keychain_password)
api_key = app_store_connect_api_key(
key_id: ENV['API_KEY_ID'],
issuer_id: ENV['API_KEY_ISSUER'],
key_filepath: ENV['API_KEY_FILEPATH'],
duration: 1200,
in_house: false
)
match(
app_identifier: CredentialsManager::AppfileConfig.try_fetch_value(:app_identifier),
type: "appstore",
keychain_name: keychain_name,
keychain_password: keychain_password,
readonly: false,
skip_provisioning_profiles: true,
api_key: api_key
)
cert(
keychain_path: "~/Library/Keychains/#{keychain_name}-db",
keychain_password: keychain_password,
api_key: api_key
)
sigh(
app_identifier: CredentialsManager::AppfileConfig.try_fetch_value(:app_identifier),
readonly: false,
cert_id: lane_context[SharedValues::CERT_CERTIFICATE_ID],
provisioning_name: ENV['SIGH_PROVISIONING_PROFILE_NAME'],
ignore_profiles_with_different_name: true,
api_key: api_key
)
disable_automatic_code_signing(
path: "./Runner.xcodeproj",
team_id: CredentialsManager::AppfileConfig.try_fetch_value(:team_id),
profile_name: lane_context[SharedValues::SIGH_NAME],
profile_uuid: lane_context[SharedValues::SIGH_UUID],
code_sign_identity: "iPhone Distribution"
)
sh "./flutter_build.sh --clean"
build_ios_app(
export_options: {
method: "app-store",
provisioningProfiles: {
"com.appditto.blaise" => ENV['SIGH_PROVISIONING_PROFILE_NAME'],
}
}
)
rescue SystemExit, Interrupt
raise
rescue Exception => e
delete_temp_keychain(keychain_name)
sh "cp -Rp ../Runner.xcodeproj.bak/* ../Runner.xcodeproj/ || true"
sh "rm -rf ../Runner.xcodeproj.bak"
raise
ensure
delete_temp_keychain(keychain_name)
sh "cp -Rp ../Runner.xcodeproj.bak/* ../Runner.xcodeproj/ || true"
sh "rm -rf ../Runner.xcodeproj.bak"
end
end
desc "Upload iOS app to app store"
lane :deploy_ios do |options|
api_key = app_store_connect_api_key(
key_id: ENV['API_KEY_ID'],
issuer_id: ENV['API_KEY_ISSUER'],
key_filepath: ENV['API_KEY_FILEPATH'],
duration: 1200,
in_house: false
)
if options[:testflight]
upload_to_testflight(
api_key: api_key,
skip_submission: true,
ipa: ENV['IPA_PATH']
)
else
deliver(
api_key: api_key,
skip_metadata: false,
skip_screenshots: true,
submit_for_review: true,
force: true,
ipa: ENV['IPA_PATH'],
precheck_include_in_app_purchases: false
)
end
end
end
================================================
FILE: ios/fastlane/Matchfile
================================================
git_url("git@github.com:appditto/ios-certificates.git")
storage_mode("git")
type("development") # The default type, can be: appstore, adhoc, enterprise or development
# app_identifier(["tools.fastlane.app", "tools.fastlane.app2"])
# username("user@fastlane.tools") # Your Apple Developer Portal username
# For all available options run `fastlane match --help`
# Remove the # in the beginning of the line to enable the other options
# The docs are available on https://docs.fastlane.tools/actions/match
================================================
FILE: ios/fastlane/flutter_build.sh
================================================
#!/bin/bash
cd ../../
if [ "$1" == "--clean" ]
then
echo "Running clean..."
flutter clean
else
echo "Skipping clean..."
fi
flutter build ios --release --no-codesign
================================================
FILE: ios/fastlane/flutter_test.sh
================================================
#!/bin/bash
cd ../../
echo "Running tests"
flutter test
================================================
FILE: ios/fastlane/metadata/copyright.txt
================================================
2022 Avenge Media LLC
================================================
FILE: ios/fastlane/metadata/en-US/apple_tv_privacy_policy.txt
================================================
================================================
FILE: ios/fastlane/metadata/en-US/description.txt
================================================
Blaise is a simple, sleek & secure Pascal wallet.
Features:
- Create a new Pascal wallet or import an existing one
- Manage multiple Pascal accounts (PASAs)
- Send Pascal instantly to anyone, anywhere in the world
- Change account names, transfer accounts, or list them for sale
- Manage contacts in an intuitive, easy-to-use address book
- View your accounts operations history
- Customize the wallet with various themes
- Select one of the 5+ languages available
IMPORTANT:
Remember to backup your private key and store it in a safe place. It is the only way to recover your funds if you sign out of the wallet or lose your device! If someone else gets your unencrypted private key, they will have full control over your funds.
================================================
FILE: ios/fastlane/metadata/en-US/keywords.txt
================================================
pascal, pascalcoin, cryptocurrency, crypto, wallet, bitcoin, ethereum, exchange, blockchain, flutter
================================================
FILE: ios/fastlane/metadata/en-US/marketing_url.txt
================================================
https://blaisewallet.com
================================================
FILE: ios/fastlane/metadata/en-US/name.txt
================================================
Blaise - Pascal Wallet
================================================
FILE: ios/fastlane/metadata/en-US/privacy_url.txt
================================================
https://appditto.github.io/blaise/privacy_policy.html
================================================
FILE: ios/fastlane/metadata/en-US/promotional_text.txt
================================================
Simple, Sleek & Secure Pascal Wallet
================================================
FILE: ios/fastlane/metadata/en-US/release_notes.txt
================================================
- Disallow 0-fee transactions
- Performance improvements
- Bug fixes
================================================
FILE: ios/fastlane/metadata/en-US/subtitle.txt
================================================
Securely send & receive Pascal
================================================
FILE: ios/fastlane/metadata/en-US/support_url.txt
================================================
https://help.blaisewallet.com/
================================================
FILE: ios/fastlane/metadata/primary_category.txt
================================================
MZGenre.Finance
================================================
FILE: ios/fastlane/metadata/primary_first_sub_category.txt
================================================
================================================
FILE: ios/fastlane/metadata/primary_second_sub_category.txt
================================================
================================================
FILE: ios/fastlane/metadata/secondary_category.txt
================================================
MZGenre.Utilities
================================================
FILE: ios/fastlane/metadata/secondary_first_sub_category.txt
================================================
================================================
FILE: ios/fastlane/metadata/secondary_second_sub_category.txt
================================================
================================================
FILE: lib/appstate_container.dart
================================================
import 'dart:async';
import 'package:blaise_wallet_flutter/bus/events.dart';
import 'package:blaise_wallet_flutter/model/available_currency.dart';
import 'package:blaise_wallet_flutter/model/available_languages.dart';
import 'package:blaise_wallet_flutter/model/available_themes.dart';
import 'package:blaise_wallet_flutter/model/db/appdb.dart';
import 'package:blaise_wallet_flutter/model/db/contact.dart';
import 'package:blaise_wallet_flutter/network/model/request/subscribe_request.dart';
import 'package:blaise_wallet_flutter/network/model/response/subscribe_response.dart';
import 'package:blaise_wallet_flutter/network/ws_client.dart';
import 'package:blaise_wallet_flutter/service_locator.dart';
import 'package:blaise_wallet_flutter/store/wallet/wallet.dart';
import 'package:blaise_wallet_flutter/themes.dart';
import 'package:blaise_wallet_flutter/util/sharedprefs_util.dart';
import 'package:event_taxi/event_taxi.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:pascaldart/pascaldart.dart';
final Wallet walletState = Wallet();
const List<String> PREACHED_SVG_ASSETS = [
'assets/illustration_backup.svg',
'assets/illustration_backup_dark.svg',
'assets/illustration_new_wallet.svg',
'assets/illustration_new_wallet_dark.svg',
'assets/illustration_security.svg',
'assets/illustration_security_dark.svg',
'assets/illustration_two_options.svg',
'assets/illustration_two_options_dark.svg',
'assets/illustration_borrowed.svg',
'assets/illustration_borrowed_dark.svg',
];
class _InheritedStateContainer extends InheritedWidget {
// Data is your entire state. In our case just 'User'
final StateContainerState data;
// You must pass through a child and your state.
_InheritedStateContainer({
Key key,
@required this.data,
@required Widget child,
}) : super(key: key, child: child);
// This is a built in method which you can use to check if
// any state has changed. If not, no reason to rebuild all the widgets
// that rely on your state.
@override
bool updateShouldNotify(_InheritedStateContainer old) => true;
}
class StateContainer extends StatefulWidget {
// You must pass through a child.
final Widget child;
StateContainer({@required this.child});
// This is the secret sauce. Write your own 'of' method that will behave
// Exactly like MediaQuery.of and Theme.of
// It basically says 'get the data from the widget of this type.
static StateContainerState of(BuildContext context) {
return context
.dependOnInheritedWidgetOfExactType<_InheritedStateContainer>()
.data;
}
@override
StateContainerState createState() => StateContainerState();
}
/// App InheritedWidget
/// This is where we handle the global state and also where
/// we interact with the server and make requests/handle+propagate responses
///
/// Basically the central hub behind the entire app
class StateContainerState extends State<StateContainer> {
// Theme
BaseTheme curTheme = BlaiseLightTheme();
// Language
LanguageSetting curLanguage = LanguageSetting(AvailableLanguage.DEFAULT);
// Currency
String currencyLocale;
Locale deviceLocale = Locale('en', 'US');
AvailableCurrency curCurrency = AvailableCurrency(AvailableCurrencyEnum.USD);
// Helper FN to precache SVG assets for performance
Future<void> _precacheSvgs() async {
PREACHED_SVG_ASSETS.forEach((asset) {
precachePicture(
ExactAssetPicture(SvgPicture.svgStringDecoder, asset), context);
});
}
// Change language
void updateLanguage(LanguageSetting language) {
setState(() {
curLanguage = language;
});
}
// Change the theme
Future<void> updateTheme(ThemeSetting theme, {bool setIcon = true}) async {
if (theme != null && theme.getTheme() != curTheme) {
if (mounted) {
setState(() {
this.curTheme = theme.getTheme();
});
}
await sl.get<SharedPrefsUtil>().setTheme(theme);
}
if (setIcon) {
AppIcon.setAppIcon(theme.getTheme().appIcon);
}
}
/// Add donations contact if it hasnt already been added
Future<void> _addSampleContact() async {
bool contactAdded = await sl.get<SharedPrefsUtil>().getFirstContactAdded();
if (!contactAdded) {
bool addressExists = await sl
.get<DBHelper>()
.contactExistsWithAccount(AccountNumber.fromInt(1185729));
if (addressExists) {
return;
}
bool nameExists =
await sl.get<DBHelper>().contactExistsWithName("BlaiseDonations");
if (nameExists) {
return;
}
await sl.get<SharedPrefsUtil>().setFirstContactAdded(true);
Contact c = Contact(
name: "BlaiseDonations",
account: AccountNumber.fromInt(1185729),
payload: "Thanks!");
await sl.get<DBHelper>().saveContact(c);
}
}
StreamSubscription<ConnStatusEvent> _connStatusSub;
StreamSubscription<SubscribeEvent> _subscribeEventSub;
StreamSubscription<PriceEvent> _priceEventSub;
StreamSubscription<NewOperationEvent> _newOpSub;
// Register RX event listenerss
void _registerBus() {
_subscribeEventSub =
EventTaxiImpl.singleton().registerTo<SubscribeEvent>().listen((event) {
handleSubscribeResponse(event.response);
});
_priceEventSub =
EventTaxiImpl.singleton().registerTo<PriceEvent>().listen((event) {
// PriceResponse's get pushed periodically, it wasn't a request we made so don't pop the queue
walletState.btcPrice = event.response.btcPrice;
walletState.localCurrencyPrice = event.response.price;
});
_connStatusSub =
EventTaxiImpl.singleton().registerTo<ConnStatusEvent>().listen((event) {
if (event.status == ConnectionStatus.CONNECTED) {
walletState.requestUpdate();
} else if (event.status == ConnectionStatus.DISCONNECTED &&
!sl.get<WSClient>().suspended) {
sl.get<WSClient>().initCommunication();
}
});
_newOpSub = EventTaxiImpl.singleton()
.registerTo<NewOperationEvent>()
.listen((event) {
walletState.addNewOp(event.operation);
});
}
void _destroyBus() {
if (_connStatusSub != null) {
_connStatusSub.cancel();
}
if (_subscribeEventSub != null) {
_subscribeEventSub.cancel();
}
if (_priceEventSub != null) {
_priceEventSub.cancel();
}
if (_newOpSub != null) {
_newOpSub.cancel();
}
}
@override
void initState() {
super.initState();
_registerBus();
// Precache SVG Assets
_precacheSvgs();
// Set initial theme
sl.get<SharedPrefsUtil>().getTheme().then((themeSetting) {
updateTheme(themeSetting, setIcon: false);
});
// Add initial contact if not already present
_addSampleContact();
// Set currency locale here for the UI to access
sl.get<SharedPrefsUtil>().getCurrency(deviceLocale).then((currency) {
setState(() {
currencyLocale = currency.getLocale().toString();
curCurrency = currency;
});
});
// Get default language setting
sl.get<SharedPrefsUtil>().getLanguage().then((language) {
setState(() {
curLanguage = language;
});
});
}
@override
void dispose() {
_destroyBus();
super.dispose();
}
/// Handle account_subscribe response
void handleSubscribeResponse(SubscribeResponse response) {
// Set currency locale here for the UI to access
sl.get<SharedPrefsUtil>().getCurrency(deviceLocale).then((currency) {
setState(() {
currencyLocale = currency.getLocale().toString();
curCurrency = currency;
});
});
// Server gives us a UUID for future requests on subscribe
if (response.uuid != null) {
sl.get<SharedPrefsUtil>().setUuid(response.uuid);
}
walletState.localCurrencyPrice = response.price;
walletState.btcPrice = response.btcPrice;
walletState.hasExceededBorrowLimit = !response.borrowEligible;
walletState.hasReceivedSubscribeResponse = true;
sl.get<WSClient>().pop();
sl.get<WSClient>().processQueue();
}
@override
Widget build(BuildContext context) {
return _InheritedStateContainer(
data: this,
child: widget.child,
);
}
}
================================================
FILE: lib/bus/authenticated_event.dart
================================================
import 'package:event_taxi/event_taxi.dart';
enum AUTH_EVENT_TYPE { SEND, TRANSFER, CHANGE, BACKUP, LIST_FORSALE, DELIST_FORSALE }
class AuthenticatedEvent implements Event {
final AUTH_EVENT_TYPE authType;
AuthenticatedEvent(this.authType);
}
================================================
FILE: lib/bus/conn_status_event.dart
================================================
import 'package:event_taxi/event_taxi.dart';
// Bus event for connection status changing
enum ConnectionStatus { CONNECTED, DISCONNECTED }
class ConnStatusEvent implements Event {
final ConnectionStatus status;
ConnStatusEvent({this.status});
}
================================================
FILE: lib/bus/contact_added_event.dart
================================================
import 'package:blaise_wallet_flutter/model/db/contact.dart';
import 'package:event_taxi/event_taxi.dart';
class ContactAddedEvent implements Event {
final Contact contact;
ContactAddedEvent({this.contact});
}
================================================
FILE: lib/bus/contact_modified_event.dart
================================================
import 'package:blaise_wallet_flutter/model/db/contact.dart';
import 'package:event_taxi/event_taxi.dart';
class ContactModifiedEvent implements Event {
final Contact contact;
ContactModifiedEvent({this.contact});
}
================================================
FILE: lib/bus/contact_removed_event.dart
================================================
import 'package:blaise_wallet_flutter/model/db/contact.dart';
import 'package:event_taxi/event_taxi.dart';
class ContactRemovedEvent implements Event {
final Contact contact;
ContactRemovedEvent({this.contact});
}
================================================
FILE: lib/bus/daemon_changed_event.dart
================================================
import 'package:event_taxi/event_taxi.dart';
class DaemonChangedEvent implements Event {
final String newDaemon;
DaemonChangedEvent({this.newDaemon});
}
================================================
FILE: lib/bus/disable_lock_timeout_event.dart
================================================
import 'package:event_taxi/event_taxi.dart';
class DisableLockTimeoutEvent implements Event {
final bool disable;
DisableLockTimeoutEvent({this.disable});
}
================================================
FILE: lib/bus/events.dart
================================================
export 'authenticated_event.dart';
export 'contact_modified_event.dart';
export 'contact_added_event.dart';
export 'contact_removed_event.dart';
export 'update_history_event.dart';
export 'daemon_changed_event.dart';
export 'payload_changed_event.dart';
export 'disable_lock_timeout_event.dart';
export 'conn_status_event.dart';
export 'subscribe_event.dart';
export 'price_event.dart';
export 'new_operation_event.dart';
================================================
FILE: lib/bus/new_operation_event.dart
================================================
import 'package:event_taxi/event_taxi.dart';
import 'package:pascaldart/pascaldart.dart';
class NewOperationEvent implements Event {
final PascalOperation operation;
NewOperationEvent({this.operation});
}
================================================
FILE: lib/bus/payload_changed_event.dart
================================================
import 'package:event_taxi/event_taxi.dart';
class PayloadChangedEvent implements Event {
final String payload;
PayloadChangedEvent({this.payload});
}
================================================
FILE: lib/bus/price_event.dart
================================================
import 'package:event_taxi/event_taxi.dart';
import 'package:blaise_wallet_flutter/network/model/response/price_response.dart';
class PriceEvent implements Event {
final PriceResponse response;
PriceEvent({this.response});
}
================================================
FILE: lib/bus/subscribe_event.dart
================================================
import 'package:blaise_wallet_flutter/network/model/response/subscribe_response.dart';
import 'package:event_taxi/event_taxi.dart';
class SubscribeEvent implements Event {
final SubscribeResponse response;
SubscribeEvent({this.response});
}
================================================
FILE: lib/bus/update_history_event.dart
================================================
import 'package:event_taxi/event_taxi.dart';
class UpdateHistoryEvent implements Event {
}
================================================
FILE: lib/constants.dart
================================================
class AppConstants {
static const String DEFAULT_RPC_HTTP_URL =
'https://blaiseapi.appditto.com/rawrpc';
static const String WS_API_URL = 'wss://blaiseapi.appditto.com';
static const String EULA_URL = 'https://appditto.github.io/blaise/eula.html';
static const String PRIVACY_POLICY_URL = 'https://appditto.github.io/blaise/privacy_policy.html';
}
================================================
FILE: lib/l10n/intl_ar.arb
================================================
{
"newPrivateKeyButton": "مفتاح خاص جديد",
"importPrivateKeyButton": "استيراد مفتاح خاص",
"gotItButton": "حصلت عليه!",
"goBackButton": "رجوع",
"copyButton": "نسخ",
"copiedButton": "تم النسخ",
"keyCopiedButton": "تم نسخ المفتاح",
"iHaveBackedItUpButton": "قمت بالنسخ الإحتياطي",
"yesImSureButton": "نعم، أنا متأكد",
"noGoBackButton": "لا، رجوع",
"getAnAccountButton": "أحصل على حساب",
"getAFreeAccountButton": "أحصل على حساب بالمجان",
"buyAnAccountButton": "إشتري حساب",
"sendConfirmationButton": "ارسل تأكيد",
"confirmButton": "تأكيد",
"borrowAnAccountButton": "استعر حساباً",
"importButton": "إستيراد",
"receiveButton": "استلام",
"sendButton": "إرسال",
"copyAddressButton": "نسخ الحساب",
"copiedAddressButton": "تم نسخ الحساب",
"addToContactsButton": "أضف إلى جهات الإتصال",
"operationDetailsButton": "تفاصيل العملية",
"openInExplorerButton": "افتح في المستكشف",
"requestButton": "طلب",
"addAPayloadButton": "+ أضف ملاحظة (Payload)",
"addADurationButton": "+ أضف مدة",
"scanQRCodeButton": "مسح رمز QR",
"cancelButton": "إلغاء",
"closeButton": "إغلاق",
"changeNameButton": "تغيير الإسم",
"transferButton": "نقل",
"listForSaleButton": "إدراج للبيع",
"createPrivateSaleButton": "إنشاء بيع خاص",
"yesAddFeeButton": "نعم، أضف رسوم",
"unlockButton": "إلغاء قفل",
"unlockWithBiometricsButton": "إلغاء قفل بالبصمة",
"unlockWithPINButton": "إلغاء القفل برقم سري",
"setToDefaultButton": "اجعله افتراضيا",
"addContactButton": "أضف جهة إتصال",
"encryptedKeyButton": "مفتاح مشفر",
"unencryptedKeyButton": "مفتاح غير مشفر",
"encryptButton": "تشفير",
"showButton": "اظهر",
"hideButton": "إخفي",
"copyEncryptedKeyButton": "نسخ مفتاح مشفر",
"copyUnencryptedKeyButton": "نسخ مفتاح غير مشفر",
"copyKeyButton": "نسخ مفتاح",
"copyPublicKeyButton": "نسخ المفتاح عام",
"deletePrivateKeyAndLogoutButton": "احذف المفتاح الخاص\nوتسجيل خروج",
"searchForNameButton": "بحث عن اسم",
"searchAccountNameButton": "ابحث باسم الحساب",
"searchNameButton": "إبحث عن إسم",
"okayGoBackButton": "موافق، رجوع",
"nextButton": "التالي",
"welcomeParagraph": "مرحبا بك في محفظة بليز، للبدء، يمكنك إنشاء مفتاح خاص جديد أو إستيراد مفتاح موجود",
"newKeySecurityParagraph": "في الشاشة التالية، سوف ترى مفتاحك الخاص الجديد، أنه يمثل كل شئ، بدونه أنت لا تملك أموالك، لذلك من الضروري أن تحفظه في مكان أمن، ولا تشاركة مع أحد.",
"uninstallDisclaimerParagraph": "إذا فقدت جهازك أو الغيت تسطيب محفظة بليز، سوف تحتاج للـ \"مفتاح الخاص\" لكي تستعيد أموالك.",
"newPrivateKeyParagraph": "يوجد أدناه المفتاح الخاص لمحفظتك الجديدة، من الضروري أن تحفظه في مكان أمن ولا تشاركه مع أحد، ولا تقم بأخذ لقطة للشاشة أو تركه في ملف على جهازك، يستحسن أن تكتبه بيدك على ورقة وتحفظة في مكان أمن.",
"newKeyBackUpConfirmParagraph": "هل متأكد من أنك قمت بعمل نسخة إحتياطية من مفتاحك الخاص في مكان أمن؟",
"newWalletGreetingParagraph": "مرحباً بك في <colored>محفظة بليز</colored>.\nيمكنك البدء بالحصول على حساب جديد.",
"getAccountFirstParagraph": "هناك خيارين للحصول على حسابك الأول:",
"getAccountSecondParagraph": "1. يمكنك الحصول على حساب مجاني بإستخدام رقم تليفونك، <colored>فقط حساب واحد لكل رقم تليفون</colored>",
"getAccountThirdParagraph": "2. يمكنك شراء حساب/حسابات مقابل <colored>%1 باسكال (%2).</colored>",
"enterPhoneNumberParagraph": "أدخل رقم تليفونك أدناه.",
"enterConfirmationCodeParagraph": "لقد أرسلنا لك رمز التأكيد، يرجى إدخاله أدناه.",
"borrowStarted": "بدأت عملية الشراء لـ %1",
"borrowAccountParagraph": "لشراء حساب، أولا سوف نعطيك واحد (على سبيل الإعارة)، إذا أرسلت على الأقل <colored>%1 باسكال(%2)</colored> إلى هذا الحساب في خلال <colored>%3 أيام</colored>, الحساب سوف يكون ملكك و <colored>%1 باسكال</colored> سوف تخصم من رصيدك تلقائياً.\nغير ذلك، سوف نسترد الحساب بعد نهاية <colored>%3 أيام</colored> ولن يكون ملكك.\nلذلك من المستحسن أولا إرسال مبلغ صغير قبل أن تمتلك الحساب.",
"importPrivateKeyParagraph": "أدخل مفتاحك الخاص أدناه.",
"looksLikeEncryptedKeyParagraph": "يبدو أن هذا المفتاح الخاص مشفراً، يرجى إدخال كلمة المرور لفك تشفيره واستيراده.",
"urlChangedToParagraph": "URL تم تغييره إلى %1",
"backupKeyFirstParagraph": "لديك خياران لإجراء نسخ احتياطي للمفتاح الخاص:",
"backupKeySecondParagraph": "1. مشفر، مما يعني أنه محمي بكلمة مرور.",
"backupKeyThirdParagraph": "2. غير مشفر، مما يعني أنه خام وغير محمي بكلمة مرور.",
"backupKeyFourthParagraph": "نوصي بحفظ النسخة غير المشفرة في وضع عدم الاتصال بالإنترنت (أوفلاين)، عن طريق كتابتها على ورقة، و يمكنك حفظ النسخة المشفرة على مدير كلمات المرور (باسورد مانجر) لراحتك.",
"encryptKeyParagraph": "قم بإنشاء كلمة مرور جديدة لتشفير مفتاحك الخاص.",
"backupEncryptedKeyFirstParagraph": "أدناه هو مفتاحك الخاص المشفر. محمي بكلمة مرور. يمكنك حفظه بأمان على مدير كلمات المرور (باسورد مانجر) لراحتك.",
"backupEncryptedKeySecondParagraph": "نظرًا لأنه مشفر بكلمة مرور، إذا فقدت أو نسيت كلمة المرور، فلن تتمكن من فك تشفيره والوصول إلى أموالك.",
"backupUnencryptedKeyParagraph": "يوجد أدناه مفتاحك الخاص غير المشفر. <colored> ليس محمي بكلمة مرور، مما يعني أنه من الأهمية حفظه في مكان آمن وغير متصل بالإنترنت. </colored> نوصي بكتابته على ورقة.",
"publicKeyParagraph": "أدناه هو المفتاح العام الخاص بك. كما يوحي الاسم، الغرض منه هو المشاركة بشكل عام لإستقبال الحسابات عليه وانتقال ملكيتها للمفتاح الخاص التابع لهذا المفتاح العام.",
"borrowedAccountParagraph": "هذا هو <colored>حساب معار إليك</colored>.\nإذا أرسلت على الأقل <colored>%1 باسكال</colored> إلى هذا الحساب في خلال <colored>%2 أيام, %3 ساعات, و %4 دقائق</colored>, سوف يكون ملكك.",
"borrowedAccountPaidParagraph": "<colored>تم شراء الحساب!</colored>\nنقله إليك قيد المعالجة حاليًا. تستغرق هذه العملية عادةً <colored>15 دقيقة</colored>, في بعض الحالات قد تستغرق وقتا أطول قليلا.",
"logoutFirstDisclaimerParagraph": "<colored>سيؤدي تسجيل الخروج إلى إزالة المفتاح الخاص وكافة البيانات المتعلقة بمحفظتك من على هذا الجهاز.</colored> إذا لم يتم عمل نسخة احتياطية من المفتاح الخاص، فلن تتمكن من الوصول إلى أموالك مرة أخرى. إذا قمت بعمل نسخة إحتياطية من مفتاح الخاص، فلا داعي للقلق.",
"logoutSecondDisclaimerParagraph": "هل أنت متأكد من أنك قمت بعمل نسخة احتياطية من المفتاح الخاص؟ <colored>إذا قمت بعمل نسخة إحتياطية من مفتاحك الخاص، فلا داعي للقلق بشأنه.</colored>",
"sendingConfirmParagraph": "برجاء مراجعة تفاصيل العملية قبل الإرسال.",
"sentParagraph": "تم إرسال العملية بنجاح.",
"changeNameParagraph": "أدخل اسمًا أدناه لتغيير اسم الحساب.",
"changingNameParagraph": "تأكيد اسم حسابك الجديد للمتابعة.",
"changedNameParagraph": "تم تغيير اسم حسابك بنجاح.",
"transferParagraph": "أدخل \"مفتاح عام\" أدناه لنقل ملكية هذا الحساب إليه.",
"transferringParagraph": "قم بتأكيد \"المفتاح العام\" أدناه لنقل ملكية هذا الحساب إليه.",
"transferredParagraph": "تم نقل حسابك بنجاح إلى \"المفتاح العام\" أدناه.",
"listForSaleParagraph": "لعرض هذا الحساب للبيع، أدخل سعرًا و\"الحساب\" الذي سيتلقى الدفع.",
"listingForSaleParagraph": "برجاء تأكيد السعر والحساب الذي سيتلقى الدفع.",
"listedForSaleParagraph": "تم إدراج حسابك للبيع بنجاح. سنخبرك إذا ما قام شخص ما بشرئه.",
"createPrivateSaleParagraph": "أدخل السعر, الحساب الذي سيتلقى الدفع, والمفتاح العام أدناه لإنشاء بيع خاص لهذا الحساب.",
"creatingPrivateSaleParagraph": "تأكد من المعلومات أدناه.",
"createdPrivateSaleParagraph": "تم إنشاء البيع الخاص بنجاح. سنخبرك إذا تم شراؤه.",
"delistFromSaleParagraph": "تأكد من رغبتك في حذف هذا الحساب من البيع.",
"delistedFromSaleParagraph": "تم حذف حسابك من البيع بنجاح.",
"feeRequiredParagraph": "هذه المعاملة تتطلب رسوم.",
"feeConfirmAmountParagraph": "يرجى تأكيد إضافة رسوم %1 باسكال لهذه العملية للمتابعة.\n.",
"keyTypeNotSupportedParagraph": "لا تدعم محفظة بليز هذا النوع من المفاتيح الخاصة. يمكنك إنشاء مفتاح خاص جديد ونقل حساباتك إليه باستخدام محفظة أخرى.",
"enterPINToUnlockParagraph": "أدخل رمز المرور لإلغاء القفل",
"authenticateToUnlockParagraph": "المصادقة لإلغاء القفل",
"manyFailedAttemptsParagraph": "محاولات كثيرة فاشلة لإلغاء القفل",
"authenticateToChangeNameParagraph": "المصادقة لتغيير اسم الحساب إلى \"%1\"",
"authenticateToDelistParagraph": "المصادقة لحذف الحساب من البيع",
"authenticateToListForSaleParagraph": "المصادقة لإدراج الحساب للبيع",
"authenticateToCreatePrivateSaleParagraph": "المصادقة لإنشاء بيع خاص",
"authenticateToTransferParagraph": "المصادقة لنقل الحساب",
"authenticateToSendParagraph": "المصادقة لإرسال %1 باسكال",
"authenticateToBackUpParagraph": "المصادقة لإجراء نسخ احتياطي للمفتاح الخاص",
"invalidPINParagraph": "رمز المرور غير صحيح",
"noMatchPINParagraph": "رمز المرور غير متطابق",
"confirmPINParagraph": "تأكيد رمز المرور",
"enterPINParagraph": "أدخل رمز المرور",
"createPINParagraph": "إنشاء 6 أرقام رمز مرور",
"addedToContactsParagraph": "%1 تم إضافته إلى جهات الإتصال",
"removedFromContactsParagraph": "تم إزالة %1 من جهات الإتصال",
"failedToRemoveFromContactsParagraph": "فشل في إزالة %1 من جهات الإتصال",
"successfullyImportedContactsParagraph": "تم إستيراد %1 جهات إتصال بنجاح",
"checkOutBlaiseParagraph": "أنظر، بليز! محفظة \"باسكال\" بسيطة وأنيقة وآمنة لنظامي أندرويد و آي أو إس: https://blaisewallet.com",
"newAccountParagraph": "هذا هو حسابك الجديد.\nبمجرد أن تستقبل <colored>باسكال</colored>, سوف تظهر العمليات كما موضح أدناه.",
"settingsHeader": "إعدادات",
"preferencesHeader": "تفضيلات",
"currencyHeader": "العملة",
"languageHeader": "اللغة",
"languageColonHeader": "اللغة:",
"systemDefaultHeader": "إفتراضي النظام",
"themeHeader": "المظهر",
"themeLightHeader": "فاتح",
"themeDarkHeader": "مظلم",
"themeCopperHeader": "نحاسي",
"notificationsHeader": "الإشعارات",
"securityHeader": "الأمان",
"authenticationMethodHeader": "طريقة المصادقة",
"authenticationPINHeader": "رمز المرور",
"authenticationBiometricsHeader": "البصمة",
"authenticateOnLaunchHeader": "المصادقة عند التشغيل",
"yesHeader": "نعم",
"noHeader": "لا",
"automaticallyLockHeader": "قفل تلقائي",
"lockInstantHeader": "فوراً",
"lock1Header": "بعد %1 دقيقة",
"lock5Header": "بعد %1 دقائق",
"lock15Header": "بعد %1 دقائق",
"lock30Header": "بعد %1 دقائق",
"lock60Header": "بعد %1 دقائق",
"defaultHeader": "إفتراضي",
"manageHeader": "إدارة",
"contactsHeader": "جهات الإتصال",
"backUpPrivateKeyHeader": "نسخ إحتياطي للمفتاح الخاص",
"viewPublicKeyHeader": "عرض المفتاح العام",
"shareHeader": "مشاركة بليز",
"logoutHeader": "تسجيل خروج",
"privacyPolicyHeader": "سياسة الخصوصية",
"changeAccountNameHeader": "تغيير اسم الحساب",
"transferAccountHeader": "نقل ملكية الحساب",
"listAccountForSaleHeader": "إدراج الحساب للبيع",
"createPrivateSaleHeader": "إدارج الحساب للبيع الخاص",
"delistFromSaleHeader": "حذف الحساب من البيع",
"getAccountSheetHeader": "الحصول على حساب",
"freeAccountSheetHeader": "حساب مجاني",
"buyAccountSheetHeader": "شراء حساب",
"sendSheetHeader": "إرسال",
"sendingSheetHeader": "جارٍ الإرسال",
"sentSheetHeader": "تم الإرسال",
"requestSheetHeader": "طلب",
"changeNameSheetHeader": "تغيير الإسم",
"changingNameSheetHeader": "جارٍ التغيير",
"changedNameSheetHeader": "تم التغيير",
"transferSheetHeader": "نقل",
"transferringSheetHeader": "جارٍ النقل",
"transferredSheetHeader": "تم النقل",
"listForSaleSheetHeader": "إدراج للبيع",
"listingForSaleSheetHeader": "جارٍ الإدراج",
"listedForSaleSheetHeader": "تم الإدراج",
"createPrivateSaleSheetHeader": "بيع خاص",
"creatingPrivateSaleSheetHeader": "إنشاء",
"createdPrivateSaleSheetHeader": "تم الإنشاء",
"delistingSheetHeader": "جارٍ الحذف",
"delistedSheetHeader": "تم الحذف",
"addContactSheetHeader": "إضافة جهة إتصال",
"contactSheetHeader": "جهة إتصال",
"publicKeySheetHeader": "مفتاح عام",
"privateKeySheetHeader": "مفتاح خاص",
"backUpSheetHeader": "نسخ إحتياطي",
"encryptSheetHeader": "تشفير",
"changeDaemonSheetHeader": "تغيير Daemon",
"securityFirstHeader": "الأمان أولا!",
"newPrivateKeyHeader": "مفتاح خاص جديد",
"importPrivateKeyHeader": "إستيراد مفتاح خاص",
"decryptAndImportKeyHeader": "فك تشفير & إستيراد",
"backUpKeyHeader": "نسخ إحتياطي لمفاتيحك",
"lockedHeader": "مقفل",
"privateKeyTextFieldHeader": "مفتاح خاص",
"passwordTextFieldHeader": "كلمه مرور",
"newPasswordTextFieldHeader": "كلمة مرور جديدة",
"confirmPasswordTextFieldHeader": "تأكيد كلمة المرور",
"confirmTextFieldHeader": "تأكيد",
"countryCodeTextFieldHeader": "كود البلد",
"phoneNumberTextFieldHeader": "رقم التليفون",
"confirmationCodeTextFieldHeader": "كود التفعيل",
"accountTextFieldHeader": "حساب",
"addressTextFieldHeader": "رقم الحساب",
"contactNameTextFieldHeader": "أسم جهة الإتصال",
"amountTextFieldHeader": "المبلغ",
"payloadTextFieldHeader": "ملاحظة (Payload)",
"nameTextFieldHeader": "إسم",
"newAccountNameTextFieldHeader": "إسم الحساب الجديد",
"publicKeyTextFieldHeader": "مفتاح عام",
"priceTextFieldHeader": "السعر",
"receivingAccountTextFieldHeader": "الحساب متلقي الدفع",
"durationTextFieldHeader": "المدة",
"feeTextFieldHeader": "رسوم",
"otherOperationsHeader": "معاملات أخرى",
"warningHeader": "تحذير",
"areYouSureHeader": "هل أنت متأكد؟",
"addFeeHeader": "إضافة رسوم",
"keyTypeNotSupportedHeader": "المفتاح غير مدعوم",
"accountToSendFromHeader": "حساب لإرسال من",
"sentHeader": "صادر",
"receivedHeader": "وأرد",
"nameChangedHeader": "تم تغيير الإسم",
"listedForSaleHeader": "تم إدراجه للبيع",
"privateSaleHeader": "بيع خاص",
"delistedFromSaleHeader": "تم حذفه من البيع",
"delistedHeader": "تم حذفه",
"undefinedHeader": "غير محدد",
"transferredHeader": "تم نقله",
"balanceHeader": "الرصيد",
"totalBalanceHeader": "إجمالي الرصيد",
"accountBalanceHeader": "رصيد الحساب",
"accountsHeader": "الحسابات",
"operationsHeader": "العمليات",
"encryptThePayloadHeader": "تشفير الملاحظة (Payload)",
"encryptPayloadHeader": "تشفير الملاحظة (Payload)",
"forSaleHeader": "للبيع",
"borrowedHeader": "حساب معار",
"borrowedTransferredHeader": "جارٍ النقل",
"borrowedAccountHeader": "حساب معار",
"feeColonHeader": "رسوم:",
"pendingHeader": "قيد الانتظار",
"onHeader": "تعمل",
"offHeader": "لا تعمل",
"priceRequiredError": "السعر مطلوب",
"amountRequiredError": "المبلغ مطلوب",
"nameRequiredError": "الإسم مطلوب",
"zeroPriceError": "لا يمكن أن يكون السعر 0",
"zeroAmountError": "لا يمكن أن يكون المبلغ 0",
"invalidAccountNameError": "اسم حساب غير صحيح",
"invalidReceivingAccountError": "حساب المستلم غير صحيح",
"invalidPublicKeyError": "مفتاح عام غير صالح",
"invalidPrivateKeyError": "مفتاح خاص غير صالح",
"invalidAddressError": "حساب غير صحيح",
"invalidAccountError": "حساب غير صحيح",
"invalidDestinationError": "وجهة غير صالحة",
"insufficientBalanceError": "رصيد غير كافي",
"threeCharacterNameError": "يجب أن يكون 3 أحرف على الأقل",
"contactDoesntExistError": "جهة الاتصال غير موجودة",
"contactAlreadyExistsError": "جهة الاتصال موجود بالفعل",
"cantSendToYourselfError": "لا يمكن أن ترسل إلى نفسك",
"somethingWentWrongError": "هناك شئ خاطئ، برجاء المحاولة فى وقت لاحق",
"failedToEncryptPayloadError": "فشل في تشفير الملاحظة (Payload)",
"emptyPasswordError": "كلمة المرور لا يمكن أن تكون فارغة",
"noMatchPasswordError": "كلمات المرور غير متطابقة",
"invalidPasswordError": "كلمة مرور خاطئة",
"didNotGetResponseError": "لم نحصل على استجابة من الخادم\n",
"noContactsToExportError": "لا جهات اتصال للتصدير",
"noContactsToImportError": "لا يوجد جهات اتصال لاستيرادها",
"failedToImportContactsError": "فشل في استيراد جهات الاتصال",
"blockchainRewardOPDetails": "مكافأة البلوكشين (%1)",
"transactionOPDetails": "العملية (%1)",
"changeKeyOPDetails": "تغيير المفتاح (%1)",
"recoverFundsOPDetails": "إسترداد الأموال (%1)",
"listAccountForSaleOPDetails": "إدراج الحساب للبيع (%1)",
"delistAccountOPDetails": "إلغاء إدراج الحساب (%1)",
"buyAccountOPDetails": "شراء حساب (%1)",
"changeKeySignedOPDetails": "تغيير مفتاح التوقيع (%1)",
"changeAccountInfoOPDetails": "تغيير معلومات الحساب (%1)",
"multioperationOPDetails": "عملية متعددة (%1)",
"unknownOPDetails": "غير معروف (%1)",
"sendingAccountOPDetails": "الحساب المُرسِل",
"receivingAccountOPDetails": "الحساب المستقبِل",
"changingAccountOPDetails": "تغيير الحساب",
"sendAmountOPDetails": "إرسال مبلغ",
"payloadOPDetails": "ملاحظة (Payload)",
"newPublicKeyOPDetails": "مفتاح عام جديد",
"newNameOPDetails": "اسم جديد",
"sellerAccountOPDetails": "حساب البائع",
"accountPriceOPDetails": "سعر الحساب",
"lockedUntilBlockOPDetails": "مغلق حتى الكتلة",
"blockOPDetails": "كتلة",
"timeOPDetails": "الوقت",
"naOPDetails": "غير موجود",
"ophashOPDetails": "معرف المعاملة",
"feeOPDetails": "رسوم",
"noperationOPDetails": "المعاملات المرسلة",
"accountOPDetails": "حساب",
"noResultsFound": "لا توجد نتائج",
"getAccountThirdParagraphAlternative": "2. يمكنك شراء حساب واحد مقابل <colored>%1 باسكال (%2).</colored><colored> مسموح فقط بـ \"حساب\" واحد لكل مستخدم</colored>",
"getAccountThirdParagraphAlternative2": "2. يمكنك شراء \"حساب\" مقابل <colored>%1 باسكال (%2).</colored><colored> يمكنك شراء حتى %3 حساب.</colored>",
"receiveAccountButton": "استلام حساب",
"receiveAnAccountButton": "استلام حساب",
"okayButton": "موافق",
"liveSupportButton": "مساعدة؟",
"invalidPhoneNumberParagraph": "رقم التليفون غير صالح",
"confirmationCodeError": "فشل التحقق، تأكد من كتابة الرمز المرسل إليك بشكل صحيح",
"freepasaComplete": "تم بنجاح، حسابك الجديد سيظهر بعد 1 تأكيد من الشبكة",
"unconfirmedAccountHeader": "حساب (لم يتم تأكيده)",
"unconfirmedAccountParagraph": "هذا <colored>حساب غير مؤكد</colored>. تم نقله إليك، ولكن بإنتظار 1 تأكيد من الشبكة قبل ان تتمكن نم إستخدامه. قد تستغرق هذه العملية 5 دقائق، وعندما تكتمل سيكون بإمكانك استخدام الحساب.",
"connectingHeader": "جارٍ الإتصال"
}
================================================
FILE: lib/l10n/intl_ca.arb
================================================
{
"newPrivateKeyButton": "Nova clau privada",
"importPrivateKeyButton": "Importa clau privada",
"gotItButton": "Ho tinc!",
"goBackButton": "Torna",
"copyButton": "Còpia",
"copiedButton": "Copiat",
"keyCopiedButton": "Clau copiada",
"iHaveBackedItUpButton": "Copia realitzada",
"yesImSureButton": "Sí, n'estic segur",
"noGoBackButton": "No, torna enrere",
"getAnAccountButton": "Obtenir un compte",
"getAFreeAccountButton": "Obtenir un compte gratuït",
"buyAnAccountButton": "Comprar un compte",
"sendConfirmationButton": "Confirmar l'enviament",
"confirmButton": "Confirmar",
"borrowAnAccountButton": "Elimina un compte",
"importButton": "Importa",
"receiveButton": "Rebre",
"sendButton": "Enviar",
"copyAddressButton": "Copiar adreça",
"copiedAddressButton": "Adreça copiada",
"addToContactsButton": "Afegir a contactes",
"operationDetailsButton": "Detalls de l'operació",
"openInExplorerButton": "Obriu a l'Explorador",
"requestButton": "Sol·licitud",
"addAPayloadButton": "+ Afegir un concepte (Payload)",
"addADurationButton": "+ Afegir una Durada",
"scanQRCodeButton": "Escaneig del codi QR",
"cancelButton": "Cancel·lar",
"closeButton": "Tanca",
"changeNameButton": "Canviar el nom",
"transferButton": "Transferència",
"listForSaleButton": "Posar a la venda",
"createPrivateSaleButton": "Crear una venda privada",
"yesAddFeeButton": "Sí, afegeix comissió",
"unlockButton": "Desbloquejar",
"unlockWithBiometricsButton": "Desbloquejar amb Biometrics",
"unlockWithPINButton": "Desbloquegeu amb el PIN",
"setToDefaultButton": "Establir a valors predeterminats",
"changeDaemonButton": "Canvia de servidor",
"addContactButton": "Afegeix contacte",
"encryptedKeyButton": "Clau xifrada",
"unencryptedKeyButton": "Clau no xifrada",
"encryptButton": "Xifra",
"showButton": "Mostra",
"hideButton": "Amaga",
"copyEncryptedKeyButton": "Copia la clau xifrada",
"copyUnencryptedKeyButton": "Copia la clau sense xifrar",
"copyKeyButton": "Copia la clau privada",
"copyPublicKeyButton": "Copia la clau pública",
"deletePrivateKeyAndLogoutButton": "Suprimeix la clau privada\nTanca la sessió",
"searchForNameButton": "Buscar nom",
"searchAccountNameButton": "Cerca el nom del compte",
"searchNameButton": "Nom de la cerca",
"okayGoBackButton": "D'acord, torna",
"nextButton": "Pròxim",
"welcomeParagraph": "Benvingut a la cartera Blaise. Per començar, podeu crear una clau privada o importar-ne una.",
"newKeySecurityParagraph": "A la pantalla següent, veureu la vostra clau privada nova. És una contrasenya per accedir als vostres fons. És fonamental que el feu una còpia de seguretat i no el compartiu mai amb ningú.",
"uninstallDisclaimerParagraph": "Si perdeu el dispositiu o desinstalgeu Blaise Wallet, necessitareu la clau privada per recuperar els vostres fons.",
"newPrivateKeyParagraph": "A continuació, es mostra la clau privada de la nova cartera. És fonamental que feu una còpia de seguretat de la clau privada i no la guardeu mai com a text de pantalla o captura de pantalla. Recomanem escriure-la en un tros de paper i guardar-la fora de línia.",
"newKeyBackUpConfirmParagraph": "Esteu segur que heu creat una còpia de seguretat de la clau privada de la nova billetera?",
"newWalletGreetingParagraph": "Benvingut a <colored> Blaise Wallet </colored>. \n Podeu començar obtenint un compte.",
"getAccountFirstParagraph": "Hi ha dues opcions per obtenir el teu primer compte:",
"getAccountSecondParagraph": "1- Podeu obtenir un compte gratuït mitjançant el vostre número de telèfon. <colored> Només es permet un compte per número de telèfon. </colored>",
"getAccountThirdParagraph": "2- Podeu comprar tants comptes com vulgueu per <colored>% 1 Pascal (% 2). </colored>",
"enterPhoneNumberParagraph": "Introduïu el vostre número de telèfon a continuació.",
"enterConfirmationCodeParagraph": "Us hem enviat un codi de confirmació, introduïu-lo a continuació.",
"borrowStarted": "S'ha iniciat la compra per a% 1",
"borrowAccountParagraph": "Per comprar un compte, primer haurà de demanar un préstec gratuït. Si envieu almenys <colored>% 1 Pascal (% 2) </colored> al compte dins de <colored>% 3 dies </colored>, el compte serà vostre i <colored>% 1 Pascal </colored> es descomptarà automàticament del vostre saldo. \n En cas contrari, ens retornarà al final de <colored>% 3 dies </colored> i ja no pertanyrà a la vostra cartera. \n Es recomana només envieu una petita quantitat de monedes fins que no teniu el compte.",
"importPrivateKeyParagraph": "Introduïu la vostra clau privada a continuació.",
"looksLikeEncryptedKeyParagraph": "Sembla que una clau privada xifrada, introduïu la contrasenya per desxifrar-la i importar-la.",
"changeDaemonParagraph": "Introduïu una adreça per utilitzar un dimoni Pascal diferent per a sol·licituds RPC.",
"urlChangedToParagraph": "L'URL s'ha canviat a% 1",
"backupKeyFirstParagraph": "Teniu dues opcions per fer una còpia de seguretat de la vostra clau privada:",
"backupKeySecondParagraph": "1- Encriptat, el que significa que està protegit amb una contrasenya.",
"backupKeyThirdParagraph": "2- No xifrat, cosa que significa que és brut i no protegit per una contrasenya.",
"backupKeyFourthParagraph": "Recomanem guardar fora de línia la versió no xifrada, escrivint-la en un tros de paper. Podeu emmagatzemar la versió xifrada en un gestor de contrasenyes per a la vostra comoditat.",
"encryptKeyParagraph": "Creeu una contrasenya nova per xifrar la vostra clau privada.",
"backupEncryptedKeyFirstParagraph": "A continuació, trobareu la vostra clau privada xifrada. Està protegit per una contrasenya. Podeu emmagatzemar-lo de forma segura en un gestor de contrasenyes per a la vostra comoditat.",
"backupEncryptedKeySecondParagraph": "Com que està xifrada amb la vostra contrasenya, si perds o oblides la teva contrasenya, no podràs desxifrar-la ni accedir als teus fons.",
"backupUnencryptedKeyParagraph": "A continuació, trobareu la vostra clau privada sense xifrar. <colored> No està protegit per una contrasenya, cosa que significa que és important guardar-la en algun lloc segur i fora de línia. </colored> Recomanem escriure-la en un tros de paper.",
"publicKeyParagraph": "A continuació, es mostra la vostra clau pública. Com el seu nom indica, es pretén compartir públicament i demostrar que una operació particular pertany a la vostra clau privada.",
"borrowedAccountParagraph": "Aquest és un <colored> compte prestat </colored>. \n Si li envieu almenys <colored>% 1 Pascal </colored> en els següents <colored>% 2 dies,% 3 hores i% 4 minuts </colored>, ja serà teu.",
"borrowedAccountPaidParagraph": "<colored> El vostre compte s'ha comprat! </colored> \n La transferència es processa actualment. Aquest procés sol durar uns 15 minuts <colored> </colored>, en alguns casos pot trigar una mica més.",
"logoutFirstDisclaimerParagraph": "<colored> En tancar la sessió, suprimireu la clau privada i totes les dades relacionades amb Blaise d'aquest dispositiu. </colored> Si la vostra clau privada no està feta una còpia de seguretat, no podreu tornar a accedir als vostres fons. Si hi ha una còpia de seguretat de la teva clau privada, no et preocuparà res.",
"logoutSecondDisclaimerParagraph": "Esteu segur que heu fet una còpia de seguretat de la vostra clau privada? <colored> Sempre que hàgiu fet una còpia de seguretat de la vostra clau privada, no us haureu de preocupar. </colored>",
"sendingConfirmParagraph": "Confirmeu les dades de la transacció a enviar.",
"sentParagraph": "La transacció s'ha enviat correctament.",
"changeNameParagraph": "Introduïu un nom a continuació per canviar el nom del vostre compte.",
"changingNameParagraph": "Confirmeu el nom del compte nou per continuar.",
"changedNameParagraph": "El vostre nom del compte s'ha canviat correctament.",
"transferParagraph": "Introduïu una clau pública a continuació per transferir-hi la propietat d’aquest compte.",
"transferringParagraph": "Confirmeu la clau pública següent per transferir-hi la propietat d’aquest compte.",
"transferredParagraph": "El vostre compte s'ha transferit correctament a la clau pública següent.",
"listForSaleParagraph": "Introduïu un preu i un compte que rebran el pagament per llistar aquest compte per vendre.",
"listingForSaleParagraph": "Confirmeu el preu i el compte que rebrà el pagament.",
"listedForSaleParagraph": "El vostre compte s'ha llistat amb èxit per a la venda. Us informarem si algú la compra.",
"createPrivateSaleParagraph": "Introduïu un preu, un compte de recepció i una clau pública a continuació per crear una venda privada per a aquest compte.",
"creatingPrivateSaleParagraph": "Confirmeu la informació següent.",
"createdPrivateSaleParagraph": "La venda privada s'ha creat correctament. Us informarem si es compra.",
"delistFromSaleParagraph": "Confirmeu que voleu suprimir aquest compte des de la venda.",
"delistedFromSaleParagraph": "El vostre compte s'ha suprimit correctament de la venda.",
"feeRequiredParagraph": "Aquesta operació requereix un cànon.",
"feeConfirmAmountParagraph": "Per confirmar l’addició de taxa de Pascal% 1 a aquesta operació per continuar.",
"keyTypeNotSupportedParagraph": "Aquest tipus de clau privada encara no és compatible amb Blaise. Podeu crear una clau privada nova i transferir-ne els comptes mitjançant una cartera diferent.",
"enterPINToUnlockParagraph": "Introduïu el PIN per desbloquejar Blaise",
"authenticateToUnlockParagraph": "Autentica per desbloquejar Blaise",
"manyFailedAttemptsParagraph": "Massa intents fallits de desbloqueig",
"authenticateToChangeNameParagraph": "Autentica per canviar el nom del compte a \"% 1\"",
"authenticateToDelistParagraph": "Autentifica't per eliminar la compte des de la venda",
"authenticateToListForSaleParagraph": "Autentica la llista del compte en venda",
"authenticateToCreatePrivateSaleParagraph": "Autentiqueu-vos per crear venda privada",
"authenticateToTransferParagraph": "Autentica la transferència del compte",
"authenticateToSendParagraph": "Autentica per enviar% 1 Pascal",
"authenticateToBackUpParagraph": "Autentiqueu la còpia de seguretat de clau privada",
"invalidPINParagraph": "PIN no vàlid",
"noMatchPINParagraph": "Els PIN no coincideixen",
"confirmPINParagraph": "Confirmeu el PIN",
"enterPINParagraph": "Introduïu el PIN",
"createPINParagraph": "Creeu un PIN de 6 dígits",
"addedToContactsParagraph": "% 1 afegit als contactes",
"removedFromContactsParagraph": "S'ha eliminat% 1 dels contactes",
"failedToRemoveFromContactsParagraph": "No s'ha pogut eliminar% 1 dels contactes",
"successfullyImportedContactsParagraph": "% 1 contactes importats amb èxit",
"checkOutBlaiseParagraph": "Fes una ullada a Blaise! Cartera de Pascal senzilla, elegant i segura per a iOS i Android: https://blaisewallet.com",
"newAccountParagraph": "Aquest és el vostre nou compte. \n Un cop rebut <colored> Pascal </colored>, les operacions es mostraran com a continuació.",
"settingsHeader": "Configuració",
"preferencesHeader": "Preferències",
"currencyHeader": "Moneda",
"languageHeader": "Llenguatge",
"languageColonHeader": "Llenguatge:",
"systemDefaultHeader": "Predeterminat del sistema",
"themeHeader": "Tema",
"themeLightHeader": "Llum",
"themeDarkHeader": "Fosc",
"themeCopperHeader": "Coure",
"notificationsHeader": "Notificacions",
"securityHeader": "Seguretat",
"authenticationMethodHeader": "Mètode d'autenticació",
"authenticationPINHeader": "PIN",
"authenticationBiometricsHeader": "Biometria",
"authenticateOnLaunchHeader": "Autentica't a Launch",
"yesHeader": "Sí",
"noHeader": "No",
"automaticallyLockHeader": "Bloquejar automàticament",
"lockInstantHeader": "Instantàniament",
"lock1Header": "Després de% 1 minut",
"lock5Header": "Després de% 1 minuts",
"lock15Header": "Després de% 1 minuts",
"lock30Header": "Després de% 1 minuts",
"lock60Header": "Després de% 1 minuts",
"daemonHeader": "Dimoni",
"defaultHeader": "Per defecte",
"manageHeader": "Gestiona",
"contactsHeader": "Contactes",
"backUpPrivateKeyHeader": "Còpia de seguretat de clau privada",
"viewPublicKeyHeader": "Veure clau pública",
"shareHeader": "Comparteix Blaise",
"logoutHeader": "Tancar sessió",
"privacyPolicyHeader": "Política de privacitat",
"changeAccountNameHeader": "Canvieu el nom del compte",
"transferAccountHeader": "Compte de transferència",
"listAccountForSaleHeader": "Llista de compte en venda",
"createPrivateSaleHeader": "Crea venda privada",
"delistFromSaleHeader": "Elimina la venda",
"getAccountSheetHeader": "Obtén un compte",
"freeAccountSheetHeader": "Compte gratuït",
"buyAccountSheetHeader": "Compra el compte",
"sendSheetHeader": "Envia",
"sendingSheetHeader": "S'està enviant",
"sentSheetHeader": "Enviat",
"requestSheetHeader": "Sol·licitud",
"changeNameSheetHeader": "Canvieu el nom",
"changingNameSheetHeader": "Canviant",
"changedNameSheetHeader": "Canviat",
"transferSheetHeader": "Transferència",
"transferringSheetHeader": "Transferència",
"transferredSheetHeader": "Traspassat",
"listForSaleSheetHeader": "Llistat en venda",
"listingForSaleSheetHeader": "Llistat",
"listedForSaleSheetHeader": "Enumerat",
"createPrivateSaleSheetHeader": "Venda privada",
"creatingPrivateSaleSheetHeader": "Creació",
"createdPrivateSaleSheetHeader": "Creat",
"delistingSheetHeader": "Suprimint",
"delistedSheetHeader": "Suprimit",
"addContactSheetHeader": "Afegeix contacte",
"contactSheetHeader": "Contacte",
"publicKeySheetHeader": "Clau pública",
"privateKeySheetHeader": "Clau privada",
"backUpSheetHeader": "Còpia de seguretat",
"encryptSheetHeader": "Xifra",
"changeDaemonSheetHeader": "Canvia de dimoni",
"securityFirstHeader": "Seguretat primer!",
"newPrivateKeyHeader": "Nova clau privada",
"importPrivateKeyHeader": "Importa clau privada",
"decryptAndImportKeyHeader": "Desxifra i importa",
"backUpKeyHeader": "Fes una còpia de seguretat de la clau",
"lockedHeader": "Bloquejat",
"privateKeyTextFieldHeader": "Clau privada",
"passwordTextFieldHeader": "Contrasenya",
"newPasswordTextFieldHeader": "nova contrasenya",
"confirmPasswordTextFieldHeader": "Confirma la contrassenya",
"confirmTextFieldHeader": "Confirmeu",
"countryCodeTextFieldHeader": "Codi del país",
"phoneNumberTextFieldHeader": "Número de telèfon",
"confirmationCodeTextFieldHeader": "Codi de confirmació",
"accountTextFieldHeader": "Compte",
"addressTextFieldHeader": "adreça",
"contactNameTextFieldHeader": "Nom de contacte",
"amountTextFieldHeader": "Import",
"payloadTextFieldHeader": "Càrrega útil",
"nameTextFieldHeader": "Nom",
"newAccountNameTextFieldHeader": "Nou nom del compte",
"publicKeyTextFieldHeader": "Clau pública",
"priceTextFieldHeader": "Preu",
"receivingAccountTextFieldHeader": "Compte de recepció",
"durationTextFieldHeader": "Durada",
"feeTextFieldHeader": "Comissió",
"otherOperationsHeader": "Altres operacions",
"warningHeader": "Avís",
"areYouSureHeader": "Estàs segur?",
"addFeeHeader": "Afegir tarifa",
"keyTypeNotSupportedHeader": "Clau no compatible",
"accountToSendFromHeader": "Compte per enviar des",
"sentHeader": "Enviat",
"receivedHeader": "Rebut",
"nameChangedHeader": "Canviat el nom",
"listedForSaleHeader": "Llistat en venda",
"privateSaleHeader": "Venda privada",
"delistedFromSaleHeader": "Eliminat de la venda",
"delistedHeader": "Suprimit",
"undefinedHeader": "Indefinit",
"transferredHeader": "Traspassat",
"balanceHeader": "Equilibri",
"totalBalanceHeader": "Saldo total",
"accountBalanceHeader": "Saldo del compte",
"accountsHeader": "Comptes",
"operationsHeader": "Operacions",
"encryptThePayloadHeader": "Xifra la càrrega útil",
"encryptPayloadHeader": "Xifra la càrrega útil",
"forSaleHeader": "A la venda",
"borrowedHeader": "Prestat",
"borrowedTransferredHeader": "Transferència pendent",
"borrowedAccountHeader": "Compte prestat",
"feeColonHeader": "Taxa:",
"pendingHeader": "Pendents",
"onHeader": "Encès",
"offHeader": "Desactivat",
"priceRequiredError": "El preu és obligatori",
"amountRequiredError": "Quantitat obligatòria",
"nameRequiredError": "El seu nom és obligatori",
"zeroPriceError": "El preu no pot ser 0",
"zeroAmountError": "La quantitat no pot ser 0",
"invalidAccountNameError": "El nom del compte no és vàlid",
"invalidReceivingAccountError": "Compte de recepció no vàlid",
"invalidPublicKeyError": "Clau pública no vàlida",
"invalidPrivateKeyError": "Clau privada no vàlida",
"invalidAddressError": "Adreça no vàlida",
"invalidAccountError": "Compte no vàlid",
"invalidDestinationError": "Destinació no vàlida",
"insufficientBalanceError": "Saldo insuficient",
"threeCharacterNameError": "Ha de tenir com a mínim 3 caràcters",
"contactDoesntExistError": "El contacte no existeix",
"contactAlreadyExistsError": "El contacte ja existeix",
"cantSendToYourselfError": "No es pot enviar a tu mateix",
"somethingWentWrongError": "Alguna cosa ha anat malament. Si us plau torna-ho a intentar després",
"failedToEncryptPayloadError": "No s'ha pogut xifrar la càrrega útil",
"emptyPasswordError": "La contrasenya no pot estar buida",
"noMatchPasswordError": "Les contrasenyes no coincideixen",
"invalidPasswordError": "Contrasenya invàlida",
"didNotGetResponseError": "No s'ha obtingut resposta del servidor",
"noContactsToExportError": "No hi ha contactes per exportar",
"noContactsToImportError": "No hi ha contactes a importar",
"failedToImportContactsError": "No s'ha pogut importar contactes",
"blockchainRewardOPDetails": "Recompensa Blockchain (% 1)",
"transactionOPDetails": "Transacció (% 1)",
"changeKeyOPDetails": "Canvia la clau (% 1)",
"recoverFundsOPDetails": "Recuperació de fons (% 1)",
"listAccountForSaleOPDetails": "Llista del compte en venda (% 1)",
"delistAccountOPDetails": "Suprimeix el compte (% 1)",
"buyAccountOPDetails": "Compra del compte (% 1)",
"changeKeySignedOPDetails": "Canvia la signada amb clau (% 1)",
"changeAccountInfoOPDetails": "Canvia la informació del compte (% 1)",
"multioperationOPDetails": "Multioperació (% 1)",
"unknownOPDetails": "Desconegut (% 1)",
"sendingAccountOPDetails": "Compte enviant",
"receivingAccountOPDetails": "Compte de recepció",
"changingAccountOPDetails": "Canvi de compte",
"sendAmountOPDetails": "Enviar import",
"payloadOPDetails": "Càrrega útil",
"newPublicKeyOPDetails": "Nova clau pública",
"newNameOPDetails": "Nou nom",
"sellerAccountOPDetails": "Compte del venedor",
"accountPriceOPDetails": "Preu del compte",
"lockedUntilBlockOPDetails": "Bloquejat fins el bloc",
"blockOPDetails": "bloc",
"optxtOPDetails": "optxt",
"timeOPDetails": "temps",
"naOPDetails": "N / A",
"ophashOPDetails": "ophash",
"optypeOPDetails": "òptic",
"maturationOPDetails": "maduració",
"nullOPDetails": "nul",
"feeOPDetails": "quota",
"opblockOPDetails": "opbloquejar",
"noperationOPDetails": "n_operació",
"accountOPDetails": "compte",
"signeraccountOPDetails": "signer_account",
"noResultsFound": "Sense resultats",
"getAccountThirdParagraphAlternative": "2- Podeu comprar un compte per a <colored>% 1 Pascal (% 2). </colored> <colored> Comprar només un compte està permès per usuari. </colored>",
"getAccountThirdParagraphAlternative2": "2- Podeu comprar un compte per a <colored>% 1 Pascal (% 2). </colored> <colored> Podeu comprar fins a% 3 comptes. </colored>",
"receiveAccountButton": "Rep el compte",
"receiveAnAccountButton": "Rebre un compte",
"okayButton": "Bé",
"liveSupportButton": "Assistència",
"invalidPhoneNumberParagraph": "El número de telèfon no és vàlid",
"confirmationCodeError": "No s'ha pogut verificar el codi, assegureu-vos que l'heu introduït correctament",
"freepasaComplete": "Amb èxit, el nou compte estarà disponible després de 1 confirmació de xarxa",
"unconfirmedAccountHeader": "Compte no confirmat",
"unconfirmedAccountParagraph": "Aquest és un <colored> compte no confirmat </colored>. S'ha transferit a tu, però abans de poder utilitzar-lo cal que existeixi una confirmació de xarxa. Generalment triguen uns 5 minuts, un cop finalitzat, podreu utilitzar aquest compte.",
"connectingHeader": "Connectant"
}
================================================
FILE: lib/l10n/intl_de.arb
================================================
{
"newPrivateKeyButton": "Neuer privater Schlüssel",
"importPrivateKeyButton": "Schlüssel importieren",
"gotItButton": "Verstanden!",
"goBackButton": "Zurück",
"copyButton": "Kopieren",
"copiedButton": "Kopiert",
"keyCopiedButton": "Schlüssel kopiert",
"iHaveBackedItUpButton": "Ich habe ihn gesichert",
"yesImSureButton": "Ja, ich bin sicher",
"noGoBackButton": "Nein, zurück",
"getAnAccountButton": "Konto anlegen",
"getAFreeAccountButton": "Kostenloses Konto erhalten",
"buyAnAccountButton": "Konto kaufen",
"sendConfirmationButton": "Bestätigung senden",
"confirmButton": "Bestätigen",
"borrowAnAccountButton": "Konto leihen",
"importButton": "Importieren",
"receiveButton": "Empfangen",
"sendButton": "Senden",
"copyAddressButton": "Kontonummer kopieren",
"copiedAddressButton": "Kontonummer kopiert",
"addToContactsButton": "Zu Kontakten hinzufügen",
"operationDetailsButton": "Vorgangs-Details",
"openInExplorerButton": "Im explorer anzeigen",
"requestButton": "Anfrage",
"addAPayloadButton": "+ Betreff festlegen",
"addADurationButton": "+ Dauer festlegen",
"scanQRCodeButton": "QR Code scannen",
"cancelButton": "Abbrechen",
"closeButton": "Schließen",
"changeNameButton": "Name ändern",
"transferButton": "Übertragen",
"listForSaleButton": "Verkaufen",
"createPrivateSaleButton": "Private verkaufen",
"yesAddFeeButton": "Ja, Gebühr hinzufügen",
"unlockButton": "Entsperren",
"unlockWithBiometricsButton": "Mit Biometrie entsperren",
"unlockWithPINButton": "Mit PIN entsperren",
"setToDefaultButton": "Zurücksetzen",
"changeDaemonButton": "Server wechseln",
"addContactButton": "Kontakt hinzufügen",
"encryptedKeyButton": "Chiffrierter Schlüssel",
"unencryptedKeyButton": "Klartext Schlüssel",
"encryptButton": "Verschlüsseln",
"showButton": "Anzeigen",
"hideButton": "Verstecken",
"copyEncryptedKeyButton": "Kopieren",
"copyUnencryptedKeyButton": "Kopieren",
"copyKeyButton": "Kopieren",
"copyPublicKeyButton": "Öffentlichen Schlüssel kopieren",
"deletePrivateKeyAndLogoutButton": "Privaten Schlüssel löschen\nund abmelden",
"searchForNameButton": "Suche nach Namen",
"searchAccountNameButton": "Suche Name",
"searchNameButton": "Suche Name",
"okayGoBackButton": "Okay, zurück",
"nextButton": "Weiter",
"welcomeParagraph": "Willkommen bei der Blaise Wallet. Um zu starten musst Du entweder einen neuen privaten Schlüssel generieren oder einen bestehenden importieren.",
"newKeySecurityParagraph": "Im nächsten Schritt siehst Du Deinen privaten Schlüssel. Mit diesem Schlüssel hast Du Zugriff auf Deine Pascal. Es ist wichtig, dass Du diesen Schl
gitextract_ckzg3n8o/
├── .github/
│ └── workflows/
│ ├── ci.yml
│ ├── deploy_beta.yml
│ ├── deploy_release.yml
│ ├── deploy_release_android.yml
│ └── deploy_release_ios.yml
├── .gitignore
├── LICENSE
├── README.md
├── android/
│ ├── Gemfile
│ ├── app/
│ │ ├── build.gradle
│ │ ├── google-services.json
│ │ ├── proguard-rules.pro
│ │ └── src/
│ │ ├── debug/
│ │ │ └── AndroidManifest.xml
│ │ ├── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── appditto/
│ │ │ │ └── blaise/
│ │ │ │ ├── LegacyStorage.java
│ │ │ │ ├── MainActivity.java
│ │ │ │ ├── MultidexApplication.java
│ │ │ │ └── Vault.java
│ │ │ └── res/
│ │ │ ├── drawable/
│ │ │ │ └── launch_background.xml
│ │ │ ├── drawable-v24/
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── mipmap-anydpi-v26/
│ │ │ │ ├── ic_launcher.xml
│ │ │ │ └── ic_launcher_round.xml
│ │ │ ├── values/
│ │ │ │ └── styles.xml
│ │ │ └── xml/
│ │ │ └── network_security_config.xml
│ │ └── profile/
│ │ └── AndroidManifest.xml
│ ├── build.gradle
│ ├── fastlane/
│ │ ├── Appfile
│ │ ├── Fastfile
│ │ ├── flutter_build.sh
│ │ ├── flutter_test.sh
│ │ └── metadata/
│ │ └── android/
│ │ └── en-US/
│ │ ├── changelogs/
│ │ │ ├── 1.txt
│ │ │ ├── 17.txt
│ │ │ ├── 18.txt
│ │ │ ├── 20.txt
│ │ │ ├── 22.txt
│ │ │ ├── 23.txt
│ │ │ └── 24.txt
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ ├── title.txt
│ │ └── video.txt
│ ├── gradle/
│ │ └── wrapper/
│ │ └── gradle-wrapper.properties
│ ├── gradle.properties
│ └── settings.gradle
├── assets/
│ ├── animation_get_account.flr
│ ├── animation_get_account_copper.flr
│ ├── animation_get_account_dark.flr
│ ├── animation_name_change.flr
│ ├── animation_name_change_copper.flr
│ ├── animation_name_change_dark.flr
│ ├── animation_sale.flr
│ ├── animation_sale_copper.flr
│ ├── animation_sale_dark.flr
│ ├── animation_search.flr
│ ├── animation_send.flr
│ ├── animation_send_copper.flr
│ ├── animation_send_dark.flr
│ ├── animation_transfer.flr
│ ├── animation_transfer_copper.flr
│ ├── animation_transfer_dark.flr
│ ├── animation_welcome.flr
│ ├── animation_welcome_copper.flr
│ ├── animation_welcome_dark.flr
│ └── country_phone_map.json
├── bin/
│ ├── arb_to_pojson.py
│ ├── pojson_to_arb.py
│ ├── poupdate.py
│ └── settings.py.example
├── ci/
│ ├── get_version.sh
│ ├── tag_version.sh
│ └── upload_android_github.sh
├── ios/
│ ├── Flutter/
│ │ ├── AppFrameworkInfo.plist
│ │ ├── Debug.xcconfig
│ │ ├── Flutter.podspec
│ │ └── Release.xcconfig
│ ├── Gemfile
│ ├── Podfile
│ ├── Runner/
│ │ ├── AppDelegate.h
│ │ ├── AppDelegate.m
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ └── LaunchImage.imageset/
│ │ │ ├── Contents.json
│ │ │ └── README.md
│ │ ├── Base.lproj/
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── GoogleService-Info.plist
│ │ ├── Info.plist
│ │ ├── Runner-Bridging-Header.h
│ │ ├── Runner.entitlements
│ │ ├── clipboard.swift
│ │ └── main.m
│ ├── Runner.xcodeproj/
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace/
│ │ │ └── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ └── xcschemes/
│ │ └── Runner.xcscheme
│ ├── Runner.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ └── IDEWorkspaceChecks.plist
│ └── fastlane/
│ ├── Appfile
│ ├── Deliverfile
│ ├── Fastfile
│ ├── Matchfile
│ ├── flutter_build.sh
│ ├── flutter_test.sh
│ └── metadata/
│ ├── copyright.txt
│ ├── en-US/
│ │ ├── apple_tv_privacy_policy.txt
│ │ ├── description.txt
│ │ ├── keywords.txt
│ │ ├── marketing_url.txt
│ │ ├── name.txt
│ │ ├── privacy_url.txt
│ │ ├── promotional_text.txt
│ │ ├── release_notes.txt
│ │ ├── subtitle.txt
│ │ └── support_url.txt
│ ├── primary_category.txt
│ ├── primary_first_sub_category.txt
│ ├── primary_second_sub_category.txt
│ ├── secondary_category.txt
│ ├── secondary_first_sub_category.txt
│ └── secondary_second_sub_category.txt
├── lib/
│ ├── appstate_container.dart
│ ├── bus/
│ │ ├── authenticated_event.dart
│ │ ├── conn_status_event.dart
│ │ ├── contact_added_event.dart
│ │ ├── contact_modified_event.dart
│ │ ├── contact_removed_event.dart
│ │ ├── daemon_changed_event.dart
│ │ ├── disable_lock_timeout_event.dart
│ │ ├── events.dart
│ │ ├── new_operation_event.dart
│ │ ├── payload_changed_event.dart
│ │ ├── price_event.dart
│ │ ├── subscribe_event.dart
│ │ └── update_history_event.dart
│ ├── constants.dart
│ ├── l10n/
│ │ ├── intl_ar.arb
│ │ ├── intl_ca.arb
│ │ ├── intl_de.arb
│ │ ├── intl_en.arb
│ │ ├── intl_es.arb
│ │ ├── intl_messages.arb
│ │ ├── intl_tr.arb
│ │ ├── intl_zh-Hans.arb
│ │ ├── messages_all.dart
│ │ ├── messages_ar.dart
│ │ ├── messages_ca.dart
│ │ ├── messages_de.dart
│ │ ├── messages_en.dart
│ │ ├── messages_es.dart
│ │ ├── messages_messages.dart
│ │ ├── messages_tr.dart
│ │ └── messages_zh-Hans.dart
│ ├── localization.dart
│ ├── main.dart
│ ├── model/
│ │ ├── authentication_method.dart
│ │ ├── available_currency.dart
│ │ ├── available_languages.dart
│ │ ├── available_themes.dart
│ │ ├── db/
│ │ │ ├── appdb.dart
│ │ │ ├── contact.dart
│ │ │ └── contact.g.dart
│ │ ├── lock_timeout.dart
│ │ ├── notification_enabled.dart
│ │ ├── setting_item.dart
│ │ └── unlock_setting.dart
│ ├── network/
│ │ ├── http_client.dart
│ │ ├── model/
│ │ │ ├── base_request.dart
│ │ │ ├── request/
│ │ │ │ ├── borrow_request.dart
│ │ │ │ ├── borrow_request.g.dart
│ │ │ │ ├── fcm_delete_account_request.dart
│ │ │ │ ├── fcm_delete_account_request.g.dart
│ │ │ │ ├── fcm_update_bulk_request.dart
│ │ │ │ ├── fcm_update_bulk_request.g.dart
│ │ │ │ ├── fcm_update_request.dart
│ │ │ │ ├── fcm_update_request.g.dart
│ │ │ │ ├── freepasa_get_request.dart
│ │ │ │ ├── freepasa_get_request.g.dart
│ │ │ │ ├── freepasa_verify_request.dart
│ │ │ │ ├── freepasa_verify_request.g.dart
│ │ │ │ ├── getborrowed_request.dart
│ │ │ │ ├── getborrowed_request.g.dart
│ │ │ │ ├── subscribe_request.dart
│ │ │ │ └── subscribe_request.g.dart
│ │ │ ├── request_item.dart
│ │ │ └── response/
│ │ │ ├── accounts_response_borrowed.dart
│ │ │ ├── accounts_response_borrowed.g.dart
│ │ │ ├── borrow_response.dart
│ │ │ ├── borrow_response.g.dart
│ │ │ ├── error_response.dart
│ │ │ ├── error_response.g.dart
│ │ │ ├── getborrowed_response.dart
│ │ │ ├── getborrowed_response.g.dart
│ │ │ ├── price_response.dart
│ │ │ ├── price_response.g.dart
│ │ │ ├── subscribe_response.dart
│ │ │ └── subscribe_response.g.dart
│ │ └── ws_client.dart
│ ├── service_locator.dart
│ ├── store/
│ │ ├── account/
│ │ │ ├── account.dart
│ │ │ └── account.g.dart
│ │ └── wallet/
│ │ ├── wallet.dart
│ │ └── wallet.g.dart
│ ├── themes.dart
│ ├── ui/
│ │ ├── account/
│ │ │ ├── account.dart
│ │ │ ├── operation_details_sheet.dart
│ │ │ ├── operation_sheet.dart
│ │ │ ├── other_operations/
│ │ │ │ ├── change_name/
│ │ │ │ │ ├── change_name_sheet.dart
│ │ │ │ │ ├── changed_name_sheet.dart
│ │ │ │ │ └── changing_name_sheet.dart
│ │ │ │ ├── delist_for_sale/
│ │ │ │ │ ├── delisted_for_sale.dart
│ │ │ │ │ └── delisting_for_sale.dart
│ │ │ │ ├── list_for_sale/
│ │ │ │ │ ├── list_for_sale_sheet.dart
│ │ │ │ │ ├── listed_for_sale_sheet.dart
│ │ │ │ │ └── listing_for_sale_sheet.dart
│ │ │ │ ├── private_sale/
│ │ │ │ │ ├── create_private_sale_sheet.dart
│ │ │ │ │ ├── created_private_sale_sheet.dart
│ │ │ │ │ └── creating_private_sale_sheet.dart
│ │ │ │ └── transfer_account/
│ │ │ │ ├── transfer_account_sheet.dart
│ │ │ │ ├── transferred_account_sheet.dart
│ │ │ │ └── transferring_account_sheet.dart
│ │ │ ├── receive/
│ │ │ │ ├── receive_sheet.dart
│ │ │ │ └── request_sheet.dart
│ │ │ └── send/
│ │ │ ├── send_sheet.dart
│ │ │ ├── sending_sheet.dart
│ │ │ └── sent_sheet.dart
│ │ ├── intro/
│ │ │ ├── intro_backup_confirm.dart
│ │ │ ├── intro_decrypt_and_import_private_key.dart
│ │ │ ├── intro_import_private_key.dart
│ │ │ ├── intro_new_private_key.dart
│ │ │ ├── intro_security_first.dart
│ │ │ └── intro_welcome.dart
│ │ ├── lockscreen/
│ │ │ └── lock_screen.dart
│ │ ├── overview/
│ │ │ ├── buy_account_sheet.dart
│ │ │ ├── confirm_free_account_sheet.dart
│ │ │ ├── get_account_sheet.dart
│ │ │ ├── get_free_account_sheet.dart
│ │ │ ├── overview.dart
│ │ │ └── public_key_overview_sheet.dart
│ │ ├── settings/
│ │ │ ├── backup_private_key/
│ │ │ │ ├── backup_private_key_sheet.dart
│ │ │ │ ├── encrypt_private_key_sheet.dart
│ │ │ │ ├── encrypted_private_key_sheet.dart
│ │ │ │ └── unencrypted_private_key_sheet.dart
│ │ │ ├── change_daemon_sheet.dart
│ │ │ ├── contacts/
│ │ │ │ ├── add_contact_sheet.dart
│ │ │ │ ├── contact_detail_sheet.dart
│ │ │ │ └── contacts.dart
│ │ │ ├── public_key_sheet.dart
│ │ │ ├── security.dart
│ │ │ └── settings.dart
│ │ ├── util/
│ │ │ ├── app_icons.dart
│ │ │ ├── formatters.dart
│ │ │ ├── margins.dart
│ │ │ ├── routes.dart
│ │ │ └── text_styles.dart
│ │ └── widgets/
│ │ ├── account_card.dart
│ │ ├── app_text_field.dart
│ │ ├── buttons.dart
│ │ ├── error_container.dart
│ │ ├── fee_container.dart
│ │ ├── operation_list_item.dart
│ │ ├── overlay_dialog.dart
│ │ ├── payload.dart
│ │ ├── pin_screen.dart
│ │ ├── placeholder_account_card.dart
│ │ ├── placeholder_operation_list_item.dart
│ │ ├── reactive_refresh.dart
│ │ ├── settings_list_item.dart
│ │ ├── sheets.dart
│ │ ├── svg_repaint.dart
│ │ ├── tap_outside_unfocus.dart
│ │ └── webview.dart
│ └── util/
│ ├── authentication.dart
│ ├── haptic_util.dart
│ ├── number_util.dart
│ ├── pascal_util.dart
│ ├── salsa20crypt.dart
│ ├── sharedprefs_util.dart
│ ├── ui_util.dart
│ ├── user_data_util.dart
│ └── vault.dart
├── pubspec.yaml
└── test/
├── common/
│ ├── base58_test.dart
│ ├── coding/
│ │ └── pascal/
│ │ ├── accountname_coder_test.dart
│ │ ├── accountnumber_coder_test.dart
│ │ ├── currency_coder_test.dart
│ │ ├── keys/
│ │ │ ├── curve_coder_test.dart
│ │ │ ├── privatekey_coder_test.dart
│ │ │ └── publickey_coder_test.dart
│ │ ├── ophash_coder_test.dart
│ │ └── optype_coder_test.dart
│ ├── fixtures/
│ │ ├── operation_hash.dart
│ │ ├── privatekey.dart
│ │ └── publickey.dart
│ ├── model/
│ │ ├── AccountName_test.dart
│ │ ├── AccountNumber_test.dart
│ │ ├── Currency_test.dart
│ │ ├── OperationHash_test.dart
│ │ └── keys/
│ │ ├── Curves_test.dart
│ │ ├── KeyPair_test.dart
│ │ ├── PrivateKey_test.dart
│ │ └── PublicKey_test.dart
│ ├── sha_test.dart
│ └── util_test.dart
├── crypto/
│ ├── encrypt/
│ │ ├── aes/
│ │ │ └── cbcpkcs7_test.dart
│ │ └── pascal/
│ │ ├── ecies_crypt_test.dart
│ │ ├── kdf_test.dart
│ │ └── privatekey_crypt_test.dart
│ ├── fixtures/
│ │ ├── ecies.dart
│ │ └── privatekey.dart
│ └── keys_test.dart
├── json_rpc/
│ └── model/
│ ├── pascal_account_test.dart
│ ├── pascal_block_test.dart
│ ├── pascal_operation_test.dart
│ └── request/
│ ├── executeoperations_request_test.dart
│ ├── findaccounts_request_test.dart
│ ├── findoperation_request_test.dart
│ ├── getaccount_request_test.dart
│ ├── getaccountoperations_test.dart
│ ├── getblock_request_test.dart
│ ├── getblockoperation_request_test.dart
│ ├── getblockoperations_test.dart
│ ├── getblocks_request_test.dart
│ ├── getpendings_request_test.dart
│ └── getwalletaccounts_request_test.dart
└── signing/
└── operations/
├── buyaccount_operation_test.dart
├── changeaccountinfo_operation_test.dart
├── changekey_operation_test.dart
├── changekeysigned_operation_test.dart
├── delist_forsale_operation_test.dart
├── list_forsale_operation_test.dart
└── transaction_operation_test.dart
SYMBOL INDEX (1077 symbols across 204 files)
FILE: android/app/src/main/java/com/appditto/blaise/LegacyStorage.java
class LegacyStorage (line 5) | public class LegacyStorage {
method getSecret (line 7) | public String getSecret() {
method generateEncryptionKey (line 11) | private String generateEncryptionKey() {
FILE: android/app/src/main/java/com/appditto/blaise/MainActivity.java
class MainActivity (line 12) | public class MainActivity extends FlutterFragmentActivity {
method configureFlutterEngine (line 15) | @Override
FILE: android/app/src/main/java/com/appditto/blaise/MultidexApplication.java
class MultidexApplication (line 21) | public class MultidexApplication extends Application {
method attachBaseContext (line 22) | @Override
method onCreate (line 28) | @Override
method getCurrentActivity (line 43) | public Activity getCurrentActivity() {
method setCurrentActivity (line 46) | public void setCurrentActivity(Activity mCurrentActivity) {
method generateEncryptionKey (line 53) | private void generateEncryptionKey() {
FILE: android/app/src/main/java/com/appditto/blaise/Vault.java
class Vault (line 12) | public class Vault {
method initializeVault (line 21) | public static boolean initializeVault(Context context) {
method initKeyedVault (line 33) | private static void initKeyedVault(Context context) throws GeneralSecu...
method getVault (line 56) | public static SharedPreferenceVault getVault() {
method generateKey (line 63) | public static byte[] generateKey() {
FILE: lib/appstate_container.dart
class _InheritedStateContainer (line 37) | class _InheritedStateContainer extends InheritedWidget {
method updateShouldNotify (line 52) | bool updateShouldNotify(_InheritedStateContainer old)
class StateContainer (line 55) | class StateContainer extends StatefulWidget {
method of (line 64) | StateContainerState of(BuildContext context)
method createState (line 71) | StateContainerState createState()
class StateContainerState (line 79) | class StateContainerState extends State<StateContainer> {
method _precacheSvgs (line 92) | Future<void> _precacheSvgs()
method updateLanguage (line 100) | void updateLanguage(LanguageSetting language)
method updateTheme (line 107) | Future<void> updateTheme(ThemeSetting theme, {bool setIcon = true})
method _addSampleContact (line 122) | Future<void> _addSampleContact()
method _registerBus (line 151) | void _registerBus()
method _destroyBus (line 178) | void _destroyBus()
method initState (line 194) | void initState()
method dispose (line 221) | void dispose()
method handleSubscribeResponse (line 227) | void handleSubscribeResponse(SubscribeResponse response)
method build (line 248) | Widget build(BuildContext context)
FILE: lib/bus/authenticated_event.dart
type AUTH_EVENT_TYPE (line 4) | enum AUTH_EVENT_TYPE { SEND, TRANSFER, CHANGE, BACKUP, LIST_FORSALE, DEL...
class AuthenticatedEvent (line 6) | class AuthenticatedEvent implements Event {
FILE: lib/bus/conn_status_event.dart
type ConnectionStatus (line 4) | enum ConnectionStatus { CONNECTED, DISCONNECTED }
class ConnStatusEvent (line 6) | class ConnStatusEvent implements Event {
FILE: lib/bus/contact_added_event.dart
class ContactAddedEvent (line 4) | class ContactAddedEvent implements Event {
FILE: lib/bus/contact_modified_event.dart
class ContactModifiedEvent (line 4) | class ContactModifiedEvent implements Event {
FILE: lib/bus/contact_removed_event.dart
class ContactRemovedEvent (line 4) | class ContactRemovedEvent implements Event {
FILE: lib/bus/daemon_changed_event.dart
class DaemonChangedEvent (line 3) | class DaemonChangedEvent implements Event {
FILE: lib/bus/disable_lock_timeout_event.dart
class DisableLockTimeoutEvent (line 3) | class DisableLockTimeoutEvent implements Event {
FILE: lib/bus/new_operation_event.dart
class NewOperationEvent (line 4) | class NewOperationEvent implements Event {
FILE: lib/bus/payload_changed_event.dart
class PayloadChangedEvent (line 3) | class PayloadChangedEvent implements Event {
FILE: lib/bus/price_event.dart
class PriceEvent (line 4) | class PriceEvent implements Event {
FILE: lib/bus/subscribe_event.dart
class SubscribeEvent (line 4) | class SubscribeEvent implements Event {
FILE: lib/bus/update_history_event.dart
class UpdateHistoryEvent (line 4) | class UpdateHistoryEvent implements Event {
FILE: lib/constants.dart
class AppConstants (line 1) | class AppConstants {
FILE: lib/l10n/messages_all.dart
type Future (line 27) | typedef Future<dynamic> LibraryLoader();
function _findExact (line 39) | MessageLookupByLibrary _findExact(String localeName)
function initializeMessages (line 63) | Future<bool> initializeMessages(String localeName)
function _messagesExistFor (line 78) | bool _messagesExistFor(String locale)
function _findGeneratedMessagesFor (line 86) | MessageLookupByLibrary _findGeneratedMessagesFor(String locale)
FILE: lib/l10n/messages_ar.dart
type String (line 17) | typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
class MessageLookup (line 19) | class MessageLookup extends MessageLookupByLibrary {
method _notInlinedMessages (line 23) | _notInlinedMessages(_)
FILE: lib/l10n/messages_ca.dart
type String (line 17) | typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
class MessageLookup (line 19) | class MessageLookup extends MessageLookupByLibrary {
method _notInlinedMessages (line 23) | _notInlinedMessages(_)
FILE: lib/l10n/messages_de.dart
type String (line 17) | typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
class MessageLookup (line 19) | class MessageLookup extends MessageLookupByLibrary {
method _notInlinedMessages (line 23) | _notInlinedMessages(_)
FILE: lib/l10n/messages_en.dart
type String (line 17) | typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
class MessageLookup (line 19) | class MessageLookup extends MessageLookupByLibrary {
method _notInlinedMessages (line 23) | _notInlinedMessages(_)
FILE: lib/l10n/messages_es.dart
type String (line 17) | typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
class MessageLookup (line 19) | class MessageLookup extends MessageLookupByLibrary {
method _notInlinedMessages (line 23) | _notInlinedMessages(_)
FILE: lib/l10n/messages_messages.dart
type String (line 17) | typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
class MessageLookup (line 19) | class MessageLookup extends MessageLookupByLibrary {
method _notInlinedMessages (line 23) | _notInlinedMessages(_)
FILE: lib/l10n/messages_tr.dart
type String (line 17) | typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
class MessageLookup (line 19) | class MessageLookup extends MessageLookupByLibrary {
method _notInlinedMessages (line 23) | _notInlinedMessages(_)
FILE: lib/l10n/messages_zh-Hans.dart
type String (line 17) | typedef String MessageIfAbsent(String messageStr, List<dynamic> args);
class MessageLookup (line 19) | class MessageLookup extends MessageLookupByLibrary {
method _notInlinedMessages (line 23) | _notInlinedMessages(_)
FILE: lib/localization.dart
class AppLocalization (line 11) | class AppLocalization {
method load (line 14) | Future<AppLocalization> load(Locale locale)
method of (line 26) | AppLocalization of(BuildContext context)
class AppLocalizationsDelegate (line 2018) | class AppLocalizationsDelegate extends LocalizationsDelegate<AppLocaliza...
method isSupported (line 2024) | bool isSupported(Locale locale)
method load (line 2029) | Future<AppLocalization> load(Locale locale)
method shouldReload (line 2037) | bool shouldReload(LocalizationsDelegate<AppLocalization> old)
FILE: lib/main.dart
function main (line 31) | void main()
class App (line 50) | class App extends StatefulWidget {
method createState (line 52) | _AppState createState()
class _AppState (line 55) | class _AppState extends State<App> {
method initState (line 57) | void initState()
method build (line 63) | Widget build(BuildContext context)
class Splash (line 257) | class Splash extends StatefulWidget {
method createState (line 259) | SplashState createState()
class SplashState (line 262) | class SplashState extends State<Splash> with WidgetsBindingObserver {
method checkLoggedIn (line 265) | Future checkLoggedIn({bool retry = false, bool legacyStorage = false})
method initState (line 314) | void initState()
method dispose (line 325) | void dispose()
method didChangeAppLifecycleState (line 331) | void didChangeAppLifecycleState(AppLifecycleState state)
method setLanguage (line 347) | void setLanguage()
method setDeviceLocaleAndCurrency (line 358) | void setDeviceLocaleAndCurrency()
method build (line 371) | Widget build(BuildContext context)
FILE: lib/model/authentication_method.dart
type AuthMethod (line 5) | enum AuthMethod { PIN, BIOMETRICS }
class AuthenticationMethod (line 8) | class AuthenticationMethod extends SettingSelectionItem {
method getDisplayName (line 13) | String getDisplayName(BuildContext context)
method getIndex (line 25) | int getIndex()
FILE: lib/model/available_currency.dart
type AvailableCurrencyEnum (line 5) | enum AvailableCurrencyEnum { USD, ARS, AUD, BRL, CAD, CHF, CLP, CNY, CZK...
class AvailableCurrency (line 11) | class AvailableCurrency extends SettingSelectionItem {
method getIso4217Code (line 16) | String getIso4217Code()
method getDisplayName (line 20) | String getDisplayName(BuildContext context)
method getDisplayNameNoSymbol (line 24) | String getDisplayNameNoSymbol()
method getCurrencySymbol (line 102) | String getCurrencySymbol()
method getLocale (line 180) | Locale getLocale()
method getIndex (line 259) | int getIndex()
method getBestForLocale (line 265) | AvailableCurrency getBestForLocale(Locale locale)
FILE: lib/model/available_languages.dart
type AvailableLanguage (line 5) | enum AvailableLanguage {
class LanguageSetting (line 17) | class LanguageSetting extends SettingSelectionItem {
method getDisplayName (line 22) | String getDisplayName(BuildContext context)
method getLocaleString (line 43) | String getLocaleString()
method getLocale (line 64) | Locale getLocale()
method getId (line 75) | String getId()
FILE: lib/model/available_themes.dart
type ThemeOptions (line 6) | enum ThemeOptions { LIGHT, DARK, COPPER }
class ThemeSetting (line 9) | class ThemeSetting extends SettingSelectionItem {
method getDisplayName (line 14) | String getDisplayName(BuildContext context)
method getTheme (line 26) | BaseTheme getTheme()
method getIndex (line 39) | int getIndex()
FILE: lib/model/db/appdb.dart
class DBHelper (line 10) | class DBHelper{
method _onCreate (line 35) | void _onCreate(Database db, int version)
method _onUpgrade (line 40) | void _onUpgrade(Database db, int oldVersion, int newVersion)
method getContacts (line 45) | Future<List<Contact>> getContacts()
method getContactsWithNameLike (line 55) | Future<List<Contact>> getContactsWithNameLike(String pattern)
method getContactWithAccount (line 65) | Future<Contact> getContactWithAccount(AccountNumber account)
method getContactWithName (line 74) | Future<Contact> getContactWithName(String name)
method contactExistsWithName (line 83) | Future<bool> contactExistsWithName(String name)
method contactExistsWithAccount (line 89) | Future<bool> contactExistsWithAccount(AccountNumber account)
method saveContact (line 95) | Future<int> saveContact(Contact contact)
method saveContacts (line 100) | Future<int> saveContacts(List<Contact> contacts)
method deleteContact (line 110) | Future<bool> deleteContact(Contact contact)
FILE: lib/model/db/contact.dart
class Contact (line 9) | @JsonSerializable()
method toJson (line 23) | Map<String, dynamic> toJson()
FILE: lib/model/db/contact.g.dart
function _$ContactFromJson (line 9) | Contact _$ContactFromJson(Map<String, dynamic> json)
function _$ContactToJson (line 17) | Map<String, dynamic> _$ContactToJson(Contact instance)
FILE: lib/model/lock_timeout.dart
type LockTimeoutOption (line 5) | enum LockTimeoutOption { ZERO, ONE, FIVE, FIFTEEN, THIRTY, SIXTY }
class LockTimeoutSetting (line 8) | class LockTimeoutSetting extends SettingSelectionItem {
method getDisplayName (line 13) | String getDisplayName(BuildContext context)
method getDuration (line 32) | Duration getDuration()
method getIndex (line 52) | int getIndex()
FILE: lib/model/notification_enabled.dart
type NotificationOptions (line 5) | enum NotificationOptions { ON, OFF }
class NotificationSetting (line 8) | class NotificationSetting extends SettingSelectionItem {
method getDisplayName (line 13) | String getDisplayName(BuildContext context)
method getIndex (line 24) | int getIndex()
FILE: lib/model/setting_item.dart
class SettingSelectionItem (line 4) | abstract class SettingSelectionItem {
method getDisplayName (line 5) | String getDisplayName(BuildContext context)
FILE: lib/model/unlock_setting.dart
type UnlockOption (line 5) | enum UnlockOption { YES, NO }
class UnlockSetting (line 8) | class UnlockSetting extends SettingSelectionItem {
method getDisplayName (line 13) | String getDisplayName(BuildContext context)
method getIndex (line 24) | int getIndex()
FILE: lib/network/http_client.dart
class HttpAPI (line 14) | class HttpAPI {
method getBorrowed (line 18) | Future<BorrowResponse> getBorrowed(String b58pubkey)
method borrowAccount (line 40) | Future<BorrowResponse> borrowAccount(String b58pubkey)
method getFreePASA (line 61) | Future<String> getFreePASA(
method verifyFreePASA (line 83) | Future<int> verifyFreePASA(String requestId, String code)
FILE: lib/network/model/base_request.dart
class BaseRequest (line 1) | abstract class BaseRequest {
method toJson (line 2) | Map<String, dynamic> toJson()
FILE: lib/network/model/request/borrow_request.dart
class BorrowRequest (line 6) | @JsonSerializable()
method toJson (line 17) | Map<String, dynamic> toJson()
FILE: lib/network/model/request/borrow_request.g.dart
function _$BorrowRequestFromJson (line 9) | BorrowRequest _$BorrowRequestFromJson(Map<String, dynamic> json)
function _$BorrowRequestToJson (line 16) | Map<String, dynamic> _$BorrowRequestToJson(BorrowRequest instance)
FILE: lib/network/model/request/fcm_delete_account_request.dart
class FcmDeleteAccountRequest (line 7) | @JsonSerializable()
method toJson (line 25) | Map<String, dynamic> toJson()
FILE: lib/network/model/request/fcm_delete_account_request.g.dart
function _$FcmDeleteAccountRequestFromJson (line 9) | FcmDeleteAccountRequest _$FcmDeleteAccountRequestFromJson(
function _$FcmDeleteAccountRequestToJson (line 17) | Map<String, dynamic> _$FcmDeleteAccountRequestToJson(
function writeNotNull (line 23) | void writeNotNull(String key, dynamic value)
FILE: lib/network/model/request/fcm_update_bulk_request.dart
class FcmUpdateBulkRequest (line 7) | @JsonSerializable()
method toJson (line 29) | Map<String, dynamic> toJson()
FILE: lib/network/model/request/fcm_update_bulk_request.g.dart
function _$FcmUpdateBulkRequestFromJson (line 9) | FcmUpdateBulkRequest _$FcmUpdateBulkRequestFromJson(Map<String, dynamic>...
function _$FcmUpdateBulkRequestToJson (line 18) | Map<String, dynamic> _$FcmUpdateBulkRequestToJson(
function writeNotNull (line 24) | void writeNotNull(String key, dynamic value)
FILE: lib/network/model/request/fcm_update_request.dart
class FcmUpdateRequest (line 7) | @JsonSerializable()
method toJson (line 29) | Map<String, dynamic> toJson()
FILE: lib/network/model/request/fcm_update_request.g.dart
function _$FcmUpdateRequestFromJson (line 9) | FcmUpdateRequest _$FcmUpdateRequestFromJson(Map<String, dynamic> json)
function _$FcmUpdateRequestToJson (line 18) | Map<String, dynamic> _$FcmUpdateRequestToJson(FcmUpdateRequest instance)
function writeNotNull (line 23) | void writeNotNull(String key, dynamic value)
FILE: lib/network/model/request/freepasa_get_request.dart
class FreePASAGetRequest (line 7) | @JsonSerializable()
method toJson (line 27) | Map<String, dynamic> toJson()
FILE: lib/network/model/request/freepasa_get_request.g.dart
function _$FreePASAGetRequestFromJson (line 9) | FreePASAGetRequest _$FreePASAGetRequestFromJson(Map<String, dynamic> json)
function _$FreePASAGetRequestToJson (line 17) | Map<String, dynamic> _$FreePASAGetRequestToJson(FreePASAGetRequest insta...
FILE: lib/network/model/request/freepasa_verify_request.dart
class FreePASAVerifyRequest (line 7) | @JsonSerializable()
method toJson (line 23) | Map<String, dynamic> toJson()
FILE: lib/network/model/request/freepasa_verify_request.g.dart
function _$FreePASAVerifyRequestFromJson (line 9) | FreePASAVerifyRequest _$FreePASAVerifyRequestFromJson(
function _$FreePASAVerifyRequestToJson (line 17) | Map<String, dynamic> _$FreePASAVerifyRequestToJson(
FILE: lib/network/model/request/getborrowed_request.dart
class GetBorrowedRequest (line 6) | @JsonSerializable()
method toJson (line 17) | Map<String, dynamic> toJson()
FILE: lib/network/model/request/getborrowed_request.g.dart
function _$GetBorrowedRequestFromJson (line 9) | GetBorrowedRequest _$GetBorrowedRequestFromJson(Map<String, dynamic> json)
function _$GetBorrowedRequestToJson (line 16) | Map<String, dynamic> _$GetBorrowedRequestToJson(GetBorrowedRequest insta...
FILE: lib/network/model/request/subscribe_request.dart
class SubscribeRequest (line 6) | @JsonSerializable()
method toJson (line 32) | Map<String, dynamic> toJson()
FILE: lib/network/model/request/subscribe_request.g.dart
function _$SubscribeRequestFromJson (line 9) | SubscribeRequest _$SubscribeRequestFromJson(Map<String, dynamic> json)
function _$SubscribeRequestToJson (line 21) | Map<String, dynamic> _$SubscribeRequestToJson(SubscribeRequest instance)
function writeNotNull (line 26) | void writeNotNull(String key, dynamic value)
FILE: lib/network/model/request_item.dart
function encodeRequestItem (line 4) | String encodeRequestItem(dynamic request)
class RequestItem (line 8) | class RequestItem<T> {
FILE: lib/network/model/response/accounts_response_borrowed.dart
class AccountsResponseBorrowed (line 7) | @JsonSerializable()
method toJson (line 18) | Map<String, dynamic> toJson()
FILE: lib/network/model/response/accounts_response_borrowed.g.dart
function _$AccountsResponseBorrowedFromJson (line 9) | AccountsResponseBorrowed _$AccountsResponseBorrowedFromJson(
function _$AccountsResponseBorrowedToJson (line 23) | Map<String, dynamic> _$AccountsResponseBorrowedToJson(
FILE: lib/network/model/response/borrow_response.dart
function _toDateTime (line 6) | DateTime _toDateTime(int v)
function _fromDateTime (line 10) | int _fromDateTime(DateTime v)
class BorrowResponse (line 14) | @JsonSerializable()
method toJson (line 42) | Map<String, dynamic> toJson()
FILE: lib/network/model/response/borrow_response.g.dart
function _$BorrowResponseFromJson (line 9) | BorrowResponse _$BorrowResponseFromJson(Map<String, dynamic> json)
function _$BorrowResponseToJson (line 18) | Map<String, dynamic> _$BorrowResponseToJson(BorrowResponse instance)
function writeNotNull (line 23) | void writeNotNull(String key, dynamic value)
FILE: lib/network/model/response/error_response.dart
class ErrorResponse (line 5) | @JsonSerializable()
method toJson (line 13) | Map<String, dynamic> toJson()
FILE: lib/network/model/response/error_response.g.dart
function _$ErrorResponseFromJson (line 9) | ErrorResponse _$ErrorResponseFromJson(Map<String, dynamic> json)
function _$ErrorResponseToJson (line 13) | Map<String, dynamic> _$ErrorResponseToJson(ErrorResponse instance)
FILE: lib/network/model/response/getborrowed_response.dart
class GetBorrowedResponse (line 7) | @JsonSerializable()
method toJson (line 15) | Map<String, dynamic> toJson()
FILE: lib/network/model/response/getborrowed_response.g.dart
function _$GetBorrowedResponseFromJson (line 9) | GetBorrowedResponse _$GetBorrowedResponseFromJson(Map<String, dynamic> j...
function _$GetBorrowedResponseToJson (line 17) | Map<String, dynamic> _$GetBorrowedResponseToJson(
FILE: lib/network/model/response/price_response.dart
function _toDouble (line 5) | double _toDouble(v)
class PriceResponse (line 9) | @JsonSerializable()
method toJson (line 23) | Map<String, dynamic> toJson()
FILE: lib/network/model/response/price_response.g.dart
function _$PriceResponseFromJson (line 9) | PriceResponse _$PriceResponseFromJson(Map<String, dynamic> json)
function _$PriceResponseToJson (line 16) | Map<String, dynamic> _$PriceResponseToJson(PriceResponse instance)
FILE: lib/network/model/response/subscribe_response.dart
function _toDouble (line 5) | double _toDouble(v)
function subscribeResponseFromJson (line 10) | SubscribeResponse subscribeResponseFromJson(Map<dynamic, dynamic> json)
class SubscribeResponse (line 14) | @JsonSerializable()
method toJson (line 32) | Map<String, dynamic> toJson()
FILE: lib/network/model/response/subscribe_response.g.dart
function _$SubscribeResponseFromJson (line 9) | SubscribeResponse _$SubscribeResponseFromJson(Map<String, dynamic> json)
function _$SubscribeResponseToJson (line 17) | Map<String, dynamic> _$SubscribeResponseToJson(SubscribeResponse instance)
FILE: lib/network/ws_client.dart
function decodeJson (line 23) | Map decodeJson(dynamic src)
class WSClient (line 28) | class WSClient {
method reconnectToService (line 60) | Future<void> reconnectToService()
method initCommunication (line 80) | Future<void> initCommunication({bool unsuspend = false})
method connectionClosed (line 114) | void connectionClosed()
method connectionClosedError (line 124) | void connectionClosedError(e)
method reset (line 134) | void reset({bool suspend = false})
method _send (line 144) | Future<void> _send(String message)
method _onMessageReceived (line 167) | Future<void> _onMessageReceived(dynamic message)
method sendRequest (line 199) | Future<void> sendRequest(BaseRequest request)
method queueRequest (line 206) | void queueRequest(BaseRequest request)
method processQueue (line 212) | Future<void> processQueue()
method removeSubscribeFromQueue (line 240) | void removeSubscribeFromQueue()
method pop (line 255) | RequestItem pop()
method peek (line 259) | RequestItem peek()
method clearQueue (line 264) | void clearQueue()
FILE: lib/service_locator.dart
function setupServiceLocator (line 12) | void setupServiceLocator()
FILE: lib/store/account/account.dart
class AccountBase (line 22) | abstract class AccountBase with Store {
method decrementBalance (line 52) | void decrementBalance(Currency delta)
method incrementBalance (line 58) | void incrementBalance(Currency delta)
method jRpcRequest (line 64) | Future<RPCResponse> jRpcRequest(Map<String, dynamic> request)
method updateAccount (line 88) | Future<bool> updateAccount()
method addNewOperation (line 115) | void addNewOperation(PascalOperation op)
method diffAndSortOperations (line 143) | void diffAndSortOperations(List<PascalOperation> newOperationList)
method getAccountOperations (line 158) | Future<void> getAccountOperations()
method getOperationsToDisplay (line 182) | List<PascalOperation> getOperationsToDisplay()
method shouldDisplayOperation (line 187) | bool shouldDisplayOperation(PascalOperation op)
method hasOperationsToDisplay (line 208) | bool hasOperationsToDisplay()
method changeAccountState (line 221) | void changeAccountState(AccountState accountState)
method doSend (line 226) | Future<RPCResponse> doSend({@required String amount, @required String ...
method transferAccount (line 257) | Future<RPCResponse> transferAccount(String strPubkey, {Currency fee})
method changeAccountName (line 288) | Future<RPCResponse> changeAccountName(AccountName newName, {Currency f...
method listAccountForSale (line 319) | Future<RPCResponse> listAccountForSale(Currency price, AccountNumber a...
method delistAccountForSale (line 351) | Future<RPCResponse> delistAccountForSale({Currency fee})
method encryptPayloadEcies (line 380) | Future<Uint8List> encryptPayloadEcies(String payload, AccountNumber ac...
FILE: lib/store/account/account.g.dart
function jRpcRequest (line 137) | Future<RPCResponse> jRpcRequest(Map<String, dynamic> request)
function updateAccount (line 144) | Future<bool> updateAccount()
function getAccountOperations (line 151) | Future<void> getAccountOperations()
function doSend (line 159) | Future<RPCResponse> doSend(
function transferAccount (line 176) | Future<RPCResponse> transferAccount(String strPubkey, {Currency fee})
function changeAccountName (line 184) | Future<RPCResponse> changeAccountName(AccountName newName, {Currency fee})
function listAccountForSale (line 192) | Future<RPCResponse> listAccountForSale(
function delistAccountForSale (line 203) | Future<RPCResponse> delistAccountForSale({Currency fee})
function encryptPayloadEcies (line 211) | Future<Uint8List> encryptPayloadEcies(String payload, AccountNumber acco...
function decrementBalance (line 219) | void decrementBalance(Currency delta)
function incrementBalance (line 229) | void incrementBalance(Currency delta)
function addNewOperation (line 239) | void addNewOperation(PascalOperation op)
function diffAndSortOperations (line 249) | void diffAndSortOperations(List<PascalOperation> newOperationList)
function getOperationsToDisplay (line 259) | List<PascalOperation> getOperationsToDisplay()
function shouldDisplayOperation (line 269) | bool shouldDisplayOperation(PascalOperation op)
function hasOperationsToDisplay (line 279) | bool hasOperationsToDisplay()
function changeAccountState (line 289) | void changeAccountState(AccountState accountState)
function toString (line 299) | String toString()
FILE: lib/store/wallet/wallet.dart
class WalletBase (line 31) | abstract class WalletBase with Store {
method initializeRpc (line 79) | Future<void> initializeRpc()
method getBalanceAndInsertBorrowed (line 85) | Future<dynamic> getBalanceAndInsertBorrowed()
method updateBorrowed (line 103) | Future<dynamic> updateBorrowed()
method initiateBorrow (line 120) | Future<dynamic> initiateBorrow()
method findAccountsRequest (line 136) | Future<RPCResponse> findAccountsRequest(FindAccountsRequest request)
method findAccountsWithNameLike (line 156) | Future<List<PascalAccount>> findAccountsWithNameLike(String name)
method loadWallet (line 171) | Future<bool> loadWallet()
method getAccountState (line 244) | Account getAccountState(PascalAccount account)
method changeRpcUrl (line 251) | void changeRpcUrl(String rpcUrl)
method removeAccount (line 259) | void removeAccount(PascalAccount account)
method updateAccountName (line 268) | void updateAccountName(PascalAccount account, AccountName newName)
method getNonzeroBalanceAccounts (line 281) | List<PascalAccount> getNonzeroBalanceAccounts()
method shouldHaveFee (line 295) | bool shouldHaveFee()
method getLocalCurrencyDisplay (line 310) | String getLocalCurrencyDisplay(
method disconnect (line 329) | void disconnect()
method reconnect (line 334) | void reconnect()
method requestUpdate (line 339) | Future<void> requestUpdate()
method fcmUpdate (line 363) | Future<void> fcmUpdate(AccountNumber account)
method fcmDeleteAccount (line 379) | Future<void> fcmDeleteAccount(AccountNumber account)
method fcmUpdateBulk (line 386) | Future<void> fcmUpdateBulk({bool forceDisable = false})
method addNewOp (line 413) | void addNewOp(PascalOperation op)
method reset (line 426) | void reset()
FILE: lib/store/wallet/wallet.g.dart
function initializeRpc (line 261) | Future<void> initializeRpc()
function getBalanceAndInsertBorrowed (line 269) | Future<dynamic> getBalanceAndInsertBorrowed()
function updateBorrowed (line 277) | Future<dynamic> updateBorrowed()
function initiateBorrow (line 284) | Future<dynamic> initiateBorrow()
function findAccountsRequest (line 291) | Future<RPCResponse> findAccountsRequest(FindAccountsRequest request)
function findAccountsWithNameLike (line 300) | Future<List<PascalAccount>> findAccountsWithNameLike(String name)
function loadWallet (line 308) | Future<bool> loadWallet()
function requestUpdate (line 315) | Future<void> requestUpdate()
function fcmUpdate (line 322) | Future<void> fcmUpdate(AccountNumber account)
function fcmDeleteAccount (line 329) | Future<void> fcmDeleteAccount(AccountNumber account)
function fcmUpdateBulk (line 337) | Future<void> fcmUpdateBulk({bool forceDisable = false})
function getAccountState (line 345) | Account getAccountState(PascalAccount account)
function changeRpcUrl (line 355) | void changeRpcUrl(String rpcUrl)
function removeAccount (line 365) | void removeAccount(PascalAccount account)
function updateAccountName (line 375) | void updateAccountName(PascalAccount account, AccountName newName)
function getNonzeroBalanceAccounts (line 385) | List<PascalAccount> getNonzeroBalanceAccounts()
function shouldHaveFee (line 395) | bool shouldHaveFee()
function getLocalCurrencyDisplay (line 405) | String getLocalCurrencyDisplay(
function disconnect (line 417) | void disconnect()
function reconnect (line 427) | void reconnect()
function addNewOp (line 437) | void addNewOp(PascalOperation op)
function reset (line 447) | void reset()
function toString (line 457) | String toString()
FILE: lib/themes.dart
class BaseTheme (line 7) | abstract class BaseTheme {
class BlaiseLightTheme (line 109) | class BlaiseLightTheme extends BaseTheme {
class BlaiseDarkTheme (line 284) | class BlaiseDarkTheme extends BaseTheme {
class BlaiseCopperTheme (line 457) | class BlaiseCopperTheme extends BaseTheme {
type AppIconEnum (line 630) | enum AppIconEnum { LIGHT, DARK, COPPER }
class AppIcon (line 631) | class AppIcon {
method setAppIcon (line 634) | Future<void> setAppIcon(AppIconEnum iconToChange)
FILE: lib/ui/account/account.dart
class AccountPage (line 36) | class AccountPage extends StatefulWidget {
method createState (line 41) | _AccountPageState createState()
class _AccountPageState (line 44) | class _AccountPageState extends State<AccountPage>
method formatExpiryDate (line 71) | void formatExpiryDate(DateTime expiry)
method initState (line 121) | void initState()
method _animationStatusListener (line 155) | void _animationStatusListener(AnimationStatus status)
method _animationControllerListener (line 168) | void _animationControllerListener()
method _disposeAnimations (line 177) | void _disposeAnimations()
method dispose (line 186) | void dispose()
method didChangeAppLifecycleState (line 195) | void didChangeAppLifecycleState(AppLifecycleState state)
method _startAnimation (line 215) | void _startAnimation()
method _updateContacts (line 221) | Future<void> _updateContacts()
method getOperationsList (line 230) | List<DialogListItem> getOperationsList()
method _registerBus (line 293) | void _registerBus()
method _destroyBus (line 306) | void _destroyBus()
method _refresh (line 316) | Future<void> _refresh({bool socketUpdate = true})
method build (line 369) | Widget build(BuildContext context)
method _buildAccountHistoryItem (line 1086) | Widget _buildAccountHistoryItem(PascalOperation op)
method getPlaceholderCards (line 1196) | List<Widget> getPlaceholderCards()
FILE: lib/ui/account/operation_details_sheet.dart
class OperationDetailsSheet (line 13) | class OperationDetailsSheet extends StatefulWidget {
method createState (line 18) | _OperationDetailsSheetState createState()
class _OperationDetailsSheetState (line 21) | class _OperationDetailsSheetState extends State<OperationDetailsSheet> {
method initState (line 23) | void initState()
method getOptypeDisplay (line 27) | String getOptypeDisplay(int optype)
method getNOperation (line 76) | int getNOperation()
method getSendingAccount (line 90) | Widget getSendingAccount()
method getReceivingAccount (line 103) | Widget getReceivingAccount()
method getChangingAccount (line 116) | Widget getChangingAccount()
method getSendAmount (line 129) | Widget getSendAmount()
method getPayload (line 142) | Widget getPayload()
method getNewPublickey (line 155) | Widget getNewPublickey()
method getNewName (line 169) | Widget getNewName()
method getSeller (line 182) | Widget getSeller()
method getAccountPrice (line 195) | Widget getAccountPrice()
method getLockedUntilBlock (line 208) | Widget getLockedUntilBlock()
method build (line 222) | Widget build(BuildContext context)
class TransactionDetailsListItem (line 391) | class TransactionDetailsListItem extends StatefulWidget {
method createState (line 399) | _TransactionDetailsListItemState createState()
class _TransactionDetailsListItemState (line 403) | class _TransactionDetailsListItemState
method initState (line 406) | void initState()
method build (line 414) | Widget build(BuildContext context)
FILE: lib/ui/account/operation_sheet.dart
class OperationSheet (line 20) | class OperationSheet extends StatefulWidget {
method createState (line 33) | _OperationSheetState createState()
class _OperationSheetState (line 36) | class _OperationSheetState extends State<OperationSheet> {
method initState (line 43) | void initState()
method build (line 69) | Widget build(BuildContext context)
method _copyPayloadToClipboard (line 224) | void _copyPayloadToClipboard()
FILE: lib/ui/account/other_operations/change_name/change_name_sheet.dart
class ChangeNameSheet (line 20) | class ChangeNameSheet extends StatefulWidget {
method createState (line 25) | _ChangeNameSheetState createState()
class _ChangeNameSheetState (line 28) | class _ChangeNameSheetState extends State<ChangeNameSheet> {
method initState (line 37) | void initState()
method build (line 45) | Widget build(BuildContext context)
method validateAndChangeName (line 207) | void validateAndChangeName()
FILE: lib/ui/account/other_operations/change_name/changed_name_sheet.dart
class ChangedNameSheet (line 11) | class ChangedNameSheet extends StatefulWidget {
method createState (line 17) | _ChangedNameSheetState createState()
class _ChangedNameSheetState (line 20) | class _ChangedNameSheetState extends State<ChangedNameSheet> {
method build (line 22) | Widget build(BuildContext context)
FILE: lib/ui/account/other_operations/change_name/changing_name_sheet.dart
class ChangingNameSheet (line 26) | class ChangingNameSheet extends StatefulWidget {
method createState (line 34) | _ChangingNameSheetState createState()
class _ChangingNameSheetState (line 37) | class _ChangingNameSheetState extends State<ChangingNameSheet> {
method _registerBus (line 43) | void _registerBus()
method _destroyBus (line 53) | void _destroyBus()
method dispose (line 60) | void dispose()
method initState (line 66) | void initState()
method showOverlay (line 72) | void showOverlay(BuildContext context)
method build (line 105) | Widget build(BuildContext context)
method doChange (line 332) | Future<void> doChange({Currency fee})
method _authenticateBiometrics (line 384) | Future<bool> _authenticateBiometrics(AuthUtil authUtil, String message)
method _authenticatePin (line 393) | Future<bool> _authenticatePin(String message)
method authenticate (line 410) | Future<bool> authenticate()
FILE: lib/ui/account/other_operations/delist_for_sale/delisted_for_sale.dart
class DelistedForSaleSheet (line 11) | class DelistedForSaleSheet extends StatefulWidget {
method createState (line 17) | _DelistedForSaleSheetState createState()
class _DelistedForSaleSheetState (line 20) | class _DelistedForSaleSheetState extends State<DelistedForSaleSheet> {
method build (line 22) | Widget build(BuildContext context)
FILE: lib/ui/account/other_operations/delist_for_sale/delisting_for_sale.dart
class DelistingForSaleSheet (line 26) | class DelistingForSaleSheet extends StatefulWidget {
method createState (line 32) | _DelistingForSaleSheetState createState()
class _DelistingForSaleSheetState (line 35) | class _DelistingForSaleSheetState extends State<DelistingForSaleSheet> {
method _registerBus (line 41) | void _registerBus()
method _destroyBus (line 51) | void _destroyBus()
method dispose (line 58) | void dispose()
method initState (line 64) | void initState()
method showOverlay (line 70) | void showOverlay(BuildContext context)
method build (line 103) | Widget build(BuildContext context)
method doDelist (line 329) | Future<void> doDelist({Currency fee})
method _authenticateBiometrics (line 380) | Future<bool> _authenticateBiometrics(AuthUtil authUtil, String message)
method _authenticatePin (line 389) | Future<bool> _authenticatePin(String message)
method authenticate (line 406) | Future<bool> authenticate()
FILE: lib/ui/account/other_operations/list_for_sale/list_for_sale_sheet.dart
class ListForSaleSheet (line 22) | class ListForSaleSheet extends StatefulWidget {
method createState (line 27) | _ListForSaleSheetState createState()
class _ListForSaleSheetState (line 30) | class _ListForSaleSheetState extends State<ListForSaleSheet> {
method initState (line 43) | void initState()
method build (line 62) | Widget build(BuildContext context)
method validateFormData (line 304) | bool validateFormData()
FILE: lib/ui/account/other_operations/list_for_sale/listed_for_sale_sheet.dart
class ListedForSaleSheet (line 11) | class ListedForSaleSheet extends StatefulWidget {
method createState (line 20) | _ListedForSaleSheetState createState()
class _ListedForSaleSheetState (line 23) | class _ListedForSaleSheetState extends State<ListedForSaleSheet> {
method build (line 25) | Widget build(BuildContext context)
FILE: lib/ui/account/other_operations/list_for_sale/listing_for_sale_sheet.dart
class ListingForSaleSheet (line 26) | class ListingForSaleSheet extends StatefulWidget {
method createState (line 39) | _ListingForSaleSheetState createState()
class _ListingForSaleSheetState (line 42) | class _ListingForSaleSheetState extends State<ListingForSaleSheet> {
method _registerBus (line 48) | void _registerBus()
method _destroyBus (line 58) | void _destroyBus()
method dispose (line 65) | void dispose()
method initState (line 71) | void initState()
method showOverlay (line 77) | void showOverlay(BuildContext context)
method build (line 110) | Widget build(BuildContext context)
method doList (line 436) | Future<void> doList({Currency fee})
method _authenticateBiometrics (line 489) | Future<bool> _authenticateBiometrics(AuthUtil authUtil, String message)
method _authenticatePin (line 498) | Future<bool> _authenticatePin(String message)
method authenticate (line 515) | Future<bool> authenticate()
FILE: lib/ui/account/other_operations/private_sale/create_private_sale_sheet.dart
class CreatePrivateSaleSheet (line 23) | class CreatePrivateSaleSheet extends StatefulWidget {
method createState (line 28) | _CreatePrivateSaleSheetState createState()
class _CreatePrivateSaleSheetState (line 31) | class _CreatePrivateSaleSheetState extends State<CreatePrivateSaleSheet> {
method initState (line 47) | void initState()
method build (line 68) | Widget build(BuildContext context)
method validateFormData (line 393) | bool validateFormData()
FILE: lib/ui/account/other_operations/private_sale/created_private_sale_sheet.dart
class CreatedPrivateSaleSheet (line 11) | class CreatedPrivateSaleSheet extends StatefulWidget {
method createState (line 24) | _CreatedPrivateSaleSheetState createState()
class _CreatedPrivateSaleSheetState (line 28) | class _CreatedPrivateSaleSheetState extends State<CreatedPrivateSaleShee...
method build (line 30) | Widget build(BuildContext context)
FILE: lib/ui/account/other_operations/private_sale/creating_private_sale_sheet.dart
class CreatingPrivateSaleSheet (line 27) | class CreatingPrivateSaleSheet extends StatefulWidget {
method createState (line 42) | _CreatingPrivateSaleSheetState createState()
class _CreatingPrivateSaleSheetState (line 46) | class _CreatingPrivateSaleSheetState extends State<CreatingPrivateSaleSh...
method _registerBus (line 52) | void _registerBus()
method _destroyBus (line 62) | void _destroyBus()
method dispose (line 69) | void dispose()
method initState (line 75) | void initState()
method showOverlay (line 81) | void showOverlay(BuildContext context)
method build (line 114) | Widget build(BuildContext context)
method doList (line 488) | Future<void> doList({Currency fee})
method _authenticateBiometrics (line 544) | Future<bool> _authenticateBiometrics(AuthUtil authUtil, String message)
method _authenticatePin (line 553) | Future<bool> _authenticatePin(String message)
method authenticate (line 570) | Future<bool> authenticate()
FILE: lib/ui/account/other_operations/transfer_account/transfer_account_sheet.dart
class TransferAccountSheet (line 20) | class TransferAccountSheet extends StatefulWidget {
method createState (line 25) | _TransferAccountSheetState createState()
class _TransferAccountSheetState (line 28) | class _TransferAccountSheetState extends State<TransferAccountSheet> {
method initState (line 38) | void initState()
method build (line 47) | Widget build(BuildContext context)
method validateAndTransfer (line 228) | void validateAndTransfer()
FILE: lib/ui/account/other_operations/transfer_account/transferred_account_sheet.dart
class TransferredAccountSheet (line 11) | class TransferredAccountSheet extends StatefulWidget {
method createState (line 18) | _TransferredAccountSheetState createState()
class _TransferredAccountSheetState (line 22) | class _TransferredAccountSheetState extends State<TransferredAccountShee...
method build (line 24) | Widget build(BuildContext context)
FILE: lib/ui/account/other_operations/transfer_account/transferring_account_sheet.dart
class TransferringAccountSheet (line 26) | class TransferringAccountSheet extends StatefulWidget {
method createState (line 36) | _TransferringAccountSheetState createState()
class _TransferringAccountSheetState (line 40) | class _TransferringAccountSheetState extends State<TransferringAccountSh...
method _registerBus (line 46) | void _registerBus()
method _destroyBus (line 56) | void _destroyBus()
method dispose (line 63) | void dispose()
method initState (line 69) | void initState()
method showOverlay (line 75) | void showOverlay(BuildContext context)
method build (line 108) | Widget build(BuildContext context)
method doTransfer (line 334) | Future<void> doTransfer({Currency fee})
method _authenticateBiometrics (line 387) | Future<bool> _authenticateBiometrics(AuthUtil authUtil, String message)
method _authenticatePin (line 396) | Future<bool> _authenticatePin(String message)
method authenticate (line 413) | Future<bool> authenticate()
FILE: lib/ui/account/receive/receive_sheet.dart
class ReceiveSheet (line 18) | class ReceiveSheet extends StatefulWidget {
method createState (line 23) | _ReceiveSheetState createState()
class _ReceiveSheetState (line 26) | class _ReceiveSheetState extends State<ReceiveSheet> {
method initState (line 31) | void initState()
method build (line 37) | Widget build(BuildContext context)
FILE: lib/ui/account/receive/request_sheet.dart
class RequestSheet (line 15) | class RequestSheet extends StatefulWidget {
method createState (line 18) | _RequestSheetState createState()
class _RequestSheetState (line 21) | class _RequestSheetState extends State<RequestSheet> {
method initState (line 30) | void initState()
method build (line 39) | Widget build(BuildContext context)
FILE: lib/ui/account/send/send_sheet.dart
class SendSheet (line 35) | class SendSheet extends StatefulWidget {
method createState (line 43) | _SendSheetState createState()
class _SendSheetState (line 46) | class _SendSheetState extends State<SendSheet> {
method isDigit (line 88) | bool isDigit(String s, int idx)
method initState (line 91) | void initState()
method build (line 214) | Widget build(BuildContext context)
method validateAndSend (line 806) | Future<void> validateAndSend()
method toggleLocalCurrency (line 873) | void toggleLocalCurrency()
method _convertLocalCurrencyToCrypto (line 917) | String _convertLocalCurrencyToCrypto()
method _convertCryptoToLocalCurrency (line 928) | String _convertCryptoToLocalCurrency()
method _getContactsPopup (line 945) | Widget _getContactsPopup()
method _buildContactItem (line 971) | Widget _buildContactItem(Contact contact)
method _getAccountNameList (line 1004) | Widget _getAccountNameList()
method _buildAccountNameItem (line 1055) | Widget _buildAccountNameItem(PascalAccount account)
method _checkAndUpdateContacts (line 1094) | Future<void> _checkAndUpdateContacts()
method checkAndValidateContact (line 1121) | Future<void> checkAndValidateContact({String name, Contact contact})
FILE: lib/ui/account/send/sending_sheet.dart
class SendingSheet (line 30) | class SendingSheet extends StatefulWidget {
method createState (line 56) | _SendingSheetState createState()
class _SendingSheetState (line 59) | class _SendingSheetState extends State<SendingSheet> {
method _registerBus (line 68) | void _registerBus()
method _destroyBus (line 78) | void _destroyBus()
method initState (line 85) | void initState()
method dispose (line 91) | void dispose()
method showOverlay (line 96) | void showOverlay(BuildContext context)
method build (line 129) | Widget build(BuildContext context)
method doSend (line 589) | Future<void> doSend({Currency fee})
method _authenticateBiometrics (line 669) | Future<bool> _authenticateBiometrics(AuthUtil authUtil, String message)
method _authenticatePin (line 678) | Future<bool> _authenticatePin(String message)
method authenticate (line 695) | Future<bool> authenticate()
FILE: lib/ui/account/send/sent_sheet.dart
class SentSheet (line 15) | class SentSheet extends StatefulWidget {
method createState (line 37) | _SentSheetState createState()
class _SentSheetState (line 40) | class _SentSheetState extends State<SentSheet> {
method build (line 42) | Widget build(BuildContext context)
FILE: lib/ui/intro/intro_backup_confirm.dart
class IntroBackupConfirmPage (line 14) | class IntroBackupConfirmPage extends StatefulWidget {
method createState (line 16) | _IntroBackupConfirmPageState createState()
class _IntroBackupConfirmPageState (line 19) | class _IntroBackupConfirmPageState extends State<IntroBackupConfirmPage> {
method build (line 22) | Widget build(BuildContext context)
FILE: lib/ui/intro/intro_decrypt_and_import_private_key.dart
class IntroDecryptAndImportPrivateKeyPage (line 19) | class IntroDecryptAndImportPrivateKeyPage extends StatefulWidget {
method createState (line 25) | _IntroDecryptAndImportPrivateKeyPageState createState()
class _IntroDecryptAndImportPrivateKeyPageState (line 29) | class _IntroDecryptAndImportPrivateKeyPageState
method initState (line 36) | void initState()
method build (line 43) | Widget build(BuildContext context)
method onPasswordChanged (line 166) | void onPasswordChanged(String newText)
method decryptAndSubmit (line 172) | void decryptAndSubmit()
FILE: lib/ui/intro/intro_import_private_key.dart
class IntroImportPrivateKeyPage (line 22) | class IntroImportPrivateKeyPage extends StatefulWidget {
method createState (line 24) | _IntroImportPrivateKeyPageState createState()
class _IntroImportPrivateKeyPageState (line 28) | class _IntroImportPrivateKeyPageState extends State<IntroImportPrivateKe...
method initState (line 35) | void initState()
method build (line 44) | Widget build(BuildContext context)
method privateKeyIsValid (line 213) | bool privateKeyIsValid(String pkText)
method privateKeyIsEncrypted (line 222) | bool privateKeyIsEncrypted(String pkText, {bool lengthCheck = true})
method onKeyTextChanged (line 239) | void onKeyTextChanged(String newText)
method validateAndSubmit (line 253) | void validateAndSubmit()
FILE: lib/ui/intro/intro_new_private_key.dart
class IntroNewPrivateKeyPage (line 14) | class IntroNewPrivateKeyPage extends StatefulWidget {
method createState (line 16) | _IntroNewPrivateKeyPageState createState()
class _IntroNewPrivateKeyPageState (line 19) | class _IntroNewPrivateKeyPageState extends State<IntroNewPrivateKeyPage> {
method initState (line 25) | void initState()
method build (line 31) | Widget build(BuildContext context)
FILE: lib/ui/intro/intro_security_first.dart
class IntroSecurityFirstPage (line 13) | class IntroSecurityFirstPage extends StatefulWidget {
method createState (line 15) | _IntroSecurityFirstPageState createState()
class _IntroSecurityFirstPageState (line 18) | class _IntroSecurityFirstPageState extends State<IntroSecurityFirstPage> {
method build (line 22) | Widget build(BuildContext context)
FILE: lib/ui/intro/intro_welcome.dart
class IntroWelcomePage (line 13) | class IntroWelcomePage extends StatefulWidget {
method createState (line 15) | _IntroWelcomePageState createState()
class _IntroWelcomePageState (line 18) | class _IntroWelcomePageState extends State<IntroWelcomePage> {
method getLanguageList (line 19) | List<DialogListItem> getLanguageList()
method initState (line 38) | void initState()
method build (line 43) | Widget build(BuildContext context)
FILE: lib/ui/lockscreen/lock_screen.dart
class LockScreenPage (line 18) | class LockScreenPage extends StatefulWidget {
method createState (line 20) | _LockScreenPageState createState()
class _LockScreenPageState (line 23) | class _LockScreenPageState extends State<LockScreenPage> {
method _goHome (line 28) | void _goHome()
method _formatCountDisplay (line 34) | String _formatCountDisplay(int count)
method _runCountdown (line 87) | Future<void> _runCountdown(int count)
method _authenticateBiometrics (line 108) | Future<void> _authenticateBiometrics()
method _authenticatePin (line 123) | Future<void> _authenticatePin({bool transitions = false})
method _authenticate (line 162) | Future<void> _authenticate({bool transitions = false})
method initState (line 192) | void initState()
method logoutPressed (line 197) | void logoutPressed()
method build (line 244) | Widget build(BuildContext context)
FILE: lib/ui/overview/buy_account_sheet.dart
class BuyAccountSheet (line 16) | class BuyAccountSheet extends StatefulWidget {
method createState (line 17) | _BuyAccountSheetState createState()
class _BuyAccountSheetState (line 20) | class _BuyAccountSheetState extends State<BuyAccountSheet> {
method showOverlay (line 27) | void showOverlay(BuildContext context)
method build (line 60) | Widget build(BuildContext context)
FILE: lib/ui/overview/confirm_free_account_sheet.dart
class ConfirmFreeAccountSheet (line 21) | class ConfirmFreeAccountSheet extends StatefulWidget {
method createState (line 26) | _ConfirmFreeAccountSheetState createState()
class _ConfirmFreeAccountSheetState (line 30) | class _ConfirmFreeAccountSheetState extends State<ConfirmFreeAccountShee...
method initState (line 36) | void initState()
method showOverlay (line 42) | void showOverlay(BuildContext context)
method build (line 75) | Widget build(BuildContext context)
method verifyFreepasaAccount (line 213) | Future<bool> verifyFreepasaAccount()
FILE: lib/ui/overview/get_account_sheet.dart
class GetAccountSheet (line 16) | class GetAccountSheet extends StatefulWidget {
method createState (line 17) | _GetAccountSheetState createState()
class _GetAccountSheetState (line 20) | class _GetAccountSheetState extends State<GetAccountSheet> {
method initState (line 24) | void initState()
method build (line 29) | Widget build(BuildContext context)
FILE: lib/ui/overview/get_free_account_sheet.dart
class CountryCode (line 23) | class CountryCode {
method fromJsonList (line 29) | List<CountryCode> fromJsonList(List<dynamic> jsonList)
class GetFreeAccountSheet (line 38) | class GetFreeAccountSheet extends StatefulWidget {
method createState (line 39) | _GetFreeAccountSheetState createState()
class _GetFreeAccountSheetState (line 42) | class _GetFreeAccountSheetState extends State<GetFreeAccountSheet> {
method readCountryCodeFromAssets (line 52) | Future<List<CountryCode>> readCountryCodeFromAssets()
method getDefaultCountryCode (line 58) | CountryCode getDefaultCountryCode(List<CountryCode> list)
method _getCountryCodeForPicker (line 64) | List<Widget> _getCountryCodeForPicker()
method initState (line 77) | void initState()
method build (line 95) | Widget build(BuildContext context)
method showOverlay (line 335) | void showOverlay(BuildContext context)
method showCountryCodePicker (line 367) | Future<void> showCountryCodePicker()
method onSubmitted (line 401) | Future<String> onSubmitted()
FILE: lib/ui/overview/overview.dart
class OverviewPage (line 30) | class OverviewPage extends StatefulWidget {
method createState (line 33) | _OverviewPageState createState()
class _OverviewPageState (line 36) | class _OverviewPageState extends State<OverviewPage>
method walletLoad (line 51) | Future<void> walletLoad()
method _registerBus (line 66) | void _registerBus()
method _destroyBus (line 83) | void _destroyBus()
method setAppLockEvent (line 95) | Future<void> setAppLockEvent()
method cancelLockEvent (line 112) | Future<void> cancelLockEvent()
method didChangeAppLifecycleState (line 119) | void didChangeAppLifecycleState(AppLifecycleState state)
method _switchToAccount (line 136) | void _switchToAccount(int account)
method _chooseCorrectAccountFromNotification (line 153) | void _chooseCorrectAccountFromNotification(dynamic message)
method getNotificationPermissions (line 166) | void getNotificationPermissions()
method initState (line 193) | void initState()
method _animationStatusListener (line 218) | void _animationStatusListener(AnimationStatus status)
method _animationControllerListener (line 231) | void _animationControllerListener()
method _disposeAnimations (line 239) | void _disposeAnimations()
method dispose (line 248) | void dispose()
method _startAnimation (line 255) | void _startAnimation()
method _refresh (line 262) | Future<void> _refresh()
method build (line 286) | Widget build(BuildContext context)
method _getPlaceholderAccountCards (line 933) | List<Widget> _getPlaceholderAccountCards()
FILE: lib/ui/overview/public_key_overview_sheet.dart
class PublicKeyOverviewSheet (line 17) | class PublicKeyOverviewSheet extends StatefulWidget {
method createState (line 20) | _PublicKeyOverviewSheetState createState()
class _PublicKeyOverviewSheetState (line 23) | class _PublicKeyOverviewSheetState extends State<PublicKeyOverviewSheet> {
method initState (line 28) | void initState()
method build (line 34) | Widget build(BuildContext context)
FILE: lib/ui/settings/backup_private_key/backup_private_key_sheet.dart
class BackupPrivateKeySheet (line 18) | class BackupPrivateKeySheet extends StatefulWidget {
method createState (line 19) | _BackupPrivateKeySheetState createState()
class _BackupPrivateKeySheetState (line 22) | class _BackupPrivateKeySheetState extends State<BackupPrivateKeySheet> {
method build (line 24) | Widget build(BuildContext context)
method _authenticateBiometrics (line 174) | Future<void> _authenticateBiometrics(AuthUtil authUtil, String message...
method _authenticatePin (line 189) | Future<void> _authenticatePin(bool encrypted, String message)
method authenticate (line 213) | Future<void> authenticate(bool encrypted)
FILE: lib/ui/settings/backup_private_key/encrypt_private_key_sheet.dart
class EncryptPrivateKeySheet (line 18) | class EncryptPrivateKeySheet extends StatefulWidget {
method createState (line 19) | _EncryptPrivateKeySheetState createState()
class _EncryptPrivateKeySheetState (line 22) | class _EncryptPrivateKeySheetState extends State<EncryptPrivateKeySheet> {
method initState (line 33) | void initState()
method build (line 43) | Widget build(BuildContext context)
method validatePasswordMatchAndEncrypt (line 265) | void validatePasswordMatchAndEncrypt()
FILE: lib/ui/settings/backup_private_key/encrypted_private_key_sheet.dart
class EncryptedPrivateKeySheet (line 14) | class EncryptedPrivateKeySheet extends StatefulWidget {
method createState (line 19) | _EncryptedPrivateKeySheetState createState()
class _EncryptedPrivateKeySheetState (line 23) | class _EncryptedPrivateKeySheetState extends State<EncryptedPrivateKeySh...
method initState (line 29) | void initState()
method build (line 36) | Widget build(BuildContext context)
FILE: lib/ui/settings/backup_private_key/unencrypted_private_key_sheet.dart
class UnencryptedPrivateKeySheet (line 16) | class UnencryptedPrivateKeySheet extends StatefulWidget {
method createState (line 17) | _UnencryptedPrivateKeySheetState createState()
class _UnencryptedPrivateKeySheetState (line 21) | class _UnencryptedPrivateKeySheetState
method initState (line 28) | void initState()
method build (line 35) | Widget build(BuildContext context)
FILE: lib/ui/settings/change_daemon_sheet.dart
class ChangeDaemonSheet (line 19) | class ChangeDaemonSheet extends StatefulWidget {
method createState (line 24) | _ChangeDaemonSheetState createState()
class _ChangeDaemonSheetState (line 27) | class _ChangeDaemonSheetState extends State<ChangeDaemonSheet> {
method initState (line 34) | void initState()
method build (line 55) | Widget build(BuildContext context)
method validateFormData (line 289) | bool validateFormData()
FILE: lib/ui/settings/contacts/add_contact_sheet.dart
class AddContactSheet (line 25) | class AddContactSheet extends StatefulWidget {
method createState (line 30) | _AddContactSheetState createState()
class _AddContactSheetState (line 33) | class _AddContactSheetState extends State<AddContactSheet> {
method initState (line 44) | void initState()
method build (line 67) | Widget build(BuildContext context)
method validateForm (line 287) | Future<bool> validateForm()
FILE: lib/ui/settings/contacts/contact_detail_sheet.dart
class ContactDetailSheet (line 25) | class ContactDetailSheet extends StatefulWidget {
method createState (line 30) | _ContactDetailSheetState createState()
class _ContactDetailSheetState (line 33) | class _ContactDetailSheetState extends State<ContactDetailSheet> {
method initState (line 42) | void initState()
method build (line 50) | Widget build(BuildContext context)
method _showSendButton (line 441) | bool _showSendButton()
method _getAccountsList (line 450) | List<DialogListItem> _getAccountsList()
method _copyToClipboard (line 474) | void _copyToClipboard(String toCopy)
FILE: lib/ui/settings/contacts/contacts.dart
class ContactsPage (line 29) | class ContactsPage extends StatefulWidget {
method createState (line 35) | _ContactsPageState createState()
class _ContactsPageState (line 38) | class _ContactsPageState extends State<ContactsPage> {
method _registerBus (line 47) | void _registerBus()
method _destroyBus (line 71) | void _destroyBus()
method initState (line 81) | void initState()
method dispose (line 98) | void dispose()
method _updateContacts (line 103) | void _updateContacts()
method _exportContacts (line 120) | Future<void> _exportContacts()
method _importContacts (line 141) | Future<void> _importContacts()
method build (line 207) | Widget build(BuildContext context)
FILE: lib/ui/settings/public_key_sheet.dart
class PublicKeySheet (line 15) | class PublicKeySheet extends StatefulWidget {
method createState (line 16) | _PublicKeySheetState createState()
class _PublicKeySheetState (line 19) | class _PublicKeySheetState extends State<PublicKeySheet> {
method initState (line 24) | void initState()
method build (line 30) | Widget build(BuildContext context)
FILE: lib/ui/settings/security.dart
class SecurityPage (line 16) | class SecurityPage extends StatefulWidget {
method createState (line 18) | _SecurityPageState createState()
class _SecurityPageState (line 21) | class _SecurityPageState extends State<SecurityPage> {
method _getAuthMethods (line 31) | List<DialogListItem> _getAuthMethods()
method _authOnLaunchOptions (line 50) | List<DialogListItem> _authOnLaunchOptions()
method _getLockTimeoutList (line 71) | List<DialogListItem> _getLockTimeoutList()
method initState (line 91) | void initState()
method build (line 133) | Widget build(BuildContext context)
FILE: lib/ui/settings/settings.dart
class SettingsPage (line 32) | class SettingsPage extends StatefulWidget {
method createState (line 38) | _SettingsPageState createState()
class _SettingsPageState (line 41) | class _SettingsPageState extends State<SettingsPage> {
method getThemeList (line 44) | List<DialogListItem> getThemeList()
method getCurrencyList (line 58) | List<DialogListItem> getCurrencyList()
method getNotificationList (line 80) | List<DialogListItem> getNotificationList()
method getLanguageList (line 104) | List<DialogListItem> getLanguageList()
method initState (line 128) | void initState()
method build (line 154) | Widget build(BuildContext context)
method logoutPressed (line 478) | void logoutPressed()
FILE: lib/ui/util/app_icons.dart
class AppIcons (line 18) | class AppIcons {
FILE: lib/ui/util/formatters.dart
class PascalAccountFormatter (line 7) | class PascalAccountFormatter extends TextInputFormatter {
method formatEditUpdate (line 9) | TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditi...
class PascalNameFormatter (line 24) | class PascalNameFormatter extends TextInputFormatter {
method formatEditUpdate (line 26) | TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditi...
class PhoneNumberFormatter (line 38) | class PhoneNumberFormatter extends TextInputFormatter {
method formatEditUpdate (line 40) | TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditi...
class CurrencyFormatter (line 54) | class CurrencyFormatter extends TextInputFormatter {
method formatEditUpdate (line 62) | TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditi...
class LocalCurrencyFormatter (line 109) | class LocalCurrencyFormatter extends TextInputFormatter {
method formatEditUpdate (line 115) | TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditi...
class UpperCaseTextFormatter (line 149) | class UpperCaseTextFormatter extends TextInputFormatter {
method formatEditUpdate (line 151) | TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditi...
class LowerCaseTextFormatter (line 160) | class LowerCaseTextFormatter extends TextInputFormatter {
method formatEditUpdate (line 162) | TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditi...
FILE: lib/ui/util/margins.dart
class AppMarginSizes (line 4) | class AppMarginSizes {
class AppMargins (line 14) | class AppMargins {
method textFieldHeader (line 16) | EdgeInsetsDirectional textFieldHeader(BuildContext context)
FILE: lib/ui/util/routes.dart
type TransitionOption (line 3) | enum TransitionOption {
class NoTransitionRoute (line 11) | class NoTransitionRoute<T> extends MaterialPageRoute<T> {
method buildTransitions (line 17) | Widget buildTransitions(BuildContext context,
class NoPushTransitionRoute (line 27) | class NoPushTransitionRoute<T> extends MaterialPageRoute<T> {
method buildTransitions (line 32) | Widget buildTransitions(BuildContext context,
class NoPopTransitionRoute (line 46) | class NoPopTransitionRoute<T> extends MaterialPageRoute<T> {
method buildTransitions (line 51) | Widget buildTransitions(BuildContext context,
class RouteUtils (line 63) | class RouteUtils {
method withNameLike (line 64) | RoutePredicate withNameLike(String name)
FILE: lib/ui/util/text_styles.dart
class AppStyles (line 4) | class AppStyles {
method snackbar (line 6) | TextStyle snackbar(BuildContext context)
method header (line 16) | TextStyle header(BuildContext context)
method headerSmall (line 26) | TextStyle headerSmall(BuildContext context)
method headerSmallBold (line 35) | TextStyle headerSmallBold(BuildContext context)
method headerSmallBoldSuccess (line 43) | TextStyle headerSmallBoldSuccess(BuildContext context)
method paragraph (line 53) | TextStyle paragraph(BuildContext context)
method paragraphSuccess (line 64) | TextStyle paragraphSuccess(BuildContext context)
method paragraphMedium (line 74) | TextStyle paragraphMedium(BuildContext context)
method paragraphMediumPrimary (line 84) | TextStyle paragraphMediumPrimary(BuildContext context)
method paragraphMediumSuccess (line 94) | TextStyle paragraphMediumSuccess(BuildContext context)
method paragraphPrimary (line 105) | TextStyle paragraphPrimary(BuildContext context)
method primarySmall600 (line 116) | TextStyle primarySmall600(BuildContext context)
method primarySmallest400 (line 126) | TextStyle primarySmallest400(BuildContext context)
method primarySmallest500 (line 136) | TextStyle primarySmallest500(BuildContext context)
method primarySmallest600 (line 146) | TextStyle primarySmallest600(BuildContext context)
method dangerSmallest600 (line 156) | TextStyle dangerSmallest600(BuildContext context)
method paragraphDanger (line 166) | TextStyle paragraphDanger(BuildContext context)
method balanceMedium (line 176) | TextStyle balanceMedium(BuildContext context)
method balanceSmall (line 185) | TextStyle balanceSmall(BuildContext context)
method balanceSmallSuccess (line 194) | TextStyle balanceSmallSuccess(BuildContext context)
method balanceSmallTextDark (line 203) | TextStyle balanceSmallTextDark(BuildContext context)
method balanceSmallSecondary (line 212) | TextStyle balanceSmallSecondary(BuildContext context)
method paragraphBig (line 221) | TextStyle paragraphBig(BuildContext context)
method paragraphBigDisabled (line 231) | TextStyle paragraphBigDisabled(BuildContext context)
method paragraphTextLightSmall (line 241) | TextStyle paragraphTextLightSmall(BuildContext context)
method textLightSmall600 (line 251) | TextStyle textLightSmall600(BuildContext context)
method paragraphTextLightSmallSemiBold (line 260) | TextStyle paragraphTextLightSmallSemiBold(BuildContext context)
method snackBar (line 271) | TextStyle snackBar(BuildContext context)
method modalHeader (line 281) | TextStyle modalHeader(BuildContext context)
method settingsItemHeader (line 292) | TextStyle settingsItemHeader(BuildContext context)
method settingsItemHeaderDisabled (line 302) | TextStyle settingsItemHeaderDisabled(BuildContext context)
method settingsItemSubHeader (line 313) | TextStyle settingsItemSubHeader(BuildContext context)
method settingsItemSubHeaderDisabled (line 323) | TextStyle settingsItemSubHeaderDisabled(BuildContext context)
method operationDate (line 334) | TextStyle operationDate(BuildContext context)
method operationType (line 344) | TextStyle operationType(BuildContext context)
method settingsHeader (line 354) | TextStyle settingsHeader(BuildContext context)
method iconFontPrimaryMedium (line 363) | TextStyle iconFontPrimaryMedium(BuildContext context)
method iconFontSuccessMedium (line 370) | TextStyle iconFontSuccessMedium(BuildContext context)
method iconFontPrimarySmall (line 377) | TextStyle iconFontPrimarySmall(BuildContext context)
method iconFontSuccessSmall (line 384) | TextStyle iconFontSuccessSmall(BuildContext context)
method emptySpaceSmallest (line 391) | TextStyle emptySpaceSmallest(BuildContext context)
method emptySpaceTiny (line 395) | TextStyle emptySpaceTiny(BuildContext context)
method accountsItemName (line 399) | TextStyle accountsItemName(BuildContext context)
method accountsItemNumber (line 409) | TextStyle accountsItemNumber(BuildContext context)
method contactsItemName (line 420) | TextStyle contactsItemName(BuildContext context)
method contactsItemNamePrimary (line 431) | TextStyle contactsItemNamePrimary(BuildContext context)
method contactsItemNameSuccess (line 442) | TextStyle contactsItemNameSuccess(BuildContext context)
method contactsItemAddress (line 453) | TextStyle contactsItemAddress(BuildContext context)
method monoTextDarkSmall400 (line 462) | TextStyle monoTextDarkSmall400(BuildContext context)
method contactsItemAddressPrimary (line 470) | TextStyle contactsItemAddressPrimary(BuildContext context)
method textFieldLabel (line 480) | TextStyle textFieldLabel(BuildContext context)
method textFieldLabelSuccess (line 490) | TextStyle textFieldLabelSuccess(BuildContext context)
method privateKeyPrimary (line 501) | TextStyle privateKeyPrimary(BuildContext context)
method privateKeyTextDark (line 511) | TextStyle privateKeyTextDark(BuildContext context)
method privateKeyTextDarkFaded (line 521) | TextStyle privateKeyTextDarkFaded(BuildContext context)
method privateKeySuccess (line 532) | TextStyle privateKeySuccess(BuildContext context)
method buttonPrimary (line 542) | TextStyle buttonPrimary(BuildContext context)
method buttonPrimaryOutline (line 552) | TextStyle buttonPrimaryOutline(BuildContext context)
method buttonSuccessOutline (line 561) | TextStyle buttonSuccessOutline(BuildContext context)
method buttonDanger (line 571) | TextStyle buttonDanger(BuildContext context)
method buttonDangerOutline (line 583) | TextStyle buttonDangerOutline(BuildContext context)
method buttonMiniBg (line 595) | TextStyle buttonMiniBg(BuildContext context)
method buttonMiniSuccess (line 605) | TextStyle buttonMiniSuccess(BuildContext context)
method iconFontTextLightPascal (line 615) | TextStyle iconFontTextLightPascal(BuildContext context)
method iconFontPrimaryBalanceMediumPascal (line 624) | TextStyle iconFontPrimaryBalanceMediumPascal(BuildContext context)
method iconFontPrimaryBalanceSmallPascal (line 633) | TextStyle iconFontPrimaryBalanceSmallPascal(BuildContext context)
method iconFontSuccessBalanceSmallPascal (line 641) | TextStyle iconFontSuccessBalanceSmallPascal(BuildContext context)
method iconFontTextDarkBalanceSmallPascal (line 649) | TextStyle iconFontTextDarkBalanceSmallPascal(BuildContext context)
method iconFontSecondarySmallPascal (line 657) | TextStyle iconFontSecondarySmallPascal(BuildContext context)
method iconFontPrimaryBalanceSmallest (line 666) | TextStyle iconFontPrimaryBalanceSmallest(BuildContext context)
method iconFontTextDarkBalanceSmallest (line 674) | TextStyle iconFontTextDarkBalanceSmallest(BuildContext context)
method accountCardName (line 683) | TextStyle accountCardName(BuildContext context)
method accountCardAddress (line 694) | TextStyle accountCardAddress(BuildContext context)
method pinDescription (line 703) | TextStyle pinDescription(BuildContext context)
method pinNumberPad (line 713) | TextStyle pinNumberPad(BuildContext context)
method textDarkSmall400 (line 724) | TextStyle textDarkSmall400(BuildContext context)
method textDarkLarge700 (line 735) | TextStyle textDarkLarge700(BuildContext context)
method textLightSmall400 (line 746) | TextStyle textLightSmall400(BuildContext context)
method textLightLarge700 (line 757) | TextStyle textLightLarge700(BuildContext context)
method textLightSmall700 (line 768) | TextStyle textLightSmall700(BuildContext context)
method textStyleVersion (line 779) | TextStyle textStyleVersion(BuildContext context)
method textStyleVersionUnderline (line 788) | TextStyle textStyleVersionUnderline(BuildContext context)
class AppFontSizes (line 799) | class AppFontSizes {
FILE: lib/ui/widgets/account_card.dart
class AccountCard (line 18) | class AccountCard extends StatefulWidget {
method createState (line 23) | _AccountCardState createState()
class _AccountCardState (line 26) | class _AccountCardState extends State<AccountCard> {
method build (line 28) | Widget build(BuildContext context)
method _doNothing (line 193) | void _doNothing()
method _getButtons (line 198) | List<Widget> _getButtons()
FILE: lib/ui/widgets/app_text_field.dart
class TextFieldButton (line 8) | class TextFieldButton extends StatelessWidget {
method build (line 15) | Widget build(BuildContext context)
class AppTextField (line 42) | class AppTextField extends StatefulWidget {
method createState (line 80) | _AppTextFieldState createState()
class _AppTextFieldState (line 83) | class _AppTextFieldState extends State<AppTextField> {
method build (line 85) | Widget build(BuildContext context)
FILE: lib/ui/widgets/buttons.dart
type AppButtonType (line 6) | enum AppButtonType {
class AppButton (line 18) | class AppButton extends StatefulWidget {
method createState (line 36) | _AppButtonState createState()
class _AppButtonState (line 39) | class _AppButtonState extends State<AppButton> {
method build (line 41) | Widget build(BuildContext context)
FILE: lib/ui/widgets/error_container.dart
class ErrorContainer (line 4) | class ErrorContainer extends StatelessWidget {
method build (line 9) | Widget build(BuildContext context)
FILE: lib/ui/widgets/fee_container.dart
class FeeContainer (line 6) | class FeeContainer extends StatelessWidget {
method build (line 11) | Widget build(BuildContext context)
FILE: lib/ui/widgets/operation_list_item.dart
type OperationType (line 9) | enum OperationType {
class OperationListItem (line 19) | class OperationListItem extends StatefulWidget {
method createState (line 42) | _OperationListItemState createState()
class _OperationListItemState (line 45) | class _OperationListItemState extends State<OperationListItem> {
method build (line 47) | Widget build(BuildContext context)
FILE: lib/ui/widgets/overlay_dialog.dart
class DialogOverlay (line 13) | class DialogOverlay extends StatefulWidget {
method createState (line 34) | State<StatefulWidget> createState()
class _DialogOverlayState (line 37) | class _DialogOverlayState extends State<DialogOverlay>
method initState (line 44) | void initState()
method dispose (line 61) | void dispose()
method buildListItems (line 66) | Widget buildListItems(List<DialogListItem> optionsList)
method build (line 105) | Widget build(BuildContext context)
class DialogListItem (line 245) | class DialogListItem {
function _buildMaterialDialogTransitions (line 254) | Widget _buildMaterialDialogTransitions(
function showAppDialog (line 268) | Future<T> showAppDialog<T>({
FILE: lib/ui/widgets/payload.dart
class Payload (line 21) | class Payload extends StatefulWidget {
method createState (line 33) | _PayloadState createState()
class _PayloadState (line 36) | class _PayloadState extends State<Payload> {
method _registerBus (line 43) | void _registerBus()
method _destroyBus (line 55) | void _destroyBus()
method initState (line 62) | void initState()
method dispose (line 71) | void dispose()
method handlePayloadChange (line 76) | void handlePayloadChange(String newPayload, bool encrypted)
method build (line 95) | Widget build(BuildContext context)
class PayloadDialog (line 200) | class PayloadDialog extends StatefulWidget {
method createState (line 214) | _PayloadDialogState createState()
class _PayloadDialogState (line 217) | class _PayloadDialogState extends State<PayloadDialog>
method initState (line 228) | void initState()
method dispose (line 249) | void dispose()
method build (line 255) | Widget build(BuildContext context)
FILE: lib/ui/widgets/pin_screen.dart
type PinOverlayType (line 13) | enum PinOverlayType { NEW_PIN, ENTER_PIN }
class ShakeCurve (line 15) | class ShakeCurve extends Curve {
method transform (line 17) | double transform(double t)
class PinScreen (line 23) | class PinScreen extends StatefulWidget {
method createState (line 36) | _PinScreenState createState()
class _PinScreenState (line 39) | class _PinScreenState extends State<PinScreen>
method initState (line 61) | void initState()
method _setCharacter (line 128) | bool _setCharacter(String character)
method _backSpace (line 152) | void _backSpace()
method buildPINButton (line 175) | Widget buildPINButton(String text)
method buildPINScreenDots (line 250) | List<Widget> buildPINScreenDots()
method build (line 266) | Widget build(BuildContext context)
FILE: lib/ui/widgets/placeholder_account_card.dart
class PlaceholderAccountCard (line 7) | class PlaceholderAccountCard extends StatefulWidget {
method createState (line 8) | _PlaceholderAccountCardState createState()
class _PlaceholderAccountCardState (line 11) | class _PlaceholderAccountCardState extends State<PlaceholderAccountCard> {
method build (line 13) | Widget build(BuildContext context)
FILE: lib/ui/widgets/placeholder_operation_list_item.dart
type PlaceholderOperationType (line 6) | enum PlaceholderOperationType {
class PlaceholderOperationListItem (line 15) | class PlaceholderOperationListItem extends StatefulWidget {
method createState (line 22) | _PlaceholderOperationListItemState createState()
class _PlaceholderOperationListItemState (line 26) | class _PlaceholderOperationListItemState
method build (line 29) | Widget build(BuildContext context)
FILE: lib/ui/widgets/reactive_refresh.dart
type RefreshCallback (line 34) | typedef RefreshCallback = Future<void> Function();
type _RefreshIndicatorMode (line 38) | enum _RefreshIndicatorMode {
class ReactiveRefreshIndicator (line 81) | class ReactiveRefreshIndicator extends StatefulWidget {
method createState (line 154) | ReactiveRefreshIndicatorState createState()
class ReactiveRefreshIndicatorState (line 159) | class ReactiveRefreshIndicatorState extends State<ReactiveRefreshIndicat...
method initState (line 177) | void initState()
method didChangeDependencies (line 188) | void didChangeDependencies()
method dispose (line 202) | void dispose()
method didUpdateWidget (line 209) | void didUpdateWidget(ReactiveRefreshIndicator oldWidget)
method _handleScrollNotification (line 218) | bool _handleScrollNotification(ScrollNotification notification)
method _handleGlowNotification (line 277) | bool _handleGlowNotification(OverscrollIndicatorNotification notificat...
method _start (line 287) | bool _start(AxisDirection direction)
method _checkDragOffset (line 310) | void _checkDragOffset(double containerExtent)
method _dismiss (line 322) | Future<void> _dismiss(_RefreshIndicatorMode newMode)
method _show (line 350) | void _show()
method show (line 386) | Future<void> show({ bool atTop = true })
method stopRefreshing (line 396) | void stopRefreshing()
method build (line 405) | Widget build(BuildContext context)
FILE: lib/ui/widgets/settings_list_item.dart
class SettingsListItem (line 7) | class SettingsListItem extends StatefulWidget {
method createState (line 28) | _SettingsListItemState createState()
class _SettingsListItemState (line 31) | class _SettingsListItemState extends State<SettingsListItem> {
method build (line 33) | Widget build(BuildContext context)
FILE: lib/ui/widgets/sheets.dart
class AppSheets (line 7) | class AppSheets {
method showBottomSheet (line 9) | Future<T> showBottomSheet<T>(
class _AppBottomSheetLayout (line 41) | class _AppBottomSheetLayout extends SingleChildLayoutDelegate {
method getConstraintsForChild (line 46) | BoxConstraints getConstraintsForChild(BoxConstraints constraints)
method getPositionForChild (line 70) | Offset getPositionForChild(Size size, Size childSize)
method shouldRelayout (line 75) | bool shouldRelayout(_AppBottomSheetLayout oldDelegate)
class _AppBottomSheetModalRoute (line 80) | class _AppBottomSheetModalRoute<T> extends PopupRoute<T> {
method didComplete (line 111) | void didComplete(T result)
method createAnimationController (line 122) | AnimationController createAnimationController()
method buildPage (line 140) | Widget buildPage(BuildContext context, Animation<double> animation,
FILE: lib/ui/widgets/svg_repaint.dart
class SvgRepaintAsset (line 4) | class SvgRepaintAsset extends StatelessWidget {
method build (line 12) | Widget build(BuildContext context)
FILE: lib/ui/widgets/tap_outside_unfocus.dart
class TapOutsideUnfocus (line 4) | class TapOutsideUnfocus extends StatelessWidget {
method build (line 10) | Widget build(BuildContext context)
FILE: lib/ui/widgets/webview.dart
class AppWebView (line 8) | class AppWebView {
method showWebView (line 9) | void showWebView(BuildContext context, String url)
FILE: lib/util/authentication.dart
class AuthUtil (line 7) | class AuthUtil {
method hasBiometrics (line 12) | Future<bool> hasBiometrics()
method authenticateWithBiometrics (line 31) | Future<bool> authenticateWithBiometrics(String message)
method useBiometrics (line 43) | Future<bool> useBiometrics()
FILE: lib/util/haptic_util.dart
class HapticUtil (line 8) | class HapticUtil {
method hasTapicEngine (line 10) | Future<bool> hasTapicEngine()
method error (line 34) | Future<void> error()
method success (line 48) | Future<void> success()
method fingerprintSucess (line 63) | Future<void> fingerprintSucess()
FILE: lib/util/number_util.dart
class NumberUtil (line 5) | class NumberUtil {
method truncateDecimal (line 13) | double truncateDecimal(Decimal input, {int digits = maxDecimalDigits})
method sanitizeNumber (line 21) | String sanitizeNumber(String input, {int maxDecimalDigits = maxDecimal...
FILE: lib/util/pascal_util.dart
class PascalUtil (line 4) | class PascalUtil {
method generateKeyPair (line 6) | KeyPair generateKeyPair()
method decipherPublicKey (line 11) | PublicKey decipherPublicKey(String publicKey)
FILE: lib/util/salsa20crypt.dart
class Salsa20Crypt (line 10) | class Salsa20Crypt {
method encrypt (line 21) | String encrypt(String plainText)
method decrypt (line 32) | String decrypt(String cipherText)
FILE: lib/util/sharedprefs_util.dart
class SharedPrefsUtil (line 16) | class SharedPrefsUtil {
method set (line 48) | Future<void> set(String key, dynamic value)
method get (line 61) | Future<dynamic> get(String key, {dynamic defaultValue})
method setWithExpiry (line 67) | Future<void> setWithExpiry(String key, dynamic value, int expiry)
method getWithExpiry (line 79) | Future<dynamic> getWithExpiry(String key)
method remove (line 93) | Future<void> remove(String key)
method setPrivateKeyBackedUp (line 99) | Future<void> setPrivateKeyBackedUp(bool value)
method getPrivateKeyBackedUp (line 103) | Future<bool> getPrivateKeyBackedUp()
method setFirstLaunch (line 107) | Future<void> setFirstLaunch()
method getFirstLaunch (line 111) | Future<bool> getFirstLaunch()
method setRpcUrl (line 115) | Future<void> setRpcUrl(String rpcUrl)
method resetRpcUrl (line 119) | Future<void> resetRpcUrl()
method getRpcUrl (line 123) | Future<String> getRpcUrl()
method setTheme (line 128) | Future<void> setTheme(ThemeSetting theme)
method getTheme (line 132) | Future<ThemeSetting> getTheme()
method setLock (line 136) | Future<void> setLock(bool value)
method getLock (line 140) | Future<bool> getLock()
method setLockTimeout (line 144) | Future<void> setLockTimeout(LockTimeoutSetting setting)
method getLockTimeout (line 148) | Future<LockTimeoutSetting> getLockTimeout()
method getLockAttempts (line 153) | Future<int> getLockAttempts()
method incrementLockAttempts (line 157) | Future<void> incrementLockAttempts()
method resetLockAttempts (line 161) | Future<void> resetLockAttempts()
method shouldLock (line 167) | Future<bool> shouldLock()
method updateLockDate (line 174) | Future<void> updateLockDate()
method getLockDate (line 190) | Future<DateTime> getLockDate()
method setAuthMethod (line 198) | Future<void> setAuthMethod(AuthenticationMethod method)
method getAuthMethod (line 202) | Future<AuthenticationMethod> getAuthMethod()
method setFirstContactAdded (line 206) | Future<void> setFirstContactAdded(bool value)
method getFirstContactAdded (line 210) | Future<bool> getFirstContactAdded()
method getPriceAPICache (line 214) | Future<String> getPriceAPICache()
method setPriceAPICache (line 218) | Future<void> setPriceAPICache(String data)
method setCurrency (line 222) | Future<void> setCurrency(AvailableCurrency currency)
method getCurrency (line 226) | Future<AvailableCurrency> getCurrency(Locale deviceLocale)
method setLanguage (line 230) | Future<void> setLanguage(LanguageSetting language)
method getLanguage (line 234) | Future<LanguageSetting> getLanguage()
method setUuid (line 247) | Future<void> setUuid(String uuid)
method getUuid (line 251) | Future<String> getUuid()
method setNotificationsOn (line 255) | Future<void> setNotificationsOn(bool value)
method getNotificationsOn (line 259) | Future<bool> getNotificationsOn()
method getNotificationsSet (line 266) | Future<bool> getNotificationsSet()
method getFreepasaAccount (line 270) | Future<AccountNumber> getFreepasaAccount()
method setFreepasaAccount (line 275) | Future<void> setFreepasaAccount(AccountNumber account)
method useLegacyStorage (line 279) | Future<bool> useLegacyStorage()
method setUseLegacyStorage (line 283) | Future<void> setUseLegacyStorage()
method deleteAll (line 288) | Future<void> deleteAll({bool firstLaunch = false})
FILE: lib/util/ui_util.dart
class UIUtil (line 13) | class UIUtil {
method smallScreen (line 14) | bool smallScreen(BuildContext context)
method showSnackbar (line 21) | void showSnackbar(String content, BuildContext context)
method formatDateStr (line 54) | String formatDateStr(DateTime dt)
method formatDateStrLong (line 66) | String formatDateStrLong(DateTime dt)
method showFeeDialog (line 76) | void showFeeDialog(
method cancelLockEvent (line 105) | Future<void> cancelLockEvent()
function formatLocalizedColors (line 121) | List<TextSpan> formatLocalizedColors(BuildContext context, String input)
function formatLocalizedColorsDanger (line 145) | List<TextSpan> formatLocalizedColorsDanger(BuildContext context, String ...
function toUppercase (line 169) | String toUppercase(String input, BuildContext context)
FILE: lib/util/user_data_util.dart
type DataType (line 11) | enum DataType { RAW, ACCOUNT, URL, PUBLIC_KEY }
class UserDataUtil (line 13) | class UserDataUtil {
method _parseData (line 17) | String _parseData(String data, DataType type)
method getClipboardText (line 50) | Future<String> getClipboardText(DataType type)
method getQRData (line 58) | Future<String> getQRData(DataType type, OverlayTheme theme)
method setSecureClipboardItem (line 71) | Future<void> setSecureClipboardItem(String value)
method privateKeyIsValid (line 100) | bool privateKeyIsValid(String pkText)
method privateKeyIsEncrypted (line 109) | bool privateKeyIsEncrypted(String pkText, {bool lengthCheck = true})
FILE: lib/util/vault.dart
class Vault (line 10) | class Vault {
method legacy (line 17) | Future<bool> legacy()
method _write (line 27) | Future<String> _write(String key, String value)
method _read (line 36) | Future<String> _read(String key, {String defaultValue})
method getPrivateKey (line 44) | Future<String> getPrivateKey()
method setPrivateKey (line 48) | Future<String> setPrivateKey(PrivateKey privateKey)
method getPin (line 53) | Future<String> getPin()
method setPin (line 57) | Future<String> setPin(String pin)
method deleteAll (line 61) | Future<void> deleteAll()
method setEncrypted (line 72) | Future<void> setEncrypted(String key, String value)
method getEncrypted (line 82) | Future<String> getEncrypted(String key)
method getSecret (line 95) | Future<String> getSecret()
FILE: test/common/base58_test.dart
function main (line 4) | void main()
FILE: test/common/coding/pascal/accountname_coder_test.dart
function main (line 4) | void main()
FILE: test/common/coding/pascal/accountnumber_coder_test.dart
function main (line 4) | void main()
FILE: test/common/coding/pascal/currency_coder_test.dart
function main (line 4) | void main()
FILE: test/common/coding/pascal/keys/curve_coder_test.dart
function main (line 6) | void main()
FILE: test/common/coding/pascal/keys/privatekey_coder_test.dart
function main (line 6) | void main()
FILE: test/common/coding/pascal/keys/publickey_coder_test.dart
function main (line 6) | void main()
FILE: test/common/coding/pascal/ophash_coder_test.dart
function main (line 6) | void main()
FILE: test/common/coding/pascal/optype_coder_test.dart
function main (line 4) | void main()
FILE: test/common/fixtures/operation_hash.dart
class OperationHashFixtures (line 1) | class OperationHashFixtures {
FILE: test/common/fixtures/privatekey.dart
class PrivateKeyFixtures (line 1) | class PrivateKeyFixtures {
FILE: test/common/fixtures/publickey.dart
class PublicKeyFixtures (line 1) | class PublicKeyFixtures {
FILE: test/common/model/AccountName_test.dart
function main (line 4) | void main()
FILE: test/common/model/AccountNumber_test.dart
function main (line 4) | void main()
FILE: test/common/model/Currency_test.dart
function main (line 4) | void main()
FILE: test/common/model/OperationHash_test.dart
function main (line 4) | void main()
FILE: test/common/model/keys/Curves_test.dart
function main (line 4) | void main()
FILE: test/common/model/keys/KeyPair_test.dart
function main (line 6) | void main()
FILE: test/common/model/keys/PrivateKey_test.dart
function main (line 6) | void main()
FILE: test/common/model/keys/PublicKey_test.dart
function main (line 6) | void main()
FILE: test/common/sha_test.dart
function main (line 4) | void main()
FILE: test/common/util_test.dart
function main (line 6) | void main()
FILE: test/crypto/encrypt/aes/cbcpkcs7_test.dart
function main (line 7) | void main()
FILE: test/crypto/encrypt/pascal/ecies_crypt_test.dart
function main (line 9) | void main()
FILE: test/crypto/encrypt/pascal/kdf_test.dart
function main (line 7) | void main()
FILE: test/crypto/encrypt/pascal/privatekey_crypt_test.dart
function main (line 10) | void main()
FILE: test/crypto/fixtures/privatekey.dart
class PrivateKeyFixtures (line 1) | class PrivateKeyFixtures {
FILE: test/crypto/keys_test.dart
function main (line 9) | void main()
FILE: test/json_rpc/model/pascal_account_test.dart
function main (line 5) | void main()
FILE: test/json_rpc/model/pascal_block_test.dart
function main (line 5) | void main()
FILE: test/json_rpc/model/pascal_operation_test.dart
function main (line 5) | void main()
FILE: test/json_rpc/model/request/executeoperations_request_test.dart
function main (line 6) | void main()
FILE: test/json_rpc/model/request/findaccounts_request_test.dart
function main (line 6) | void main()
FILE: test/json_rpc/model/request/findoperation_request_test.dart
function main (line 6) | void main()
FILE: test/json_rpc/model/request/getaccount_request_test.dart
function main (line 6) | void main()
FILE: test/json_rpc/model/request/getaccountoperations_test.dart
function main (line 6) | void main()
FILE: test/json_rpc/model/request/getblock_request_test.dart
function main (line 6) | void main()
FILE: test/json_rpc/model/request/getblockoperation_request_test.dart
function main (line 6) | void main()
FILE: test/json_rpc/model/request/getblockoperations_test.dart
function main (line 6) | void main()
FILE: test/json_rpc/model/request/getblocks_request_test.dart
function main (line 6) | void main()
FILE: test/json_rpc/model/request/getpendings_request_test.dart
function main (line 6) | void main()
FILE: test/json_rpc/model/request/getwalletaccounts_request_test.dart
function main (line 6) | void main()
FILE: test/signing/operations/buyaccount_operation_test.dart
function main (line 9) | void main()
FILE: test/signing/operations/changeaccountinfo_operation_test.dart
function main (line 8) | void main()
FILE: test/signing/operations/changekey_operation_test.dart
function main (line 8) | void main()
FILE: test/signing/operations/changekeysigned_operation_test.dart
function main (line 8) | void main()
FILE: test/signing/operations/delist_forsale_operation_test.dart
function main (line 9) | void main()
FILE: test/signing/operations/list_forsale_operation_test.dart
function main (line 9) | void main()
FILE: test/signing/operations/transaction_operation_test.dart
function main (line 8) | void main()
Condensed preview — 330 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,390K chars).
[
{
"path": ".github/workflows/ci.yml",
"chars": 2545,
"preview": "\nname: CI\n\non:\n push:\n branches: [ master ]\n\njobs:\n run_tests:\n name: Run tests\n runs-on: self-hosted\n ste"
},
{
"path": ".github/workflows/deploy_beta.yml",
"chars": 4127,
"preview": "name: DEPLOY_BETA\n\non:\n push:\n tags:\n - 'v*-beta'\n\njobs:\n run_tests:\n name: Run tests\n runs-on: self-hoste"
},
{
"path": ".github/workflows/deploy_release.yml",
"chars": 4103,
"preview": "name: DEPLOY_RELEASE\n\non:\n push:\n tags:\n - 'v*-release'\n\njobs:\n run_tests:\n name: Run tests\n runs-on: self"
},
{
"path": ".github/workflows/deploy_release_android.yml",
"chars": 2293,
"preview": "name: DEPLOY_RELEASE\n\non:\n push:\n tags:\n - 'v*-release-android'\n\njobs:\n run_tests:\n name: Run tests\n runs-"
},
{
"path": ".github/workflows/deploy_release_ios.yml",
"chars": 2090,
"preview": "name: DEPLOY_RELEASE\n\non:\n push:\n tags:\n - 'v*-release-ios'\n\njobs:\n run_tests:\n name: Run tests\n runs-on: "
},
{
"path": ".gitignore",
"chars": 2189,
"preview": "# Miscellaneous\n*.class\n*.lock\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\n\n# Eclipse project files\n.cl"
},
{
"path": "LICENSE",
"chars": 1271,
"preview": "The Blaise logo, animations, and all assets in the \"assets\" folder are copyrighted by Appditto LLC and used by permissio"
},
{
"path": "README.md",
"chars": 2667,
"preview": "# Blaise - Simple, Sleek & Secure PASCAL Wallet\n\n[\ndef localPropertiesFile = rootProject.file('local.properties')\nif (localPropertie"
},
{
"path": "android/app/google-services.json",
"chars": 1044,
"preview": "{\n \"project_info\": {\n \"project_number\": \"786466973238\",\n \"firebase_url\": \"https://blaise-a22fa.firebaseio.com\",\n "
},
{
"path": "android/app/proguard-rules.pro",
"chars": 605,
"preview": "-dontwarn android.**\n## Flutter wrapper\n-keep class io.flutter.app.** { *; }\n-keep class io.flutter.plugin.** { *; }\n-k"
},
{
"path": "android/app/src/debug/AndroidManifest.xml",
"chars": 327,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"com.appditto.blaise\">\n <!-- Flutter"
},
{
"path": "android/app/src/main/AndroidManifest.xml",
"chars": 2471,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"com.appditto.blaise\">\n <uses-permis"
},
{
"path": "android/app/src/main/java/com/appditto/blaise/LegacyStorage.java",
"chars": 601,
"preview": "package com.appditto.blaise;\n\nimport android.util.Base64;\n\npublic class LegacyStorage {\n\n public String getSecret() {"
},
{
"path": "android/app/src/main/java/com/appditto/blaise/MainActivity.java",
"chars": 1048,
"preview": "package com.appditto.blaise;\n\nimport android.os.Bundle;\n\nimport androidx.annotation.NonNull;\nimport io.flutter.embedding"
},
{
"path": "android/app/src/main/java/com/appditto/blaise/MultidexApplication.java",
"chars": 1706,
"preview": "// Copyright 2013 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "android/app/src/main/java/com/appditto/blaise/Vault.java",
"chars": 2655,
"preview": "package com.appditto.blaise;\n\nimport android.content.Context;\n\nimport com.bottlerocketstudios.vault.SharedPreferenceVaul"
},
{
"path": "android/app/src/main/res/drawable/launch_background.xml",
"chars": 434,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Modify this file to customize your launch splash screen -->\n<layer-list xmln"
},
{
"path": "android/app/src/main/res/drawable-v24/ic_launcher_background.xml",
"chars": 1929,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:aapt=\"http://schemas.android.com/aapt\"\n "
},
{
"path": "android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml",
"chars": 2376,
"preview": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n xmlns:aapt=\"http://schemas.android.com/aapt\"\n "
},
{
"path": "android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml",
"chars": 270,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <b"
},
{
"path": "android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml",
"chars": 270,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <b"
},
{
"path": "android/app/src/main/res/values/styles.xml",
"chars": 351,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <style name=\"LaunchTheme\" parent=\"Theme.AppCompat.NoActionBar\">\n "
},
{
"path": "android/app/src/main/res/xml/network_security_config.xml",
"chars": 239,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<network-security-config>\n <domain-config cleartextTrafficPermitted=\"true\">\n "
},
{
"path": "android/app/src/profile/AndroidManifest.xml",
"chars": 327,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"com.appditto.blaise\">\n <!-- Flutter"
},
{
"path": "android/build.gradle",
"chars": 640,
"preview": "buildscript {\n ext.kotlin_version = '1.4.31'\n\n repositories {\n google()\n jcenter()\n }\n\n depend"
},
{
"path": "android/fastlane/Appfile",
"chars": 211,
"preview": "json_key_file(\"~/appditto/keys/playapi_key.json\") # Path to the json secret file - Follow https://docs.fastlane.tools/ac"
},
{
"path": "android/fastlane/Fastfile",
"chars": 919,
"preview": "# This file contains the fastlane.tools configuration\n# You can find the documentation at https://docs.fastlane.tools\n#\n"
},
{
"path": "android/fastlane/flutter_build.sh",
"chars": 288,
"preview": "#!/bin/bash\n\ncd ../../\nif [ \"$1\" == \"--clean\" ]\nthen\n echo \"Running clean...\"\n flutter clean\nelse\n echo \"Skipping "
},
{
"path": "android/fastlane/flutter_test.sh",
"chars": 57,
"preview": "#!/bin/bash\n\ncd ../../\necho \"Running tests\"\nflutter test\n"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/1.txt",
"chars": 20,
"preview": "Initial Beta Release"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/17.txt",
"chars": 27,
"preview": "- Add themes to QR scanner\n"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/18.txt",
"chars": 26,
"preview": "- Add themes to QR scanner"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/20.txt",
"chars": 112,
"preview": "- Improve QR Scanner reliability on some devices\n- Add Catalan language\n- Performance improvements and bug fixes"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/22.txt",
"chars": 19,
"preview": "- Live chat removed"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/23.txt",
"chars": 34,
"preview": "- General bug fixes & improvements"
},
{
"path": "android/fastlane/metadata/android/en-US/changelogs/24.txt",
"chars": 95,
"preview": "- Disallow 0-fee transactions\n- Android 12 compatibility\n- Performance improvements\n- Bug fixes"
},
{
"path": "android/fastlane/metadata/android/en-US/full_description.txt",
"chars": 900,
"preview": "Features:\n\n- Create a new Pascal wallet or import an existing one\n- Manage multiple Pascal accounts (PASAs)\n- Send Pasca"
},
{
"path": "android/fastlane/metadata/android/en-US/short_description.txt",
"chars": 37,
"preview": "Simple, Sleek, & Secure Pascal Wallet"
},
{
"path": "android/fastlane/metadata/android/en-US/title.txt",
"chars": 22,
"preview": "Blaise - Pascal Wallet"
},
{
"path": "android/fastlane/metadata/android/en-US/video.txt",
"chars": 0,
"preview": ""
},
{
"path": "android/gradle/wrapper/gradle-wrapper.properties",
"chars": 233,
"preview": "#Fri Jun 23 08:50:38 CEST 2017\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\nzipStoreBase=GRADLE_USER"
},
{
"path": "android/gradle.properties",
"chars": 104,
"preview": "org.gradle.jvmargs=-Xmx1536M\nandroid.enableJetifier=true\nandroid.useAndroidX=true\nandroid.enableR8=true\n"
},
{
"path": "android/settings.gradle",
"chars": 484,
"preview": "include ':app'\n\ndef flutterProjectRoot = rootProject.projectDir.parentFile.toPath()\n\ndef plugins = new Properties()\ndef "
},
{
"path": "assets/country_phone_map.json",
"chars": 16406,
"preview": "[\n {\n \"iso\": \"AF\",\n \"text\": \"Afghanistan (+93)\"\n },\n {\n \"iso\": \"AL\",\n \"text\": \"Albania "
},
{
"path": "bin/arb_to_pojson.py",
"chars": 934,
"preview": "#!/usr/bin/env python\nimport argparse\nimport json\nimport sys\n\nparser = argparse.ArgumentParser()\nparser.add_argument('-f"
},
{
"path": "bin/pojson_to_arb.py",
"chars": 694,
"preview": "#!/usr/bin/env python\nimport argparse\nimport json\nimport sys\n\nparser = argparse.ArgumentParser()\nparser.add_argument('-f"
},
{
"path": "bin/poupdate.py",
"chars": 1447,
"preview": "import os\nimport json\nimport subprocess\nfrom poeditor import POEditorAPI\nfrom settings import PO_API_KEY, PROJECT_ID\n\ncl"
},
{
"path": "bin/settings.py.example",
"chars": 33,
"preview": "PO_API_KEY='1234'\nPROJECT_ID=1234"
},
{
"path": "ci/get_version.sh",
"chars": 743,
"preview": "#!/bin/bash\n# Parse yaml file\nparse_yaml() {\n local prefix=$2\n local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo "
},
{
"path": "ci/tag_version.sh",
"chars": 959,
"preview": "#!/bin/bash\n\nsource ./ci/get_version.sh\n\nVERSION=$(get_version)\nGITHUB_OAUTH_BASIC=\"${GITHUB_API_TOKEN}:x-oauth-basic\"\nA"
},
{
"path": "ci/upload_android_github.sh",
"chars": 1370,
"preview": "#!/bin/bash\n#\n# Based on:\n\n# https://gist.github.com/stefanbuck/ce788fee19ab6eb0b4447a85fc99f447\n#\n# Uploads our android"
},
{
"path": "ios/Flutter/AppFrameworkInfo.plist",
"chars": 773,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/Flutter/Debug.xcconfig",
"chars": 106,
"preview": "#include \"Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig\"\n#include \"Generated.xcconfig\"\n"
},
{
"path": "ios/Flutter/Flutter.podspec",
"chars": 803,
"preview": "#\n# NOTE: This podspec is NOT to be published. It is only used as a local source!\n# This is a generated file; do n"
},
{
"path": "ios/Flutter/Release.xcconfig",
"chars": 108,
"preview": "#include \"Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig\"\n#include \"Generated.xcconfig\"\n"
},
{
"path": "ios/Gemfile",
"chars": 61,
"preview": "source \"https://rubygems.org\"\n\ngem \"fastlane\"\ngem \"cocoapods\""
},
{
"path": "ios/Podfile",
"chars": 1354,
"preview": "# Uncomment this line to define a global platform for your project\n# platform :ios, '9.0'\n\n# CocoaPods analytics sends n"
},
{
"path": "ios/Runner/AppDelegate.h",
"chars": 155,
"preview": "#import <Flutter/Flutter.h>\n#import <UIKit/UIKit.h>\n\n@interface AppDelegate : FlutterAppDelegate\n- (void)lc_setAlternate"
},
{
"path": "ios/Runner/AppDelegate.m",
"chars": 2749,
"preview": "#include \"AppDelegate.h\"\n#include \"GeneratedPluginRegistrant.h\"\n#import \"Runner-Swift.h\"\n\n@implementation AppDelegate\n\n-"
},
{
"path": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json",
"chars": 2519,
"preview": "{\n \"images\" : [\n {\n \"size\" : \"20x20\",\n \"idiom\" : \"iphone\",\n \"filename\" : \"Icon-App-20x20@2x.png\",\n "
},
{
"path": "ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json",
"chars": 391,
"preview": "{\n \"images\" : [\n {\n \"idiom\" : \"universal\",\n \"filename\" : \"LaunchImage.png\",\n \"scale\" : \"1x\"\n },\n "
},
{
"path": "ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md",
"chars": 336,
"preview": "# Launch Screen Assets\n\nYou can customize the launch screen with your own desired assets by replacing the image files in"
},
{
"path": "ios/Runner/Base.lproj/LaunchScreen.storyboard",
"chars": 2377,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
},
{
"path": "ios/Runner/Base.lproj/Main.storyboard",
"chars": 1605,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
},
{
"path": "ios/Runner/GoogleService-Info.plist",
"chars": 1175,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/Runner/Info.plist",
"chars": 2641,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/Runner/Runner-Bridging-Header.h",
"chars": 104,
"preview": "//\n// Use this file to import your target's public headers that you would like to expose to Swift.\n//\n\n"
},
{
"path": "ios/Runner/Runner.entitlements",
"chars": 246,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/Runner/clipboard.swift",
"chars": 558,
"preview": "import Foundation\nimport UIKit\nimport MobileCoreServices\n\n@objcMembers class SecureClipboard: NSObject {\n static func"
},
{
"path": "ios/Runner/main.m",
"chars": 226,
"preview": "#import <Flutter/Flutter.h>\n#import <UIKit/UIKit.h>\n#import \"AppDelegate.h\"\n\nint main(int argc, char* argv[]) {\n @autor"
},
{
"path": "ios/Runner.xcodeproj/project.pbxproj",
"chars": 33895,
"preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 50;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
},
{
"path": "ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
"chars": 135,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n version = \"1.0\">\n <FileRef\n location = \"self:\">\n </FileRef"
},
{
"path": "ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme",
"chars": 3185,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n LastUpgradeVersion = \"1300\"\n version = \"1.3\">\n <BuildAction\n "
},
{
"path": "ios/Runner.xcworkspace/contents.xcworkspacedata",
"chars": 224,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n version = \"1.0\">\n <FileRef\n location = \"group:Runner.xcodepr"
},
{
"path": "ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
"chars": 238,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/fastlane/Appfile",
"chars": 339,
"preview": "app_identifier(\"com.appditto.blaise\") # The bundle identifier of your app\napple_id(\"appdittoapps@gmail.com\") # Your Appl"
},
{
"path": "ios/fastlane/Deliverfile",
"chars": 842,
"preview": "release_notes({\n 'default' => File.read('./fastlane/metadata/en-US/release_notes.txt'),\n 'en-US' => File.read('./fastl"
},
{
"path": "ios/fastlane/Fastfile",
"chars": 4120,
"preview": "# This file contains the fastlane.tools configuration\n# You can find the documentation at https://docs.fastlane.tools\n#\n"
},
{
"path": "ios/fastlane/Matchfile",
"chars": 507,
"preview": "git_url(\"git@github.com:appditto/ios-certificates.git\")\n\nstorage_mode(\"git\")\n\ntype(\"development\") # The default type, ca"
},
{
"path": "ios/fastlane/flutter_build.sh",
"chars": 175,
"preview": "#!/bin/bash\n\ncd ../../\nif [ \"$1\" == \"--clean\" ]\nthen\n echo \"Running clean...\"\n flutter clean\nelse\n echo \"Skipping "
},
{
"path": "ios/fastlane/flutter_test.sh",
"chars": 57,
"preview": "#!/bin/bash\n\ncd ../../\necho \"Running tests\"\nflutter test\n"
},
{
"path": "ios/fastlane/metadata/copyright.txt",
"chars": 22,
"preview": "2022 Avenge Media LLC\n"
},
{
"path": "ios/fastlane/metadata/en-US/apple_tv_privacy_policy.txt",
"chars": 1,
"preview": "\n"
},
{
"path": "ios/fastlane/metadata/en-US/description.txt",
"chars": 732,
"preview": "Blaise is a simple, sleek & secure Pascal wallet.\nFeatures:\n\n- Create a new Pascal wallet or import an existing one\n- Ma"
},
{
"path": "ios/fastlane/metadata/en-US/keywords.txt",
"chars": 101,
"preview": "pascal, pascalcoin, cryptocurrency, crypto, wallet, bitcoin, ethereum, exchange, blockchain, flutter\n"
},
{
"path": "ios/fastlane/metadata/en-US/marketing_url.txt",
"chars": 25,
"preview": "https://blaisewallet.com\n"
},
{
"path": "ios/fastlane/metadata/en-US/name.txt",
"chars": 23,
"preview": "Blaise - Pascal Wallet\n"
},
{
"path": "ios/fastlane/metadata/en-US/privacy_url.txt",
"chars": 54,
"preview": "https://appditto.github.io/blaise/privacy_policy.html\n"
},
{
"path": "ios/fastlane/metadata/en-US/promotional_text.txt",
"chars": 37,
"preview": "Simple, Sleek & Secure Pascal Wallet\n"
},
{
"path": "ios/fastlane/metadata/en-US/release_notes.txt",
"chars": 68,
"preview": "- Disallow 0-fee transactions\n- Performance improvements\n- Bug fixes"
},
{
"path": "ios/fastlane/metadata/en-US/subtitle.txt",
"chars": 31,
"preview": "Securely send & receive Pascal\n"
},
{
"path": "ios/fastlane/metadata/en-US/support_url.txt",
"chars": 31,
"preview": "https://help.blaisewallet.com/\n"
},
{
"path": "ios/fastlane/metadata/primary_category.txt",
"chars": 16,
"preview": "MZGenre.Finance\n"
},
{
"path": "ios/fastlane/metadata/primary_first_sub_category.txt",
"chars": 1,
"preview": "\n"
},
{
"path": "ios/fastlane/metadata/primary_second_sub_category.txt",
"chars": 1,
"preview": "\n"
},
{
"path": "ios/fastlane/metadata/secondary_category.txt",
"chars": 18,
"preview": "MZGenre.Utilities\n"
},
{
"path": "ios/fastlane/metadata/secondary_first_sub_category.txt",
"chars": 1,
"preview": "\n"
},
{
"path": "ios/fastlane/metadata/secondary_second_sub_category.txt",
"chars": 1,
"preview": "\n"
},
{
"path": "lib/appstate_container.dart",
"chars": 8335,
"preview": "import 'dart:async';\n\nimport 'package:blaise_wallet_flutter/bus/events.dart';\nimport 'package:blaise_wallet_flutter/mode"
},
{
"path": "lib/bus/authenticated_event.dart",
"chars": 251,
"preview": "\nimport 'package:event_taxi/event_taxi.dart';\n\nenum AUTH_EVENT_TYPE { SEND, TRANSFER, CHANGE, BACKUP, LIST_FORSALE, DELI"
},
{
"path": "lib/bus/conn_status_event.dart",
"chars": 251,
"preview": "import 'package:event_taxi/event_taxi.dart';\n\n// Bus event for connection status changing\nenum ConnectionStatus { CONNEC"
},
{
"path": "lib/bus/contact_added_event.dart",
"chars": 215,
"preview": "import 'package:blaise_wallet_flutter/model/db/contact.dart';\nimport 'package:event_taxi/event_taxi.dart';\n\nclass Contac"
},
{
"path": "lib/bus/contact_modified_event.dart",
"chars": 221,
"preview": "import 'package:blaise_wallet_flutter/model/db/contact.dart';\nimport 'package:event_taxi/event_taxi.dart';\n\nclass Contac"
},
{
"path": "lib/bus/contact_removed_event.dart",
"chars": 219,
"preview": "import 'package:blaise_wallet_flutter/model/db/contact.dart';\nimport 'package:event_taxi/event_taxi.dart';\n\nclass Contac"
},
{
"path": "lib/bus/daemon_changed_event.dart",
"chars": 158,
"preview": "import 'package:event_taxi/event_taxi.dart';\n\nclass DaemonChangedEvent implements Event {\n final String newDaemon;\n\n D"
},
{
"path": "lib/bus/disable_lock_timeout_event.dart",
"chars": 162,
"preview": "import 'package:event_taxi/event_taxi.dart';\n\nclass DisableLockTimeoutEvent implements Event {\n final bool disable;\n\n "
},
{
"path": "lib/bus/events.dart",
"chars": 421,
"preview": "export 'authenticated_event.dart';\nexport 'contact_modified_event.dart';\nexport 'contact_added_event.dart';\nexport 'cont"
},
{
"path": "lib/bus/new_operation_event.dart",
"chars": 210,
"preview": "import 'package:event_taxi/event_taxi.dart';\nimport 'package:pascaldart/pascaldart.dart';\n\nclass NewOperationEvent imple"
},
{
"path": "lib/bus/payload_changed_event.dart",
"chars": 156,
"preview": "import 'package:event_taxi/event_taxi.dart';\n\nclass PayloadChangedEvent implements Event {\n final String payload;\n\n Pa"
},
{
"path": "lib/bus/price_event.dart",
"chars": 230,
"preview": "import 'package:event_taxi/event_taxi.dart';\nimport 'package:blaise_wallet_flutter/network/model/response/price_response"
},
{
"path": "lib/bus/subscribe_event.dart",
"chars": 246,
"preview": "import 'package:blaise_wallet_flutter/network/model/response/subscribe_response.dart';\nimport 'package:event_taxi/event_"
},
{
"path": "lib/bus/update_history_event.dart",
"chars": 92,
"preview": "\nimport 'package:event_taxi/event_taxi.dart';\n\nclass UpdateHistoryEvent implements Event {\n}"
},
{
"path": "lib/constants.dart",
"chars": 362,
"preview": "class AppConstants {\n static const String DEFAULT_RPC_HTTP_URL =\n 'https://blaiseapi.appditto.com/rawrpc';\n stati"
},
{
"path": "lib/l10n/intl_ar.arb",
"chars": 17594,
"preview": "{\n \"newPrivateKeyButton\": \"مفتاح خاص جديد\",\n \"importPrivateKeyButton\": \"استيراد مفتاح خاص\",\n \"gotItButton\": \"حصلت علي"
},
{
"path": "lib/l10n/intl_ca.arb",
"chars": 20442,
"preview": "{\n \"newPrivateKeyButton\": \"Nova clau privada\",\n \"importPrivateKeyButton\": \"Importa clau privada\",\n \"gotItButton\": \"Ho"
},
{
"path": "lib/l10n/intl_de.arb",
"chars": 20108,
"preview": "{\n \"newPrivateKeyButton\": \"Neuer privater Schlüssel\",\n \"importPrivateKeyButton\": \"Schlüssel importieren\",\n \"gotItButt"
},
{
"path": "lib/l10n/intl_en.arb",
"chars": 67536,
"preview": "{\n \"@@last_modified\": \"2019-10-18T09:27:20.827100\",\n \"newPrivateKeyButton\": \"New Private Key\",\n \"@newPrivateKeyButton"
},
{
"path": "lib/l10n/intl_es.arb",
"chars": 19653,
"preview": "{\n \"newPrivateKeyButton\": \"Nueva clave privada\",\n \"importPrivateKeyButton\": \"Importar clave privada\",\n \"gotItButton\":"
},
{
"path": "lib/l10n/intl_messages.arb",
"chars": 67536,
"preview": "{\n \"@@last_modified\": \"2019-10-25T14:47:22.704586\",\n \"newPrivateKeyButton\": \"New Private Key\",\n \"@newPrivateKeyButton"
},
{
"path": "lib/l10n/intl_tr.arb",
"chars": 18167,
"preview": "{\n \"newPrivateKeyButton\": \"Yeni Gizli Anahtar\",\n \"importPrivateKeyButton\": \"Anahtarı İçe Aktar\",\n \"gotItButton\": \"Tam"
},
{
"path": "lib/l10n/intl_zh-Hans.arb",
"chars": 12627,
"preview": "{\n \"newPrivateKeyButton\": \"新建私钥\",\n \"importPrivateKeyButton\": \"导入私钥\",\n \"gotItButton\": \"确认\",\n \"goBackButton\": \"返回\",\n "
},
{
"path": "lib/l10n/messages_all.dart",
"chars": 3047,
"preview": "// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart\n// This is a library that looks up messa"
},
{
"path": "lib/l10n/messages_ar.dart",
"chars": 31405,
"preview": "// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart\n// This is a library that provides messa"
},
{
"path": "lib/l10n/messages_ca.dart",
"chars": 34650,
"preview": "// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart\n// This is a library that provides messa"
},
{
"path": "lib/l10n/messages_de.dart",
"chars": 34288,
"preview": "// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart\n// This is a library that provides messa"
},
{
"path": "lib/l10n/messages_en.dart",
"chars": 33267,
"preview": "// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart\n// This is a library that provides messa"
},
{
"path": "lib/l10n/messages_es.dart",
"chars": 33505,
"preview": "// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart\n// This is a library that provides messa"
},
{
"path": "lib/l10n/messages_messages.dart",
"chars": 33279,
"preview": "// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart\n// This is a library that provides messa"
},
{
"path": "lib/l10n/messages_tr.dart",
"chars": 32032,
"preview": "// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart\n// This is a library that provides messa"
},
{
"path": "lib/l10n/messages_zh-Hans.dart",
"chars": 26489,
"preview": "// DO NOT EDIT. This is code generated via package:intl/generate_localized.dart\n// This is a library that provides messa"
},
{
"path": "lib/localization.dart",
"chars": 69006,
"preview": "import 'dart:async';\n\nimport 'package:blaise_wallet_flutter/model/available_languages.dart';\nimport 'package:flutter/mat"
},
{
"path": "lib/main.dart",
"chars": 14143,
"preview": "import 'dart:io';\n\nimport 'package:blaise_wallet_flutter/appstate_container.dart';\nimport 'package:blaise_wallet_flutter"
},
{
"path": "lib/model/authentication_method.dart",
"chars": 836,
"preview": "import 'package:blaise_wallet_flutter/localization.dart';\nimport 'package:blaise_wallet_flutter/model/setting_item.dart'"
},
{
"path": "lib/model/available_currency.dart",
"chars": 7259,
"preview": "import 'package:blaise_wallet_flutter/model/setting_item.dart';\nimport 'package:flutter/material.dart';\nimport 'dart:ui'"
},
{
"path": "lib/model/available_languages.dart",
"chars": 2080,
"preview": "import 'package:blaise_wallet_flutter/localization.dart';\nimport 'package:blaise_wallet_flutter/model/setting_item.dart'"
},
{
"path": "lib/model/available_themes.dart",
"chars": 1124,
"preview": "import 'package:blaise_wallet_flutter/localization.dart';\nimport 'package:blaise_wallet_flutter/model/setting_item.dart'"
},
{
"path": "lib/model/db/appdb.dart",
"chars": 4118,
"preview": "import 'dart:async';\nimport 'dart:io' as io;\nimport 'package:flutter/foundation.dart';\nimport 'package:pascaldart/pascal"
},
{
"path": "lib/model/db/contact.dart",
"chars": 906,
"preview": "import 'package:flutter/material.dart';\nimport 'package:json_annotation/json_annotation.dart';\nimport 'package:meta/meta"
},
{
"path": "lib/model/db/contact.g.dart",
"chars": 663,
"preview": "// GENERATED CODE - DO NOT MODIFY BY HAND\n\npart of 'contact.dart';\n\n// *************************************************"
},
{
"path": "lib/model/lock_timeout.dart",
"chars": 1896,
"preview": "import 'package:blaise_wallet_flutter/localization.dart';\nimport 'package:blaise_wallet_flutter/model/setting_item.dart'"
},
{
"path": "lib/model/notification_enabled.dart",
"chars": 728,
"preview": "import 'package:blaise_wallet_flutter/localization.dart';\nimport 'package:blaise_wallet_flutter/model/setting_item.dart'"
},
{
"path": "lib/model/setting_item.dart",
"chars": 182,
"preview": "import 'package:flutter/material.dart';\n\n/// Models that are used in settings dialogs/dropdowns\nabstract class SettingSe"
},
{
"path": "lib/model/unlock_setting.dart",
"chars": 688,
"preview": "import 'package:blaise_wallet_flutter/localization.dart';\nimport 'package:blaise_wallet_flutter/model/setting_item.dart'"
},
{
"path": "lib/network/http_client.dart",
"chars": 3972,
"preview": "import 'package:blaise_wallet_flutter/network/model/request/borrow_request.dart';\nimport 'package:blaise_wallet_flutter/"
},
{
"path": "lib/network/model/base_request.dart",
"chars": 63,
"preview": "abstract class BaseRequest {\n Map<String, dynamic> toJson();\n}"
},
{
"path": "lib/network/model/request/borrow_request.dart",
"chars": 553,
"preview": "import 'package:blaise_wallet_flutter/network/model/base_request.dart';\nimport 'package:json_annotation/json_annotation."
},
{
"path": "lib/network/model/request/borrow_request.g.dart",
"chars": 616,
"preview": "// GENERATED CODE - DO NOT MODIFY BY HAND\n\npart of 'borrow_request.dart';\n\n// ******************************************"
},
{
"path": "lib/network/model/request/fcm_delete_account_request.dart",
"chars": 830,
"preview": "import 'package:blaise_wallet_flutter/network/model/base_request.dart';\nimport 'package:json_annotation/json_annotation."
},
{
"path": "lib/network/model/request/fcm_delete_account_request.g.dart",
"chars": 904,
"preview": "// GENERATED CODE - DO NOT MODIFY BY HAND\n\npart of 'fcm_delete_account_request.dart';\n\n// ******************************"
},
{
"path": "lib/network/model/request/fcm_update_bulk_request.dart",
"chars": 933,
"preview": "import 'package:blaise_wallet_flutter/network/model/base_request.dart';\nimport 'package:json_annotation/json_annotation."
},
{
"path": "lib/network/model/request/fcm_update_bulk_request.g.dart",
"chars": 1088,
"preview": "// GENERATED CODE - DO NOT MODIFY BY HAND\n\npart of 'fcm_update_bulk_request.dart';\n\n// *********************************"
},
{
"path": "lib/network/model/request/fcm_update_request.dart",
"chars": 895,
"preview": "import 'package:blaise_wallet_flutter/network/model/base_request.dart';\nimport 'package:json_annotation/json_annotation."
},
{
"path": "lib/network/model/request/fcm_update_request.g.dart",
"chars": 1021,
"preview": "// GENERATED CODE - DO NOT MODIFY BY HAND\n\npart of 'fcm_update_request.dart';\n\n// **************************************"
},
{
"path": "lib/network/model/request/freepasa_get_request.dart",
"chars": 792,
"preview": "import 'package:blaise_wallet_flutter/network/model/base_request.dart';\nimport 'package:json_annotation/json_annotation."
},
{
"path": "lib/network/model/request/freepasa_get_request.g.dart",
"chars": 818,
"preview": "// GENERATED CODE - DO NOT MODIFY BY HAND\n\npart of 'freepasa_get_request.dart';\n\n// ************************************"
},
{
"path": "lib/network/model/request/freepasa_verify_request.dart",
"chars": 716,
"preview": "import 'package:blaise_wallet_flutter/network/model/base_request.dart';\nimport 'package:json_annotation/json_annotation."
},
{
"path": "lib/network/model/request/freepasa_verify_request.g.dart",
"chars": 739,
"preview": "// GENERATED CODE - DO NOT MODIFY BY HAND\n\npart of 'freepasa_verify_request.dart';\n\n// *********************************"
},
{
"path": "lib/network/model/request/getborrowed_request.dart",
"chars": 580,
"preview": "import 'package:blaise_wallet_flutter/network/model/base_request.dart';\nimport 'package:json_annotation/json_annotation."
},
{
"path": "lib/network/model/request/getborrowed_request.g.dart",
"chars": 646,
"preview": "// GENERATED CODE - DO NOT MODIFY BY HAND\n\npart of 'getborrowed_request.dart';\n\n// *************************************"
},
{
"path": "lib/network/model/request/subscribe_request.dart",
"chars": 1036,
"preview": "import 'package:blaise_wallet_flutter/network/model/base_request.dart';\nimport 'package:json_annotation/json_annotation."
},
{
"path": "lib/network/model/request/subscribe_request.g.dart",
"chars": 1243,
"preview": "// GENERATED CODE - DO NOT MODIFY BY HAND\n\npart of 'subscribe_request.dart';\n\n// ***************************************"
},
{
"path": "lib/network/model/request_item.dart",
"chars": 517,
"preview": "import 'dart:convert';\n\n/// Top-level function for running in isolate via flutter compute function\nString encodeRequestI"
},
{
"path": "lib/network/model/response/accounts_response_borrowed.dart",
"chars": 714,
"preview": "import 'package:blaise_wallet_flutter/network/model/response/borrow_response.dart';\nimport 'package:json_annotation/json"
},
{
"path": "lib/network/model/response/accounts_response_borrowed.g.dart",
"chars": 1051,
"preview": "// GENERATED CODE - DO NOT MODIFY BY HAND\n\npart of 'accounts_response_borrowed.dart';\n\n// ******************************"
},
{
"path": "lib/network/model/response/borrow_response.dart",
"chars": 1012,
"preview": "import 'package:json_annotation/json_annotation.dart';\nimport 'package:pascaldart/pascaldart.dart';\n\npart 'borrow_respon"
},
{
"path": "lib/network/model/response/borrow_response.g.dart",
"chars": 1076,
"preview": "// GENERATED CODE - DO NOT MODIFY BY HAND\n\npart of 'borrow_response.dart';\n\n// *****************************************"
},
{
"path": "lib/network/model/response/error_response.dart",
"chars": 350,
"preview": "import 'package:json_annotation/json_annotation.dart';\n\npart 'error_response.g.dart';\n\n@JsonSerializable()\nclass ErrorRe"
},
{
"path": "lib/network/model/response/error_response.g.dart",
"chars": 521,
"preview": "// GENERATED CODE - DO NOT MODIFY BY HAND\n\npart of 'error_response.dart';\n\n// ******************************************"
},
{
"path": "lib/network/model/response/getborrowed_response.dart",
"chars": 536,
"preview": "import 'package:blaise_wallet_flutter/network/model/response/borrow_response.dart';\nimport 'package:json_annotation/json"
},
{
"path": "lib/network/model/response/getborrowed_response.g.dart",
"chars": 707,
"preview": "// GENERATED CODE - DO NOT MODIFY BY HAND\n\npart of 'getborrowed_response.dart';\n\n// ************************************"
},
{
"path": "lib/network/model/response/price_response.dart",
"chars": 546,
"preview": "import 'package:json_annotation/json_annotation.dart';\n\npart 'price_response.g.dart';\n\ndouble _toDouble(v) {\n return do"
},
{
"path": "lib/network/model/response/price_response.g.dart",
"chars": 680,
"preview": "// GENERATED CODE - DO NOT MODIFY BY HAND\n\npart of 'price_response.dart';\n\n// ******************************************"
},
{
"path": "lib/network/model/response/subscribe_response.dart",
"chars": 873,
"preview": "import 'package:json_annotation/json_annotation.dart';\n\npart 'subscribe_response.g.dart';\n\ndouble _toDouble(v) {\n retur"
},
{
"path": "lib/network/model/response/subscribe_response.g.dart",
"chars": 802,
"preview": "// GENERATED CODE - DO NOT MODIFY BY HAND\n\npart of 'subscribe_response.dart';\n\n// **************************************"
},
{
"path": "lib/network/ws_client.dart",
"chars": 8886,
"preview": "import 'dart:async';\nimport 'dart:collection';\nimport 'dart:convert';\n\nimport 'package:blaise_wallet_flutter/bus/events."
},
{
"path": "lib/service_locator.dart",
"chars": 839,
"preview": "import 'package:blaise_wallet_flutter/model/db/appdb.dart';\nimport 'package:blaise_wallet_flutter/network/ws_client.dart"
},
{
"path": "lib/store/account/account.dart",
"chars": 13839,
"preview": "import 'dart:convert';\nimport 'dart:typed_data';\n\nimport 'package:blaise_wallet_flutter/appstate_container.dart';\nimport"
},
{
"path": "lib/store/account/account.g.dart",
"chars": 9346,
"preview": "// GENERATED CODE - DO NOT MODIFY BY HAND\n\npart of 'account.dart';\n\n// *************************************************"
},
{
"path": "lib/store/wallet/wallet.dart",
"chars": 14580,
"preview": "import 'dart:convert';\nimport 'dart:ui';\n\nimport 'package:blaise_wallet_flutter/constants.dart';\nimport 'package:blaise_"
},
{
"path": "lib/store/wallet/wallet.g.dart",
"chars": 14479,
"preview": "// GENERATED CODE - DO NOT MODIFY BY HAND\n\npart of 'wallet.dart';\n\n// **************************************************"
},
{
"path": "lib/themes.dart",
"chars": 19489,
"preview": "import 'dart:io';\n\nimport 'package:barcode_scan/barcode_scan.dart';\nimport 'package:flutter/material.dart';\nimport 'pack"
},
{
"path": "lib/ui/account/account.dart",
"chars": 60595,
"preview": "import 'dart:async';\nimport 'package:auto_size_text/auto_size_text.dart';\nimport 'package:blaise_wallet_flutter/appstate"
},
{
"path": "lib/ui/account/operation_details_sheet.dart",
"chars": 18430,
"preview": "import 'dart:async';\nimport 'package:auto_size_text/auto_size_text.dart';\nimport 'package:blaise_wallet_flutter/appstate"
},
{
"path": "lib/ui/account/operation_sheet.dart",
"chars": 9560,
"preview": "import 'dart:async';\nimport 'dart:typed_data';\n\nimport 'package:auto_size_text/auto_size_text.dart';\nimport 'package:bla"
},
{
"path": "lib/ui/account/other_operations/change_name/change_name_sheet.dart",
"chars": 9403,
"preview": "import 'package:auto_size_text/auto_size_text.dart';\nimport 'package:blaise_wallet_flutter/appstate_container.dart';\nimp"
},
{
"path": "lib/ui/account/other_operations/change_name/changed_name_sheet.dart",
"chars": 11524,
"preview": "import 'package:auto_size_text/auto_size_text.dart';\nimport 'package:blaise_wallet_flutter/appstate_container.dart';\nimp"
},
{
"path": "lib/ui/account/other_operations/change_name/changing_name_sheet.dart",
"chars": 16710,
"preview": "import 'dart:async';\nimport 'dart:ui';\n\nimport 'package:auto_size_text/auto_size_text.dart';\nimport 'package:blaise_wall"
},
{
"path": "lib/ui/account/other_operations/delist_for_sale/delisted_for_sale.dart",
"chars": 11561,
"preview": "import 'package:auto_size_text/auto_size_text.dart';\nimport 'package:blaise_wallet_flutter/appstate_container.dart';\nimp"
},
{
"path": "lib/ui/account/other_operations/delist_for_sale/delisting_for_sale.dart",
"chars": 16562,
"preview": "import 'dart:async';\nimport 'dart:ui';\n\nimport 'package:auto_size_text/auto_size_text.dart';\nimport 'package:blaise_wall"
},
{
"path": "lib/ui/account/other_operations/list_for_sale/list_for_sale_sheet.dart",
"chars": 14804,
"preview": "import 'package:auto_size_text/auto_size_text.dart';\nimport 'package:blaise_wallet_flutter/appstate_container.dart';\nimp"
},
{
"path": "lib/ui/account/other_operations/list_for_sale/listed_for_sale_sheet.dart",
"chars": 18111,
"preview": "import 'package:auto_size_text/auto_size_text.dart';\nimport 'package:blaise_wallet_flutter/appstate_container.dart';\nimp"
},
{
"path": "lib/ui/account/other_operations/list_for_sale/listing_for_sale_sheet.dart",
"chars": 22803,
"preview": "import 'dart:async';\nimport 'dart:ui';\n\nimport 'package:auto_size_text/auto_size_text.dart';\nimport 'package:blaise_wall"
},
{
"path": "lib/ui/account/other_operations/private_sale/create_private_sale_sheet.dart",
"chars": 20110,
"preview": "import 'package:auto_size_text/auto_size_text.dart';\nimport 'package:blaise_wallet_flutter/appstate_container.dart';\nimp"
},
{
"path": "lib/ui/account/other_operations/private_sale/created_private_sale_sheet.dart",
"chars": 20273,
"preview": "import 'package:auto_size_text/auto_size_text.dart';\nimport 'package:blaise_wallet_flutter/appstate_container.dart';\nimp"
},
{
"path": "lib/ui/account/other_operations/private_sale/creating_private_sale_sheet.dart",
"chars": 25943,
"preview": "import 'dart:async';\nimport 'dart:ui';\n\nimport 'package:auto_size_text/auto_size_text.dart';\nimport 'package:blaise_wall"
},
{
"path": "lib/ui/account/other_operations/transfer_account/transfer_account_sheet.dart",
"chars": 10636,
"preview": "import 'package:auto_size_text/auto_size_text.dart';\nimport 'package:blaise_wallet_flutter/appstate_container.dart';\nimp"
},
{
"path": "lib/ui/account/other_operations/transfer_account/transferred_account_sheet.dart",
"chars": 11619,
"preview": "import 'package:auto_size_text/auto_size_text.dart';\nimport 'package:blaise_wallet_flutter/appstate_container.dart';\nimp"
},
{
"path": "lib/ui/account/other_operations/transfer_account/transferring_account_sheet.dart",
"chars": 16776,
"preview": "import 'dart:async';\nimport 'dart:ui';\n\nimport 'package:auto_size_text/auto_size_text.dart';\nimport 'package:blaise_wall"
}
]
// ... and 130 more files (download for full content)
About this extraction
This page contains the full source code of the appditto/blaise_wallet_flutter GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 330 files (2.1 MB), approximately 576.5k tokens, and a symbol index with 1077 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.