Flutter json.decode issue <!doctype html> error
2,454
This error happens when the server return an html
body or some error occurred on the server side while handling your request. Try to use debugger and watch the response
of the request to see if response status
is 200
and also check the response body
to see what the server is sending for your request.
Also try to wrap you jsonDecode
inside try-catch
to handle future exceptions.
Author by
chetan suri
Updated on December 21, 2022Comments
-
chetan suri over 1 year
I am trying to integrate stripe payment in my Flutter project with backend Laravel. For some reason I am getting error at json.decode.
E/flutter (10999): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: FormatException: Unexpected character (at character 1) E/flutter (10999): <!doctype html>
FlatButton( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(7.0)), color: Colors.redAccent, onPressed: () { var payment = Payment(); payment.name = _cardHolderName.text; payment.email = _cardHolderEmail.text; payment.cardNumber = _cardNumber.text; payment.expiryMonth = _expiryMonth.text; payment.expiryYear = _expiryYear.text; payment.cvcNumber = _cvcNumber.text; _makePayment(context, payment); }, child: Text('Make Payment', style: TextStyle(color: Colors.white)), ),
void _makePayment(BuildContext context, Payment payment) async { PaymentService _paymentService = PaymentService(); var paymentData = await _paymentService.makePayment(payment); var result = json.decode(paymentData.body); if (result['result'] == true) { CartService _cartService = CartService(); this.widget.cartItems.forEach((cartItem){ _cartService.deleteCartItemById(cartItem.productId); }); _showPaymentSuccessMessage(context); Timer(Duration(seconds: 2), () { Navigator.pop(context); Navigator.push( context, MaterialPageRoute(builder: (context) => HomeScreen())); }); } }
Payment Service
class PaymentService { Repository _repository; PaymentService(){ _repository = Repository(); } makePayment(Payment payment) async { return await _repository.httpPost('make-payment', payment.toJson()); } }
Laravel Code
public function makePayment(Request $request) { \Stripe\Stripe::setApiKey('sk_test_7422pw1lMsdRfN2FaPmfFKlt00AtiIJD9O'); $token = Token::create([ 'card'=>[ 'number'=>$request-input('cardNumber'), 'exp_month'=>$request-input('expiryMonth'), 'exp_year'=>$request-input('expiryYear'), 'cvc'=>$request-input('cvcNumber') ] ]); \Stripe\PaymentIntent::create([ 'amount' => 1000, 'currency' => 'inr', 'source' => $token, 'receipt_email' => $request->input('email'), ]); }
Error
E/flutter (10999): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: FormatException: Unexpected character (at character 1) E/flutter (10999): <!doctype html> E/flutter (10999): ^ E/flutter (10999): E/flutter (10999): #0 _ChunkedJsonParser.fail (dart:convert-patch/convert_patch.dart:1394:5) E/flutter (10999): #1 _ChunkedJsonParser.parseNumber (dart:convert-patch/convert_patch.dart:1261:9) E/flutter (10999): #2 _ChunkedJsonParser.parse (dart:convert-patch/convert_patch.dart:926:22) E/flutter (10999): #3 _parseJson (dart:convert-patch/convert_patch.dart:31:10) E/flutter (10999): #4 JsonDecoder.convert (dart:convert/json.dart:495:36) E/flutter (10999): #5 JsonCodec.decode (dart:convert/json.dart:153:41) E/flutter (10999): #6 _PaymentScreenState._makePayment (package:factory2homes/screens/payment_screen.dart:160:23) E/flutter (10999): <asynchronous suspension> E/flutter (10999): #7 _PaymentScreenState.build.<anonymous closure> (package:factory2homes/screens/payment_screen.dart:142:23) E/flutter (10999): #8 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:706:14) E/flutter (10999): #9 _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:789:36) E/flutter (10999): #10 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:182:24) E/flutter (10999): #11 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:486:11) E/flutter (10999): #12 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:264:5) E/flutter (10999): #13 BaseTapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:236:7) E/flutter (10999): #14 GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:156:27) E/flutter (10999): #15 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:222:20) E/flutter (10999): #16 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:198:22) E/flutter (10999): #17 GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:156:7) E/flutter (10999): #18 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:102:7) E/flutter (10999): #19 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:86:7) E/flutter (10999): #20 _rootRunUnary (dart:async/zone.dart:1138:13) E/flutter (10999): #21 _CustomZone.runUnary (dart:async/zone.dart:1031:19) E/flutter (10999): #22 _CustomZone.runUnaryGuarded (dart:async/zone.dart:933:7) E/flutter (10999): #23 _invoke1 (dart:ui/hooks.dart:273:10) E/flutter (10999): #24 _dispatchPointerDataPacket (dart:ui/hooks.dart:182:5) E/flutter (10999):