From ad8c86b247d5ff013b656cf03a473647039f1886 Mon Sep 17 00:00:00 2001 From: Braxton Ward Date: Mon, 8 Sep 2025 12:54:13 -0600 Subject: [PATCH 1/2] feat: add close transact method --- .../AtomicTransactFlutterPlugin.kt | 2 ++ example/lib/main.dart | 9 +++++++++ ios/Classes/SwiftAtomicTransactFlutterPlugin.swift | 5 ++++- lib/platform_interface/atomic_method_channel.dart | 5 +++++ lib/platform_interface/atomic_platform_interface.dart | 4 ++++ lib/src/atomic.dart | 10 +++++++++- 6 files changed, 33 insertions(+), 2 deletions(-) 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 16fa68a..63008cf 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 @@ -123,6 +123,8 @@ class AtomicTransactFlutterPlugin: FlutterPlugin, MethodCallHandler, ActivityAwa }) Transact.presentAction(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 5742a12..6c9b0bb 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -116,6 +116,15 @@ class _MyAppState extends State { onPressed: _onActionButtonPressed, child: const Text("Launch Action"), ), + ElevatedButton( + onPressed: () { + _onButtonPressed(); + Future.delayed(Duration(seconds: 10), () { + Atomic.close(); + }); + }, + child: const Text("Launch And Close"), + ), ], ), ), diff --git a/ios/Classes/SwiftAtomicTransactFlutterPlugin.swift b/ios/Classes/SwiftAtomicTransactFlutterPlugin.swift index 675bb5c..6969335 100644 --- a/ios/Classes/SwiftAtomicTransactFlutterPlugin.swift +++ b/ios/Classes/SwiftAtomicTransactFlutterPlugin.swift @@ -74,7 +74,10 @@ public class SwiftAtomicTransactFlutterPlugin: NSObject, FlutterPlugin { } else { result(FlutterError(code: "PlatformError", message: "No keyWindow found", details: nil)) } - break; + 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 55f4ef6..c70a08f 100644 --- a/lib/platform_interface/atomic_method_channel.dart +++ b/lib/platform_interface/atomic_method_channel.dart @@ -51,6 +51,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) { diff --git a/lib/platform_interface/atomic_platform_interface.dart b/lib/platform_interface/atomic_platform_interface.dart index 9543b3e..4fd0668 100644 --- a/lib/platform_interface/atomic_platform_interface.dart +++ b/lib/platform_interface/atomic_platform_interface.dart @@ -54,4 +54,8 @@ abstract class AtomicPlatformInterface extends PlatformInterface { }) async { throw UnimplementedError('presentAction() 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 feb707b..28d4ce3 100644 --- a/lib/src/atomic.dart +++ b/lib/src/atomic.dart @@ -78,6 +78,14 @@ class Atomic { _platform.onCompletion = onCompletion; await _platform.presentAction( - id: id, environment: environment, theme: theme, presentationStyleIOS: presentationStyleIOS); + id: id, + environment: environment, + theme: theme, + presentationStyleIOS: presentationStyleIOS); + } + + static Future close() async { + _isLoading = false; + await _platform.dismissTransact(); } } From 6e78ddb09a3c80772782df6ce80014ce5640a733 Mon Sep 17 00:00:00 2001 From: Braxton Ward Date: Mon, 8 Sep 2025 13:08:08 -0600 Subject: [PATCH 2/2] feat: add hide transact method --- .../AtomicTransactFlutterPlugin.kt | 2 ++ example/lib/main.dart | 9 +++++++++ ios/Classes/SwiftAtomicTransactFlutterPlugin.swift | 2 ++ lib/platform_interface/atomic_method_channel.dart | 5 +++++ lib/platform_interface/atomic_platform_interface.dart | 4 ++++ lib/src/atomic.dart | 5 +++++ 6 files changed, 27 insertions(+) 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 63008cf..1458143 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 @@ -125,6 +125,8 @@ class AtomicTransactFlutterPlugin: FlutterPlugin, MethodCallHandler, ActivityAwa Transact.presentAction(activity, config) } else if (call.method == "dismissTransact") { Transact.close(activity) + } else if (call.method == "hideTransact") { + Transact.hideTransact(activity) } else { result.notImplemented() } diff --git a/example/lib/main.dart b/example/lib/main.dart index 6c9b0bb..8226925 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -125,6 +125,15 @@ class _MyAppState extends State { }, child: const Text("Launch And Close"), ), + ElevatedButton( + onPressed: () { + _onButtonPressed(); + Future.delayed(Duration(seconds: 10), () { + Atomic.hide(); + }); + }, + child: const Text("Launch And Hide"), + ), ], ), ), diff --git a/ios/Classes/SwiftAtomicTransactFlutterPlugin.swift b/ios/Classes/SwiftAtomicTransactFlutterPlugin.swift index 6969335..9d01f3f 100644 --- a/ios/Classes/SwiftAtomicTransactFlutterPlugin.swift +++ b/ios/Classes/SwiftAtomicTransactFlutterPlugin.swift @@ -77,6 +77,8 @@ public class SwiftAtomicTransactFlutterPlugin: NSObject, FlutterPlugin { break; case "dismissTransact": Atomic.dismissTransact() + case "hideTransact": + Atomic.hideTransact() default: result(FlutterMethodNotImplemented) diff --git a/lib/platform_interface/atomic_method_channel.dart b/lib/platform_interface/atomic_method_channel.dart index c70a08f..e40d01b 100644 --- a/lib/platform_interface/atomic_method_channel.dart +++ b/lib/platform_interface/atomic_method_channel.dart @@ -56,6 +56,11 @@ class AtomicMethodChannel extends AtomicPlatformInterface { await _channel.invokeMethod('dismissTransact'); } + @override + Future hideTransact() async { + await _channel.invokeMethod('hideTransact'); + } + /// Handles receiving messages on the [MethodChannel] Future _onMethodCall(MethodCall call) async { switch (call.method) { diff --git a/lib/platform_interface/atomic_platform_interface.dart b/lib/platform_interface/atomic_platform_interface.dart index 4fd0668..269244d 100644 --- a/lib/platform_interface/atomic_platform_interface.dart +++ b/lib/platform_interface/atomic_platform_interface.dart @@ -58,4 +58,8 @@ abstract class AtomicPlatformInterface extends PlatformInterface { Future dismissTransact() async { throw UnimplementedError('dismissTransact() has not been implemented.'); } + + Future hideTransact() async { + throw UnimplementedError('hideTransact() has not been implemented.'); + } } diff --git a/lib/src/atomic.dart b/lib/src/atomic.dart index 28d4ce3..fa35f73 100644 --- a/lib/src/atomic.dart +++ b/lib/src/atomic.dart @@ -88,4 +88,9 @@ class Atomic { _isLoading = false; await _platform.dismissTransact(); } + + static Future hide() async { + _isLoading = false; + await _platform.hideTransact(); + } }