GithubHelp home page GithubHelp logo

jhomlala / catcher Goto Github PK

View Code? Open in Web Editor NEW
781.0 22.0 175.0 2.32 MB

Flutter error catching & handling plugin. Handles and reports exceptions in your app!

License: Apache License 2.0

Java 1.99% Objective-C 0.02% Dart 77.26% HTML 1.10% Swift 0.73% Kotlin 0.06% C++ 10.99% C 0.52% CMake 7.34%
dart flutter flutter-plugin android ios dartlang flutter-package flutter-examples

catcher's Introduction

Hi 👋, I'm Jakub

  • 🔭 I’m currently working on open source projects: BetterPlayer, Catcher, Alice
  • 🏢 I'm working @ Scalo
  • 👨‍💻 All of my projects are available at https://github.com/jhomlala
  • 💬 Ask me about Flutter, Android, Dart, Kotlin
  • ⚡ Fun fact I like to refactor old code.

 jhomlala

Connect with me:

jhomlala @jhomlala

jhomlala

catcher's People

Contributors

cjacobs42 avatar davidmartos96 avatar dlanileonardo avatar drcdev avatar epicokapi avatar estevao90 avatar fredgrott avatar jhomlala avatar jhomlalabsg avatar kasl avatar katutxakurra avatar khanguyen88 avatar linxiaotao avatar narumi147 avatar rhalff avatar rmtmckenzie avatar robertodoering avatar salihagic avatar simone999 avatar stanislavbondar avatar thexxturboxx avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

catcher's Issues

How to dynamically add customparams to the crash report

Hi,
Thank you so much for the wonderful plugin.

As per the plugin details, i need to set CatcherOptions at the beginning in the main.dart file.

But, I need to add some more data to customParameters based on user details. Any way to add data to the Customparams data.

Please let me know on it.

Thank you.

Using multi_image_picker plug-in with catcher causes app crash in Android

If I use the multi_image_picker plug-in with the catcher, the app will be forced to shut down in Android when the multi_image_picker is displayed on the screen.

The following is an error message that has occurred.

