diff --git a/android/build.gradle b/android/build.gradle index 21f1b8d..204ed66 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -27,6 +27,7 @@ apply plugin: 'kotlin-android' android { compileSdkVersion 29 + namespace = 'atomic.financial.atomic_transact_flutter' compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 diff --git a/android/src/main/kotlin/atomic/financial/atomic_transact_flutter/AtomicTransactFlutterPlugin.kt b/android/src/main/kotlin/atomic/financial/atomic_transact_flutter/AtomicTransactFlutterPlugin.kt index d08b493..49f1cbb 100644 --- a/android/src/main/kotlin/atomic/financial/atomic_transact_flutter/AtomicTransactFlutterPlugin.kt +++ b/android/src/main/kotlin/atomic/financial/atomic_transact_flutter/AtomicTransactFlutterPlugin.kt @@ -97,6 +97,8 @@ class AtomicTransactFlutterPlugin: FlutterPlugin, MethodCallHandler, ActivityAwa Transact.present(activity, config) + } else if (call.method == "dismissTransact") { + Transact.close(activity) } else { result.notImplemented() } diff --git a/example/lib/main.dart b/example/lib/main.dart index 2ef1663..49a2159 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -68,9 +68,23 @@ class _MyAppState extends State { title: const Text('Plugin example app'), ), body: Center( - child: ElevatedButton( - onPressed: _onButtonPressed, - child: const Text("Launch Transact"), + child: Column( + children: [ + ElevatedButton( + onPressed: _onButtonPressed, + child: const Text("Launch Transact"), + ), + ElevatedButton( + onPressed: () { + _onButtonPressed(); + Future.delayed(Duration(seconds: 10), () { + Atomic.close(); + print('close'); + }); + }, + child: const Text("Launch And Close"), + ), + ], ), ), ), diff --git a/ios/Classes/SwiftAtomicTransactFlutterPlugin.swift b/ios/Classes/SwiftAtomicTransactFlutterPlugin.swift index e5f1be5..9565c18 100644 --- a/ios/Classes/SwiftAtomicTransactFlutterPlugin.swift +++ b/ios/Classes/SwiftAtomicTransactFlutterPlugin.swift @@ -48,6 +48,8 @@ public class SwiftAtomicTransactFlutterPlugin: NSObject, FlutterPlugin { } } break; + case "dismissTransact": + Atomic.dismissTransact() default: result(FlutterMethodNotImplemented) diff --git a/lib/platform_interface/atomic_method_channel.dart b/lib/platform_interface/atomic_method_channel.dart index 67c4611..ed37b32 100644 --- a/lib/platform_interface/atomic_method_channel.dart +++ b/lib/platform_interface/atomic_method_channel.dart @@ -28,6 +28,11 @@ class AtomicMethodChannel extends AtomicPlatformInterface { ); } + @override + Future dismissTransact() async { + await _channel.invokeMethod('dismissTransact'); + } + /// Handles receiving messages on the [MethodChannel] Future _onMethodCall(MethodCall call) async { switch (call.method) { @@ -46,21 +51,17 @@ class AtomicMethodChannel extends AtomicPlatformInterface { final type = AtomicTransactCompletionType.values.byName(typeName); final responseData = call.arguments['response']; - final response = responseData != null - ? AtomicTransactResponse.fromJson(responseData) - : null; + final response = + responseData != null ? AtomicTransactResponse.fromJson(responseData) : null; final errorName = call.arguments['error']; - final error = errorName != null - ? AtomicTransactError.values.byName(errorName) - : null; + final error = errorName != null ? AtomicTransactError.values.byName(errorName) : null; onCompletion?.call(type, response, error); break; default: - throw MissingPluginException( - '${call.method} was invoked but has no handler'); + throw MissingPluginException('${call.method} was invoked but has no handler'); } } } diff --git a/lib/platform_interface/atomic_platform_interface.dart b/lib/platform_interface/atomic_platform_interface.dart index fcf8a52..dd96829 100644 --- a/lib/platform_interface/atomic_platform_interface.dart +++ b/lib/platform_interface/atomic_platform_interface.dart @@ -34,4 +34,8 @@ abstract class AtomicPlatformInterface extends PlatformInterface { }) async { throw UnimplementedError('presentTransact() has not been implemented.'); } + + Future dismissTransact() async { + throw UnimplementedError('dismissTransact() has not been implemented.'); + } } diff --git a/lib/src/atomic.dart b/lib/src/atomic.dart index 76e12fe..1af0f54 100644 --- a/lib/src/atomic.dart +++ b/lib/src/atomic.dart @@ -4,8 +4,7 @@ import 'types.dart'; import 'config.dart'; class Atomic { - static AtomicPlatformInterface get _platform => - AtomicPlatformInterface.instance; + static AtomicPlatformInterface get _platform => AtomicPlatformInterface.instance; /// Present the Atomic Transact SDK /// - [config] Configuration of the Transact SDK. @@ -26,4 +25,8 @@ class Atomic { configuration: config, ); } + + static Future close() async { + await _platform.dismissTransact(); + } }