instamojo 1.0.0+2 copy "instamojo: ^1.0.0+2" to clipboard
instamojo: ^1.0.0+2 copied to clipboard

Instamojo SDK from Instamojo ported to flutter as plugin with all necessary features and with Null Safety which is implementation by EvilRATT

Instamojo Plugin #

License pub package

Plugin to implement Instamojo Payment Gateway on your flutter app

Note: This plugin is still under active development, and some Zoom features might not be available yet. We are working to add more features. Feedback, Pull Requests are always welcome.

Note: For Android and iOS Build import.

import 'package:instamojo/instamojo.dart';

Features #

  • ✅ Based on Instamojo API
  • ✅ Null Safety.
  • ✅ Stream Payment Status with Proper Message.
  • ✅ UPI Payment Supported.
  • ✅ Login Error with proper Error codes.
  • ✅ All payment options accepted including wallets.
  • ✅ iOS & Android Support.
  • ✅ Web Support.
  • ✅ Customized Styling.
  • ❌ UI Improvements.
  • ❌ UPI App Integration.

Installation #

First, add instamojo: ^1.0.0+2 as a dependency in your pubspec.yaml file.

Note: For Live Mode SDK Server setup is required. You can find sample sdk server code below.

Examples #

Instamojo Screen For Payment Initialization Test Mode #

class InstamojoScreen extends StatefulWidget {
  final CreateOrderBody? body;
  final String? orderCreationUrl;
  final bool? isLive;

  const InstamojoScreen(
      {Key? key, this.body, this.orderCreationUrl, this.isLive = false})
      : super(key: key);

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

class _InstamojoScreenState extends State<InstamojoScreen>
    implements InstamojoPaymentStatusListener {
  @override
  Widget build(BuildContext context) {
    SystemChrome.setPreferredOrientations([
      DeviceOrientation.portraitUp,
      DeviceOrientation.portraitDown,
    ]);
    return Scaffold(
        appBar: AppBar(
          title: const Text('Instamojo Flutter'),
        ),
        body: SafeArea(
            child: FlutterInstamojo(
          isConvenienceFeesApplied: false,
          listener: this,
          environment: widget.isLive! ? Environment.PRODUCTION : Environment.TEST,
          apiCallType: ApiCallType.createOrder(
              createOrderBody: widget.body,
              orderCreationUrl: widget.orderCreationUrl),
          stylingDetails: StylingDetails(
              buttonStyle: ButtonStyling(
                  buttonColor: Colors.amber,
                  buttonTextStyle: const TextStyle(
                    color: Colors.black,
                  )),
              listItemStyle: ListItemStyle(
                  borderColor: Colors.grey,
                  textStyle: const TextStyle(color: Colors.black, fontSize: 18),
                  subTextStyle: const TextStyle(color: Colors.grey, fontSize: 14)),
              loaderColor: Colors.amber,
              inputFieldTextStyle: InputFieldTextStyle(
                  textStyle: const TextStyle(color: Colors.black, fontSize: 18),
                  hintTextStyle: const TextStyle(color: Colors.grey, fontSize: 14),
                  labelTextStyle: const TextStyle(color: Colors.grey, fontSize: 14)),
              alertStyle: AlertStyle(
                headingTextStyle: const TextStyle(color: Colors.black, fontSize: 14),
                messageTextStyle: const TextStyle(color: Colors.black, fontSize: 12),
                positiveButtonTextStyle:
                    const TextStyle(color: Colors.redAccent, fontSize: 10),
                negativeButtonTextStyle:
                    const TextStyle(color: Colors.amber, fontSize: 10),
              )),
        )));
  }

  @override
  void paymentStatus({Map<String, String>? status}) {
    Navigator.pop(context, status);
  }
}

Instamojo Screen For Payment Initialization Live Mode #

For Live Mode Need to Invoke ApiCallType.startPayment(orderId: "")

class InstamojoScreen extends StatefulWidget {
  final CreateOrderBody? body;
  final String? orderCreationUrl;
  final bool? isLive;
  final String name;
  final String orderId;

