我正在尝试使用颤振谷歌支付插件在我的颤振应用程序中设置付款处理。处理付款时,会出现 Google Pay 窗口,我可以选择一张卡并成功处理付款。然后,Google Pay 窗口关闭,应用程序崩溃并显示以下跟踪信息。
2020-01-04 15:44:32.699 8789-8789/? E/.grocery_bulle: Unknown bits set in runtime_flags: 0x8000
2020-01-04 15:44:42.205 8789-8789/com.phrasing.grocery_bullet E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.phrasing.grocery_bullet, PID: 8789
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=991, result=-1, data=Intent { (has extras) }} to activity {com.phrasing.grocery_bullet/com.phrasing.grocery_bullet.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
at android.app.ActivityThread.deliverResults(ActivityThread.java:4845)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4886)
at android.app.servertransaction.ActivityResultItem.execute(ActivityResultItem.java:51)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
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
at snail.app.flutter.google.pay.FlutterGooglePayPlugin.callToDartOnPaymentSuccess(FlutterGooglePayPlugin.java:126)
at snail.app.flutter.google.pay.FlutterGooglePayPlugin.onActivityResult(FlutterGooglePayPlugin.java:291)
at io.flutter.embedding.engine.FlutterEnginePluginRegistry$FlutterEngineActivityPluginBinding.onActivityResult(FlutterEnginePluginRegistry.java:634)
at io.flutter.embedding.engine.FlutterEnginePluginRegistry.onActivityResult(FlutterEnginePluginRegistry.java:367)
at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onActivityResult(FlutterActivityAndFragmentDelegate.java:546)
at io.flutter.embedding.android.FlutterActivity.onActivityResult(FlutterActivity.java:594)
at android.app.Activity.dispatchActivityResult(Activity.java:8110)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4838)
这是代码
class _CartState extends State<Cart> {
CartModel _cartModel;
@override
Widget build(BuildContext context) {
_cartModel = Provider.of<CartModel>(context);
return Container(
color: Colors.white,
child: Column(
children: [
Expanded(
child: Padding(
padding: const EdgeInsets.all(32),
child: _CartContents(),
),
),
Divider(height: 10, color: Colors.black),
_CartTotal(),
SizedBox(
width: double.infinity,
child: RaisedButton(
onPressed: () async {
await _makeStripePayment(context);
},
child: Text('Buy', style: Theme.of(context).textTheme.display4),
color: Colors.lightGreen,
textColor: Colors.white,
),
),
],
),
);
}
_makeStripePayment(BuildContext context) async {
var environment = 'rest'; // or 'production'
if (!(await FlutterGooglePay.isAvailable(environment))) {
Scaffold.of(context).showSnackBar(SnackBar(
content: Text('Google pay is not available'),
));
} else {
PaymentItem pm = PaymentItem(
stripeToken: 'pk_test_1IV5H8NyhgGYOeK6vYV3Qw8f',
stripeVersion: "2018-11-08",
currencyCode: "usd",
amount: "0.10",
gateway: 'stripe');
FlutterGooglePay.makePayment(pm).then((Result result) {
if (result.status == ResultStatus.SUCCESS) {
Map<Item, int> cartItems = _cartModel.getCart();
for (Item item in cartItems.keys) {
int itemCountRequested = cartItems[item];
Firestore.instance.runTransaction((transaction) async {
DocumentSnapshot freshSnap =
await transaction.get(item.reference);
int itemCountAvailable = freshSnap['count'];
int itemCountSent = itemCountAvailable >= itemCountRequested
? itemCountRequested
: itemCountAvailable;
int itemCountRemaining = itemCountAvailable - itemCountSent;
await transaction.update(freshSnap.reference, {
'count': itemCountRemaining,
});
});
}
_cartModel.resetCart();
Scaffold.of(context).showSnackBar(
SnackBar(content: Text('Your items are on the way!!')));
}
}).catchError((dynamic error) {
Scaffold.of(context).showSnackBar(SnackBar(
content: Text(error.toString()),
));
});
}
}
}