Deposits One Click Checkout SDK

pub package

The Deposits One-Click Checkout SDK allows allows merchants to quickly enroll, onboard, and checkout customers. We provide powerful and customizable UI screens that can be used out-of-the-box to collect payments from your users with or without a deposit account

deposits-one-click-checkout-flutter_cover

Features

Simplified Security: We make it simple for you to collect sensitive data such as credit card numbers, ACH details and remain PCI compliant. This means the sensitive data is sent directly to Deposits instead of passing through your server.

Payment methods: Accepting card and ACH payments helps your business expand its global reach and improve checkout conversion.

Native UI: We provide native screens and elements to securely collect payment details on Android and iOS.

Installation

pubspec.yaml :


dependencies:

flutter:

sdk: flutter

deposits_oneclick_checkout: <Latest version>

Terminal :


flutter pub add deposits_one_click_checkout

Requirements

Android

This plugin requires several changes to be able to work on Android devices. Please make sure you follow all these steps:

  1. Use Android 5.0 (API level 21) and above

  2. Rebuild the app, as the above changes don't update with hot reload

iOS

Compatible with apps targeting iOS 10 or above.

Web

We do not support the web via this plugin for now you can use our JS SDK instead, you can check an example of how to use the JS SDK here

Usage

The library provides a UI componet for accepting card payments.

Example


// main.dart(import this)

import  'package:deposits_oneclick_checkout/app/modules/deposits_oneclick_checkout_button.dart';

  
  

void  main() async {

WidgetsFlutterBinding.ensureInitialized();

runApp(PaymentScreen());

}

  

// payment_screen.dart

class  PaymentScreen  extends  StatelessWidget {

  

@override

Widget  build(BuildContext context) {

return  Scaffold(

appBar: AppBar(),

body: Column(

crossAxisAlignment: CrossAxisAlignment.start,

mainAxisAlignment: MainAxisAlignment.center,

children: <Widget>[

const  Text(

'Fill the form below.',

),

Container(

child: TextFormField(

readOnly: isEmailExist,

controller: userEmailController,

validator: (val) {

if (val == null || val.trim().isEmpty) {

return  'Please enter your email address';

}

// Check if the entered email has the right format

if (!RegExp(r'\S+@\S+\.\S+').hasMatch(val)) {

return  'Please enter a valid email address';

}

// Return null if the entered email is valid

return  null;

},

keyboardType: TextInputType.emailAddress,

textInputAction: TextInputAction.next,

decoration: const  InputDecoration(

hintText: "Enter Email",

border: OutlineInputBorder(),

enabledBorder: OutlineInputBorder(

borderSide: BorderSide(color: Color(0xFFC0C4C9)),

),

disabledBorder: OutlineInputBorder(

borderSide: BorderSide(color: Color(0xFFC0C4C9)),

),

focusedBorder: OutlineInputBorder(

borderSide: BorderSide(color: Color(0xFFC0C4C9)),

),

),

),

margin: const  EdgeInsets.only(

top: (30.0)

)

),

Container(

child: TextFormField(

validator: (val) => val!.isEmpty ? 'Amount is required!' : null,

keyboardType: const  TextInputType.numberWithOptions(decimal: true),

inputFormatters: [

CurrencyTextInputFormatter(

decimalDigits: 2,

symbol: '\$ ',

)

],

textInputAction: TextInputAction.done,

controller: amountController,

decoration: const  InputDecoration(

hintText: "Enter Amount",

border: OutlineInputBorder(),

enabledBorder: OutlineInputBorder(

borderSide: BorderSide(color: Color(0xFFC0C4C9)),

),

disabledBorder: OutlineInputBorder(

borderSide: BorderSide(color: Color(0xFFC0C4C9)),

),

focusedBorder: OutlineInputBorder(

borderSide: BorderSide(color: Color(0xFFC0C4C9)),

),

),

),

margin: const  EdgeInsets.only(top: (10.0))

),

Container(

child: FlatButton(

minWidth: MediaQuery.of(context).size.width,

height: 56,

color: Colors.blue, //Color(0xFF0DB9E9),

child: const  Text(

'Checkout',

style: TextStyle(color: Colors.white, fontSize: 16)

),

onPressed: () async {

if (formKey.currentState!.validate()) {

depositsCheckout(

context,

ButtonConfig(
buttonColor: '0xFF0DB9E9'.
textColor: Colors.white,

amount: double.parse(amountController.text.toString()

.replaceAll('\$', '')

.toString()),

),

initialScreen: MyHomePage(

title: 'One Click-Checkout Demo',

),

userEmail: userEmailController.text.toString(),

subClientApiKey: 'money-by-deposits-user',

envMode: true,

chargeFundsResponse: (response) {

// manage process after the transaction is completed

},

);

}

},

),

margin: const  EdgeInsets.only(top: (30.0))

)

],

)

);

}

}

