mirror of
https://github.com/aljazceru/breez-sdk-liquid.git
synced 2026-01-04 14:54:21 +01:00
Update BreezSDKLiquid (#406)
* Convert BreezSDKLiquid into a singleton * Sync wallet after each SDK event
This commit is contained in:
@@ -20,7 +20,7 @@ void main() async {
|
||||
runApp(App(credentialsManager: credentialsManager, liquidSDK: liquidSDK));
|
||||
}
|
||||
|
||||
Future<BindingLiquidSdk> reconnect({
|
||||
Future<void> reconnect({
|
||||
required BreezSDKLiquid liquidSDK,
|
||||
required String mnemonic,
|
||||
LiquidNetwork network = LiquidNetwork.mainnet,
|
||||
@@ -30,7 +30,7 @@ Future<BindingLiquidSdk> reconnect({
|
||||
config: config,
|
||||
mnemonic: mnemonic,
|
||||
);
|
||||
return await liquidSDK.connect(req: req);
|
||||
await liquidSDK.connect(req: req);
|
||||
}
|
||||
|
||||
class App extends StatefulWidget {
|
||||
|
||||
@@ -75,7 +75,7 @@ class _ConnectPageState extends State<ConnectPage> {
|
||||
);
|
||||
}
|
||||
|
||||
Future<Null> createWallet({String? mnemonic}) async {
|
||||
Future<void> createWallet({String? mnemonic}) async {
|
||||
final walletMnemonic = mnemonic ??= generateMnemonic(strength: 128);
|
||||
debugPrint("${mnemonic.isEmpty ? "Creating" : "Restoring"} wallet with $walletMnemonic");
|
||||
return await initializeWallet(mnemonic: walletMnemonic).then(
|
||||
@@ -95,7 +95,7 @@ class _ConnectPageState extends State<ConnectPage> {
|
||||
);
|
||||
}
|
||||
|
||||
Future<BindingLiquidSdk> initializeWallet({
|
||||
Future<void> initializeWallet({
|
||||
required String mnemonic,
|
||||
LiquidNetwork network = LiquidNetwork.mainnet,
|
||||
}) async {
|
||||
@@ -104,6 +104,6 @@ class _ConnectPageState extends State<ConnectPage> {
|
||||
config: config,
|
||||
mnemonic: mnemonic,
|
||||
);
|
||||
return await widget.liquidSDK.connect(req: req);
|
||||
await widget.liquidSDK.connect(req: req);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,7 +69,9 @@ class _HomePageState extends State<HomePage> {
|
||||
},
|
||||
),
|
||||
drawer: HomePageDrawer(
|
||||
liquidSDK: widget.liquidSDK.instance!, credentialsManager: widget.credentialsManager),
|
||||
liquidSDK: widget.liquidSDK.instance!,
|
||||
credentialsManager: widget.credentialsManager,
|
||||
),
|
||||
floatingActionButton: QrActionButton(liquidSDK: widget.liquidSDK.instance!),
|
||||
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
|
||||
bottomNavigationBar: HomePageBottomAppBar(
|
||||
|
||||
@@ -4,26 +4,45 @@ import 'package:flutter_breez_liquid/flutter_breez_liquid.dart' as liquid_sdk;
|
||||
import 'package:rxdart/rxdart.dart';
|
||||
|
||||
class BreezSDKLiquid {
|
||||
liquid_sdk.BindingLiquidSdk? instance;
|
||||
static final BreezSDKLiquid _singleton = BreezSDKLiquid._internal();
|
||||
|
||||
Future<liquid_sdk.BindingLiquidSdk> connect({
|
||||
factory BreezSDKLiquid() => _singleton;
|
||||
|
||||
BreezSDKLiquid._internal() {
|
||||
initializeLogStream();
|
||||
}
|
||||
|
||||
liquid_sdk.BindingLiquidSdk? _instance;
|
||||
|
||||
liquid_sdk.BindingLiquidSdk? get instance => _instance;
|
||||
|
||||
Future<void> connect({
|
||||
required liquid_sdk.ConnectRequest req,
|
||||
}) async {
|
||||
instance = await liquid_sdk.connect(req: req);
|
||||
_initializeEventsStream(instance!);
|
||||
_subscribeToSdkStreams(instance!);
|
||||
await _fetchWalletData(instance!);
|
||||
return instance!;
|
||||
try {
|
||||
_instance = await liquid_sdk.connect(req: req);
|
||||
_initializeEventsStream(_instance!);
|
||||
_subscribeToSdkStreams(_instance!);
|
||||
await _fetchWalletData(_instance!);
|
||||
} catch (e) {
|
||||
_instance = null;
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
void disconnect(liquid_sdk.BindingLiquidSdk sdk) {
|
||||
sdk.disconnect();
|
||||
void disconnect() {
|
||||
if (_instance == null) {
|
||||
throw Exception();
|
||||
}
|
||||
|
||||
_instance!.disconnect();
|
||||
_unsubscribeFromSdkStreams();
|
||||
_instance = null;
|
||||
}
|
||||
|
||||
Future _fetchWalletData(liquid_sdk.BindingLiquidSdk sdk) async {
|
||||
Future<void> _fetchWalletData(liquid_sdk.BindingLiquidSdk sdk) async {
|
||||
await _getInfo(sdk);
|
||||
await _listPayments(sdk: sdk, req: const liquid_sdk.ListPaymentsRequest());
|
||||
await _listPayments(sdk: sdk);
|
||||
}
|
||||
|
||||
Future<liquid_sdk.GetInfoResponse> _getInfo(liquid_sdk.BindingLiquidSdk sdk) async {
|
||||
@@ -34,8 +53,8 @@ class BreezSDKLiquid {
|
||||
|
||||
Future<List<liquid_sdk.Payment>> _listPayments({
|
||||
required liquid_sdk.BindingLiquidSdk sdk,
|
||||
required liquid_sdk.ListPaymentsRequest req,
|
||||
}) async {
|
||||
const req = liquid_sdk.ListPaymentsRequest();
|
||||
final paymentsList = await sdk.listPayments(req: req);
|
||||
_paymentsController.add(paymentsList);
|
||||
return paymentsList;
|
||||
@@ -86,40 +105,45 @@ class BreezSDKLiquid {
|
||||
_breezEventsSubscription = _breezEventsStream?.listen(
|
||||
(event) async {
|
||||
if (event is liquid_sdk.SdkEvent_PaymentFailed) {
|
||||
_logStreamController
|
||||
.add(liquid_sdk.LogEntry(line: "Payment Failed. ${event.details.swapId}", level: "WARN"));
|
||||
_logStreamController.add(
|
||||
liquid_sdk.LogEntry(line: "Payment Failed. ${event.details.swapId}", level: "WARN"),
|
||||
);
|
||||
_paymentResultStream.addError(PaymentException(event.details));
|
||||
}
|
||||
if (event is liquid_sdk.SdkEvent_PaymentPending) {
|
||||
_logStreamController
|
||||
.add(liquid_sdk.LogEntry(line: "Payment Pending. ${event.details.swapId}", level: "INFO"));
|
||||
_logStreamController.add(
|
||||
liquid_sdk.LogEntry(line: "Payment Pending. ${event.details.swapId}", level: "INFO"),
|
||||
);
|
||||
_paymentResultStream.add(event.details);
|
||||
}
|
||||
if (event is liquid_sdk.SdkEvent_PaymentRefunded) {
|
||||
_logStreamController
|
||||
.add(liquid_sdk.LogEntry(line: "Payment Refunded. ${event.details.swapId}", level: "INFO"));
|
||||
_logStreamController.add(
|
||||
liquid_sdk.LogEntry(line: "Payment Refunded. ${event.details.swapId}", level: "INFO"),
|
||||
);
|
||||
_paymentResultStream.add(event.details);
|
||||
}
|
||||
if (event is liquid_sdk.SdkEvent_PaymentRefundPending) {
|
||||
_logStreamController.add(
|
||||
liquid_sdk.LogEntry(line: "Pending Payment Refund. ${event.details.swapId}", level: "INFO"));
|
||||
liquid_sdk.LogEntry(line: "Pending Payment Refund. ${event.details.swapId}", level: "INFO"),
|
||||
);
|
||||
_paymentResultStream.add(event.details);
|
||||
}
|
||||
if (event is liquid_sdk.SdkEvent_PaymentSucceeded) {
|
||||
_logStreamController
|
||||
.add(liquid_sdk.LogEntry(line: "Payment Succeeded. ${event.details.swapId}", level: "INFO"));
|
||||
_logStreamController.add(
|
||||
liquid_sdk.LogEntry(line: "Payment Succeeded. ${event.details.swapId}", level: "INFO"),
|
||||
);
|
||||
_paymentResultStream.add(event.details);
|
||||
await _fetchWalletData(sdk);
|
||||
}
|
||||
if (event is liquid_sdk.SdkEvent_PaymentWaitingConfirmation) {
|
||||
_logStreamController.add(liquid_sdk.LogEntry(
|
||||
line: "Payment Waiting Confirmation. ${event.details.swapId}", level: "INFO"));
|
||||
_logStreamController.add(
|
||||
liquid_sdk.LogEntry(line: "Payment Waiting Confirmation. ${event.details.swapId}", level: "INFO"),
|
||||
);
|
||||
_paymentResultStream.add(event.details);
|
||||
}
|
||||
if (event is liquid_sdk.SdkEvent_Synced) {
|
||||
_logStreamController.add(const liquid_sdk.LogEntry(line: "Received Synced event.", level: "INFO"));
|
||||
await _fetchWalletData(sdk);
|
||||
}
|
||||
await _fetchWalletData(sdk);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user