W/ActivityThread(21481): handleWindowVisibility: no activity for token android.os.BinderProxy@96e56c
  I/z.xxx(21481): Rejecting re-init on previously-failed class java.lang.Class<androidx.activity.ComponentActivity$2>: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/lifecycle/LifecycleEventObserver;
  I/z.xxx(21481):   at java.lang.Object java.lang.Class.newInstance() (Class.java:-2)
  I/z.xxx(21481):   at android.app.Activity android.app.AppComponentFactory.instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (AppComponentFactory.java:69)
  I/z.xxx(21481):   at android.app.Activity androidx.core.app.CoreComponentFactory.instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (CoreComponentFactory.java:43)
  I/z.xxx(21481):   at android.app.Activity android.app.Instrumentation.newActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (Instrumentation.java:1215)
  I/z.xxx(21481):   at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2831)
  I/z.xxx(21481):   at android.app.Activity android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.app.servertransaction.PendingTransactionActions, android.content.Intent) (ActivityThread.java:3048)
  I/z.xxx(21481):   at void android.app.servertransaction.LaunchActivityItem.execute(android.app.ClientTransactionHandler, android.os.IBinder, android.app.servertransaction.PendingTransactionActions) (LaunchActivityItem.java:78)
  I/z.xxx(21481):   at void android.app.servertransaction.TransactionExecutor.executeCallbacks(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:108)
  I/z.xxx(21481):   at void android.app.servertransaction.TransactionExecutor.execute(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:68)
  I/z.xxx(21481):   at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1808)
  I/z.xxx(21481):   at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:106)
  I/z.xxx(21481):   at void android.os.Looper.loop() (Looper.java:193)
  I/z.xxx(21481):   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6669)
  I/z.xxx(21481):   at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
  I/z.xxx(21481):   at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:493)
  I/z.xxx(21481):   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:858)
  I/z.xxx(21481): Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.lifecycle.LifecycleEventObserver" on path: DexPathList[[zip file "/system/framework/org.apache.http.legacy.boot.jar", zip file "/data/app/com.xxx.xxx-CdIbabwWu-C4P1InlJOLmg==/base.apk"],nativeLibraryDirectories=[/data/app/com.xxx.xxx-CdIbabwWu-C4P1InlJOLmg==/lib/x86, /data/app/com.xxx.xxx-CdIbabwWu-C4P1InlJOLmg==/base.apk!/lib/x86, /system/lib]]
  I/z.xxx(21481):   at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:134)
  I/z.xxx(21481):   at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:379)
  I/z.xxx(21481):   at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
  I/z.xxx(21481):   at java.lang.Object java.lang.Class.newInstance() (Class.java:-2)
  I/z.xxx(21481):   at android.app.Activity android.app.AppComponentFactory.instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (AppComponentFactory.java:69)
  I/z.xxx(21481):   at android.app.Activity androidx.core.app.CoreComponentFactory.instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (CoreComponentFactory.java:43)
  I/z.xxx(21481):   at android.app.Activity android.app.Instrumentation.newActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (Instrumentation.java:1215)
  I/z.xxx(21481):   at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2831)
  I/z.xxx(21481):   at android.app.Activity android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.app.servertransaction.PendingTransactionActions, android.content.Intent) (ActivityThread.java:3048)
  I/z.xxx(21481):   at void android.app.servertransaction.LaunchActivityItem.execute(android.app.ClientTransactionHandler, android.os.IBinder, android.app.servertransaction.PendingTransactionActions) (LaunchActivityItem.java:78)
  I/z.xxx(21481):   at void android.app.servertransaction.TransactionExecutor.executeCallbacks(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:108)
  I/z.xxx(21481):   at void android.app.servertransaction.TransactionExecutor.execute(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:68)
  I/z.xxx(21481):   at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1808)
  I/z.xxx(21481):   at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:106)
  I/z.xxx(21481):   at void android.os.Looper.loop() (Looper.java:193)
  I/z.xxx(21481):   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6669)
  I/z.xxx(21481):   at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
  I/z.xxx(21481):   at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:493)
  I/z.xxx(21481):   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:858)
  I/z.xxx(21481):
  I/z.xxx(21481): Rejecting re-init on previously-failed class java.lang.Class<androidx.activity.ComponentActivity$2>: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/lifecycle/LifecycleEventObserver;
  I/z.xxx(21481):   at java.lang.Object java.lang.Class.newInstance() (Class.java:-2)
  I/z.xxx(21481):   at android.app.Activity android.app.AppComponentFactory.instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (AppComponentFactory.java:69)
  I/z.xxx(21481):   at android.app.Activity androidx.core.app.CoreComponentFactory.instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (CoreComponentFactory.java:43)
  I/z.xxx(21481):   at android.app.Activity android.app.Instrumentation.newActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (Instrumentation.java:1215)
  I/z.xxx(21481):   at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2831)
  I/z.xxx(21481):   at android.app.Activity android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.app.servertransaction.PendingTransactionActions, android.content.Intent) (ActivityThread.java:3048)
  I/z.xxx(21481):   at void android.app.servertransaction.LaunchActivityItem.execute(android.app.ClientTransactionHandler, android.os.IBinder, android.app.servertransaction.PendingTransactionActions) (LaunchActivityItem.java:78)
  I/z.xxx(21481):   at void android.app.servertransaction.TransactionExecutor.executeCallbacks(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:108)
  I/z.xxx(21481):   at void android.app.servertransaction.TransactionExecutor.execute(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:68)
  I/z.xxx(21481):   at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1808)
  I/z.xxx(21481):   at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:106)
  I/z.xxx(21481):   at void android.os.Looper.loop() (Looper.java:193)
  I/z.xxx(21481):   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6669)
  I/z.xxx(21481):   at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
  I/z.xxx(21481):   at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:493)
  I/z.xxx(21481):   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:858)
  I/z.xxx(21481): Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.lifecycle.LifecycleEventObserver" on path: DexPathList[[zip file "/system/framework/org.apache.http.legacy.boot.jar", zip file "/data/app/com.xxx.xxx-CdIbabwWu-C4P1InlJOLmg==/base.apk"],nativeLibraryDirectories=[/data/app/com.xxx.xxx-CdIbabwWu-C4P1InlJOLmg==/lib/x86, /data/app/com.xxx.xxx-CdIbabwWu-C4P1InlJOLmg==/base.apk!/lib/x86, /system/lib]]
  I/z.xxx(21481):   at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:134)
  I/z.xxx(21481):   at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:379)
  I/z.xxx(21481):   at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
  I/z.xxx(21481):   at java.lang.Object java.lang.Class.newInstance() (Class.java:-2)
  I/z.xxx(21481):   at android.app.Activity android.app.AppComponentFactory.instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (AppComponentFactory.java:69)
  I/z.xxx(21481):   at android.app.Activity androidx.core.app.CoreComponentFactory.instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (CoreComponentFactory.java:43)
  I/z.xxx(21481):   at android.app.Activity android.app.Instrumentation.newActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (Instrumentation.java:1215)
  I/z.xxx(21481):   at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2831)
  I/z.xxx(21481):   at android.app.Activity android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.app.servertransaction.PendingTransactionActions, android.content.Intent) (ActivityThread.java:3048)
  I/z.xxx(21481):   at void android.app.servertransaction.LaunchActivityItem.execute(android.app.ClientTransactionHandler, android.os.IBinder, android.app.servertransaction.PendingTransactionActions) (LaunchActivityItem.java:78)
  I/z.xxx(21481):   at void android.app.servertransaction.TransactionExecutor.executeCallbacks(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:108)
  I/z.xxx(21481):   at void android.app.servertransaction.TransactionExecutor.execute(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:68)
  I/z.xxx(21481):   at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1808)
  I/z.xxx(21481):   at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:106)
  I/z.xxx(21481):   at void android.os.Looper.loop() (Looper.java:193)
  I/z.xxx(21481):   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6669)
  I/z.xxx(21481):   at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
  I/z.xxx(21481):   at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:493)
  I/z.xxx(21481):   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:858)
  I/z.xxx(21481):
  I/z.xxx(21481): Rejecting re-init on previously-failed class java.lang.Class<androidx.activity.ComponentActivity$3>: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/lifecycle/LifecycleEventObserver;
  I/z.xxx(21481):   at java.lang.Object java.lang.Class.newInstance() (Class.java:-2)
  I/z.xxx(21481):   at android.app.Activity android.app.AppComponentFactory.instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (AppComponentFactory.java:69)
  I/z.xxx(21481):   at android.app.Activity androidx.core.app.CoreComponentFactory.instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (CoreComponentFactory.java:43)
  I/z.xxx(21481):   at android.app.Activity android.app.Instrumentation.newActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (Instrumentation.java:1215)
  I/z.xxx(21481):   at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2831)
  I/z.xxx(21481):   at android.app.Activity android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.app.servertransaction.PendingTransactionActions, android.content.Intent) (ActivityThread.java:3048)
  I/z.xxx(21481):   at void android.app.servertransaction.LaunchActivityItem.execute(android.app.ClientTransactionHandler, android.os.IBinder, android.app.servertransaction.PendingTransactionActions) (LaunchActivityItem.java:78)
  I/z.xxx(21481):   at void android.app.servertransaction.TransactionExecutor.executeCallbacks(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:108)
  I/z.xxx(21481):   at void android.app.servertransaction.TransactionExecutor.execute(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:68)
  I/z.xxx(21481):   at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1808)
  I/z.xxx(21481):   at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:106)
  I/z.xxx(21481):   at void android.os.Looper.loop() (Looper.java:193)
  I/z.xxx(21481):   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6669)
  I/z.xxx(21481):   at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
  I/z.xxx(21481):   at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:493)
  I/z.xxx(21481):   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:858)
  I/z.xxx(21481): Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.lifecycle.LifecycleEventObserver" on path: DexPathList[[zip file "/system/framework/org.apache.http.legacy.boot.jar", zip file "/data/app/com.xxx.xxx-CdIbabwWu-C4P1InlJOLmg==/base.apk"],nativeLibraryDirectories=[/data/app/com.xxx.xxx-CdIbabwWu-C4P1InlJOLmg==/lib/x86, /data/app/com.xxx.xxx-CdIbabwWu-C4P1InlJOLmg==/base.apk!/lib/x86, /system/lib]]
  I/z.xxx(21481):   at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:134)
  I/z.xxx(21481):   at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:379)
  I/z.xxx(21481):   at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
  I/z.xxx(21481):   at java.lang.Object java.lang.Class.newInstance() (Class.java:-2)
  I/z.xxx(21481):   at android.app.Activity android.app.AppComponentFactory.instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (AppComponentFactory.java:69)
  I/z.xxx(21481):   at android.app.Activity androidx.core.app.CoreComponentFactory.instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (CoreComponentFactory.java:43)
  I/z.xxx(21481):   at android.app.Activity android.app.Instrumentation.newActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (Instrumentation.java:1215)
  I/z.xxx(21481):   at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2831)
  I/z.xxx(21481):   at android.app.Activity android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.app.servertransaction.PendingTransactionActions, android.content.Intent) (ActivityThread.java:3048)
  I/z.xxx(21481):   at void android.app.servertransaction.LaunchActivityItem.execute(android.app.ClientTransactionHandler, android.os.IBinder, android.app.servertransaction.PendingTransactionActions) (LaunchActivityItem.java:78)
  I/z.xxx(21481):   at void android.app.servertransaction.TransactionExecutor.executeCallbacks(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:108)
  I/z.xxx(21481):   at void android.app.servertransaction.TransactionExecutor.execute(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:68)
  I/z.xxx(21481):   at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1808)
  I/z.xxx(21481):   at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:106)
  I/z.xxx(21481):   at void android.os.Looper.loop() (Looper.java:193)
  I/z.xxx(21481):   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6669)
  I/z.xxx(21481):   at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
  I/z.xxx(21481):   at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:493)
  I/z.xxx(21481):   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:858)
  I/z.xxx(21481):
  I/z.xxx(21481): Rejecting re-init on previously-failed class java.lang.Class<androidx.activity.ComponentActivity$3>: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/lifecycle/LifecycleEventObserver;
  I/z.xxx(21481):   at java.lang.Object java.lang.Class.newInstance() (Class.java:-2)
  I/z.xxx(21481):   at android.app.Activity android.app.AppComponentFactory.instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (AppComponentFactory.java:69)
  I/z.xxx(21481):   at android.app.Activity androidx.core.app.CoreComponentFactory.instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (CoreComponentFactory.java:43)
  I/z.xxx(21481):   at android.app.Activity android.app.Instrumentation.newActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (Instrumentation.java:1215)
  I/z.xxx(21481):   at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2831)
  I/z.xxx(21481):   at android.app.Activity android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.app.servertransaction.PendingTransactionActions, android.content.Intent) (ActivityThread.java:3048)
  I/z.xxx(21481):   at void android.app.servertransaction.LaunchActivityItem.execute(android.app.ClientTransactionHandler, android.os.IBinder, android.app.servertransaction.PendingTransactionActions) (LaunchActivityItem.java:78)
  I/z.xxx(21481):   at void android.app.servertransaction.TransactionExecutor.executeCallbacks(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:108)
  I/z.xxx(21481):   at void android.app.servertransaction.TransactionExecutor.execute(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:68)
  I/z.xxx(21481):   at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1808)
  I/z.xxx(21481):   at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:106)
  I/z.xxx(21481):   at void android.os.Looper.loop() (Looper.java:193)
  I/z.xxx(21481):   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6669)
  I/z.xxx(21481):   at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
  I/z.xxx(21481):   at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:493)
  I/z.xxx(21481):   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:858)
  I/z.xxx(21481): Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.lifecycle.LifecycleEventObserver" on path: DexPathList[[zip file "/system/framework/org.apache.http.legacy.boot.jar", zip file "/data/app/com.xxx.xxx-CdIbabwWu-C4P1InlJOLmg==/base.apk"],nativeLibraryDirectories=[/data/app/com.xxx.xxx-CdIbabwWu-C4P1InlJOLmg==/lib/x86, /data/app/com.xxx.xxx-CdIbabwWu-C4P1InlJOLmg==/base.apk!/lib/x86, /system/lib]]
  I/z.xxx(21481):   at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:134)
  I/z.xxx(21481):   at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:379)
  I/z.xxx(21481):   at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
  I/z.xxx(21481):   at java.lang.Object java.lang.Class.newInstance() (Class.java:-2)
  I/z.xxx(21481):   at android.app.Activity android.app.AppComponentFactory.instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (AppComponentFactory.java:69)
  I/z.xxx(21481):   at android.app.Activity androidx.core.app.CoreComponentFactory.instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (CoreComponentFactory.java:43)
  I/z.xxx(21481):   at android.app.Activity android.app.Instrumentation.newActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (Instrumentation.java:1215)
  I/z.xxx(21481):   at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2831)
  I/z.xxx(21481):   at android.app.Activity android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.app.servertransaction.PendingTransactionActions, android.content.Intent) (ActivityThread.java:3048)
  I/z.xxx(21481):   at void android.app.servertransaction.LaunchActivityItem.execute(android.app.ClientTransactionHandler, android.os.IBinder, android.app.servertransaction.PendingTransactionActions) (LaunchActivityItem.java:78)
  I/z.xxx(21481):   at void android.app.servertransaction.TransactionExecutor.executeCallbacks(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:108)
  I/z.xxx(21481):   at void android.app.servertransaction.TransactionExecutor.execute(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:68)
  I/z.xxx(21481):   at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1808)
  I/z.xxx(21481):   at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:106)
  I/z.xxx(21481):   at void android.os.Looper.loop() (Looper.java:193)
  I/z.xxx(21481):   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6669)
  I/z.xxx(21481):   at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
  I/z.xxx(21481):   at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:493)
  I/z.xxx(21481):   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:858)
  I/z.xxx(21481):
  W/z.xxx(21481): Accessing hidden method Landroid/text/SpannableStringInternal;->length()I (light greylist, linking)
  I/z.xxx(21481): Rejecting re-init on previously-failed class java.lang.Class<androidx.activity.OnBackPressedDispatcher$LifecycleOnBackPressedCancellable>: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/lifecycle/LifecycleEventObserver;
  I/z.xxx(21481):   at void androidx.activity.ComponentActivity.<init>() (ComponentActivity.java:68)
  I/z.xxx(21481):   at void androidx.fragment.app.FragmentActivity.<init>() (FragmentActivity.java:127)
  I/z.xxx(21481):   at void androidx.appcompat.app.AppCompatActivity.<init>() (AppCompatActivity.java:77)
  I/z.xxx(21481):   at void com.sangcomz.fishbun.BaseActivity.<init>() (BaseActivity.java:11)
  I/z.xxx(21481):   at void com.sangcomz.fishbun.ui.album.AlbumActivity.<init>() (AlbumActivity.java:37)
  I/z.xxx(21481):   at java.lang.Object java.lang.Class.newInstance() (Class.java:-2)
  I/z.xxx(21481):   at android.app.Activity android.app.AppComponentFactory.instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (AppComponentFactory.java:69)
  I/z.xxx(21481):   at android.app.Activity androidx.core.app.CoreComponentFactory.instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (CoreComponentFactory.java:43)
  I/z.xxx(21481):   at android.app.Activity android.app.Instrumentation.newActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (Instrumentation.java:1215)
  I/z.xxx(21481):   at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2831)
  I/z.xxx(21481):   at android.app.Activity android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.app.servertransaction.PendingTransactionActions, android.content.Intent) (ActivityThread.java:3048)
  I/z.xxx(21481):   at void android.app.servertransaction.LaunchActivityItem.execute(android.app.ClientTransactionHandler, android.os.IBinder, android.app.servertransaction.PendingTransactionActions) (LaunchActivityItem.java:78)
  I/z.xxx(21481):   at void android.app.servertransaction.TransactionExecutor.executeCallbacks(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:108)
  I/z.xxx(21481):   at void android.app.servertransaction.TransactionExecutor.execute(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:68)
  I/z.xxx(21481):   at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1808)
  I/z.xxx(21481):   at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:106)
  I/z.xxx(21481):   at void android.os.Looper.loop() (Looper.java:193)
  I/z.xxx(21481):   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6669)
  I/z.xxx(21481):   at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
  I/z.xxx(21481):   at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:493)
  I/z.xxx(21481):   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:858)
  I/z.xxx(21481): Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.lifecycle.LifecycleEventObserver" on path: DexPathList[[zip file "/system/framework/org.apache.http.legacy.boot.jar", zip file "/data/app/com.xxx.xxx-CdIbabwWu-C4P1InlJOLmg==/base.apk"],nativeLibraryDirectories=[/data/app/com.xxx.xxx-CdIbabwWu-C4P1InlJOLmg==/lib/x86, /data/app/com.xxx.xxx-CdIbabwWu-C4P1InlJOLmg==/base.apk!/lib/x86, /system/lib]]
  I/z.xxx(21481):   at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:134)
  I/z.xxx(21481):   at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:379)
  I/z.xxx(21481):   at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
  I/z.xxx(21481):   at void androidx.activity.ComponentActivity.<init>() (ComponentActivity.java:68)
  I/z.xxx(21481):   at void androidx.fragment.app.FragmentActivity.<init>() (FragmentActivity.java:127)
  I/z.xxx(21481):   at void androidx.appcompat.app.AppCompatActivity.<init>() (AppCompatActivity.java:77)
  I/z.xxx(21481):   at void com.sangcomz.fishbun.BaseActivity.<init>() (BaseActivity.java:11)
  I/z.xxx(21481):   at void com.sangcomz.fishbun.ui.album.AlbumActivity.<init>() (AlbumActivity.java:37)
  I/z.xxx(21481):   at java.lang.Object java.lang.Class.newInstance() (Class.java:-2)
  I/z.xxx(21481):   at android.app.Activity android.app.AppComponentFactory.instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (AppComponentFactory.java:69)
  I/z.xxx(21481):   at android.app.Activity androidx.core.app.CoreComponentFactory.instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (CoreComponentFactory.java:43)
  I/z.xxx(21481):   at android.app.Activity android.app.Instrumentation.newActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (Instrumentation.java:1215)
  I/z.xxx(21481):   at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2831)
  I/z.xxx(21481):   at android.app.Activity android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.app.servertransaction.PendingTransactionActions, android.content.Intent) (ActivityThread.java:3048)
  I/z.xxx(21481):   at void android.app.servertransaction.LaunchActivityItem.execute(android.app.ClientTransactionHandler, android.os.IBinder, android.app.servertransaction.PendingTransactionActions) (LaunchActivityItem.java:78)
  I/z.xxx(21481):   at void android.app.servertransaction.TransactionExecutor.executeCallbacks(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:108)
  I/z.xxx(21481):   at void android.app.servertransaction.TransactionExecutor.execute(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:68)
  I/z.xxx(21481):   at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1808)
  I/z.xxx(21481):   at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:106)
  I/z.xxx(21481):   at void android.os.Looper.loop() (Looper.java:193)
  I/z.xxx(21481):   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6669)
  I/z.xxx(21481):   at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
  I/z.xxx(21481):   at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:493)
  I/z.xxx(21481):   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:858)
  I/z.xxx(21481):
  I/z.xxx(21481): Rejecting re-init on previously-failed class java.lang.Class<androidx.activity.OnBackPressedDispatcher$LifecycleOnBackPressedCancellable>: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/lifecycle/LifecycleEventObserver;
  I/z.xxx(21481):   at void androidx.activity.ComponentActivity.<init>() (ComponentActivity.java:68)
  I/z.xxx(21481):   at void androidx.fragment.app.FragmentActivity.<init>() (FragmentActivity.java:127)
  I/z.xxx(21481):   at void androidx.appcompat.app.AppCompatActivity.<init>() (AppCompatActivity.java:77)
  I/z.xxx(21481):   at void com.sangcomz.fishbun.BaseActivity.<init>() (BaseActivity.java:11)
  I/z.xxx(21481):   at void com.sangcomz.fishbun.ui.album.AlbumActivity.<init>() (AlbumActivity.java:37)
  I/z.xxx(21481):   at java.lang.Object java.lang.Class.newInstance() (Class.java:-2)
  I/z.xxx(21481):   at android.app.Activity android.app.AppComponentFactory.instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (AppComponentFactory.java:69)
  I/z.xxx(21481):   at android.app.Activity androidx.core.app.CoreComponentFactory.instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (CoreComponentFactory.java:43)
  I/z.xxx(21481):   at android.app.Activity android.app.Instrumentation.newActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (Instrumentation.java:1215)
  I/z.xxx(21481):   at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2831)
  I/z.xxx(21481):   at android.app.Activity android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.app.servertransaction.PendingTransactionActions, android.content.Intent) (ActivityThread.java:3048)
  I/z.xxx(21481):   at void android.app.servertransaction.LaunchActivityItem.execute(android.app.ClientTransactionHandler, android.os.IBinder, android.app.servertransaction.PendingTransactionActions) (LaunchActivityItem.java:78)
  I/z.xxx(21481):   at void android.app.servertransaction.TransactionExecutor.executeCallbacks(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:108)
  I/z.xxx(21481):   at void android.app.servertransaction.TransactionExecutor.execute(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:68)
  I/z.xxx(21481):   at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1808)
  I/z.xxx(21481):   at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:106)
  I/z.xxx(21481):   at void android.os.Looper.loop() (Looper.java:193)
  I/z.xxx(21481):   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6669)
  I/z.xxx(21481):   at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
  I/z.xxx(21481):   at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:493)
  I/z.xxx(21481):   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:858)
  I/z.xxx(21481): Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.lifecycle.LifecycleEventObserver" on path: DexPathList[[zip file "/system/framework/org.apache.http.legacy.boot.jar", zip file "/data/app/com.xxx.xxx-CdIbabwWu-C4P1InlJOLmg==/base.apk"],nativeLibraryDirectories=[/data/app/com.xxx.xxx-CdIbabwWu-C4P1InlJOLmg==/lib/x86, /data/app/com.xxx.xxx-CdIbabwWu-C4P1InlJOLmg==/base.apk!/lib/x86, /system/lib]]
  I/z.xxx(21481):   at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:134)
  I/z.xxx(21481):   at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:379)
  I/z.xxx(21481):   at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
  I/z.xxx(21481):   at void androidx.activity.ComponentActivity.<init>() (ComponentActivity.java:68)
  I/z.xxx(21481):   at void androidx.fragment.app.FragmentActivity.<init>() (FragmentActivity.java:127)
  I/z.xxx(21481):   at void androidx.appcompat.app.AppCompatActivity.<init>() (AppCompatActivity.java:77)
  I/z.xxx(21481):   at void com.sangcomz.fishbun.BaseActivity.<init>() (BaseActivity.java:11)
  I/z.xxx(21481):   at void com.sangcomz.fishbun.ui.album.AlbumActivity.<init>() (AlbumActivity.java:37)
  I/z.xxx(21481):   at java.lang.Object java.lang.Class.newInstance() (Class.java:-2)
  I/z.xxx(21481):   at android.app.Activity android.app.AppComponentFactory.instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (AppComponentFactory.java:69)
  I/z.xxx(21481):   at android.app.Activity androidx.core.app.CoreComponentFactory.instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (CoreComponentFactory.java:43)
  I/z.xxx(21481):   at android.app.Activity android.app.Instrumentation.newActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (Instrumentation.java:1215)
  I/z.xxx(21481):   at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2831)
  I/z.xxx(21481):   at android.app.Activity android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.app.servertransaction.PendingTransactionActions, android.content.Intent) (ActivityThread.java:3048)
  I/z.xxx(21481):   at void android.app.servertransaction.LaunchActivityItem.execute(android.app.ClientTransactionHandler, android.os.IBinder, android.app.servertransaction.PendingTransactionActions) (LaunchActivityItem.java:78)
  I/z.xxx(21481):   at void android.app.servertransaction.TransactionExecutor.executeCallbacks(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:108)
  I/z.xxx(21481):   at void android.app.servertransaction.TransactionExecutor.execute(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:68)
  I/z.xxx(21481):   at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1808)
  I/z.xxx(21481):   at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:106)
  I/z.xxx(21481):   at void android.os.Looper.loop() (Looper.java:193)
  I/z.xxx(21481):   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6669)
  I/z.xxx(21481):   at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
  I/z.xxx(21481):   at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:493)
  I/z.xxx(21481):   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:858)
  I/z.xxx(21481):
  I/z.xxx(21481): Rejecting re-init on previously-failed class java.lang.Class<androidx.activity.ComponentActivity$2>: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/lifecycle/LifecycleEventObserver;
  I/z.xxx(21481):   at java.lang.Object java.lang.Class.newInstance() (Class.java:-2)
  I/z.xxx(21481):   at android.app.Activity android.app.AppComponentFactory.instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (AppComponentFactory.java:69)
  I/z.xxx(21481):   at android.app.Activity androidx.core.app.CoreComponentFactory.instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (CoreComponentFactory.java:43)
  I/z.xxx(21481):   at android.app.Activity android.app.Instrumentation.newActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (Instrumentation.java:1215)
  I/z.xxx(21481):   at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2831)
  I/z.xxx(21481):   at android.app.Activity android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.app.servertransaction.PendingTransactionActions, android.content.Intent) (ActivityThread.java:3048)
  I/z.xxx(21481):   at void android.app.servertransaction.LaunchActivityItem.execute(android.app.ClientTransactionHandler, android.os.IBinder, android.app.servertransaction.PendingTransactionActions) (LaunchActivityItem.java:78)
  I/z.xxx(21481):   at void android.app.servertransaction.TransactionExecutor.executeCallbacks(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:108)
  I/z.xxx(21481):   at void android.app.servertransaction.TransactionExecutor.execute(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:68)
  I/z.xxx(21481):   at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1808)
  I/z.xxx(21481):   at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:106)
  I/z.xxx(21481):   at void android.os.Looper.loop() (Looper.java:193)
  I/z.xxx(21481):   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6669)
  I/z.xxx(21481):   at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
  I/z.xxx(21481):   at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:493)
  I/z.xxx(21481):   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:858)
  I/z.xxx(21481): Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.lifecycle.LifecycleEventObserver" on path: DexPathList[[zip file "/system/framework/org.apache.http.legacy.boot.jar", zip file "/data/app/com.xxx.xxx-CdIbabwWu-C4P1InlJOLmg==/base.apk"],nativeLibraryDirectories=[/data/app/com.xxx.xxx-CdIbabwWu-C4P1InlJOLmg==/lib/x86, /data/app/com.xxx.xxx-CdIbabwWu-C4P1InlJOLmg==/base.apk!/lib/x86, /system/lib]]
  I/z.xxx(21481):   at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:134)
  I/z.xxx(21481):   at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String, boolean) (ClassLoader.java:379)
  I/z.xxx(21481):   at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
  I/z.xxx(21481):   at java.lang.Object java.lang.Class.newInstance() (Class.java:-2)
  I/z.xxx(21481):   at android.app.Activity android.app.AppComponentFactory.instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (AppComponentFactory.java:69)
  I/z.xxx(21481):   at android.app.Activity androidx.core.app.CoreComponentFactory.instantiateActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (CoreComponentFactory.java:43)
  I/z.xxx(21481):   at android.app.Activity android.app.Instrumentation.newActivity(java.lang.ClassLoader, java.lang.String, android.content.Intent) (Instrumentation.java:1215)
  I/z.xxx(21481):   at android.app.Activity android.app.ActivityThread.performLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.content.Intent) (ActivityThread.java:2831)
  I/z.xxx(21481):   at android.app.Activity android.app.ActivityThread.handleLaunchActivity(android.app.ActivityThread$ActivityClientRecord, android.app.servertransaction.PendingTransactionActions, android.content.Intent) (ActivityThread.java:3048)
  I/z.xxx(21481):   at void android.app.servertransaction.LaunchActivityItem.execute(android.app.ClientTransactionHandler, android.os.IBinder, android.app.servertransaction.PendingTransactionActions) (LaunchActivityItem.java:78)
  I/z.xxx(21481):   at void android.app.servertransaction.TransactionExecutor.executeCallbacks(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:108)
  I/z.xxx(21481):   at void android.app.servertransaction.TransactionExecutor.execute(android.app.servertransaction.ClientTransaction) (TransactionExecutor.java:68)
  I/z.xxx(21481):   at void android.app.ActivityThread$H.handleMessage(android.os.Message) (ActivityThread.java:1808)
  I/z.xxx(21481):   at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:106)
  I/z.xxx(21481):   at void android.os.Looper.loop() (Looper.java:193)
  I/z.xxx(21481):   at void android.app.ActivityThread.main(java.lang.String[]) (ActivityThread.java:6669)
  I/z.xxx(21481):   at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object, java.lang.Object[]) (Method.java:-2)
  I/z.xxx(21481):   at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:493)
  I/z.xxx(21481):   at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:858)
  I/z.xxx(21481):
  D/AndroidRuntime(21481): Shutting down VM
  E/AndroidRuntime(21481): FATAL EXCEPTION: main
  E/AndroidRuntime(21481): Process: com.xxx.xxx, PID: 21481
  E/AndroidRuntime(21481): java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/lifecycle/LifecycleEventObserver;
  E/AndroidRuntime(21481): 	at java.lang.Class.newInstance(Native Method)
  E/AndroidRuntime(21481): 	at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:69)
  E/AndroidRuntime(21481): 	at androidx.core.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:43)
  E/AndroidRuntime(21481): 	at android.app.Instrumentation.newActivity(Instrumentation.java:1215)
  E/AndroidRuntime(21481): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2831)
  E/AndroidRuntime(21481): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
  E/AndroidRuntime(21481): 	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
  E/AndroidRuntime(21481): 	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
  E/AndroidRuntime(21481): 	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
  E/AndroidRuntime(21481): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
  E/AndroidRuntime(21481): 	at android.os.Handler.dispatchMessage(Handler.java:106)
  E/AndroidRuntime(21481): 	at android.os.Looper.loop(Looper.java:193)
  E/AndroidRuntime(21481): 	at android.app.ActivityThread.main(ActivityThread.java:6669)
  E/AndroidRuntime(21481): 	at java.lang.reflect.Method.invoke(Native Method)
  E/AndroidRuntime(21481): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
  E/AndroidRuntime(21481): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
  E/AndroidRuntime(21481): Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.lifecycle.LifecycleEventObserver" on path: DexPathList[[zip file "/system/framework/org.apache.http.legacy.boot.jar", zip file "/data/app/com.xxx.xxx-CdIbabwWu-C4P1InlJOLmg==/base.apk"],nativeLibraryDirectories=[/data/app/com.xxx.xxx-CdIbabwWu-C4P1InlJOLmg==/lib/x86, /data/app/com.xxx.xxx-CdIbabwWu-C4P1InlJOLmg==/base.apk!/lib/x86, /system/lib]]
  E/AndroidRuntime(21481): 	at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134)
  E/AndroidRuntime(21481): 	at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
  E/AndroidRuntime(21481): 	at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
  E/AndroidRuntime(21481): 	... 16 more
  I/Process (21481): Sending signal. PID: 21481 SIG: 9

