flutter_sslcommerz 2.5.1 copy "flutter_sslcommerz: ^2.5.1" to clipboard
flutter_sslcommerz: ^2.5.1 copied to clipboard

Official Flutter plugin for SSLCommerz integration.

example/lib/main.dart

// ignore_for_file: deprecated_member_use
import 'package:flutter/material.dart';
import 'package:flutter_sslcommerz/model/SSLCAdditionalInitializer.dart';
import 'package:flutter_sslcommerz/model/SSLCCustomerInfoInitializer.dart';
import 'package:flutter_sslcommerz/model/SSLCEMITransactionInitializer.dart';
import 'package:flutter_sslcommerz/model/SSLCSdkType.dart';
import 'package:flutter_sslcommerz/model/SSLCShipmentInfoInitializer.dart';
import 'package:flutter_sslcommerz/model/SSLCTransactionInfoModel.dart';
import 'package:flutter_sslcommerz/model/SSLCommerzInitialization.dart';
import 'package:flutter_sslcommerz/model/SSLCurrencyType.dart';
import 'package:flutter_sslcommerz/sslcommerz.dart';
import 'package:fluttertoast/fluttertoast.dart';

enum SdkType { live, testbox }

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(home: SSLCommerzScreen());
  }
}

class SSLCommerzScreen extends StatefulWidget {
  const SSLCommerzScreen({super.key});

  @override
  // ignore: library_private_types_in_public_api
  _SSLCommerzScreenState createState() => _SSLCommerzScreenState();
}

