pikaju / flutter-braintree

Flutter plugin that wraps the native Braintree SDKs. Enables payments with credit cards, PayPal, Google Pay and more.
https://pub.dev/packages/flutter_braintree
MIT License
64 stars 123 forks source link

App crashed: Failure delivering result ResultInfo #12

Closed peternagy1332 closed 1 year ago

peternagy1332 commented 4 years ago

Hi! I've tried to set up the plugin, but when I dismiss the drop-in dialog, I get the exception in the title. The content of main.dart is the same as here: https://github.com/Pikaju/FlutterBraintree/blob/master/example/lib/main.dart

I've added only one dependency: flutter_braintree: ^0.5.3. By default it is an AndroidX application.

Flutter version: v1.13.6

app/build.gradle relevant part:

defaultConfig {
    applicationId "com.example.flutterbraintreetest"
    minSdkVersion 21
    targetSdkVersion 28
    versionCode flutterVersionCode.toInteger()
    versionName flutterVersionName
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

Full log:

Launching lib\main.dart on SM G950F in debug mode... √ Built build\app\outputs\apk\debug\app-debug.apk. D/FlutterActivity(19229): Using the launch theme as normal theme. D/FlutterActivityAndFragmentDelegate(19229): Setting up FlutterEngine. D/FlutterActivityAndFragmentDelegate(19229): No preferred FlutterEngine was provided. Creating a new FlutterEngine for this FlutterFragment. D/FlutterActivityAndFragmentDelegate(19229): Attaching FlutterEngine to the Activity that owns this Fragment. D/FlutterView(19229): Attaching to a FlutterEngine: io.flutter.embedding.engine.FlutterEngine@fe084b2 D/FlutterActivityAndFragmentDelegate(19229): Executing Dart entrypoint: main, and sending initial route: / D/InputMethodManager(19229): prepareNavigationBarInfo() DecorView@bd3c368[MainActivity] D/InputMethodManager(19229): getNavigationBarColor() -855310 D/InputMethodManager(19229): prepareNavigationBarInfo() DecorView@bd3c368[MainActivity] D/InputMethodManager(19229): getNavigationBarColor() -855310 V/InputMethodManager(19229): Starting input: tba=com.example.flutterbraintreetest ic=null mNaviBarColor -855310 mIsGetNaviBarColorSuccess true , NavVisible : true , NavTrans : false D/InputMethodManager(19229): startInputInner - Id : 0 I/InputMethodManager(19229): startInputInner - mService.startInputOrWindowGainedFocus D/InputTransport(19229): Input channel constructed: fd=95 D/InputMethodManager(19229): prepareNavigationBarInfo() DecorView@bd3c368[MainActivity] D/InputMethodManager(19229): getNavigationBarColor() -855310 V/InputMethodManager(19229): Starting input: tba=com.example.flutterbraintreetest ic=null mNaviBarColor -855310 mIsGetNaviBarColorSuccess true , NavVisible : true , NavTrans : false D/InputMethodManager(19229): startInputInner - Id : 0 D/ViewRootImpl@a7d66bdMainActivity: ViewPostIme pointer 0 D/ViewRootImpl@a7d66bdMainActivity: ViewPostIme pointer 1 W/ActivityThread(19229): handleWindowVisibility: no activity for token android.os.BinderProxy@f1f7e62 I/DecorView(19229): createDecorCaptionView >> DecorView@7de77ba[], isFloating: false, isApplication: true, hasWindowDecorCaption: false, hasWindowControllerCallback: true W/erbraintreetes(19229): Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (light greylist, reflection) W/erbraintreetes(19229): Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (light greylist, reflection) D/NetworkSecurityConfig(19229): No Network Security Config specified, using platform default I/System.out(19229): (HTTPLog)-Static: isSBSettingEnabled false I/System.out(19229): (HTTPLog)-Static: isSBSettingEnabled false I/System.out(19229): (HTTPLog)-Static: isSBSettingEnabled false I/System.out(19229): (HTTPLog)-Static: isSBSettingEnabled false D/InputTransport(19229): Input channel constructed: fd=112 D/ViewRootImpl@7c23aa5DropInActivity: setView = DecorView@7de77ba[DropInActivity] TM=true MM=false D/ViewRootImpl@a7d66bdMainActivity: MSG_WINDOW_FOCUS_CHANGED 0 1 D/InputMethodManager(19229): prepareNavigationBarInfo() DecorView@bd3c368[MainActivity] D/InputMethodManager(19229): getNavigationBarColor() -855310 D/ViewRootImpl@7c23aa5DropInActivity: dispatchAttachedToWindow D/ViewRootImpl@7c23aa5DropInActivity: Relayout returned: old=[0,0][720,1480] new=[0,0][720,1480] result=0x7 surface={valid=true 491558723584} changed=true D/mali_winsys(19229): EGLint new_window_surface(egl_winsys_display , void , EGLSurface, EGLConfig, egl_winsys_surface , EGLBoolean) returns 0x3000 D/OpenGLRenderer(19229): eglCreateWindowSurface = 0x725adb0a80, 0x72732ee010 D/ViewRootImpl@7c23aa5DropInActivity: MSG_RESIZED: frame=Rect(0, 0 - 720, 1480) ci=Rect(0, 48 - 0, 30) vi=Rect(0, 48 - 0, 30) or=1 D/ViewRootImpl@7c23aa5DropInActivity: MSG_WINDOW_FOCUS_CHANGED 1 1 D/InputMethodManager(19229): prepareNavigationBarInfo() DecorView@7de77ba[DropInActivity] D/InputMethodManager(19229): getNavigationBarColor() -855310 D/InputMethodManager(19229): prepareNavigationBarInfo() DecorView@7de77ba[DropInActivity] D/InputMethodManager(19229): getNavigationBarColor() -855310 V/InputMethodManager(19229): Starting input: tba=com.example.flutterbraintreetest ic=null mNaviBarColor -855310 mIsGetNaviBarColorSuccess true , NavVisible : true , NavTrans : false D/InputMethodManager(19229): startInputInner - Id : 0 I/InputMethodManager(19229): startInputInner - mService.startInputOrWindowGainedFocus D/InputTransport(19229): Input channel constructed: fd=115 D/InputTransport(19229): Input channel destroyed: fd=95 I/System.out(19229): (HTTPLog)-Static: isSBSettingEnabled false I/System.out(19229): (HTTPLog)-Static: isSBSettingEnabled false I/System.out(19229): (HTTPLog)-Static: isSBSettingEnabled false I/System.out(19229): (HTTPLog)-Static: isSBSettingEnabled false I/System.out(19229): (HTTPLog)-Static: isSBSettingEnabled false I/System.out(19229): (HTTPLog)-Static: isSBSettingEnabled false I/System.out(19229): (HTTPLog)-Static: isSBSettingEnabled false I/System.out(19229): (HTTPLog)-Static: isSBSettingEnabled false D/ViewRootImpl@7c23aa5DropInActivity: Relayout returned: old=[0,0][720,1480] new=[0,0][720,1480] result=0x1 surface={valid=true 491558723584} changed=false D/AbsListView(19229): in onLayout changed D/**MAGNES DEBUGGING MESSAGE****(19229): DeviceInfoRequest returned PayPal-Debug-Id: 88a0f0d82d083 D/ViewRootImpl@7c23aa5DropInActivity: ViewPostIme key 0 D/ViewRootImpl@7c23aa5DropInActivity: ViewPostIme key 1 D/AndroidRuntime(19229): Shutting down VM E/AndroidRuntime(19229): FATAL EXCEPTION: main E/AndroidRuntime(19229): Process: com.example.flutterbraintreetest, PID: 19229 E/AndroidRuntime(19229): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=4919, result=0, data=null} to activity {com.example.flutterbraintreetest/com.example.flutterbraintreetest.MainActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'void io.flutter.plugin.common.MethodChannel$Result.success(java.lang.Object)' on a null object reference E/AndroidRuntime(19229): at android.app.ActivityThread.deliverResults(ActivityThread.java:4610) E/AndroidRuntime(19229): at android.app.ActivityThread.handleSendResult(ActivityThread.java:4652) E/AndroidRuntime(19229): at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:49) E/AndroidRuntime(19229): at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) E/AndroidRuntime(19229): at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) E/AndroidRuntime(19229): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1948) E/AndroidRuntime(19229): at android.os.Handler.dispatchMessage(Handler.java:106) E/AndroidRuntime(19229): at android.os.Looper.loop(Looper.java:214) E/AndroidRuntime(19229): at android.app.ActivityThread.main(ActivityThread.java:7050) E/AndroidRuntime(19229): at java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime(19229): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494) E/AndroidRuntime(19229): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965) E/AndroidRuntime(19229): Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'void io.flutter.plugin.common.MethodChannel$Result.success(java.lang.Object)' on a null object reference E/AndroidRuntime(19229): at com.example.flutter_braintree.FlutterBraintreeDropIn.onActivityResult(FlutterBraintreeDropIn.java:161) E/AndroidRuntime(19229): at io.flutter.embedding.engine.FlutterEnginePluginRegistry$FlutterEngineActivityPluginBinding.onActivityResult(FlutterEnginePluginRegistry.java:634) E/AndroidRuntime(19229): at io.flutter.embedding.engine.FlutterEnginePluginRegistry.onActivityResult(FlutterEnginePluginRegistry.java:367) E/AndroidRuntime(19229): at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onActivityResult(FlutterActivityAndFragmentDelegate.java:546) E/AndroidRuntime(19229): at io.flutter.embedding.android.FlutterActivity.onActivityResult(FlutterActivity.java:594) E/AndroidRuntime(19229): at android.app.Activity.dispatchActivityResult(Activity.java:7762) E/AndroidRuntime(19229): at android.app.ActivityThread.deliverResults(ActivityThread.java:4603) E/AndroidRuntime(19229): ... 11 more I/Process (19229): Sending signal. PID: 19229 SIG: 9 Lost connection to device. Exited (sigterm)

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.flutterbraintreetest"> <application android:name="io.flutter.app.FlutterApplication" android:label="flutterbraintreetest" android:icon="@mipmap/ic_launcher"> <activity android:name=".MainActivity" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize">

    </activity>

    <activity android:name="com.braintreepayments.api.BraintreeBrowserSwitchActivity"
        android:launchMode="singleTask">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="${applicationId}.braintree" />
        </intent-filter>
    </activity>

    <meta-data android:name="com.google.android.gms.wallet.api.enabled" android:value="true"/>

    <!-- Don't delete the meta-data below.
         This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
    <meta-data
        android:name="flutterEmbedding"
        android:value="2" />
</application>

Thanks and regards, Peter

peternagy1332 commented 4 years ago

I've uploaded the repo, I hope it helps investingating the issue. I suggest taking a look at the last commit. Thank you!! https://github.com/peternagy1332/flutterbraintree

peternagy1332 commented 4 years ago

I've found the problem. The onActivityResult function in BraintreePaymentPlugin.java is called twice when I dismiss the drop in dialog and that time the activeResult field was null. I've created a PR with a temporary fix, please test it out and merge it. https://github.com/Pikaju/FlutterBraintree/pull/13