- Google Sign-In: wire serverClientId (639347358523-mtkm...apps.googleusercontent.com) so idToken is returned on Android - Email login: raise timeout 10s→25s, add single retry on SocketException/TimeoutException - Forgot Password: real glassmorphism bottom sheet with safe-degrade SnackBar (endpoint missing on backend) - Create Account: same-page AnimatedSwitcher toggle with glassmorphism signup form; delete old RegisterScreen - Desktop parity: DesktopLoginScreen same-page toggle; delete DesktopRegisterScreen - Guest mode: remove ScaffoldMessenger SnackBar from HomeScreen outer catch (inner _safe wrappers already return []) - LoginScreen: clearSnackBars() on postFrameCallback to prevent carried-over SnackBars from prior screens - ProGuard: add Google Sign-In + OkHttp keep rules - Version bump: 2.0.0+20 → 2.0.4+24; settings _appVersion → 2.0.4 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
88 lines
2.9 KiB
Prolog
88 lines
2.9 KiB
Prolog
# Flutter
|
|
-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.** { *; }
|
|
|
|
# Google Maps
|
|
-keep class com.google.android.gms.maps.** { *; }
|
|
-keep interface com.google.android.gms.maps.** { *; }
|
|
|
|
# Keep annotations
|
|
-keepattributes *Annotation*
|
|
-keepattributes SourceFile,LineNumberTable
|
|
|
|
# Play Core (deferred components)
|
|
-dontwarn com.google.android.play.core.splitcompat.SplitCompatApplication
|
|
-dontwarn com.google.android.play.core.splitinstall.SplitInstallException
|
|
-dontwarn com.google.android.play.core.splitinstall.SplitInstallManager
|
|
-dontwarn com.google.android.play.core.splitinstall.SplitInstallManagerFactory
|
|
-dontwarn com.google.android.play.core.splitinstall.SplitInstallRequest$Builder
|
|
-dontwarn com.google.android.play.core.splitinstall.SplitInstallRequest
|
|
-dontwarn com.google.android.play.core.splitinstall.SplitInstallSessionState
|
|
-dontwarn com.google.android.play.core.splitinstall.SplitInstallStateUpdatedListener
|
|
-dontwarn com.google.android.play.core.tasks.OnFailureListener
|
|
-dontwarn com.google.android.play.core.tasks.OnSuccessListener
|
|
-dontwarn com.google.android.play.core.tasks.Task
|
|
|
|
# Razorpay
|
|
-keepattributes *Annotation*,Signature,*Annotation*
|
|
-dontwarn com.razorpay.**
|
|
-keep class com.razorpay.** { *; }
|
|
-optimizations !method/inlining/
|
|
-keepclasseswithmembers class * {
|
|
public void onPayment*(...);
|
|
}
|
|
-keep class proguard.annotation.Keep
|
|
-keep class proguard.annotation.KeepClassMembers
|
|
-keep @proguard.annotation.Keep class * { *; }
|
|
-keep @proguard.annotation.KeepClassMembers class * {
|
|
<fields>;
|
|
<methods>;
|
|
}
|
|
|
|
# Google Sign-In / Play Services
|
|
-keep class com.google.android.gms.** { *; }
|
|
-keep interface com.google.android.gms.** { *; }
|
|
-dontwarn com.google.android.gms.**
|
|
-keep class com.google.firebase.** { *; }
|
|
-dontwarn com.google.firebase.**
|
|
|
|
# Geolocator / Geocoding
|
|
-keep class com.baseflow.** { *; }
|
|
-dontwarn com.baseflow.**
|
|
|
|
# url_launcher, share_plus, image_picker, path_provider, etc.
|
|
-keep class io.flutter.plugins.** { *; }
|
|
-dontwarn io.flutter.plugins.**
|
|
|
|
# OkHttp (used by many network libs)
|
|
-dontwarn okhttp3.**
|
|
-dontwarn okio.**
|
|
-dontwarn javax.annotation.**
|
|
-keep class okhttp3.** { *; }
|
|
-keep interface okhttp3.** { *; }
|
|
|
|
# Keep native methods
|
|
-keepclasseswithmembernames class * {
|
|
native <methods>;
|
|
}
|
|
|
|
# Keep Parcelable classes
|
|
-keep class * implements android.os.Parcelable {
|
|
public static final android.os.Parcelable$Creator *;
|
|
}
|
|
|
|
# Keep Serializable classes
|
|
-keepclassmembers class * implements java.io.Serializable {
|
|
static final long serialVersionUID;
|
|
private static final java.io.ObjectStreamField[] serialPersistentFields;
|
|
!static !transient <fields>;
|
|
private void writeObject(java.io.ObjectOutputStream);
|
|
private void readObject(java.io.ObjectInputStream);
|
|
java.lang.Object writeReplace();
|
|
java.lang.Object readResolve();
|
|
}
|