class _SSLCommerzScreenState extends State<SSLCommerzScreen> {
  final _formKey = GlobalKey<FormState>();
  final Map<String, dynamic> _formData = {};
  SdkType _sdkType = SdkType.live;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('SSLCommerz')),
      body: SingleChildScrollView(
        padding: const EdgeInsets.all(16.0),
        child: Form(
          key: _formKey,
          child: Column(
            children: [
              _buildTextField(
                label: "Store ID",
                initialValue: "demotest",
                onSaved: (value) => _formData['store_id'] = value,
                validator: _validateNotEmpty,
              ),
              _buildTextField(
                label: "Store Password",
                initialValue: "qwerty",
                onSaved: (value) => _formData['store_password'] = value,
                validator: _validateNotEmpty,
              ),
              _buildRadioButtons(),
              _buildTextField(
                label: "Phone Number",
                keyboardType: TextInputType.phone,
                onSaved: (value) => _formData['phone'] = value,
              ),
              _buildTextField(
                label: "Payment Amount",
                initialValue: "10",
                keyboardType: TextInputType.numberWithOptions(decimal: true),
                onSaved:
                    (value) =>
                        _formData['amount'] = double.tryParse(value ?? '0'),
                validator: _validateNotEmpty,
              ),
              _buildTextField(
                label: "Enter Multi Card",
                onSaved: (value) => _formData['multicard'] = value,
              ),
              ElevatedButton(
                onPressed: _onPayNowPressed,
                child: Text("Pay now"),
              ),
            ],
          ),
        ),
      ),
    );
  }

  Widget _buildTextField({
    required String label,
    String? initialValue,
    TextInputType keyboardType = TextInputType.text,
    FormFieldSetter<String>? onSaved,
    FormFieldValidator<String>? validator,
  }) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: TextFormField(
        initialValue: initialValue,
        keyboardType: keyboardType,
        decoration: InputDecoration(
          border: OutlineInputBorder(borderRadius: BorderRadius.circular(8.0)),
          hintText: label,
        ),
        onSaved: onSaved,
        validator: validator,
      ),
    );
  }

  Widget _buildRadioButtons() {
    return Row(
      children: [
        _buildRadio(SdkType.testbox, "TESTBOX"),
        _buildRadio(SdkType.live, "LIVE"),
      ],
    );
  }

  Widget _buildRadio(SdkType type, String label) {
    return Row(
      children: [
        Radio(
          value: type,
          groupValue: _sdkType,
          activeColor: Colors.blue,
          onChanged: (value) {
            setState(() => _sdkType = value as SdkType);
          },
        ),
        Text(label),
      ],
    );
  }

  String? _validateNotEmpty(String? value) {
    return (value == null || value.isEmpty) ? "Please input value" : null;
  }

  Future<void> _onPayNowPressed() async {
    if (_formKey.currentState != null && _formKey.currentState!.validate()) {
      _formKey.currentState!.save();
      _startSSLCommerzTransaction();
    }
  }

  Future<void> _startSSLCommerzTransaction() async {
    Sslcommerz sslcommerz = Sslcommerz(
      initializer: SSLCommerzInitialization(
        ipn_url: "www.ipnurl.com",
        multi_card_name: _formData['multicard'],
        currency: SSLCurrencyType.BDT,
        product_category: "Food",
        sdkType:
            _sdkType == SdkType.testbox
                ? SSLCSdkType.TESTBOX
                : SSLCSdkType.LIVE,
        store_id: _formData['store_id'],
        store_passwd: _formData['store_password'],
        total_amount: _formData['amount'],
        tran_id: "1231123131212",
      ),
    );

    sslcommerz
        .addShipmentInfoInitializer(
          sslcShipmentInfoInitializer: SSLCShipmentInfoInitializer(
            shipmentMethod: "yes",
            numOfItems: 5,
            shipmentDetails: ShipmentDetails(
              shipAddress1: "Ship address 1",
              shipCity: "Faridpur",
              shipCountry: "Bangladesh",
              shipName: "Ship name 1",
              shipPostCode: "7860",
            ),
          ),
        )
        .addCustomerInfoInitializer(
          customerInfoInitializer: SSLCCustomerInfoInitializer(
            customerState: "Chattogram",
            customerName: "Abu Sayed Chowdhury",
            customerEmail: "abc@gmail.com",
            customerAddress1: "Anderkilla",
            customerCity: "Chattogram",
            customerPostCode: "200",
            customerCountry: "Bangladesh",
            customerPhone: _formData['phone'],
          ),
        )
        .addEMITransactionInitializer(
          sslcemiTransactionInitializer: SSLCEMITransactionInitializer(
            emi_options: 1,
            emi_max_list_options: 9,
            emi_selected_inst: 0,
          ),
        )
        .addAdditionalInitializer(
          sslcAdditionalInitializer: SSLCAdditionalInitializer(
            valueA: "value a ",
            valueB: "value b",
            valueC: "value c",
            valueD: "value d",
            extras: {
              "disbursements_acct":
                  '[{"sslcz_ref_id":"servicecharge","amount":9.80},{"sslcz_ref_id":"schoolpay","amount":"0.20"}]'
                      .toString(),
            },
          ),
        );
    SSLCTransactionInfoModel result = await sslcommerz.payNow();
    _displayPaymentStatus(result);
  }

  void _displayPaymentStatus(SSLCTransactionInfoModel result) {
    String message;
    Color bgColor;

    switch (result.status?.toLowerCase()) {
      case "failed":
        message = "Transaction Failed";
        bgColor = Colors.red;
        break;
      case "closed":
        message = "SDK Closed by User";
        bgColor = Colors.orange;
        break;
      default:
        message =
            "Transaction ${result.status} - Amount: ${result.amount ?? 0}";
        bgColor = Colors.green;
    }

    Fluttertoast.showToast(
      msg: message,
      toastLength: Toast.LENGTH_SHORT,
      gravity: ToastGravity.CENTER,
      backgroundColor: bgColor,
      textColor: Colors.white,
      fontSize: 16.0,
    );
  }
}
51
likes
130
points
654
downloads

Publisher

unverified uploader

Weekly Downloads

Official Flutter plugin for SSLCommerz integration.

Homepage

Documentation

API reference

License

unknown (license)

Dependencies

flutter, json_annotation, plugin_platform_interface

More

Packages that depend on flutter_sslcommerz