razorpay / razorpay-flutter

Razorpay Flutter Plugin
MIT License
106 stars 147 forks source link

Unsupported operation: Platform._operatingSystem #340

Open tanmaya-arora opened 1 year ago

tanmaya-arora commented 1 year ago

Hi Developers,

I have developed a Flutter project with the following dependencies:

environment:
  sdk: '>=2.12.0 <3.0.0'

dependencies:
  flutter:
    sdk: flutter

  cupertino_icons: ^1.0.2
  http: ^0.13.1
  provider: ^5.0.0
  audioplayers: ^0.18.2
  font_awesome_flutter: any
  google_fonts: 4.0.4
  dob_input_field: any
  fluttertoast: any
  razorpay_flutter: 1.3.2

dev_dependencies:
  flutter_test:
    sdk: flutter

flutter:
  uses-material-design: true

I am trying to add Razorpay payment gateway for the cart screen. The cart screen code is as follows:

import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
import 'package:fluttertoast/fluttertoast.dart';
import 'package:razorpay_flutter/razorpay_flutter.dart';

Future<Cart> fetchCartItems() async {
  final response = await http
      .get(Uri.parse('https://lobster-app-et3xm.ondigitalocean.app/api/cart/'));

  if (response.statusCode == 200) {
    // If the server did return a 200 OK response,
    // then parse the JSON.
    var respBody = jsonDecode(response.body);

    return Cart.fromJson(respBody['data']);
  } else {
    // If the server did not return a 200 OK response,
    // then throw an exception.
    throw Exception('Failed to load cart');
  }
}

class Cart {

  String name, price;

  Cart({
    required this.name,
    required this.price,
  });

  factory Cart.fromJson(List<dynamic> json) {

  if(json!=null){
    for(var i=0;i<json.length;i++){
      return Cart(name: json[i]['package'] ?? '', price: json[i]['total_price'] ?? '');
    }
  }
  return Cart(name: '', price: '');
  }
}

class CartPage extends StatefulWidget {
  const CartPage({Key? key});

  @override
  State<CartPage> createState() => CartPageState();
}

class CartPageState extends State<CartPage> {

  late Future<Cart> fetchCartData;
  final _razorPay = Razorpay();

  String _getReference() {
    var now = DateTime.now();
    return 'ch_${now.microsecondsSinceEpoch}';
  }

  void openCheckout() async {
    var options = {
      'key': 'rzp_test_InWjgP1w3i87qB',
      'amount': 2000,
      'name': 'RWA',
      'description': 'Fine T-Shirt',
      'prefill': {'contact': '8888888888', 'email': 'test@razorpay.com'},
      'external': {
        'wallets': ['paytm','phonepe','tez']
      },
    };
    _razorPay.open(options);
  }

  @override
  void initState() {
    super.initState();
    fetchCartData = fetchCartItems();
  }

  @override
  void dispose() {
    super.dispose();
    _razorPay?.clear();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
            appBar: AppBar(
                title: const Text("RWA Cart"),
                backgroundColor: Theme.of(context).colorScheme.inversePrimary,
                automaticallyImplyLeading: false,
            ),
            body: Center(
                child: FutureBuilder<Cart>(
                    future: fetchCartData,
                    builder: (context, snapshot) {
                        if(snapshot.hasData){
                            return Column(
                                mainAxisAlignment: MainAxisAlignment.center,
                                children: [
                                    Row(
                                        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                                        children: [
                                            Column(
                                                mainAxisAlignment: MainAxisAlignment.center,
                                                children: [
                                                    Text('Name:            ', style: TextStyle(fontSize: 16))]
                                                ),
                                            Column(
                                                mainAxisAlignment: MainAxisAlignment.center,
                                                children: [
                                                    Text(snapshot.data?.name?.toString() ?? "No data available", style: TextStyle(fontSize: 16))
                                                ]
                                            )
                                        ]
                                    ),
                                    Text(''),
                                    Row(
                                        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                                        children: [
                                            Column(
                                                mainAxisAlignment: MainAxisAlignment.center,
                                                children: [
                                                    Text('Price (in Rs.): ', style: TextStyle(fontSize: 16))
                                                ]
                                            ),
                                            Column(
                                                mainAxisAlignment: MainAxisAlignment.center,
                                                children: [
                                                    Text(snapshot.data?.price?.toString() ?? "0", style: TextStyle(fontSize: 16))
                                                ]
                                            )
                                        ]
                                    ),
                                    ElevatedButton(
                                        child: Text('Purchase'),
                                        onPressed: openCheckout
                                    )
                                ]
                            );
                        } else if (snapshot.hasError) {
                            return Text(snapshot.error?.toString() ?? "Unknown error", style: TextStyle(fontSize: 16));
                        }

                        return const CircularProgressIndicator();
                    }
                )
            )
    );
}
} 

