From 228a30e74cbdee511491ab8871bf4dccb25070eb Mon Sep 17 00:00:00 2001 From: DASHU <385321165@qq.com> Date: Thu, 20 Nov 2025 16:15:10 +0800 Subject: [PATCH] fix remove app connect and website show connect dialog many times bug --- lib/provider/permission_check_mixin.dart | 32 ++++++++++++++++++++---- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/lib/provider/permission_check_mixin.dart b/lib/provider/permission_check_mixin.dart index adc8b17..b9a20e1 100644 --- a/lib/provider/permission_check_mixin.dart +++ b/lib/provider/permission_check_mixin.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:nostr_sdk/signer/nostr_signer.dart'; import 'package:nowser/component/auth_dialog/auth_app_connect_dialog.dart'; @@ -34,13 +36,9 @@ mixin PermissionCheckMixin { var app = appProvider.getApp(appType, code); if (app == null) { - // app is null, app connect - var newApp = await getApp(appType, code); if (context != null) { - await AuthAppConnectDialog.show(context, newApp); + app = await connectToApp(appType, code, context); } - // reload from provider - app = appProvider.getApp(appType, code); } if (app == null) { @@ -111,6 +109,30 @@ mixin PermissionCheckMixin { return; } + Map> connectingAppFutureMap = {}; + + Future connectToApp(int appType, String code, BuildContext context) { + var key = "$appType-$code"; + var f = connectingAppFutureMap[key]; + if (f != null) { + return f; + } + + var complete = Completer(); + f = complete.future; + connectingAppFutureMap[key] = f; + + getApp(appType, code).then((newApp) => { + AuthAppConnectDialog.show(context, newApp).then((value) { + var app = appProvider.getApp(appType, code); + complete.complete(app); + connectingAppFutureMap.remove(key); + }) + }); + + return f; + } + void saveAuthLog(App app, int authType, int? eventKind, String? authDetail, int authResult) { if (app.id != null) {