Android X migration problem (Solved)

catcher: ^0.2.3

When I add this dependency I have this error

Program type already present: android.support.v4.os.ResultReceiver$MyResultReceiver

How I can help to resolve this?

Logging to sentry

First of all, awesome plugin. The error handling options with this are superb. However, I would like to log to sentry as well.

I have created a sentry handler that extends the ReportHandler:

import 'package:catcher/catcher_plugin.dart';
import 'package:base_flutter_app/src/utils/sentry.dart';

class SentryHandler extends ReportHandler {
  @override
  Future<bool> handle(Report error) async {
    // TODO: implement handle
    await sentry.captureException(exception: error.error, stackTrace: error.stackTrace);
    return true;
  }
}

And in my main.dart file, I have added the Sentry handler to the list of handlers.

import 'dart:convert';
import 'package:base_flutter_app/src/config/application.dart';
import 'package:base_flutter_app/src/routes/routes.dart';
import 'package:catcher/catcher_plugin.dart';
import 'package:fluro/fluro.dart';
import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart';
import 'package:base_flutter_app/src/resources/pages/splash.dart';
import 'package:base_flutter_app/src/exceptions/sentry_handler.dart';
import 'package:base_flutter_app/src/utils/environment_utils.dart';

// Must be top-level function
_parseAndDecode(String response) {
  return jsonDecode(response);
}