Please help.

Flutter Version :

image

Steps To Reproduce

  1. Write the dependencies in pubspec.yaml
  2. Design the cart screen using the cart screen code.
  3. Inspect the browser window
  4. Run the code and click on purchase button.

I get the following error.

errors.dart:294 Uncaught (in promise) Error: Unsupported operation: Platform._operatingSystem
    at Object.throw_ [as throw] (errors.dart:294:49)
    at _Platform._operatingSystem (io_patch.dart:244:5)
    at get operatingSystem [as operatingSystem] (platform_impl.dart:56:40)
    at get operatingSystem (platform.dart:83:44)
    at desc.get [as operatingSystem] (operations.dart:1220:8)
    at get isAndroid (platform.dart:156:50)
    at desc.get [as isAndroid] (operations.dart:1220:8)
    at razorpay_flutter.Razorpay.new.open (razorpay_flutter.dart:48:17)
    at open.next (<anonymous>)
    at runBody (async_patch.dart:84:54)
    at Object._async [as async] (async_patch.dart:127:5)
    at razorpay_flutter.Razorpay.new.open (razorpay_flutter.dart:35:12)
    at cart_screen.CartPageState.new.openCheckout (cart_screen.dart:76:15)
    at openCheckout.next (<anonymous>)
    at runBody (async_patch.dart:84:54)
    at Object._async [as async] (async_patch.dart:127:5)
    at cart_screen.CartPageState.new.openCheckout (cart_screen.dart:65:20)
    at ink_well._InkResponseState.new.handleTap (ink_well.dart:1154:21)
    at tap.TapGestureRecognizer.new.invokeCallback (recognizer.dart:275:24)
    at tap.TapGestureRecognizer.new.handleTapUp (tap.dart:654:11)
    at [_checkUp] (tap.dart:311:5)
    at tap.TapGestureRecognizer.new.handlePrimaryPointer (tap.dart:244:7)
    at tap.TapGestureRecognizer.new.handleEvent (recognizer.dart:630:9)
    at [_dispatch] (pointer_router.dart:98:12)
    at pointer_router.dart:143:9
    at LinkedMap.new.forEach (linked_hash_map.dart:21:13)
    at [_dispatchEventToRoutes] (pointer_router.dart:141:17)
    at pointer_router.PointerRouter.new.route (pointer_router.dart:127:7)
    at binding$5.WidgetsFlutterBinding.new.handleEvent (binding.dart:488:19)
    at binding$5.WidgetsFlutterBinding.new.dispatchEvent (binding.dart:468:14)
    at binding$5.WidgetsFlutterBinding.new.dispatchEvent (binding.dart:333:11)
    at [_handlePointerEventImmediately] (binding.dart:413:7)
    at binding$5.WidgetsFlutterBinding.new.handlePointerEvent (binding.dart:376:5)
    at [_flushPointerEventQueue] (binding.dart:323:7)
    at [_handlePointerDataPacket] (binding.dart:292:9)
    at Object.invoke1 (platform_dispatcher.dart:1319:13)
    at _engine.EnginePlatformDispatcher.new.invokeOnPointerDataPacket (platform_dispatcher.dart:303:5)
    at [_onPointerData] (pointer_binding.dart:168:39)
    at pointer_binding.dart:791:20
    at pointer_binding.dart:720:14
    at loggedHandler (pointer_binding.dart:317:16)
    at Object._checkAndCall (operations.dart:574:37)
    at Object.dcall (operations.dart:579:39)
    at ret (js_allow_interop_patch.dart:17:11)
vivekshindhe commented 1 year ago

@tanmaya-arora for flutter version you can use flutter --version command.

What platform are you trying to run the project on? Android?

tanmaya-arora commented 1 year ago

@vivekshindhe Web

Flutter version is 3.13.0-0.3.pre

vivekshindhe commented 1 year ago

razorpay-flutter package currently does not support web.