From 9dc33da1b1e5443ad12b5d4aedb9755ba5c10a2b Mon Sep 17 00:00:00 2001 From: Jeremiah Oluwaseun Erinola <53568423+jeremiahseun@users.noreply.github.com> Date: Wed, 19 Apr 2023 10:28:08 +0100 Subject: [PATCH 1/6] Change Transaction Charge Type value - I changed transactionChargeType as a String to an enum. It will be easier for someone who is not familiar with the type of transaction charge type, to be able to use it without confusion. - I also noticed that the previous Contribution guidelines link is preventing everyone from accessing it. So I changed it to the Contribution guidelines available. --- README.md | 2 +- example/pubspec.lock | 200 ++++++++++++------- lib/core/flutterwave.dart | 38 ++-- lib/models/subaccount.dart | 6 +- lib/utils/enums/transaction_charge_type.dart | 5 + pubspec.lock | 194 +++++++++++------- 6 files changed, 279 insertions(+), 166 deletions(-) create mode 100644 lib/utils/enums/transaction_charge_type.dart diff --git a/README.md b/README.md index bf6e4f4..3909f6d 100644 --- a/README.md +++ b/README.md @@ -103,7 +103,7 @@ You can also follow us [@FlutterwaveEng](https://twitter.com/FlutterwaveEng) and ## Contribution guidelines -Read more about our community contribution guidelines [here](https://www.notion.so/flutterwavego/Community-contribution-guide-ca1d8a876ba04d45ab4b663c758ae42a). +Read more about our community contribution guidelines [here](#contribution-guidelines). ## License diff --git a/example/pubspec.lock b/example/pubspec.lock index 37f22cd..5405721 100644 --- a/example/pubspec.lock +++ b/example/pubspec.lock @@ -5,147 +5,168 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - url: "https://pub.dartlang.org" + sha256: "4826f97faae3af9761f26c52e56b2aa5ffd18d2c1721d984ad85137721c25f43" + url: "https://pub.dev" source: hosted version: "31.0.0" analyzer: dependency: transitive description: name: analyzer - url: "https://pub.dartlang.org" + sha256: "7337610c3f9cd13e6b7c6bb0f410644091cf63c9a1436e73352a70f3286abb03" + url: "https://pub.dev" source: hosted version: "2.8.0" args: dependency: transitive description: name: args - url: "https://pub.dartlang.org" + sha256: b003c3098049a51720352d219b0bb5f219b60fbfb68e7a4748139a06a5676515 + url: "https://pub.dev" source: hosted version: "2.3.1" async: dependency: transitive description: name: async - url: "https://pub.dartlang.org" + sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + url: "https://pub.dev" source: hosted - version: "2.8.2" + version: "2.10.0" boolean_selector: dependency: transitive description: name: boolean_selector - url: "https://pub.dartlang.org" + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" build: dependency: transitive description: name: build - url: "https://pub.dartlang.org" + sha256: "3fbda25365741f8251b39f3917fb3c8e286a96fd068a5a242e11c2012d495777" + url: "https://pub.dev" source: hosted version: "2.3.1" built_collection: dependency: transitive description: name: built_collection - url: "https://pub.dartlang.org" + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" source: hosted version: "5.1.1" built_value: dependency: transitive description: name: built_value - url: "https://pub.dartlang.org" + sha256: "169565c8ad06adb760c3645bf71f00bff161b00002cace266cad42c5d22a7725" + url: "https://pub.dev" source: hosted version: "8.4.3" characters: dependency: transitive description: name: characters - url: "https://pub.dartlang.org" + sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.1" charcode: dependency: transitive description: name: charcode - url: "https://pub.dartlang.org" + sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306 + url: "https://pub.dev" source: hosted version: "1.3.1" cli_util: dependency: transitive description: name: cli_util - url: "https://pub.dartlang.org" + sha256: "66f86e916d285c1a93d3b79587d94bd71984a66aac4ff74e524cfa7877f1395c" + url: "https://pub.dev" source: hosted version: "0.3.5" clock: dependency: transitive description: name: clock - url: "https://pub.dartlang.org" + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.1.1" code_builder: dependency: transitive description: name: code_builder - url: "https://pub.dartlang.org" + sha256: "0d43dd1288fd145de1ecc9a3948ad4a6d5a82f0a14c4fdd0892260787d975cbe" + url: "https://pub.dev" source: hosted version: "4.4.0" collection: dependency: transitive description: name: collection - url: "https://pub.dartlang.org" + sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + url: "https://pub.dev" source: hosted - version: "1.16.0" + version: "1.17.0" convert: dependency: transitive description: name: convert - url: "https://pub.dartlang.org" + sha256: "1be13198012c1d5bc042dc40ad1d7f16cbd522350984c0c1abf471d6d7e305c6" + url: "https://pub.dev" source: hosted version: "3.1.0" crypto: dependency: transitive description: name: crypto - url: "https://pub.dartlang.org" + sha256: cf75650c66c0316274e21d7c43d3dea246273af5955bd94e8184837cd577575c + url: "https://pub.dev" source: hosted version: "3.0.1" cupertino_icons: dependency: "direct main" description: name: cupertino_icons - url: "https://pub.dartlang.org" + sha256: a937da4c006989739ceb4d10e3bd6cce64ca85d0fe287fc5b2b9f6ee757dcee6 + url: "https://pub.dev" source: hosted version: "0.1.3" dart_style: dependency: transitive description: name: dart_style - url: "https://pub.dartlang.org" + sha256: "6e8086e1d3c2f6bc15056ee248c4ddc48c2bc71287c0961bf801a08633ed4333" + url: "https://pub.dev" source: hosted version: "2.2.1" fake_async: dependency: transitive description: name: fake_async - url: "https://pub.dartlang.org" + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.3.1" file: dependency: transitive description: name: file - url: "https://pub.dartlang.org" + sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + url: "https://pub.dev" source: hosted version: "6.1.4" fixnum: dependency: transitive description: name: fixnum - url: "https://pub.dartlang.org" + sha256: "04be3e934c52e082558cc9ee21f42f5c1cd7a1262f4c63cd0357c08d5bba81ec" + url: "https://pub.dev" source: hosted version: "1.0.1" flutter: @@ -157,7 +178,8 @@ packages: dependency: transitive description: name: flutter_inappwebview - url: "https://pub.dartlang.org" + sha256: f73505c792cf083d5566e1a94002311be497d984b5607f25be36d685cf6361cf + url: "https://pub.dev" source: hosted version: "5.7.2+3" flutter_test: @@ -174,7 +196,8 @@ packages: dependency: transitive description: name: fluttertoast - url: "https://pub.dartlang.org" + sha256: b3ae793108ad2a7e8f2fea91ca5bb2ba7ef03621c4d9ed7a92fe3391da64c000 + url: "https://pub.dev" source: hosted version: "8.0.8" flutterwave_standard: @@ -188,105 +211,120 @@ packages: dependency: transitive description: name: glob - url: "https://pub.dartlang.org" + sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" + url: "https://pub.dev" source: hosted version: "2.1.1" http: dependency: transitive description: name: http - url: "https://pub.dartlang.org" + sha256: b6f1f143a71e1fe1b34670f1acd6f13960ade2557c96b87e127e0cf661969791 + url: "https://pub.dev" source: hosted version: "0.13.3" http_parser: dependency: transitive description: name: http_parser - url: "https://pub.dartlang.org" + sha256: e362d639ba3bc07d5a71faebb98cde68c05bfbcfbbb444b60b6f60bb67719185 + url: "https://pub.dev" source: hosted version: "4.0.0" js: dependency: transitive description: name: js - url: "https://pub.dartlang.org" + sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + url: "https://pub.dev" source: hosted - version: "0.6.4" + version: "0.6.5" logging: dependency: transitive description: name: logging - url: "https://pub.dartlang.org" + sha256: c0bbfe94d46aedf9b8b3e695cf3bd48c8e14b35e3b2c639e0aa7755d589ba946 + url: "https://pub.dev" source: hosted version: "1.1.0" matcher: dependency: transitive description: name: matcher - url: "https://pub.dartlang.org" + sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + url: "https://pub.dev" source: hosted - version: "0.12.11" + version: "0.12.13" material_color_utilities: dependency: transitive description: name: material_color_utilities - url: "https://pub.dartlang.org" + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + url: "https://pub.dev" source: hosted - version: "0.1.4" + version: "0.2.0" meta: dependency: transitive description: name: meta - url: "https://pub.dartlang.org" + sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + url: "https://pub.dev" source: hosted - version: "1.7.0" + version: "1.8.0" mockito: dependency: "direct dev" description: name: mockito - url: "https://pub.dartlang.org" + sha256: "6668f23c57bbf3857437c1683e8e0bef7e1077537593293e1fc8d1099fcc1981" + url: "https://pub.dev" source: hosted version: "5.0.15" modal_bottom_sheet: dependency: transitive description: name: modal_bottom_sheet - url: "https://pub.dartlang.org" + sha256: ef533916a2c3089571c32bd34e410faca77a6849a3f28f748e0794525c5658a0 + url: "https://pub.dev" source: hosted version: "2.1.2" package_config: dependency: transitive description: name: package_config - url: "https://pub.dartlang.org" + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" source: hosted version: "2.1.0" path: dependency: transitive description: name: path - url: "https://pub.dartlang.org" + sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + url: "https://pub.dev" source: hosted - version: "1.8.1" + version: "1.8.2" pedantic: dependency: transitive description: name: pedantic - url: "https://pub.dartlang.org" + sha256: "67fc27ed9639506c856c840ccce7594d0bdcd91bc8d53d6e52359449a1d50602" + url: "https://pub.dev" source: hosted version: "1.11.1" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - url: "https://pub.dartlang.org" + sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a + url: "https://pub.dev" source: hosted version: "2.1.3" pub_semver: dependency: transitive description: name: pub_semver - url: "https://pub.dartlang.org" + sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" + url: "https://pub.dev" source: hosted version: "2.1.3" sky_engine: @@ -298,114 +336,130 @@ packages: dependency: transitive description: name: source_gen - url: "https://pub.dartlang.org" + sha256: "00f8b6b586f724a8c769c96f1d517511a41661c0aede644544d8d86a1ab11142" + url: "https://pub.dev" source: hosted version: "1.2.2" source_span: dependency: transitive description: name: source_span - url: "https://pub.dartlang.org" + sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + url: "https://pub.dev" source: hosted - version: "1.8.2" + version: "1.9.1" stack_trace: dependency: transitive description: name: stack_trace - url: "https://pub.dartlang.org" + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.11.0" stream_channel: dependency: transitive description: name: stream_channel - url: "https://pub.dartlang.org" + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" string_scanner: dependency: transitive description: name: string_scanner - url: "https://pub.dartlang.org" + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.2.0" term_glyph: dependency: transitive description: name: term_glyph - url: "https://pub.dartlang.org" + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.1" test_api: dependency: transitive description: name: test_api - url: "https://pub.dartlang.org" + sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + url: "https://pub.dev" source: hosted - version: "0.4.9" + version: "0.4.16" typed_data: dependency: transitive description: name: typed_data - url: "https://pub.dartlang.org" + sha256: "53bdf7e979cfbf3e28987552fd72f637e63f3c8724c9e56d9246942dc2fa36ee" + url: "https://pub.dev" source: hosted version: "1.3.0" uuid: dependency: "direct main" description: name: uuid - url: "https://pub.dartlang.org" + sha256: "0ea20bfc625477e17f08a92d112272a071609b275ce4ca10ad853e1426ca3758" + url: "https://pub.dev" source: hosted version: "3.0.4" vector_math: dependency: transitive description: name: vector_math - url: "https://pub.dartlang.org" + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.4" watcher: dependency: transitive description: name: watcher - url: "https://pub.dartlang.org" + sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" + url: "https://pub.dev" source: hosted version: "1.0.2" webview_flutter: dependency: transitive description: name: webview_flutter - url: "https://pub.dartlang.org" + sha256: "392c1d83b70fe2495de3ea2c84531268d5b8de2de3f01086a53334d8b6030a88" + url: "https://pub.dev" source: hosted version: "3.0.4" webview_flutter_android: dependency: transitive description: name: webview_flutter_android - url: "https://pub.dartlang.org" + sha256: "8b3b2450e98876c70bfcead876d9390573b34b9418c19e28168b74f6cb252dbd" + url: "https://pub.dev" source: hosted version: "2.10.4" webview_flutter_platform_interface: dependency: transitive description: name: webview_flutter_platform_interface - url: "https://pub.dartlang.org" + sha256: "812165e4e34ca677bdfbfa58c01e33b27fd03ab5fa75b70832d4b7d4ca1fa8cf" + url: "https://pub.dev" source: hosted version: "1.9.5" webview_flutter_wkwebview: dependency: transitive description: name: webview_flutter_wkwebview - url: "https://pub.dartlang.org" + sha256: a5364369c758892aa487cbf59ea41d9edd10f9d9baf06a94e80f1bd1b4c7bbc0 + url: "https://pub.dev" source: hosted version: "2.9.5" yaml: dependency: transitive description: name: yaml - url: "https://pub.dartlang.org" + sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" + url: "https://pub.dev" source: hosted version: "3.1.1" sdks: - dart: ">=2.17.0 <3.0.0" + dart: ">=2.18.0 <3.0.0" flutter: ">=3.0.0" diff --git a/lib/core/flutterwave.dart b/lib/core/flutterwave.dart index 1480a32..e0bc725 100644 --- a/lib/core/flutterwave.dart +++ b/lib/core/flutterwave.dart @@ -1,16 +1,16 @@ import 'package:flutter/material.dart'; -import 'package:flutterwave_standard/models/requests/customer.dart'; -import 'package:flutterwave_standard/models/requests/customizations.dart'; -import 'package:flutterwave_standard/models/requests/standard_request.dart'; -import 'package:flutterwave_standard/models/responses/charge_response.dart'; -import 'package:flutterwave_standard/models/responses/standard_response.dart'; -import 'package:flutterwave_standard/models/subaccount.dart'; -import 'package:flutterwave_standard/utils.dart'; -import 'package:flutterwave_standard/view/flutterwave_style.dart'; -import 'package:flutterwave_standard/view/standard_widget.dart'; -import 'package:flutterwave_standard/view/view_utils.dart'; import 'package:http/http.dart'; +import '../models/requests/customer.dart'; +import '../models/requests/customizations.dart'; +import '../models/requests/standard_request.dart'; +import '../models/responses/charge_response.dart'; +import '../models/responses/standard_response.dart'; +import '../models/subaccount.dart'; +import '../view/flutterwave_style.dart'; +import '../view/standard_widget.dart'; +import '../view/view_utils.dart'; + class Flutterwave { BuildContext context; String txRef; @@ -86,16 +86,16 @@ class Flutterwave { } final response = await Navigator.push( - context, - MaterialPageRoute( - builder: (context) => StandardPaymentWidget( - webUrl: standardResponse!.data!.link!, - ), + context, + MaterialPageRoute( + builder: (context) => StandardPaymentWidget( + webUrl: standardResponse!.data!.link!, ), - ); + ), + ); if (response != null) return response!; - return ChargeResponse(txRef: request.txRef, status: "cancelled", success: false); - } - + return ChargeResponse( + txRef: request.txRef, status: "cancelled", success: false); + } } diff --git a/lib/models/subaccount.dart b/lib/models/subaccount.dart index ea29fad..07c0e8c 100644 --- a/lib/models/subaccount.dart +++ b/lib/models/subaccount.dart @@ -1,8 +1,10 @@ +import '../utils/enums/transaction_charge_type.dart'; + class SubAccount { String id; int? transactionSplitRatio; - String? transactionChargeType; + TransactionChargeType? transactionChargeType; double? transactionPercentage; SubAccount({ @@ -17,7 +19,7 @@ class SubAccount { return { "id": this.id, "transaction_split_ratio": this.transactionSplitRatio, - "transaction_charge_type": this.transactionChargeType, + "transaction_charge_type": this.transactionChargeType == TransactionChargeType.flat ? "flat_subaccount" : "percentage", "transaction_charge": this.transactionPercentage }; } diff --git a/lib/utils/enums/transaction_charge_type.dart b/lib/utils/enums/transaction_charge_type.dart new file mode 100644 index 0000000..704a8dc --- /dev/null +++ b/lib/utils/enums/transaction_charge_type.dart @@ -0,0 +1,5 @@ +/// TRANSACTION CHARGE TYPE ARE TWO TYPES: +/// PERCENTAGE: [percentage] +/// FLAT: [flat_subaccount] + +enum TransactionChargeType {percentage, flat} \ No newline at end of file diff --git a/pubspec.lock b/pubspec.lock index 290e073..90b58c8 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,140 +5,160 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - url: "https://pub.dartlang.org" + sha256: "09d49759685f577cd71ec1fcf773afa3377e23d3a9137154a1a1d28dd5aaabd8" + url: "https://pub.dev" source: hosted version: "25.0.0" analyzer: dependency: transitive description: name: analyzer - url: "https://pub.dartlang.org" + sha256: "21b3e7ffb8505789ecea7794480060b8e66dfa287dfa8923ff3735aadeb9cf29" + url: "https://pub.dev" source: hosted version: "2.2.0" args: dependency: transitive description: name: args - url: "https://pub.dartlang.org" + sha256: "3d82ff8620ec576fd38f6cec0df45a7c088b8704eb1c63d4c336392e5efca6ca" + url: "https://pub.dev" source: hosted version: "2.2.0" async: dependency: transitive description: name: async - url: "https://pub.dartlang.org" + sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + url: "https://pub.dev" source: hosted - version: "2.8.2" + version: "2.10.0" boolean_selector: dependency: transitive description: name: boolean_selector - url: "https://pub.dartlang.org" + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" build: dependency: transitive description: name: build - url: "https://pub.dartlang.org" + sha256: ad0a562140603cf3dd77f0bdd068ffc11588661e3de7ba53c803e72382a1b3a2 + url: "https://pub.dev" source: hosted version: "2.1.0" built_collection: dependency: transitive description: name: built_collection - url: "https://pub.dartlang.org" + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" source: hosted version: "5.1.1" built_value: dependency: transitive description: name: built_value - url: "https://pub.dartlang.org" + sha256: ce70206f4116029cec77802dd5b5987e32c30ab491af6e3e49410b7457ebfc64 + url: "https://pub.dev" source: hosted version: "8.1.2" characters: dependency: transitive description: name: characters - url: "https://pub.dartlang.org" + sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.1" charcode: dependency: transitive description: name: charcode - url: "https://pub.dartlang.org" + sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306 + url: "https://pub.dev" source: hosted version: "1.3.1" cli_util: dependency: transitive description: name: cli_util - url: "https://pub.dartlang.org" + sha256: cd9cfe046f8b4d87f45abce8f14ec315a4eaedcf92a211e83fa080faf9ec7c1c + url: "https://pub.dev" source: hosted version: "0.3.3" clock: dependency: transitive description: name: clock - url: "https://pub.dartlang.org" + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.1.1" code_builder: dependency: transitive description: name: code_builder - url: "https://pub.dartlang.org" + sha256: bdb1ab29be158c4784d7f9b7b693745a0719c5899e31c01112782bb1cb871e80 + url: "https://pub.dev" source: hosted version: "4.1.0" collection: dependency: transitive description: name: collection - url: "https://pub.dartlang.org" + sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + url: "https://pub.dev" source: hosted - version: "1.16.0" + version: "1.17.0" convert: dependency: transitive description: name: convert - url: "https://pub.dartlang.org" + sha256: f08428ad63615f96a27e34221c65e1a451439b5f26030f78d790f461c686d65d + url: "https://pub.dev" source: hosted version: "3.0.1" crypto: dependency: transitive description: name: crypto - url: "https://pub.dartlang.org" + sha256: cf75650c66c0316274e21d7c43d3dea246273af5955bd94e8184837cd577575c + url: "https://pub.dev" source: hosted version: "3.0.1" dart_style: dependency: transitive description: name: dart_style - url: "https://pub.dartlang.org" + sha256: "4237f3f70a6b544cb31c9e90488ea7e61e1e50d72fe83ec34e8b2833698f7201" + url: "https://pub.dev" source: hosted version: "2.1.0" fake_async: dependency: transitive description: name: fake_async - url: "https://pub.dartlang.org" + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.3.1" file: dependency: transitive description: name: file - url: "https://pub.dartlang.org" + sha256: b69516f2c26a5bcac4eee2e32512e1a5205ab312b3536c1c1227b2b942b5f9ad + url: "https://pub.dev" source: hosted version: "6.1.2" fixnum: dependency: transitive description: name: fixnum - url: "https://pub.dartlang.org" + sha256: "6a2ef17156f4dc49684f9d99aaf4a93aba8ac49f5eac861755f5730ddf6e2e4e" + url: "https://pub.dev" source: hosted version: "1.0.0" flutter: @@ -150,7 +170,8 @@ packages: dependency: "direct main" description: name: flutter_inappwebview - url: "https://pub.dartlang.org" + sha256: f73505c792cf083d5566e1a94002311be497d984b5607f25be36d685cf6361cf + url: "https://pub.dev" source: hosted version: "5.7.2+3" flutter_test: @@ -167,112 +188,128 @@ packages: dependency: "direct main" description: name: fluttertoast - url: "https://pub.dartlang.org" + sha256: b3ae793108ad2a7e8f2fea91ca5bb2ba7ef03621c4d9ed7a92fe3391da64c000 + url: "https://pub.dev" source: hosted version: "8.0.8" glob: dependency: transitive description: name: glob - url: "https://pub.dartlang.org" + sha256: dda85ce2aefce16f7e75586acbcb1e8320bf176f69fd94082e31945d6de67f3e + url: "https://pub.dev" source: hosted version: "2.0.1" http: dependency: "direct main" description: name: http - url: "https://pub.dartlang.org" + sha256: b6f1f143a71e1fe1b34670f1acd6f13960ade2557c96b87e127e0cf661969791 + url: "https://pub.dev" source: hosted version: "0.13.3" http_parser: dependency: transitive description: name: http_parser - url: "https://pub.dartlang.org" + sha256: e362d639ba3bc07d5a71faebb98cde68c05bfbcfbbb444b60b6f60bb67719185 + url: "https://pub.dev" source: hosted version: "4.0.0" js: dependency: transitive description: name: js - url: "https://pub.dartlang.org" + sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + url: "https://pub.dev" source: hosted - version: "0.6.4" + version: "0.6.5" logging: dependency: transitive description: name: logging - url: "https://pub.dartlang.org" + sha256: "0520a4826042a8a5d09ddd4755623a50d37ee536d79a70452aff8c8ad7bb6c27" + url: "https://pub.dev" source: hosted version: "1.0.1" matcher: dependency: transitive description: name: matcher - url: "https://pub.dartlang.org" + sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + url: "https://pub.dev" source: hosted - version: "0.12.11" + version: "0.12.13" material_color_utilities: dependency: transitive description: name: material_color_utilities - url: "https://pub.dartlang.org" + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + url: "https://pub.dev" source: hosted - version: "0.1.4" + version: "0.2.0" meta: dependency: transitive description: name: meta - url: "https://pub.dartlang.org" + sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + url: "https://pub.dev" source: hosted - version: "1.7.0" + version: "1.8.0" mockito: dependency: "direct dev" description: name: mockito - url: "https://pub.dartlang.org" + sha256: "6668f23c57bbf3857437c1683e8e0bef7e1077537593293e1fc8d1099fcc1981" + url: "https://pub.dev" source: hosted version: "5.0.15" modal_bottom_sheet: dependency: "direct main" description: name: modal_bottom_sheet - url: "https://pub.dartlang.org" + sha256: fc7c6b5848b837122dc1db913545ef673d74222090cad63a2840507e3d483235 + url: "https://pub.dev" source: hosted version: "2.1.0" package_config: dependency: transitive description: name: package_config - url: "https://pub.dartlang.org" + sha256: "20e7154d701fedaeb219dad732815ecb66677667871127998a9a6581c2aba4ba" + url: "https://pub.dev" source: hosted version: "2.0.0" path: dependency: transitive description: name: path - url: "https://pub.dartlang.org" + sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + url: "https://pub.dev" source: hosted - version: "1.8.1" + version: "1.8.2" pedantic: dependency: transitive description: name: pedantic - url: "https://pub.dartlang.org" + sha256: "67fc27ed9639506c856c840ccce7594d0bdcd91bc8d53d6e52359449a1d50602" + url: "https://pub.dev" source: hosted version: "1.11.1" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - url: "https://pub.dartlang.org" + sha256: "075f927ebbab4262ace8d0b283929ac5410c0ac4e7fc123c76429564facfb757" + url: "https://pub.dev" source: hosted version: "2.1.2" pub_semver: dependency: transitive description: name: pub_semver - url: "https://pub.dartlang.org" + sha256: "59ed538734419e81f7fc18c98249ae72c3c7188bdd9dceff2840585227f79843" + url: "https://pub.dev" source: hosted version: "2.0.0" sky_engine: @@ -284,107 +321,122 @@ packages: dependency: transitive description: name: source_gen - url: "https://pub.dartlang.org" + sha256: ffb7124eb6752de71e87a122cc50a8a191044add69fd990d76958bc38ee552fd + url: "https://pub.dev" source: hosted version: "1.0.3" source_span: dependency: transitive description: name: source_span - url: "https://pub.dartlang.org" + sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + url: "https://pub.dev" source: hosted - version: "1.8.2" + version: "1.9.1" stack_trace: dependency: transitive description: name: stack_trace - url: "https://pub.dartlang.org" + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.11.0" stream_channel: dependency: transitive description: name: stream_channel - url: "https://pub.dartlang.org" + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" string_scanner: dependency: transitive description: name: string_scanner - url: "https://pub.dartlang.org" + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.2.0" term_glyph: dependency: transitive description: name: term_glyph - url: "https://pub.dartlang.org" + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.1" test_api: dependency: transitive description: name: test_api - url: "https://pub.dartlang.org" + sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + url: "https://pub.dev" source: hosted - version: "0.4.9" + version: "0.4.16" typed_data: dependency: transitive description: name: typed_data - url: "https://pub.dartlang.org" + sha256: "53bdf7e979cfbf3e28987552fd72f637e63f3c8724c9e56d9246942dc2fa36ee" + url: "https://pub.dev" source: hosted version: "1.3.0" vector_math: dependency: transitive description: name: vector_math - url: "https://pub.dartlang.org" + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.4" watcher: dependency: transitive description: name: watcher - url: "https://pub.dartlang.org" + sha256: "68173f2fa67d241323a4123be7ed4e43424c54befa5505d71c8ad4b7baf8f71d" + url: "https://pub.dev" source: hosted version: "1.0.0" webview_flutter: dependency: "direct main" description: name: webview_flutter - url: "https://pub.dartlang.org" + sha256: "392c1d83b70fe2495de3ea2c84531268d5b8de2de3f01086a53334d8b6030a88" + url: "https://pub.dev" source: hosted version: "3.0.4" webview_flutter_android: dependency: transitive description: name: webview_flutter_android - url: "https://pub.dartlang.org" + sha256: "71003f78c3c1be4a652ce91c64846a2de3c097a182133a7f003807f2d4d31f47" + url: "https://pub.dev" source: hosted version: "2.8.14" webview_flutter_platform_interface: dependency: transitive description: name: webview_flutter_platform_interface - url: "https://pub.dartlang.org" + sha256: "60828a1ae6a1ac779895768b5567aea1157e1b0b58660ce67c6da30ae56694ec" + url: "https://pub.dev" source: hosted version: "1.9.1" webview_flutter_wkwebview: dependency: transitive description: name: webview_flutter_wkwebview - url: "https://pub.dartlang.org" + sha256: "5285e2a22199aaddf67b01114893c47a718dd2d989d78453dc0174d7386f88f6" + url: "https://pub.dev" source: hosted version: "2.8.1" yaml: dependency: transitive description: name: yaml - url: "https://pub.dartlang.org" + sha256: "3cee79b1715110341012d27756d9bae38e650588acd38d3f3c610822e1337ace" + url: "https://pub.dev" source: hosted version: "3.1.0" sdks: - dart: ">=2.17.0 <3.0.0" + dart: ">=2.18.0 <3.0.0" flutter: ">=3.0.0" From 24ef32819ceab1c114d9ada1e296cdf3e647d9fb Mon Sep 17 00:00:00 2001 From: Jeremiah Oluwaseun Erinola <53568423+jeremiahseun@users.noreply.github.com> Date: Wed, 19 Apr 2023 12:20:54 +0100 Subject: [PATCH 2/6] Change the Payment Option to a List - I changed the way we input the payment option. As it is inputted into a list, it converts to a String as before. It is just easier for devs. - I added assertions to cross-check that both paymentOptions and paymentOptionsList are not non-null. --- example/lib/main.dart | 15 +++- lib/core/flutterwave.dart | 26 +++++-- lib/models/subaccount.dart | 82 ++++++++++++++++---- lib/utils/enums/payment_option.dart | 16 ++++ lib/utils/enums/transaction_charge_type.dart | 7 +- lib/view/standard_widget.dart | 22 +++--- lib/view/view_utils.dart | 5 -- 7 files changed, 135 insertions(+), 38 deletions(-) create mode 100644 lib/utils/enums/payment_option.dart diff --git a/example/lib/main.dart b/example/lib/main.dart index 8a946c7..9f104dc 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -1,5 +1,8 @@ import 'package:flutter/material.dart'; import 'package:flutterwave_standard/flutterwave.dart'; +import 'package:flutterwave_standard/models/subaccount.dart'; +import 'package:flutterwave_standard/utils/enums/payment_option.dart'; +import 'package:flutterwave_standard/utils/enums/transaction_charge_type.dart'; import 'package:uuid/uuid.dart'; void main() { @@ -182,10 +185,20 @@ class _MyHomePageState extends State { redirectUrl: 'https://facebook.com', txRef: Uuid().v1(), amount: this.amountController.text.toString().trim(), + + /// ADDING A SUB ACCOUNT LOOKS LIKE THIS + subAccounts: [ + SubAccount( + id: "2333EDEd_", + transactionChargeType: TransactionChargeType.percentage, + transactionCharge: 0.5, + ), + ], customer: customer, - paymentOptions: "card, payattitude, barter, bank transfer, ussd", + paymentOptionsList: [PaymentOption.card, PaymentOption.payattitude, PaymentOption.barter, PaymentOption.banktransfer, PaymentOption.ussd], customization: Customization(title: "Test Payment"), isTestMode: this.isTestMode); + print(flutterwave.paymentOptionsList); final ChargeResponse response = await flutterwave.charge(); if (response != null) { this.showLoading(response.toString()); diff --git a/lib/core/flutterwave.dart b/lib/core/flutterwave.dart index e0bc725..3b349b1 100644 --- a/lib/core/flutterwave.dart +++ b/lib/core/flutterwave.dart @@ -7,6 +7,7 @@ import '../models/requests/standard_request.dart'; import '../models/responses/charge_response.dart'; import '../models/responses/standard_response.dart'; import '../models/subaccount.dart'; +import '../utils/enums/payment_option.dart'; import '../view/flutterwave_style.dart'; import '../view/standard_widget.dart'; import '../view/view_utils.dart'; @@ -19,7 +20,9 @@ class Flutterwave { Customer customer; bool isTestMode; String publicKey; - String paymentOptions; + @Deprecated('Use paymentOptionsList instead') + String? paymentOptions; + List? paymentOptionsList; String redirectUrl; String currency; String? paymentPlanId; @@ -34,7 +37,7 @@ class Flutterwave { required this.txRef, required this.amount, required this.customer, - required this.paymentOptions, + this.paymentOptions, required this.customization, required this.redirectUrl, required this.isTestMode, @@ -42,15 +45,28 @@ class Flutterwave { this.paymentPlanId, this.subAccounts, this.meta, - this.style}); + this.style, + this.paymentOptionsList}) { + assert(paymentOptions != null || paymentOptionsList != null, + 'Either paymentOptions or paymentOptionsList must be non-null.'); + assert(paymentOptions == null || paymentOptionsList == null, + 'paymentOptions and paymentOptionsList cannot both be non-null.'); + } /// Starts a transaction by calling the Standard service - Future charge() async { + Future charge() async { + var listPaymentOptions = paymentOptionsList; + String paymentOptionNames = ''; + if (listPaymentOptions != null) { + paymentOptionNames = listPaymentOptions + .map((option) => option.toString().split('.').last) + .join(', '); + } final request = StandardRequest( txRef: txRef, amount: amount, customer: customer, - paymentOptions: paymentOptions, + paymentOptions: paymentOptions ?? paymentOptionNames, customization: customization, isTestMode: isTestMode, redirectUrl: redirectUrl, diff --git a/lib/models/subaccount.dart b/lib/models/subaccount.dart index 07c0e8c..3148186 100644 --- a/lib/models/subaccount.dart +++ b/lib/models/subaccount.dart @@ -1,26 +1,82 @@ - import '../utils/enums/transaction_charge_type.dart'; class SubAccount { + /// [id] of the Account you want to payout. String id; + + /// Inputting [transactionSplitRatio] here will override whatever value you input in the Dashboard for this Account. + /// If you want to use the value that was set in the dashboard, do not input anything here. int? transactionSplitRatio; + + /// Inputting [transactionChargeType] here will override whatever value you input in the Dashboard for this Account. + /// If you want to use the value that was set in the dashboard, do not input anything here. TransactionChargeType? transactionChargeType; + + /// Inputting [transactionPercentage] here will override whatever value you input in the Dashboard for this Account. + /// If you want to use the value that was set in the dashboard, do not input anything here. + @Deprecated('User transactionCharge instead.') double? transactionPercentage; - SubAccount({ - required this.id, - this.transactionSplitRatio, - this.transactionChargeType, - this.transactionPercentage - }); + /// [transactionCharge] covers all mode of payment It is no longer restricted to percentage. + /// Whether it is a percentage or an exact amount figure, in [double]. + /// Inputting [transactionCharge] here will override whatever value you input in the Dashboard for this Account. + /// If you want to use the value that was set in the dashboard, do not input anything here. + /// For example: + /// + /// ``` + /// transaction_charge_type: TransactionChargeType.flatSubaccount, + /// transaction_charge: 4200, + /// ``` + /// OR + /// ``` + /// transaction_charge_type: TransactionChargeType.percentage, + /// transaction_charge: 0.2, // which is 20% of the total amount + /// ``` + /// OR + /// ``` + /// transaction_charge_type: TransactionChargeType.flat, + /// transaction_charge: 400, + /// ``` + double? transactionCharge; + + SubAccount( + {required this.id, + this.transactionSplitRatio, + this.transactionChargeType, + this.transactionCharge, + this.transactionPercentage}); /// Converts this instance to json Map toJson() { - return { - "id": this.id, - "transaction_split_ratio": this.transactionSplitRatio, - "transaction_charge_type": this.transactionChargeType == TransactionChargeType.flat ? "flat_subaccount" : "percentage", - "transaction_charge": this.transactionPercentage - }; + switch (transactionChargeType) { + case TransactionChargeType.percentage: + return { + "id": id, + "transaction_split_ratio": transactionSplitRatio, + "transaction_charge_type": 'percentage', + "transaction_charge": transactionCharge ?? transactionPercentage, + }; + case TransactionChargeType.flat: + return { + "id": id, + "transaction_split_ratio": transactionSplitRatio, + "transaction_charge_type": 'flat', + "transaction_charge": transactionCharge ?? transactionPercentage, + }; + case TransactionChargeType.flatSubaccount: + return { + "id": id, + "transaction_split_ratio": transactionSplitRatio, + "transaction_charge_type": 'flat_subaccount', + "transaction_charge": transactionCharge ?? transactionPercentage, + }; + default: + return { + "id": id, + "transaction_split_ratio": null, + "transaction_charge_type": null, + "transaction_charge": null, + }; + } } } diff --git a/lib/utils/enums/payment_option.dart b/lib/utils/enums/payment_option.dart new file mode 100644 index 0000000..5175f1d --- /dev/null +++ b/lib/utils/enums/payment_option.dart @@ -0,0 +1,16 @@ +enum PaymentOption { + card, + account, + banktransfer, + mpesa, + mobilemoneyghana, + mobilemoneyfranco, + mobilemoneyuganda, + mobilemoneyrwanda, + mobilemoneyzambia, + barter, + nqr, + ussd, + credit, + payattitude +} diff --git a/lib/utils/enums/transaction_charge_type.dart b/lib/utils/enums/transaction_charge_type.dart index 704a8dc..90bef41 100644 --- a/lib/utils/enums/transaction_charge_type.dart +++ b/lib/utils/enums/transaction_charge_type.dart @@ -1,5 +1,6 @@ /// TRANSACTION CHARGE TYPE ARE TWO TYPES: /// PERCENTAGE: [percentage] -/// FLAT: [flat_subaccount] - -enum TransactionChargeType {percentage, flat} \ No newline at end of file +/// FLAT SUB ACCOUNT: [flat_subaccount] +/// FLAT: [flat] +/// Find more information here https://developer.flutterwave.com/docs/collecting-payments/split-payments +enum TransactionChargeType {percentage, flat, flatSubaccount } \ No newline at end of file diff --git a/lib/view/standard_widget.dart b/lib/view/standard_widget.dart index c733656..c01fafe 100644 --- a/lib/view/standard_widget.dart +++ b/lib/view/standard_widget.dart @@ -1,23 +1,22 @@ import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart'; -import 'package:flutterwave_standard/core/TransactionCallBack.dart'; -import 'package:flutterwave_standard/models/responses/charge_response.dart'; +import '../core/TransactionCallBack.dart'; +import '../models/responses/charge_response.dart'; import 'flutterwave_in_app_browser.dart'; class StandardPaymentWidget extends StatefulWidget { - final String webUrl; - StandardPaymentWidget({ required this.webUrl }); + StandardPaymentWidget({required this.webUrl}); @override - _StandardPaymentWidgetAppState createState() => new _StandardPaymentWidgetAppState(); + _StandardPaymentWidgetAppState createState() => + new _StandardPaymentWidgetAppState(); } -class _StandardPaymentWidgetAppState extends State implements TransactionCallBack { - +class _StandardPaymentWidgetAppState extends State + implements TransactionCallBack { var options = InAppBrowserClassOptions( crossPlatform: InAppBrowserOptions(hideUrlBar: true), inAppWebViewGroupOptions: InAppWebViewGroupOptions( @@ -29,7 +28,9 @@ class _StandardPaymentWidgetAppState extends State implem void initState() { super.initState(); final browser = FlutterwaveInAppBrowser(callBack: this); - browser.openUrlRequest(urlRequest: URLRequest(url: Uri.parse(widget.webUrl)), options: options); + browser.openUrlRequest( + urlRequest: URLRequest(url: Uri.parse(widget.webUrl)), + options: options); } @override @@ -44,5 +45,4 @@ class _StandardPaymentWidgetAppState extends State implem backgroundColor: Colors.white, ); } - -} \ No newline at end of file +} diff --git a/lib/view/view_utils.dart b/lib/view/view_utils.dart index 4d852fe..b1e2a4e 100644 --- a/lib/view/view_utils.dart +++ b/lib/view/view_utils.dart @@ -29,11 +29,6 @@ class FlutterwaveViewUtils { "$amount. Do you wish to continue? ", textAlign: TextAlign.center, style: textStyle, - // style: TextStyle( - // color: Colors.black, - // fontSize: 18, - // letterSpacing: 1.2, - // ), ), ), actions: [ From b755d2677c68321014c420476f9c0641907c1f3f Mon Sep 17 00:00:00 2001 From: Jeremiah Oluwaseun Erinola <53568423+jeremiahseun@users.noreply.github.com> Date: Wed, 19 Apr 2023 12:25:57 +0100 Subject: [PATCH 3/6] Upgrade the Example Compile SDK Version Upgrade the Example Compile SDK Version to 33 and changed the GradleException to FileNotFoundException as it is not used again. --- example/android/app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index ee6e033..26bfc7f 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -8,7 +8,7 @@ if (localPropertiesFile.exists()) { def flutterRoot = localProperties.getProperty('flutter.sdk') if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") + throw new FileNotFoundException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") } def flutterVersionCode = localProperties.getProperty('flutter.versionCode') @@ -27,7 +27,7 @@ apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { // compileSdkVersion flutter.compileSdkVersion - compileSdkVersion 32 + compileSdkVersion 33 ndkVersion flutter.ndkVersion compileOptions { From 25cea67aadf7bc2e7c91d8aa010d0c35468cbc92 Mon Sep 17 00:00:00 2001 From: Jeremiah Oluwaseun Erinola <53568423+jeremiahseun@users.noreply.github.com> Date: Wed, 19 Apr 2023 12:27:53 +0100 Subject: [PATCH 4/6] Update README.md --- README.md | 53 +++++++++++++++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 3909f6d..609037d 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,17 @@ - -

-

+

# Flutterwave Flutter SDK (Standard) The Flutter library helps you create seamless payment experiences in your dart mobile app. By connecting to our modal, you can start collecting payment in no time. - Available features include: - Collections: Card, Account, Mobile money, Bank Transfers, USSD, Barter. - Recurring payments: Tokenization and Subscriptions. - Split payments - ## Table of Contents 1. [Requirements](#requirements) @@ -25,19 +21,16 @@ Available features include: 5. [Contribution guidelines](#contribution-guidelines) 6. [License](#license) - ## Requirements 1. Flutterwave for business [API Keys](https://developer.flutterwave.com/docs/integration-guides/authentication) 2. Supported Flutter version >= 1.17.0 - ## Installation 1. Add the dependency to your project. In your `pubspec.yaml` file add: `flutterwave_standard: 1.0.7` 2. Run `flutter pub get` - ## Usage ### Initializing a Flutterwave instance @@ -58,33 +51,40 @@ To create an instance, you should call the Flutterwave constructor. This constru It returns an instance of Flutterwave which we then call the async method `.charge()` on. -_ +\_ - handlePaymentInitialization() async { + handlePaymentInitialization() async { final Customer customer = Customer( name: "Flutterwave Developer", - phoneNumber: "1234566677777", - email: "customer@customer.com" - ); + phoneNumber: "1234566677777", + email: "customer@customer.com" + ); final Flutterwave flutterwave = Flutterwave( - context: context, publicKey: "Public Key-here", - currency: "currency-here", - redirectUrl: "add-your-redirect-url-here", - txRef: "add-your-unique-reference-here", - amount: "3000", - customer: customer, - paymentOptions: "ussd, card, barter, payattitude", + context: context, + publicKey: "YOUR-PUBLIC-KEY", + currency: "currency-here", + redirectUrl: "add-your-redirect-url-here", + txRef: "add-your-unique-reference-here", + amount: "3000", + /// ADDING A SUB ACCOUNT LOOKS LIKE THIS + subAccounts: [ + SubAccount( + id: "2333EDEd_", + transactionChargeType: TransactionChargeType.percentage, + transactionCharge: 0.5, + ), + ], + customer: customer, + paymentOptionsList: [PaymentOption.card, PaymentOption.payattitude, PaymentOption.barter, PaymentOption.banktransfer, PaymentOption.ussd], customization: Customization(title: "My Payment"), - isTestMode: true ); - } + isTestMode: true); + } ### Handling the response Calling the `.charge()` method returns a `Future` of `ChargeResponse` which we await for the actual response as seen above. - - - final ChargeResponse response = await flutterwave.charge(); + final ChargeResponse response = await flutterwave.charge(); Call the verify transaction [endpoint](https://developer.flutterwave.com/docs/verifications/transaction) with the `transactionID` returned in `response.transactionId` or the `txRef` you provided to verify transaction before offering value to customer @@ -119,7 +119,8 @@ Copyright (c) Flutterwave Inc. - [fluttertoast](https://pub.dev/packages/fluttertoast) -## Flutterwave API References + +## Flutterwave API References - [Flutterwave API Doc](https://developer.flutterwave.com/docs) - [Flutterwave Inline Payment Doc](https://developer.flutterwave.com/docs/flutterwave-inline) From 3b0f2d76edd727b67c1a90964220aad6de5268aa Mon Sep 17 00:00:00 2001 From: Jeremiah Oluwaseun Erinola <53568423+jeremiahseun@users.noreply.github.com> Date: Wed, 19 Apr 2023 12:34:47 +0100 Subject: [PATCH 5/6] Update main.dart --- example/lib/main.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/example/lib/main.dart b/example/lib/main.dart index 9f104dc..311b90f 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -198,7 +198,6 @@ class _MyHomePageState extends State { paymentOptionsList: [PaymentOption.card, PaymentOption.payattitude, PaymentOption.barter, PaymentOption.banktransfer, PaymentOption.ussd], customization: Customization(title: "Test Payment"), isTestMode: this.isTestMode); - print(flutterwave.paymentOptionsList); final ChargeResponse response = await flutterwave.charge(); if (response != null) { this.showLoading(response.toString()); From 4c6e0e80dfa6e39207f03b7d74cce5d2a3de39b1 Mon Sep 17 00:00:00 2001 From: Jeremiah Oluwaseun Erinola <53568423+jeremiahseun@users.noreply.github.com> Date: Wed, 19 Apr 2023 12:38:38 +0100 Subject: [PATCH 6/6] Update subaccount.dart --- lib/models/subaccount.dart | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/models/subaccount.dart b/lib/models/subaccount.dart index 3148186..8117af9 100644 --- a/lib/models/subaccount.dart +++ b/lib/models/subaccount.dart @@ -52,23 +52,23 @@ class SubAccount { case TransactionChargeType.percentage: return { "id": id, - "transaction_split_ratio": transactionSplitRatio, + "transaction_split_ratio": this.transactionSplitRatio, "transaction_charge_type": 'percentage', - "transaction_charge": transactionCharge ?? transactionPercentage, + "transaction_charge": this.transactionCharge ?? this.transactionPercentage, }; case TransactionChargeType.flat: return { "id": id, - "transaction_split_ratio": transactionSplitRatio, + "transaction_split_ratio": this.transactionSplitRatio, "transaction_charge_type": 'flat', - "transaction_charge": transactionCharge ?? transactionPercentage, + "transaction_charge": this.transactionCharge ?? this.transactionPercentage, }; case TransactionChargeType.flatSubaccount: return { "id": id, - "transaction_split_ratio": transactionSplitRatio, + "transaction_split_ratio": this.transactionSplitRatio, "transaction_charge_type": 'flat_subaccount', - "transaction_charge": transactionCharge ?? transactionPercentage, + "transaction_charge": this.transactionCharge ?? this.transactionPercentage, }; default: return {