diff --git a/lib/data/auth_log_db.dart b/lib/data/auth_log_db.dart index 1a50a7f..0e5e290 100644 --- a/lib/data/auth_log_db.dart +++ b/lib/data/auth_log_db.dart @@ -32,4 +32,9 @@ class AuthLogDB { db = await DB.getDB(db); return await db.insert("auth_log", o.toJson()); } + + static Future deleteByAppId(int appId, {DatabaseExecutor? db}) async { + db = await DB.getDB(db); + db.execute("delete from auth_log where app_id = ?", [appId]); + } } diff --git a/lib/provider/app_provider.dart b/lib/provider/app_provider.dart index 7ae04a1..92a2895 100644 --- a/lib/provider/app_provider.dart +++ b/lib/provider/app_provider.dart @@ -4,6 +4,7 @@ import 'package:nowser/const/app_type.dart'; import 'package:nowser/const/auth_type.dart'; import 'package:nowser/const/connect_type.dart'; import 'package:nowser/data/app_db.dart'; +import 'package:nowser/data/auth_log_db.dart'; import '../const/auth_result.dart'; import '../data/app.dart'; @@ -118,6 +119,19 @@ class AppProvider extends ChangeNotifier { } } + Future deleteApp(App app) async { + await AppDB.delete(app.id!); + reload(); + + try { + await AuthLogDB.deleteByAppId(app.id!); + } catch (e) { + print(e.toString()); + } + + notifyListeners(); + } + App? getAppById(int appId) { return _appMap[appId]; } diff --git a/lib/router/apps/apps_router.dart b/lib/router/apps/apps_router.dart index d6e9986..f6a721b 100644 --- a/lib/router/apps/apps_router.dart +++ b/lib/router/apps/apps_router.dart @@ -1,5 +1,7 @@ +import 'package:bot_toast/bot_toast.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; +import 'package:flutter_slidable/flutter_slidable.dart'; import 'package:nostr_sdk/client_utils/keys.dart'; import 'package:nostr_sdk/nip19/nip19.dart'; import 'package:nostr_sdk/utils/string_util.dart'; @@ -43,14 +45,62 @@ class _AppsRouter extends CustState { for (var i = 0; i < length; i++) { var app = appList[i]; widgets.add(Container( - child: MeRouterAppItemComponent(app), + child: Slidable( + child: MeRouterAppItemComponent(app), + endActionPane: ActionPane( + motion: ScrollMotion(), + extentRatio: 0.25, + children: [ + // GestureDetector( + // onTap: () {}, + // child: Container( + // color: Colors.red, + // alignment: Alignment.center, + // padding: EdgeInsets.only( + // left: Base.BASE_PADDING, + // right: Base.BASE_PADDING, + // top: 3, + // bottom: 3, + // ), + // child: Row( + // // mainAxisSize: MainAxisSize.min, + // children: [ + // Icon( + // Icons.delete_forever, + // color: Colors.white, + // ), + // Text( + // "Delete", + // style: TextStyle(color: Colors.white), + // ) + // ], + // ), + // ), + // ), + SlidableAction( + onPressed: (context) { + var cancelFunc = BotToast.showLoading(); + try { + appProvider.deleteApp(app); + } catch (e) { + } finally { + cancelFunc.call(); + } + }, + backgroundColor: Color(0xFFFE4A49), + foregroundColor: Colors.white, + icon: Icons.delete, + ), + ], + ), + ), )); if (i + 1 < length) { widgets.add(Divider()); } } if (widgets.isNotEmpty) { - var listWidget = Container( + Widget listWidget = Container( padding: EdgeInsets.all(Base.BASE_PADDING), decoration: BoxDecoration( color: themeData.cardColor, diff --git a/packages/nostr_sdk b/packages/nostr_sdk index 592064d..6d3ac63 160000 --- a/packages/nostr_sdk +++ b/packages/nostr_sdk @@ -1 +1 @@ -Subproject commit 592064d434c428aa5828bb12a983f1891494fd7d +Subproject commit 6d3ac632cd76e3b5cf8de65ce0adca82aa251a51 diff --git a/pubspec.lock b/pubspec.lock index 77d7627..ad5c6ea 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -403,6 +403,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.1.2" + flutter_slidable: + dependency: "direct main" + description: + name: flutter_slidable + sha256: "2c5611c0b44e20d180e4342318e1bbc28b0a44ad2c442f5df16962606fd3e8e3" + url: "https://pub.dev" + source: hosted + version: "3.1.1" flutter_socks_proxy: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 5994bb2..b5d7067 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -48,6 +48,7 @@ dependencies: flutter_secure_storage: ^9.2.2 pretty_qr_code: ^3.3.0 qr_code_scanner: ^1.0.1 + flutter_slidable: ^3.1.1 dev_dependencies: flutter_launcher_icons: ^0.13.1