parseJson(String text) {
  return compute(_parseAndDecode, text);
}

Future main() async {
  await EnvironmentUtil.loadEnvFile();
  print('Env file loaded');
//  runApp(MyApp());

  //debug configuration
  CatcherOptions debugOptions =
  CatcherOptions(DialogReportMode(), [ConsoleHandler(), SentryHandler()]);

  //release configuration
  CatcherOptions releaseOptions = CatcherOptions(DialogReportMode(), [
    EmailManualHandler(["[email protected]"]), SentryHandler()
  ]);

  //profile configuration
  CatcherOptions profileOptions = CatcherOptions(
    NotificationReportMode(),
    [ConsoleHandler(), ToastHandler(), SentryHandler()],
    handlerTimeout: 10000,
    customParameters: {"example": "example_parameter"},
  );

  //MyApp is root widget
  Catcher(MyApp(),
      debugConfig: debugOptions,
      releaseConfig: releaseOptions,
      profileConfig: profileOptions);

}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        // This is the theme of your application.
        //
        // Try running your application with "flutter run". You'll see the
        // application has a blue toolbar. Then, without quitting the app, try
        // changing the primarySwatch below to Colors.green and then invoke
        // "hot reload" (press "r" in the console where you ran "flutter run",
        // or simply save your changes to "hot reload" in a Flutter IDE).
        // Notice that the counter didn't reset back to zero; the application
        // is not restarted.
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  // This widget is the home page of your application. It is stateful, meaning
  // that it has a State object (defined below) that contains fields that affect
  // how it looks.

  // This class is the configuration for the state. It holds the values (in this
  // case the title) provided by the parent (in this case the App widget) and
  // used by the build method of the State. Fields in a Widget subclass are
  // always marked "final".

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  /// Constructor
  _MyHomePageState() {
    final router = new Router();
    Routes.configureRoutes(router);
    Application.router = router;
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: true,
      debugShowMaterialGrid: false,
      title: EnvironmentUtil.getEnvValueForKey("APP_NAME"),
      theme: ThemeData(
        // This is the theme of your application.
        //
        // Try running your application with "flutter run". You'll see the
        // application has a blue toolbar. Then, without quitting the app, try
        // changing the primarySwatch below to Colors.green and then invoke
        // "hot reload" (press "r" in the console where you ran "flutter run",
        // or simply save your changes to "hot reload" in a Flutter IDE).
        // Notice that the counter didn't reset back to zero; the application
        // is not restarted.
        primarySwatch: Colors.blue,
      ),
      home: new Splash(),
      // Routes
      onGenerateRoute: Application.router.generator,
//        initialRoute: "/",
      // routes: routes
    );
  }
}

The problem I am having is that I am not seeing any logs in sentry at all. Any ideas as to where I am going wrong? Any help would be appreciated.

Thanks

Please upgrade dependencies to use dio package 3.x.x

The latest Dio package published today (9/18/2019) on GitHub and pub.dev is now version 3.0.0. The Dio folks implemented some changes that my team who work for the state of California would like to implement. When trying to perform a "flutter packages get" after updating our Flutter/Dart pubspec.yaml to use "dio: 3.0.0" we receive the following failure:

**[ctma.R204-error-handling-p1.as] flutter packages get
Running "flutter pub get" in ctma.R204-error-handling-p1.as...
Because catcher 0.2.4 depends on dio ^2.1.16 and calapp depends on dio ^3.0.0, catcher 0.2.4 is forbidden.

So, because calapp depends on catcher 0.2.4, version solving failed.
pub get failed (1)
exit code 1**

Thanks in advance.

version of dio.

Can the version of dio be promoted to 2.0.0? Or remove the dependence on dio, thank you very much.

ios error

I take an error when I build app for ios. Can you help me?

Error message is;
'catcher/CatcherPlugin.h' file not found

NoSuchMethodError: The method 'onActionConfirmed' was called on null.

I'm using a slack handler. Normal error message comes with such an error. What could be the reason?

Error:

NoSuchMethodError: The method 'onActionConfirmed' was called on null.
Receiver: null
Tried calling: onActionConfirmed(Instance of 'Report')

Stack trace:

#0 Object.noSuchMethod (dart:core-patch/object_patch.dart:50:5)
#1 ReportMode.onActionConfirmed (package:catcher/model/report_mode.dart:19:23)
#2 SilentReportMode.requestAction (package:catcher/mode/silent_report_mode.dart:9:11)
#3 Catcher._reportError (package:catcher/core/catcher.dart:294:18)