  const InstamojoScreen(
      {Key? key, this.body, this.orderCreationUrl, this.isLive = false, this.name, this.orderId})
      : super(key: key);

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

class _InstamojoScreenState extends State<InstamojoScreen>
    implements InstamojoPaymentStatusListener {
  @override
  Widget build(BuildContext context) {
    SystemChrome.setPreferredOrientations([
      DeviceOrientation.portraitUp,
      DeviceOrientation.portraitDown,
    ]);
    return Scaffold(
        appBar: AppBar(
          title: const Text('Instamojo Flutter'),
        ),
        body: SafeArea(
            child: FlutterInstamojo(
          isConvenienceFeesApplied: false,
          listener: this,
          environment:Environment.PRODUCTION,
          apiCallType: ApiCallType.startPayment(orderId: widget.orderId), 
          stylingDetails: StylingDetails(
              buttonStyle: ButtonStyling(
                  buttonColor: Colors.amber,
                  buttonTextStyle: const TextStyle(
                    color: Colors.black,
                  )),
              listItemStyle: ListItemStyle(
                  borderColor: Colors.grey,
                  textStyle: const TextStyle(color: Colors.black, fontSize: 18),
                  subTextStyle: const TextStyle(color: Colors.grey, fontSize: 14)),
              loaderColor: Colors.amber,
              inputFieldTextStyle: InputFieldTextStyle(
                  textStyle: const TextStyle(color: Colors.black, fontSize: 18),
                  hintTextStyle: const TextStyle(color: Colors.grey, fontSize: 14),
                  labelTextStyle: const TextStyle(color: Colors.grey, fontSize: 14)),
              alertStyle: AlertStyle(
                headingTextStyle: const TextStyle(color: Colors.black, fontSize: 14),
                messageTextStyle: const TextStyle(color: Colors.black, fontSize: 12),
                positiveButtonTextStyle:
                    const TextStyle(color: Colors.redAccent, fontSize: 10),
                negativeButtonTextStyle:
                    const TextStyle(color: Colors.amber, fontSize: 10),
              )),
        )));
  }

  @override
  void paymentStatus({Map<String, String>? status}) {
    print(status);
  }
}

Invoke Payment For Testing Purpose Only #

startInstamojo() async {
    dynamic result = await Navigator.push(
        context,
        MaterialPageRoute(
            builder: (ctx) => InstamojoScreen(
                  isLive: false,
                  body: CreateOrderBody(
                      buyerName: "EvilRAT Technologies",
                      buyerEmail: "ceo@evilrattechnologies.com",
                      buyerPhone: "+91 7004491831",
                      amount: "300",
                      description: "Test Payment"),
                  orderCreationUrl:
                      "https://sample-sdk-server.instamojo.com/order", // The sample server of instamojo to create order id.
                )));

    setState(() {
      _paymentResponse = result.toString();
    });
}

Invoke Payment For Live Mode #

startInstamojo() async {
    dynamic result = await Navigator.push(
        context,
        MaterialPageRoute(
            builder: (ctx) => InstamojoScreen(
                  isLive: true,
                  name: widget.package["name"].toString(),
                  orderId: orderId,
                  isLive: true,
                )
        )
    );

    setState(() {
      _paymentResponse = result.toString();
    });
}

Getting Started With Flutter #

For help getting started with Flutter, view our online documentation, which offers tutorials, samples, guidance on mobile development, and a full API reference.

11
likes
120
points
0
downloads

Publisher

verified publisherevilrattechnologies.com

Weekly Downloads

Instamojo SDK from Instamojo ported to flutter as plugin with all necessary features and with Null Safety which is implementation by EvilRATT

Repository (GitHub)
View/report issues

Documentation

API reference

License

BSD-3-Clause (license)

Dependencies

decimal, equatable, flutter, flutter_bloc, flutter_inappwebview, flutter_web_plugins, http, meta

More

Packages that depend on instamojo