Deposit One Click Checkout SDK initialization

To initialize Deposit One Click Checkout SDK in your Flutter app, use the pay base class.

pay offers context, buttonConfig, initialScreen, envMode, chargeFundsResponse and userEmail, subClientApiKey. Only userEmail, subClientApiKey, envMode, chargeFundsResponse and buttonConfig (which has the following params : amount required,buttonColor required hexadecimal string , textStyle, height, minwidth , etc as customizable widgets ) is required. envMode is either true or false as a bool and chargeFundsResponse is a callback function to manage or run other processes after payment has been made abd you can check if it was successful or not. You have to change your subClientApiKey as the envMode changes and you can get the Key from the test or live console and the URL to the console is listed in the next section

Dart API

deposits

The library offers several methods to handle deposits checkout related actions:


void  depositsCheckout();

class  ButtonConfig()

The example app offers examples on how to use these methods.

Run the example app

  • Navigate to the example folder cd example

  • Install the dependencies

  • flutter pub get

  • Set up env vars for the flutter app and a local backend.

  • Get your test API keys

  • Get your live API keys

  • Start the example

  • Terminal 1: flutter run

Contributing

Only members of the deposits team can contribute to this. You can create an issue if you find a bug or have any challenge using this SDK.

Libraries

add_address
add_address_binding
add_address_controller
add_bank
add_bank_binding
add_bank_controller
add_bank_response
add_new_card
add_new_card_binding
add_new_card_controller
address
address_binding
address_controller
all_accounts_response
app_colors
app_images
app_spacing
app_text_style
auth_user_response
bank_account
card
card_input_formatter
charge_funds_response
city_model
confirm_otp
confirm_otp_binding
confirm_otp_controller
constants
country_model
create_address_response
custom_appbar_widget
custom_back_button
custom_close_button
custom_country_state_picker
custom_dropdown_textfield
custom_elevated_button
custom_horizontal_line
custom_image_loader
custom_inkwell_widget
custom_internet_retry
custom_listtile_widget
custom_rich_text_widget
custom_row_text_widget
custom_svg_image_loader
custom_text
custom_text_button
custom_text_field_widget
custom_text_tag
delete_address_response
delete_funds_response
deposits_oneclick_checkout
deposits_oneclick_checkout_button
deposits_oneclick_checkout_controller
dimens
dio_client
edit_address
edit_address_binding
edit_address_controller
edit_profile
edit_profile_binding
edit_profile_controller
exports
extensions
fingerprintjs
get_address_response
get_funding_response
get_single_address_response
issuer
linked
linked_binding
linked_controller
linked_details
linked_details_binding
linked_details_controller
linked_response
logging
login
login_binding
login_controller
manage_deposit_id
manage_deposit_id_binding
manage_deposit_id_controller
me_response
meta_data_json
number_formatter
pay_with_bank_card
pay_with_bank_card_binding
pay_with_bank_card_controller
pay_with_card
pay_with_card_binding
pay_with_card_controller
payment
payment_binding
payment_card
payment_controller
place_service
places_response
profile
profile_binding
profile_controller
resend_otp
revoke_access_response
set_default_address_response
state_model
storage
strings
successful
successful_controller
theme
tokenise_card
update_address_response
update_profile_response
utils
validators
verify_user_response