#4 Catcher.reportCheckedError (package:catcher/core/catcher.dart:271:15)
#5 DijitalBasinApp.build (package:dijital_basin_app/main.dart:67:15)
#6 StatelessElement.build (package:flutter/src/widgets/framework.dart:3974:28)
#7 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3924:15)
#8 Element.rebuild (package:flutter/src/widgets/framework.dart:3721:5)
#9 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3907:5)
#10 ComponentElement.mount (package:flutter/src/widgets/framework.dart:3902:5)
#11 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3084:14)
#12 Element.updateChild (package:flutter/src/widgets/framework.dart:2887:12)
#13 RenderObjectToWidgetElement._rebuild (package:flutter/src/widgets/binding.dart:939:16)
#14 RenderObjectToWidgetElement.mount (package:flutter/src/widgets/binding.dart:910:5)
#15 RenderObjectToWidgetAdapter.attachToRenderTree. (package:flutter/src/widgets/binding.dart:856:17)
#16 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2320:19)
#17 RenderObjectToWidgetAdapter.attachToRenderTree (package:flutter/src/widgets/binding.dart:855:13)
#18 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.attachRootWidget (package:flutter/src/widgets/binding.dart:736:7)
#19 runApp (package:flutter/src/widgets/binding.dart:786:7)
#20 Catcher._setupErrorHooks. (package:catcher/core/catcher.dart:129:7)
#21 _AsyncAwaitCompleter.start (dart:async-patch/async_patch.dart:49:6)
#22 Catcher._setupErrorHooks. (package:catcher/core/catcher.dart:128:14)
#23 _rootRun (dart:async/zone.dart:1124:13)
#24 _CustomZone.run (dart:async/zone.dart:1021:19)
#25 _runZoned (dart:async/zone.dart:1516:10)
#26 runZoned (dart:async/zone.dart:1500:12)
#27 Catcher._setupErrorHooks (package:catcher/core/catcher.dart:128:5)
#28 Catcher._configure (package:catcher/core/catcher.dart:55:5)
#29 new Catcher (package:catcher/core/catcher.dart:48:5)
#30 main (package:dijital_basin_app/main.dart:54:3)
#31 _AsyncAwaitCompleter.start (dart:async-patch/async_patch.dart:49:6)
#32 main (package:dijital_basin_app/main.dart:21:12)
#33 _runMainZoned.. (dart:ui/hooks.dart:216:25)
#34 _rootRun (dart:async/zone.dart:1124:13)
#35 _CustomZone.run (dart:async/zone.dart:1021:19)
#36 _runZoned (dart:async/zone.dart:1516:10)
#37 runZoned (dart:async/zone.dart:1500:12)
#38 _runMainZoned. (dart:ui/hooks.dart:208:5)
#39 _startIsolate. (dart:isolate-patch/isolate_patch.dart:301:19)
#40 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:172:12)

Suggestion on allow decoration to DialogReportMode and allow CustomReportMode

Hi Thiyraash here,first of all thanks alot for the library! This library is so good and helpful to log error. I have suggestion regarding the library. Why not you allowed developer to create and add their custom report mode ? This feature can give them more flexibility for them to even use custom dialogs with decoration. Just my suggestion, correct me if I'm wrong.

LocalizationOptions settings are being ignored

The Catcher class is called from the main() function of a Flutter app. The main() function of a Flutter app has no BuildContext which causes the Catcher class to fail to initialize the Catcher private _localizationOptions map to use the custom localization values passed in the debug and release option params. All Catcher dialogs then fail to use the custom localization text.

My debugging research has found that the Catcher private function named _setupLocalization() is checking for a valid BuildContext (_isContextValid()) in order to populate the private _localizationOptions map. However, because a Flutter main() function has no context at startup, the Catcher private function _setupLocalization() never uses the custom LocalizationOptions defined in either the debugConfig or the releaseConfig params passed into the Catcher class instance.

I would love to change this code and create a pull request for you, but unfortunately I do not understand your intent of using a BuildContext during the startup of the app when no BuildContext is available yet.

I've attached a main.dart file (renamed main.txt due to limitations of GitHub) which is nearly an exact copy of the Catcher example file named localization_example.dart. The only thing I changed was to remove the PL localization options and I modified the EN localization content declaration, all functionality is identical to the Catcher example file.

Here's my sample file for you to test (my custom localization content is not displayed):
main.txt

  • Just rename this to main.dart, create a Flutter project, then copy it on top of the default main.dart. Then add the following dependencies to your pubspec.yaml:
    catcher: ^0.2.7
    easy_localization: ^1.3.1

enableCustomParameters:true does not pass customparameters in EmailManualHandler

This is my configuration:

var emailManualHandler = EmailManualHandler(["support@<blabla>"],
      enableDeviceParameters: true,
      enableStackTrace: true,
      enableCustomParameters: true,
      enableApplicationParameters: true,
      sendHtml: true,
      emailTitle: "App crash report",
      emailHeader: "app",
      printLogs: true,);

 return CatcherOptions(DialogReportMode(), [consoleHandler,emailManualHandler],
        localizationOptions: [getDutchLocale()],
        handlerTimeout: 10000,
        customParameters: {"mydomain": app.url,"myuser":app.username});

But there are no customParameters inside the e-mail that is generated. I do have 'Application parameters' and 'Device parameters' but these are missing my custom parameters.

Dio version issue

There is a breaking change in Dio package in version 2.2.1.
Whenever I get the latest, the Dio version 2.2.1 will be downloaded and there will be an error in Catcher due to the breaking change in Dio.

image

flutter_local_notifications version conflict

Because catcher >=0.0.11 depends on flutter_local_notifications ^0.5.1 and my app depends on flutter_local_notifications ^0.7.1+3, catcher >=0.0.11 is forbidden.

So, because my app depends on catcher ^0.1.5, version solving failed.

Do you have a plan to upgrade to latest flutter_local_notifications version?

Allow setting custom navigatorKey

It would be great if we could set a custom GlobalKey<NavigatorState> navigatorKey which defaults to the existing one if not provided. This would make it easier to integrate Catcher with other libraries that also rely on the navigator key.

Explicit exception for internet connectivity issue

Hi @jhomlala ,

I would like to prevent to dialog box with "Accept/Cancel" button when there is internet connection issue. I configure the explicitExceptionHandlersMap as shown below. I tested with my phone by shutting down the wifi and mobile data. It hit an error and pop up the Dialog box with Accept/Cancel button. If I click on the Accept button, the toast will be displayed with my custom message. I expect when hitting error it show straight away show the toast without the dialog box. Did I miss anything?

image

Portuguese adjustments

Small corrections are needed in Portuguese on Catcher 0.2.4:

Please update buildDefaultPortugueseOptions() to:
notificationReportModeTitle: "Erro de aplicação",
(current has an ending "d")

    dialogReportModeTitle: "Erro",
    pageReportModeTitle: "Erro",

(current is "Batido" which is the Crashed translation in case of car crash, or a milk shake, but not used on System errors)

    dialogReportModeDescription:
    pageReportModeDescription:

Please include an "s" on the 2nd "relatório de erro", making it equal to the 1st "relatório de erros"

Thanks!

Failed assertion: !_debugLocked is not true when trying to use PageReportMode

Hi. I'm using 0.0.10 version of this library since it is the latest build before AndroidX changes.

I received this error when trying to use PageModeReport in Catcher.

Dart Error: Unhandled exception:
E/flutter ( 2453): 'package:flutter/src/widgets/navigator.dart': Failed assertion: line 1554 pos 12: '!_debugLocked': is not true.

Steps to reproduce:

  1. Use PageReportMode
  2. Try to return null on any button to produce an error
  3. Exception will be thrown as per log below
  • Report Page doesn't seem to display
  • Still displaying the red page of errors on the app

Seems like the error was thrown due to when Navigator.push is called to display the new page.

Any idea how to fix this issue?

P/s: I have to use an old version of the library because my project is still below Android 28.


main.dart

void main() {
  ReportMode reportMode = PageReportMode(
    titleText: 'Crash Bandicoot',
    showStackTrace: true,
  );
  ConsoleHandler consoleHandler = ConsoleHandler(
    enableApplicationParameters: true,
    enableCustomParameters: true,
    enableStackTrace: true,
    enableDeviceParameters: true
  );
  CatcherOptions debugOptions = CatcherOptions(reportMode, [consoleHandler]);
  print("main.dart catcher debug");
  Catcher(MyApp(), debugConfig: debugOptions);
//  runApp(new MyApp());
}

class MyApp extends StatelessWidget {

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    final app = MaterialApp(
      title: 'My Big Project',
      theme: buildTheme(),
      navigatorKey: Catcher.navigatorKey,
      onGenerateRoute: AppRouter().router().generator,
    );
    return app;
  }
}

Full error log:

