Flutter

URL’s

| – | – | | Android (Google Play Store) | https://play.google.com/store/apps/details?id=<package_name> | | iOS (Apple App Store) | http://apps.apple.com//app/<app–name>/id | | Firebase function (emulator) | http://localhost:5001/PROJECT_ID/REGION/FUNCTION_NAME | | Firebase function (prod) | https://REGION-PROJECT_ID.cloudfunctions.net/FUNCTION_NAME |

Examples

http://127.0.0.1:5001/flipdare-test/us-central1/h_unsubscribe

Notes:

  • <package_name> is defined in Find your app’s package name. You can find it in the Google Play Console or in your app’s AndroidManifest.xml file.

Creating module

flutter create --template=module payments

Paths

Flutter PathD:\flutter
SDK PathD:\Users\dave\AppData\Local\Android\Sdk
AVD PathD:\android
Lock file/mnt/d/flutter/bin/cache/lockfile
PUB_CACHE%LOCALAPPDATA%\Pub\Cache
SettingsC:\Users\dave\AppData\Local\Google\AndroidStudio2023.1
PluginsC:\Users\dave\AppData\Roaming\Google\AndroidStudio2023.1
LogsC:\Users\dave\AppData\Local\Google\AndroidStudio2023.1\log
PUB_CACHED:\build-caches\pub-cache
GRADLE_USER_HOMED:\build-caches\gradle
Android emulator home ANDROID_EMULATOR_HOMED:\android\.android
android avd home ANDROID_AVD_HOMED:\android\.android\avd
android sdk home ANDROID_SDK_HOMED:\android

Signing

For debug

C:\google-cloud\flutter-test\test_auth\android> ./gradlew signingReport
Copy sha1 t https://console.firebase.google.com/project/flipdare-73df9/settings/general/android:com.example.test_auth    

Performance

1. Offline mode / downloads code.

On Windows

  • Edit FLUTTER_PROJ_DIR/android/gradlew.bat

    • Add switch --offline in %JAVA_EXEC%

        @rem Execute Gradle
        "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% \
        %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" \
        -classpath "%CLASSPATH%" \
        org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% --offline
      

On Nix

  • Edit FLUTTER_PROJ_DIR/android/gradlew

    • Add switch --offline in $JAVACMD

        exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" \
        org.gradle.wrapper.GradleWrapperMain "$@" --offline
      

2. Gradle Settings gradle.properties

org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
android.useAndroidX=true
android.enableJetifier=true
org.gradle.daemon=true
org.gradle.configureondemand=true
org.gradle.parallel=true
org.gradle.caching=true

Gradle daemon

cd android/; ./gradlewStart daemon
cd android/; ./gradlew --stopStart daemon

Using R8

Add the following line to android/build.gradle

println(com.android.tools.r8.Version.getVersionString())

And run

.\gradlew
8.2.42 (build 12d495d9e6e5d8ba2b5a930d3881401415efc9b2 from go/r8bot (luci-r8-custom-ci-archive-0-dyvc))

Upgrading

version info at https://r8.googlesource.com/r8

android\build.gradle

buildscript {
    ext.r8_version = '8.2.44'
    ext.kotlin_version = '1.7.10'
    repositories {
        google()
        mavenCentral()
        // dk
        maven {
            url = uri("https://storage.googleapis.com/r8-releases/raw")
        }
    }

    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "com.android.tools:r8:$r8_version"
    }
}

Config

IOS

ios/Runner/Info.plist

  <key>NSCameraUsageDescription</key>
  <string>Allow flipdare access to camera.</string>
  <key>NSMicrophoneUsageDescription</key>
  <string>Allow flipdare access to microphone (for camera usage).</string>

Stripe

MainActivity.kt

    //import io.flutter.embedding.android.FlutterActivity
    // davek
    import io.flutter.embedding.android.FlutterFragmentActivity

    // davek, stripe requires FlutterFragmentActivity instead of default FlutterActivity
    class MainActivity: FlutterFragmentActivity() {
    }

project.pbxproj

    IPHONEOS_DEPLOYMENT_TARGET = 12.0;

podfile

    platform :ios, '12.0'

res/values/styles.xml

<!-- davek for stripe -->
<style name="NormalTheme"  parent="Theme.MaterialComponents">

facebook

src/main/res/values/strings.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="facebook_app_id">1072901966939703</string>
    <string name="fb_login_protocol_scheme">fb1072901966939703</string>
    <string name="facebook_client_token">725746708197160639907990c80990a6</string>
</resources>