show pendding connect remote apps

This commit is contained in:
DASHU
2024-09-10 19:47:28 +08:00
parent 5414f9ffa6
commit f34d10093b
11 changed files with 241 additions and 39 deletions

View File

@@ -1,11 +1,23 @@
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:nostr_sdk/client_utils/keys.dart';
import 'package:nostr_sdk/nip19/nip19.dart';
import 'package:nostr_sdk/utils/string_util.dart';
import 'package:nostr_sdk/utils/date_format_util.dart';
import 'package:nowser/component/cust_state.dart';
import 'package:nowser/component/tag_component.dart';
import 'package:nowser/const/app_type.dart';
import 'package:nowser/const/router_path.dart';
import 'package:nowser/data/remote_signing_info_db.dart';
import 'package:nowser/main.dart';
import 'package:nowser/provider/app_provider.dart';
import 'package:nowser/util/router_util.dart';
import 'package:provider/provider.dart';
import '../../component/app/app_type_component.dart';
import '../../component/appbar_back_btn_component.dart';
import '../../const/base.dart';
import '../../data/remote_signing_info.dart';
import '../me/me_router_app_item_component.dart';
class AppsRouter extends StatefulWidget {
@@ -15,26 +27,121 @@ class AppsRouter extends StatefulWidget {
}
}
class _AppsRouter extends State<AppsRouter> {
class _AppsRouter extends CustState<AppsRouter> {
@override
Widget build(BuildContext context) {
Widget doBuild(BuildContext context) {
var themeData = Theme.of(context);
var _appProvider = Provider.of<AppProvider>(context);
var appList = _appProvider.appList;
var main = ListView.builder(
itemBuilder: (context, index) {
if (index >= appList.length) {
return null;
List<Widget> mainList = [];
if (appList.isNotEmpty) {
List<Widget> widgets = [];
var length = appList.length;
for (var i = 0; i < length; i++) {
var app = appList[i];
widgets.add(Container(
child: MeRouterAppItemComponent(app),
));
if (i + 1 < length) {
widgets.add(Divider());
}
}
if (widgets.isNotEmpty) {
var listWidget = Container(
padding: EdgeInsets.all(Base.BASE_PADDING),
decoration: BoxDecoration(
color: themeData.cardColor,
borderRadius: BorderRadius.circular(
Base.BASE_PADDING,
),
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: widgets,
),
);
mainList.add(SliverToBoxAdapter(child: listWidget));
}
}
List<RemoteSigningInfo> penddingList =
remoteSigningProvider.penddingRemoteApps;
if (penddingList.isNotEmpty) {
List<Widget> widgets = [];
var length = penddingList.length;
for (var i = 0; i < length; i++) {
var remoteSigningInfo = penddingList[i];
var pubkey = getPublicKey(remoteSigningInfo.remoteSignerKey!);
String connectUrlType = "bunker";
if (StringUtil.isNotBlank(remoteSigningInfo.localPubkey)) {
connectUrlType = "nostrconnect";
}
var app = appList[index];
return Container(
child: MeRouterAppItemComponent(app),
widgets.add(Container(
child: Row(
children: [
Text(Nip19.encodeSimplePubKey(pubkey)),
Expanded(
child: Container(
margin: EdgeInsets.only(left: Base.BASE_PADDING_HALF),
child: Text(
DateFormatUtil.format(
remoteSigningInfo.createdAt!,
),
style: TextStyle(
color: themeData.hintColor,
),
),
)),
Container(
margin: const EdgeInsets.only(right: Base.BASE_PADDING),
child: TagComponent(connectUrlType),
),
AppTypeComponent(AppType.REMOTE),
],
),
));
if (i + 1 < length) {
widgets.add(Divider());
}
}
if (widgets.isNotEmpty) {
mainList.add(SliverToBoxAdapter(
child: Container(
margin: EdgeInsets.only(top: Base.BASE_PADDING),
child: Text(
"Pendding connect remote apps",
style: TextStyle(
fontWeight: FontWeight.bold,
),
),
),
));
var listWidget = Container(
margin: EdgeInsets.only(top: Base.BASE_PADDING),
padding: EdgeInsets.all(Base.BASE_PADDING),
decoration: BoxDecoration(
color: themeData.cardColor,
borderRadius: BorderRadius.circular(
Base.BASE_PADDING,
),
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: widgets,
),
);
},
itemCount: appList.length,
);
mainList.add(SliverToBoxAdapter(child: listWidget));
}
}
return Scaffold(
appBar: AppBar(
@@ -55,9 +162,18 @@ class _AppsRouter extends State<AppsRouter> {
padding: const EdgeInsets.all(Base.BASE_PADDING),
child: Icon(Icons.add),
),
)
),
],
),
body: Container(
padding: const EdgeInsets.all(Base.BASE_PADDING),
child: CustomScrollView(
slivers: mainList,
),
),
);
}
@override
Future<void> onReady(BuildContext context) async {}
}