E/flutter ( 2453): [ERROR:flutter/shell/common/shell.cc(184)] Dart Error: Unhandled exception:
E/flutter ( 2453): 'package:flutter/src/widgets/navigator.dart': Failed assertion: line 1554 pos 12: '!_debugLocked': is not true.
E/flutter ( 2453): #0 _AssertionError._doThrowNew (dart:core/runtime/liberrors_patch.dart:40:39)
E/flutter ( 2453): #1 _AssertionError._throwNew (dart:core/runtime/liberrors_patch.dart:36:5)
E/flutter ( 2453): #2 NavigatorState.push (package:flutter/src/widgets/navigator.dart:1554:12)
E/flutter ( 2453): #3 Navigator.push (package:flutter/src/widgets/navigator.dart:923:34)
E/flutter ( 2453): #4 PageReportMode.requestAction (package:catcher/mode/page_report_mode.dart:25:15)
E/flutter ( 2453): #5 Catcher._reportError (package:catcher/core/catcher.dart:208:35)
E/flutter ( 2453):
E/flutter ( 2453): #6 Catcher._setupErrorHooks. (package:catcher/core/catcher.dart:113:13)
E/flutter ( 2453):
E/flutter ( 2453): #7 _rootRunBinary (dart:async/zone.dart:1148:13)
E/flutter ( 2453): #8 _RootZone.runBinary (dart:async/zone.dart:1385:12)
E/flutter ( 2453): #9 runZoned. (dart:async/zone.dart:1479:21)
E/flutter ( 2453): #10 _CustomZone.handleUncaughtError (dart:async/zone.dart:1003:19)
E/flutter ( 2453): #11 Future._propagateToListeners (dart:async/future_impl.dart:558:16)
E/flutter ( 2453): #12 Future._completeError (dart:async/future_impl.dart:494:5)
E/flutter ( 2453): #13 _SyncCompleter._completeError (dart:async/future_impl.dart:55:12)
E/flutter ( 2453): #14 _Completer.completeError (dart:async/future_impl.dart:27:5)
E/flutter ( 2453): #15 _AsyncAwaitCompleter.completeError (dart:async/runtime/libasync_patch.dart:40:18)
E/flutter ( 2453): #16 Catcher._setupErrorHooks. (package:catcher/core/catcher.dart)
E/flutter ( 2453):
E/flutter ( 2453): #17 FlutterError.reportError (package:flutter/src/foundation/assertions.dart:408:14)
E/flutter ( 2453): #18 _debugReportException (package:flutter/src/widgets/framework.dart:5000:16)
E/flutter ( 2453): #19 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3724:35)
E/flutter ( 2453): #20 Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
E/flutter ( 2453): #21 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
E/flutter ( 2453): #22 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3848:11)
E/flutter ( 2453): #23 ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
E/flutter ( 2453): #24 Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
E/flutter ( 2453): #25 Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
E/flutter ( 2453): #26 RenderObjectElement.updateChildren (package:flutter/src/widgets/framework.dart:4643:32)
E/flutter ( 2453): #27 MultiChildRenderObjectElement.update (package:flutter/src/widgets/framework.dart:4975:17)
E/flutter ( 2453): #28 Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
E/flutter ( 2453): #29 _TheatreElement.update (package:flutter/src/widgets/overlay.dart:507:16)
E/flutter ( 2453): #30 Element.updateChild (package:flutter/src/widgets/framework.dart:2742:15)
E/flutter ( 2453): #31 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
E/flutter ( 2453): #32 Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
E/flutter ( 2453): #33 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2286:33)
E/flutter ( 2453): #34 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding&WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:676:20)
E/flutter ( 2453): #35 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding&PaintingBinding&SemanticsBinding&RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:219:5)
E/flutter ( 2453): #36 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:990:15)
E/flutter ( 2453): #37 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:930:9)
E/flutter ( 2453): #38 _WidgetsFlutterBinding&BindingBase&GestureBinding&ServicesBinding&SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:842:5)
E/flutter ( 2453): #39 _rootRun (dart:async/zone.dart:1124:13)
E/flutter ( 2453): #40 _CustomZone.run (dart:async/zone.dart:1021:19)
E/flutter ( 2453): #41 _CustomZone.runGuard
E/flutter ( 2453): [ERROR:flutter/shell/common/shell.cc(184)] Dart Error: Unhandled exception:
E/flutter ( 2453): 'package:flutter/src/widgets/navigator.dart': Failed assertion: line 1554 pos 12: '!_debugLocked': is not true.
E/flutter ( 2453): #0 _AssertionError._doThrowNew (dart:core/runtime/liberrors_patch.dart:40:39)
E/flutter ( 2453): #1 _AssertionError._throwNew (dart:core/runtime/liberrors_patch.dart:36:5)
E/flutter ( 2453): #2 NavigatorState.push (package:flutter/src/widgets/navigator.dart:1554:12)
E/flutter ( 2453): #3 Navigator.push (package:flutter/src/widgets/navigator.dart:923:34)
E/flutter ( 2453): #4 PageReportMode.requestAction (package:catcher/mode/page_report_mode.dart:25:15)
E/flutter ( 2453): #5 Catcher._reportError (package:catcher/core/catcher.dart:208:35)
E/flutter ( 2453):
E/flutter ( 2453): #6 Catcher._setupErrorHooks. (package:catcher/core/catcher.dart:113:13)
E/flutter ( 2453):
E/flutter ( 2453): #7 _rootRunBinary (dart:async/zone.dart:1148:13)
E/flutter ( 2453): #8 _RootZone.runBinary (dart:async/zone.dart:1385:12)
E/flutter ( 2453): #9 runZoned. (dart:async/zone.dart:1479:21)
E/flutter ( 2453): #10 _CustomZone.handleUncaughtError (dart:async/zone.dart:1003:19)
E/flutter ( 2453): #11 Future._propagateToListeners (dart:async/future_impl.dart:558:16)
E/flutter ( 2453): #12 Future._completeError (dart:async/future_impl.dart:494:5)
E/flutter ( 2453): #13 _SyncCompleter._completeError (dart:async/future_impl.dart:55:12)
E/flutter ( 2453): #14 _Completer.completeError (dart:async/future_impl.dart:27:5)
E/flutter ( 2453): #15 _AsyncAwaitCompleter.completeError (dart:async/runtime/libasync_patch.dart:40:18)
E/flutter ( 2453): #16 Catcher._setupErrorHooks. (package:catcher/core/catcher.dart)
E/flutter ( 2453):
E/flutter ( 2453): #17 FlutterError.reportError (package:flutter/src/foundation/assertions.dart:408:14)
E/flutter ( 2453): #18 _debugReportException (package:flutter/src/widgets/framework.dart:5000:16)
E/flutter ( 2453): #19 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3724:35)
E/flutter ( 2453): #20 Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
E/flutter ( 2453): #21 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
E/flutter ( 2453): #22 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3848:11)
E/flutter ( 2453): #23 ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
E/flutter ( 2453): #24 Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
E/flutter ( 2453): #25 Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
E/flutter ( 2453): #26 SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4860:14)
E/flutter ( 2453): #27 Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
E/flutter ( 2453): #28 Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
E/flutter ( 2453): #29 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
E/flutter ( 2453): #30 Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
E/flutter ( 2453): #31 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
E/flutter ( 2453): #32 ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
E/flutter ( 2453): #33 Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
E/flutter ( 2453): #34 Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
E/flutter ( 2453): #35 SingleChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:4860:14)
E/flutter ( 2453): #36 Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
E/flutter ( 2453): #37 Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
E/flutter ( 2453): #38 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
E/flutter ( 2453): #39 Element.rebuild (package:flutter/src/widgets/framework.dart:3547:5)
E/flutter ( 2453): #40 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:3701:5)
E/flutter ( 2453): #41 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:3848:11)
E/flutter ( 2453): #42 ComponentElement.mount (package:flutter/src/widgets/framework.dart:3696:5)
E/flutter ( 2453): #43 Element.inflateWidget (package:flutter/src/widgets/framework.dart:2950:14)
E/flutter ( 2453): #44 Element.updateChild (package:flutter/src/widgets/framework.dart:2753:12)
E/flutter ( 2453): #45 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:3732:16)
E/flutter ( 2453): #46 Element.rebuil

Error Widget does not render correctly in dialog

When I add Catcher's error widget to my app, I correctly see this widget when an error occurs while building the main widgets. However, when an error occurs while building a dialog, the widget doesn't seem to render correctly. Below are screenshots of the dialog without and with the error widget installed:

Screenshot 2019-11-28 21 22 21

Screenshot 2019-11-28 21 22 33

Split configuration from runApp

There are situations where you have a lot of configuration before runApp and i think error handling must be the first thing should be configured. Having catcher built in this way doesn't let to catch errors before runApp.

example build error

 Android dependency 'androidx.legacy:legacy-support-core-ui' has different version for the compile (1.0.0-beta01) and runtime (1.0.0) classpath. You should manually set the same version via DependencyResolution

flutter doctor

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, v1.0.0, on Mac OS X 10.14.2 18C54, locale zh-Hans-CN)
[✓] Android toolchain - develop for Android devices (Android SDK 28.0.3)
[✗] iOS toolchain - develop for iOS devices
    ✗ Xcode installation is incomplete; a full installation is necessary for iOS development.
      Download at: https://developer.apple.com/xcode/download/
      Or install Xcode via the App Store.
      Once installed, run:
        sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
    ✗ libimobiledevice and ideviceinstaller are not installed. To install with Brew, run:
        brew update
        brew install --HEAD usbmuxd
        brew link usbmuxd
        brew install --HEAD libimobiledevice
        brew install ideviceinstaller
    ✗ ios-deploy not installed. To install with Brew:
        brew install ios-deploy
    ✗ CocoaPods not installed.
        CocoaPods is used to retrieve the iOS platform side's plugin code that responds to your plugin usage on the Dart side.
        Without resolving iOS dependencies with CocoaPods, plugins will not work on iOS.
        For more info, see https://flutter.io/platform-plugins
      To install:
        brew install cocoapods
        pod setup
[✓] Android Studio (version 3.3)
[!] IntelliJ IDEA Community Edition (version 2018.3.3)
    ✗ Flutter plugin not installed; this adds Flutter specific functionality.
    ✗ Dart plugin not installed; this adds Dart specific functionality.
[!] VS Code (version 1.31.1)
[✓] Connected device (1 available)

! Doctor found issues in 3 categories.

Email Handler - Email Sign-in Attempt Blocked by Google.

Hi Jakub,

I make use of EmailHandler to automatically send emails when errors occur. I set up a Gmail account (linked to my main account), as you suggest, and use its address and password in the app as the sender of the emails. All works fine as far as Catcher is concerned...has been very useful in my testing/debugging.

However, a friend of mine is now testing the app some 9000kms from me. When she hit a bug and the error was caught by Catcher, the sending of the email failed because Google detected it as a suspicious login to the email account and blocked it. Obviously, this is going to be a big problem when the app goes live. I am using Firebase as a backend and have no plans to set up my own server so HTTP handler is a no-go.

I see Catcher as a very important component of my live app and really hope there is a solution.
Do you have any advice on how to overcome this issue?

Internet connection error

It is pretty weird to catch and report the internet connection error, especially when user are in the bad internet reception. For this kind of error, can we just pop up a alert box instead of report page? Is there a way to configure that?

Thanks in advance.

Not compiling with new STABLE channel (mailer dependency failing)

Catcher requires mailer 2.x.x which does not work with flutter 1.8.1 (latest stable).

file:///Users/michal/Development/flutter/.pub-cache/hosted/pub.dartlang.org/mailer-2.5.1/lib/src/smtp/connection.dart:137:33: Error: The argument type 'Utf8Decoder' can't be assigned to the parameter type 'StreamTransformer<Uint8List, dynamic>'.
 - 'Utf8Decoder' is from 'dart:convert'.
 - 'StreamTransformer' is from 'dart:async'.
 - 'Uint8List' is from 'dart:typed_data'.
Try changing the type of the parameter, or casting the argument to 'StreamTransformer<Uint8List, dynamic>'.
        .transform(convert.utf8.decoder)```

If forced to use 3.0.1 fails with many other errors:
```Compiler message:
file:///Users/michal/Development/flutter/.pub-cache/hosted/pub.dartlang.org/catcher-0.1.9/lib/handlers/email_auto_handler.dart:56:37: Error: The type 'SendReport' used in the 'for' loop must implement 'Iterable<dynamic>'.
 - 'SendReport' is from 'package:mailer/src/entities/send_report.dart' ('file:///Users/michal/Development/flutter/.pub-cache/hosted/pub.dartlang.org/mailer-3.0.1/lib/src/entities/send_report.dart').
 - 'Iterable' is from 'dart:core'.
      for (SendReport sendReport in results) {
                                    ^
file:///Users/michal/Development/flutter/.pub-cache/hosted/pub.dartlang.org/catcher-0.1.9/lib/handlers/email_auto_handler.dart:57:51: Error: The getter 'sent' isn't defined for the class 'SendReport'.
 - 'SendReport' is from 'package:mailer/src/entities/send_report.dart' ('file:///Users/michal/Development/flutter/.pub-cache/hosted/pub.dartlang.org/mailer-3.0.1/lib/src/entities/send_report.dart').
Try correcting the name to the name of an existing getter, or defining a getter or field named 'sent'.
        _printLog("Sending status: " + sendReport.sent.toString());
                                                  ^^^^
file:///Users/michal/Development/flutter/.pub-cache/hosted/pub.dartlang.org/catcher-0.1.9/lib/handlers/email_auto_handler.dart:58:24: Error: The getter 'validationProblems' isn't defined for the class 'SendReport'.
 - 'SendReport' is from 'package:mailer/src/entities/send_report.dart' ('file:///Users/michal/Development/flutter/.pub-cache/hosted/pub.dartlang.org/mailer-3.0.1/lib/src/entities/send_report.dart').
Try correcting the name to the name of an existing getter, or defining a getter or field named 'validationProblems'.
        if (sendReport.validationProblems != null &&
                       ^^^^^^^^^^^^^^^^^^
file:///Users/michal/Development/flutter/.pub-cache/hosted/pub.dartlang.org/catcher-0.1.9/lib/handlers/email_auto_handler.dart:59:24: Error: The getter 'validationProblems' isn't defined for the class 'SendReport'.
 - 'SendReport' is from 'package:mailer/src/entities/send_report.dart' ('file:///Users/michal/Development/flutter/.pub-cache/hosted/pub.dartlang.org/mailer-3.0.1/lib/src/entities/send_report.dart').
Try correcting the name to the name of an existing getter, or defining a getter or field named 'validationProblems'.
            sendReport.validationProblems.length > 0) {
                       ^^^^^^^^^^^^^^^^^^
file:///Users/michal/Development/flutter/.pub-cache/hosted/pub.dartlang.org/catcher-0.1.9/lib/handlers/email_auto_handler.dart:60:42: Error: The getter 'validationProblems' isn't defined for the class 'SendReport'.
 - 'SendReport' is from 'package:mailer/src/entities/send_report.dart' ('file:///Users/michal/Development/flutter/.pub-cache/hosted/pub.dartlang.org/mailer-3.0.1/lib/src/entities/send_report.dart').
Try correcting the name to the name of an existing getter, or defining a getter or field named 'validationProblems'.
          for (var problem in sendReport.validationProblems) {
                                         ^^^^^^^^^^^^^^^^^^
file:///Users/michal/Development/flutter/.pub-cache/hosted/pub.dartlang.org/catcher-0.1.9/lib/handlers/email_auto_handler.dart:64:27: Error: The getter 'sent' isn't defined for the class 'SendReport'.
 - 'SendReport' is from 'package:mailer/src/entities/send_report.dart' ('file:///Users/michal/Development/flutter/.pub-cache/hosted/pub.dartlang.org/mailer-3.0.1/lib/src/entities/send_report.dart').
Try correcting the name to the name of an existing getter, or defining a getter or field named 'sent'.
        return sendReport.sent;
                          ^^^^
file:///Users/michal/Development/flutter/.pub-cache/hosted/pub.dartlang.org/mailer-3.0.1/lib/src/smtp/connection.dart:151:32: Error: The argument type 'Utf8Decoder' can't be assigned to the parameter type 'StreamTransformer<Uint8List, dynamic>'.
 - 'Utf8Decoder' is from 'dart:convert'.
 - 'StreamTransformer' is from 'dart:async'.
 - 'Uint8List' is from 'dart:typed_data'.
Try changing the type of the parameter, or casting the argument to 'StreamTransformer<Uint8List, dynamic>'.
        _socket.transform(utf8.decoder).transform(const LineSplitter()));```

ConsoleHandler not triggered.

Hi,
I have debug config like:
CatcherOptions debugOptions = CatcherOptions(PageReportMode(), [ ConsoleHandler(), EmailManualHandler(["[email protected]"])]);

When exception happens the page report opens but there is nothing in console.

Dzieki

type 'Future<dynamic>' is not a subtype of type 'Future<bool>'

hi
getting below and due to below getting duplicate mail also.

I/flutter (17288): Sending email...

E/flutter (17288): [ERROR:flutter/shell/common/shell.cc(184)] Dart Error: Unhandled exception:

E/flutter (17288): type 'Future' is not a subtype of type 'Future'

E/flutter (17288): #0 EmailHandler.handle (package:catcher/handlers/email_handler.dart:37:5)

E/flutter (17288): #1 Catcher.onActionConfirmed (package:catcher/catcher.dart:160:17)

E/flutter (17288): #2 SilentReportMode.requestAction (package:catcher/mode/silent_report_mode.dart:11:22)

E/flutter (17288): #3 Catcher._reportError (package:catcher/catcher.dart:79:16)

E/flutter (17288): #4 _AsyncAwaitCompleter.start (dart:async/runtime/libasync_patch.dart:49:6)

E/flutter (17288): #5 Catcher._reportError (package:catcher/catcher.dart:75:15)

E/flutter (17288): #6 Catcher.reportCheckedError (package:catcher/catcher.dart:72:5)

E/flutter (17288): #7 retrievePlantsPrice (package:plants_price_flutter_app/http/plants_price_http.dart:26:27)

E/flutter (17288): #8 _asyncErrorWrapperHelper. (dart:async/runtime/libasync_patch.dart:84:45)

E/flutter (17288): #9 _RootZone.runBinary (dart:async/zone.dart:1384:54)

E/flutter (17288): #10 _FutureListener.handleError (dart:async/future_impl.dart:143:20)

E/flutter (17288): #11 Future._propagateToListeners.handleError (dart:async/future_impl.dart:654:47)

E/flutter (17288): #12 Future._propagateToListeners (dart:async/future_impl.dart:675:24)

E/flutter (17288): #13 Future._completeError (dart:async/future_impl.dart:494:5)

E/flutter (17288): #14 _SyncCompleter._completeError (dart:async/future_impl.dart:55:12)

E/flutter (17288): #15 _Completer.completeError (dart:async/future_impl.dart:27:5)

E/flutter (17288): #16 _AsyncAwaitCompleter.completeError (dart:async/runtime/libasync_patch.dart:40:18)

E/flutter (17288): #17 _withClient (package:http/http.dart)

E/flutter (17288): #18 _asyncErrorWrapperHelper. (dart:async/runtime/libasync_patch.dart:84:45)

E/flutter (17288): #19 _RootZone.runBinary (dart:async/zone.dart:1384:54)

E/flutter (17288): #20 _FutureListener.handleError (dart:async/future_impl.dart:143:20)

E/flutter (17288): #21 Future._propagateToListeners.handleError (dart:async/future_impl.dart:654:47)

E/flutter (17288): #22 Future._propagateToListeners (dart:async/future_impl.dart:675:24)

E/flutter (17288): #23 Future._completeError (dart:async/future_impl.dart:494:5)

E/flutter (17288): #24 _SyncCompleter._completeError (dart:async/future_impl.dart:55:12)

E/flutter (17288): #25 _Completer.completeError (dart:async/future_impl.dart:27:5)

E/flutter (17288): #26 _AsyncAwaitCompleter.completeError (dart:async/runtime/libasync_patch.dart:40:18)

E/flutter (17288): #27 BaseClient._sendUnstreamed (package:http/src/base_client.dart)

E/flutter (17288): #28 _asyncErrorWrapperHelper. (dart:async/runtime/libasync_patch.dart:84:45)

E/flutter (17288): #29 _RootZone.runBinary (dart:async/zone.dart:1384:54)

E/flutter (17288): #30 _FutureListener.handleError (dart:async/future_impl.dart:143:20)

E/flutter (17288): #31 Future._propagateToListeners.handleError (dart:async/future_impl.dart:654:47)

E/flutter (17288): #32 Future._propagateToListeners (dart:async/future_impl.dart:675:24)

E/flutter (17288): #33 Future._completeError (dart:async/future_impl.dart:494:5)

E/flutter (17288): #34 _SyncCompleter._completeError (dart:async/future_impl.dart:55:12)

E/flutter (17288): #35 _Completer.completeError (dart:async/future_impl.dart:27:5)

E/flutter (17288): #36 _AsyncAwaitCompleter.completeError. (dart:async/runtime/libasync_patch.dart:43:20)

E/flutter (17288): #37 _microtaskLoop (dart:async/schedule_microtask.dart:41:21)

E/flutter (17288): #38 _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)

Reloaded 7 of 616 libraries in 3,470ms.

I/flutter (17288): Sending status: true

Incompatibility with AndroidX

I update your pubspec.yaml to:
fluttertoast: ^2.2.11
device_info: ^0.4.0
package_info: ^0.4.0+1
mailer: ^2.2.0
dio: ^1.0.14
flutter_local_notifications: ^0.5.1
flutter_mailer: ^0.4.0+1
logging: ^0.11.3+2

And works fine with Android 28 :)

Use of Custom Parameters

Hi Jakub,

Great package...thanks for the hard work putting it togther!

One question regarding custom parameters though. Unless I am missing something, they don't seem very useful. Am I right that they can only be set when defining the CatcherOptions in the main.dart file?

I would really like to use these parameters to log the user's id and several other variables at different places in the app but these variables are not available when defining the other Catcher options in main.dart, they only get populated later. Is there a way of setting the custom parameters later in the app (further down the tree) or even changing the ones I wish to log eg. in specific try/catch structures before calling Catcher.reportCheckedError(error, stackTrace)?

Would be great if this is possible. Many thanks.

No named parameter with the name 'connectTimeout'.

Hi @jhomlala ,
After upgrading plugins, app getting below Compile error.

`Compiler message:
/C:/Users/.../AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/catcher-0.2.3/lib/handlers/http_handler.dart:41:19: Error: No named parameter with the name 'connectTimeout'.
          Options(connectTimeout: requestTimeout, headers: headers);
                  ^^^^^^^^^^^^^^
/C:/Users/.../AppData/Roaming/Pub/Cache/hosted/pub.dartlang.org/dio-2.2.1/lib/src/options.dart:139:3: Context: Found this candidate, but the arguments don't match.
  Options({
  ^

Compiler failed on E:\ASW\app_flutter_local\lib\main.dart
Finished with error: Gradle task assembleDebug failed with exit code 1`

We see its due to recent code changes in dio plug in options.dart file. Please fix this issue in http_handler.dart file, to use latest method in dio plugin.

Thank you.

Execute code when exception is thrown?

Sorry for a dumb question, but I can't find this in your docs. Consider I have a music player - how to execute e.g. my pause function, when error is thrown?

How to handle exception thrown while entering in a new page?

I'm new to Flutter, so maybe this is a dummy question. Anyway, I'm trying to understand how to use this great library to handle errors. I'm stucked with this scenario. Suppose you have two different pages, i.e. list & detail. When the user selects an item in the list, the detail screen should appear. But in its build method, something throws an exception. As long as I haven't nothing to show in the detail screen, due to the exception, I would like to show a PageReport and then, when the user accepts/rejects the request to send it, I want to go back to the list. But PageReport uses Navigator.push() and it tries to go back to the "empty detail window".

So I solved the problem extending PageReportMode to override reqyestAction and call the pushReplacement method.

class MyPageReportMode extends PageReportMode {

  MyPageReportMode({showStackTrace}): super(
      showStackTrace: showStackTrace,
  );

  @override
  void requestAction(Report report, BuildContext context) {
    _navigateToPageWidget(report, context);
  }

  _navigateToPageWidget(Report report, BuildContext context) async {
    print("_navigateToPageWidget.pushReplacement");
    await Future.delayed(Duration.zero);
    Navigator.pushReplacement(
      context,
      MaterialPageRoute(builder: (context) => PageWidget(this, report)),
    );
  }
}

Is there a better and simple approach?

Incompatible with firebase_messaging

Great library! However, when using it with firebase_messaging you are unable to receive push notifications. This is due to an issue with the dependency flutter_local_notifications.

server implemenation

i cant run java as the server.

i can make a golang server to match your api if you interested ?

Also to make it easy for lost of people to do the same why dont you change over to use GRPC ?
Dart and java and golang are well supported.
It will also make the runtime leaner.

App goes blank

When working in web, app goes blank on main config. I am able to print in main. but never gets to print on initState.

import 'package:flutter/material.dart';
import 'package:catcher/catcher_plugin.dart';
import 'package:provider/provider.dart';

import 'package:gathered_reporting/gathered_theme.dart';
import 'package:gathered_reporting/providers/auth.dart';
import 'package:gathered_reporting/providers/curriculum.dart';
import 'package:gathered_reporting/providers/group.dart';
import 'package:gathered_reporting/screens/curriculum_dashbaord.dart';
import 'package:gathered_reporting/screens/curriculum_list.dart';
import 'package:gathered_reporting/screens/group_dashboard.dart';
import 'package:gathered_reporting/screens/group_list.dart';
import 'package:gathered_reporting/screens/login.dart';
import 'package:gathered_reporting/screens/main_dashboard.dart';
import 'package:gathered_reporting/widgets/auth_route.dart';

//void main() => runApp(MyApp());

main(){
  CatcherOptions debugOptions = CatcherOptions(DialogReportMode(), [ConsoleHandler()]);
  CatcherOptions releaseOptions = CatcherOptions(DialogReportMode(), [
    EmailManualHandler(["[email protected]"])
  ]);
  print('main');
  Catcher(MyApp(), debugConfig: debugOptions, releaseConfig: releaseOptions);
}
class MyApp extends StatefulWidget {
  // This widget is the root of your application.
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    print('init');
    super.initState();
  }
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        ChangeNotifierProvider.value(value: Auth()),
        ChangeNotifierProxyProvider<Auth, CurriculumProvider>(
          builder: (ctx, auth, p) => CurriculumProvider(auth.token),
          initialBuilder: (BuildContext context) {},
        ),
        ChangeNotifierProxyProvider<Auth, GroupProvider>(
          builder: (ctx, auth, p) => GroupProvider(auth.token),
          initialBuilder: (BuildContext context) {},
        ),
      ],
      child: MaterialApp(
        navigatorKey: Catcher.navigatorKey,
        title: 'Gathered Reporting',
        theme: gatheredTheme,
        home: AuthRoute(MainDashboard()),
        routes: {
          MainDashboard.routeName: (context) => AuthRoute(MainDashboard()),
          CurriculumList.routeName: (context) => AuthRoute(CurriculumList()),
          CurriculumDashboard.routeName: (context) =>AuthRoute(CurriculumDashboard()),
          GroupList.routeName: (context) => AuthRoute(GroupList()),
          GroupDashboard.routeName: (context) => AuthRoute(GroupDashboard()),
          Login.routeName: (context) => Login(),
        },
      ),
    );
  }
}

I get the connection from httphandler but nothing comes in the request

Good afternoon

Guys I have a little problem with catcher and I can not solve I declared my main function as follows in my project:

void main () {
  CatcherOptions debugOptions = CatcherOptions (
    SilentReportMode (),
    [
      ConsoleHandler (),
      HttpHandler (HttpRequestType.post,
          Uri.parse ("http://192.168.0.11/api/appErros.php"),
          headers: {"header": "value"}, requestTimeout: 4000, printLogs: true)
    ],
  );
  CatcherOptions releaseOptions = CatcherOptions (
    SilentReportMode (),
    [
      ConsoleHandler (),
      HttpHandler (HttpRequestType.post,
          Uri.parse ("http://192.168.0.11/api/appErros.php"),
          headers: {"header": "value"}, requestTimeout: 4000, printLogs: true)
    ],
  );

  Catcher (MyApp (), debugConfig: debugOptions, releaseConfig: releaseOptions);
}

I get the request in my api but when I debug my php to check what information he sent in the post to the $ _POST variable that gets this request says it is blank I don't understand what I'm doing wrong below follows a test project I created To understand how the plugin works:

import 'package: flutter / material.dart';
import 'package: catcher / catcher_plugin.dart';

void main () {
  CatcherOptions debugOptions = CatcherOptions (
    SilentReportMode (),
    [
      ConsoleHandler (),
      HttpHandler (HttpRequestType.post,
          Uri.parse ("http://192.168.0.11/api/appErros.php"),
          headers: {"header": "value"}, requestTimeout: 4000, printLogs: true)
    ],
  );
  CatcherOptions releaseOptions = CatcherOptions (
    SilentReportMode (),
    [
      ConsoleHandler (),
      HttpHandler (HttpRequestType.post,
          Uri.parse ("http://192.168.0.11/api/appErros.php"),
          headers: {"header": "value"}, requestTimeout: 4000, printLogs: true)
    ],
  );

  Catcher (MyApp (), debugConfig: debugOptions, releaseConfig: releaseOptions);
}

class MyApp extends StatefulWidget {
  @OverRide
  _MyAppState createState () => _MyAppState ();
}

class _MyAppState extends State {
  @OverRide
  void initState () {
    super.initState ();
  }

  @OverRide
  Build widget (BuildContext context) {
    return MaterialApp (
      navigatorKey: Catcher.navigatorKey,
      home: MyHomePage (title: 'Flutter Demo Home Page'),
    );
  }
}

generateError (String page, String Step) async {
  throw page + "Step:" + step.toString ();
}

/ * class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @OverRide
  Build widget (BuildContext context) {
    return MaterialApp (
      title: 'Flutter Demo',
      theme: ThemeData (
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage (title: 'Flutter Demo Home Page'),
    );
  }
} * /

class MyHomePage extends StatefulWidget {
  MyHomePage ({Key key, this.title}): super (key: key);

  final String title;

  @OverRide
  _MyHomePageState createState () => _MyHomePageState ();
}

class _MyHomePageState extends State {
  int _counter = 0;

  void _incrementCounter () {
    setState (() {
      _counter ++;
    });
  }

  @OverRide
  Build widget (BuildContext context) {
    return Scaffold (
      appBar: AppBar (
        title: Text (widget.title),
      ),
      body: Center (
        child: Column (
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text (
              'You have pushed the button this many times:',
            ),
            Text (
              '$ _counter',
              style: Theme.of (context) .textTheme.display1,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton (
        onPressed: () {
          generateError ('Home', 'Test');
          // throw 'Error';
        },
        tooltip: 'Increment',
        child: Icon (Icons.add),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}

Using Catcher with flutter_bloc causes infinite report loop

I have an app that uses flutter_bloc for state management and Catcher for error reporting.

When an exception is thrown in a BlocBuilder's builder method (with PageReportMode enabled), Catcher opens the report page infinitely many times, because apparently the builder keeps rebuilding. I'm not 100% sure whose at fault here, but I experienced this issue with Catcher's navigation only.

Here's a screen capture showing the behavior.

Here's the corresponding minimal example.

Let me know if I can do anything to help debug this. I'm not flutter savvy enough for such kinds of problems... not even sure where to start, honestly.

EmailManualHandler does not work correct with Microsoft Outlook on Android.

We use the EmailManualHandler and on Android the handler works fine, but not with all e-mail handlers. In the Yahoo mail app and Gmail mail app the catcher mail is correctly composed, but when we use Microsoft Outlook as the mail app, the composed mail is missing all the html inside the mail body.

We tried this on several different phones, all same result.

How can we fix this? Or is there some way to add these logs as a seperate attachment?

    var emailManualHandler = EmailManualHandler(["support@xxxx"],
      enableDeviceParameters: true,
      enableStackTrace: true,
      enableCustomParameters: true,
      enableApplicationParameters: true,
      sendHtml: true,
      emailTitle: "App crash report",
      emailHeader: "app",
      printLogs: true,);
    return CatcherOptions(DialogReportMode(), [emailManualHandler],
        localizationOptions: [getDutchLocale()],
        handlerTimeout: 10000,
        customParameters: {"appdomain": app.url});

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.