change some ui

This commit is contained in:
DASHU
2024-09-05 09:50:41 +08:00
parent 633a29cd79
commit 52d3138db3
10 changed files with 110 additions and 43 deletions

View File

@@ -1,5 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:nostr_sdk/utils/string_util.dart'; import 'package:nostr_sdk/utils/string_util.dart';
import 'package:nowser/component/image_component.dart';
import 'package:nowser/const/app_type.dart'; import 'package:nowser/const/app_type.dart';
import 'package:nowser/const/base.dart'; import 'package:nowser/const/base.dart';
import 'package:nowser/data/app.dart'; import 'package:nowser/data/app.dart';
@@ -57,10 +58,16 @@ class _AuthAppInfoComponent extends State<AuthAppInfoComponent> {
Container( Container(
margin: margin:
const EdgeInsets.only(right: Base.BASE_PADDING_HALF), const EdgeInsets.only(right: Base.BASE_PADDING_HALF),
child: Icon( child: StringUtil.isBlank(widget.app.image)
Icons.image, ? const Icon(
size: 46, Icons.image,
), size: 46,
)
: ImageComponent(
imageUrl: widget.app.image!,
width: 40,
height: 40,
),
), ),
Column( Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,

View File

@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:nostr_sdk/utils/string_util.dart'; import 'package:nostr_sdk/utils/string_util.dart';
import 'package:nowser/component/auth_dialog/auth_dialog_base_componnet.dart'; import 'package:nowser/component/auth_dialog/auth_dialog_base_componnet.dart';
import 'package:nowser/const/auth_result.dart'; import 'package:nowser/const/auth_result.dart';
import 'package:nowser/const/auth_type.dart';
import 'package:nowser/data/app.dart'; import 'package:nowser/data/app.dart';
import 'package:nowser/util/router_util.dart'; import 'package:nowser/util/router_util.dart';
@@ -56,10 +57,35 @@ class _AuthDialog extends State<AuthDialog> {
); );
var hintColor = themeData.hintColor; var hintColor = themeData.hintColor;
var appName = widget.app.name;
if (StringUtil.isNotBlank(widget.app.code)) {
appName = widget.app.code;
}
// handle this title and des with widget.authType // handle this title and des with widget.authType
String authTitle = "Sign Event"; String authTitle = "Sign Event";
String authDes = "Allow web.nostrmo.com to sign a authenticate event"; String authDes = "Allow $appName to ";
authTitle = "AuthType ${widget.authType}"; if (widget.authType == AuthType.GET_PUBLIC_KEY) {
authTitle = "Get Public Key";
authDes += "get public key";
} else if (widget.authType == AuthType.SIGN_EVENT) {
authTitle = "Sign Event";
authDes += "sign a ${widget.eventKind} event";
} else if (widget.authType == AuthType.GET_RELAYS) {
authTitle = "Get Relays";
authDes += "get relays";
} else if (widget.authType == AuthType.NIP04_ENCRYPT) {
authTitle = "Encrypt (NIP-04)";
authDes += "Encrypt (NIP-04)";
} else if (widget.authType == AuthType.NIP04_DECRYPT) {
authTitle = "Decrypt (NIP-04)";
authDes += "Decrypt (NIP-04)";
} else if (widget.authType == AuthType.NIP44_ENCRYPT) {
authTitle = "Encrypt (NIP-44)";
authDes += "Encrypt (NIP-44)";
} else if (widget.authType == AuthType.NIP44_DECRYPT) {
authTitle = "Decrypt (NIP-44)";
authDes += "Decrypt (NIP-44)";
}
List<Widget> list = []; List<Widget> list = [];
list.add(Container( list.add(Container(
@@ -124,6 +150,7 @@ class _AuthDialog extends State<AuthDialog> {
app: widget.app, app: widget.app,
title: authTitle, title: authTitle,
onConfirm: onConfirm, onConfirm: onConfirm,
pubkeyReadonly: true,
child: child, child: child,
); );
} }

View File

@@ -21,12 +21,15 @@ class AuthDialogBaseComponnet extends StatefulWidget {
Function(String)? onPubkeyChange; Function(String)? onPubkeyChange;
bool pubkeyReadonly;
AuthDialogBaseComponnet({ AuthDialogBaseComponnet({
required this.app, required this.app,
required this.title, required this.title,
required this.child, required this.child,
required this.onConfirm, required this.onConfirm,
this.onPubkeyChange, this.onPubkeyChange,
this.pubkeyReadonly = false,
}); });
@override @override
@@ -67,12 +70,15 @@ class _AuthDialog extends State<AuthDialogBaseComponnet> {
return DropdownButton<String>( return DropdownButton<String>(
items: items, items: items,
onChanged: (String? value) { isExpanded: true,
if (StringUtil.isNotBlank(value)) { onChanged: widget.pubkeyReadonly
widget.app.pubkey = value; ? null
setState(() {}); : (String? value) {
} if (StringUtil.isNotBlank(value)) {
}, widget.app.pubkey = value;
setState(() {});
}
},
value: widget.app.pubkey, value: widget.app.pubkey,
); );
}, selector: (context, provider) { }, selector: (context, provider) {
@@ -93,7 +99,7 @@ class _AuthDialog extends State<AuthDialogBaseComponnet> {
), ),
Expanded( Expanded(
child: Container( child: Container(
margin: EdgeInsets.only(right: Base.BASE_PADDING_HALF), margin: const EdgeInsets.only(right: Base.BASE_PADDING_HALF),
alignment: Alignment.centerRight, alignment: Alignment.centerRight,
child: keyWidget, child: keyWidget,
), ),

View File

@@ -27,6 +27,8 @@ class _WebHomeComponent extends State<WebHomeComponent> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
textEditingController.text = "https://nostr.build/login/";
// textEditingController.text = "https://web.nostrmo.com/";
} }
@override @override

View File

@@ -204,7 +204,7 @@ class _WebViewComponent extends State<WebViewComponent>
handlerName: "Nowser_JS_getPublicKey", handlerName: "Nowser_JS_getPublicKey",
callback: (jsMsgs) async { callback: (jsMsgs) async {
var jsMsg = jsMsgs[0]; var jsMsg = jsMsgs[0];
// print("Nowser_JS_getPublicKey $jsMsg"); print("Nowser_JS_getPublicKey $jsMsg");
var jsonObj = jsonDecode(jsMsg); var jsonObj = jsonDecode(jsMsg);
var resultId = jsonObj["resultId"]; var resultId = jsonObj["resultId"];
@@ -217,6 +217,7 @@ class _WebViewComponent extends State<WebViewComponent>
() { () {
nip07Reject(resultId, "Forbid"); nip07Reject(resultId, "Forbid");
}, (app, signer) { }, (app, signer) {
print("confirm get pubkey");
var pubkey = app.pubkey; var pubkey = app.pubkey;
var script = "window.nostr.callback(\"$resultId\", \"$pubkey\");"; var script = "window.nostr.callback(\"$resultId\", \"$pubkey\");";
controller.evaluateJavascript(source: script); controller.evaluateJavascript(source: script);
@@ -227,7 +228,7 @@ class _WebViewComponent extends State<WebViewComponent>
handlerName: "Nowser_JS_signEvent", handlerName: "Nowser_JS_signEvent",
callback: (jsMsgs) async { callback: (jsMsgs) async {
var jsMsg = jsMsgs[0]; var jsMsg = jsMsgs[0];
// print("Nowser_JS_signEvent $jsMsg"); print("Nowser_JS_signEvent $jsMsg");
var jsonObj = jsonDecode(jsMsg); var jsonObj = jsonDecode(jsMsg);
var resultId = jsonObj["resultId"]; var resultId = jsonObj["resultId"];
var content = jsonObj["msg"]; var content = jsonObj["msg"];
@@ -242,7 +243,7 @@ class _WebViewComponent extends State<WebViewComponent>
var eventKind = eventObj["kind"]; var eventKind = eventObj["kind"];
if (eventKind is int) { if (eventKind is int) {
checkPermission(context, AppType.WEB, code, AuthType.SIGN_EVENT, checkPermission(context, AppType.WEB, code, AuthType.SIGN_EVENT,
eventKind: eventKind, () { eventKind: eventKind, authDetail: content, () {
nip07Reject(resultId, "Forbid"); nip07Reject(resultId, "Forbid");
}, (app, signer) async { }, (app, signer) async {
var tags = eventObj["tags"]; var tags = eventObj["tags"];
@@ -270,7 +271,7 @@ class _WebViewComponent extends State<WebViewComponent>
handlerName: "Nowser_JS_getRelays", handlerName: "Nowser_JS_getRelays",
callback: (jsMsgs) async { callback: (jsMsgs) async {
var jsMsg = jsMsgs[0]; var jsMsg = jsMsgs[0];
// print("Nowser_JS_getRelays $jsMsg"); print("Nowser_JS_getRelays $jsMsg");
var jsonObj = jsonDecode(jsMsg); var jsonObj = jsonDecode(jsMsg);
var resultId = jsonObj["resultId"]; var resultId = jsonObj["resultId"];
@@ -303,7 +304,7 @@ class _WebViewComponent extends State<WebViewComponent>
handlerName: "Nowser_JS_nip04_encrypt", handlerName: "Nowser_JS_nip04_encrypt",
callback: (jsMsgs) async { callback: (jsMsgs) async {
var jsMsg = jsMsgs[0]; var jsMsg = jsMsgs[0];
// print("Nowser_JS_nip04_encrypt $jsMsg"); print("Nowser_JS_nip04_encrypt $jsMsg");
var jsonObj = jsonDecode(jsMsg); var jsonObj = jsonDecode(jsMsg);
var resultId = jsonObj["resultId"]; var resultId = jsonObj["resultId"];
var msg = jsonObj["msg"]; var msg = jsonObj["msg"];
@@ -335,7 +336,7 @@ class _WebViewComponent extends State<WebViewComponent>
handlerName: "Nowser_JS_nip04_decrypt", handlerName: "Nowser_JS_nip04_decrypt",
callback: (jsMsgs) async { callback: (jsMsgs) async {
var jsMsg = jsMsgs[0]; var jsMsg = jsMsgs[0];
// print("Nowser_JS_nip04_decrypt $jsMsg"); print("Nowser_JS_nip04_decrypt $jsMsg");
var jsonObj = jsonDecode(jsMsg.message); var jsonObj = jsonDecode(jsMsg.message);
var resultId = jsonObj["resultId"]; var resultId = jsonObj["resultId"];
var msg = jsonObj["msg"]; var msg = jsonObj["msg"];
@@ -370,7 +371,7 @@ class _WebViewComponent extends State<WebViewComponent>
handlerName: "Nowser_JS_nip44_encrypt", handlerName: "Nowser_JS_nip44_encrypt",
callback: (jsMsgs) async { callback: (jsMsgs) async {
var jsMsg = jsMsgs[0]; var jsMsg = jsMsgs[0];
// print("Nowser_JS_nip04_encrypt $jsMsg"); print("Nowser_JS_nip44_encrypt $jsMsg");
var jsonObj = jsonDecode(jsMsg); var jsonObj = jsonDecode(jsMsg);
var resultId = jsonObj["resultId"]; var resultId = jsonObj["resultId"];
var msg = jsonObj["msg"]; var msg = jsonObj["msg"];
@@ -402,7 +403,7 @@ class _WebViewComponent extends State<WebViewComponent>
handlerName: "Nowser_JS_nip44_decrypt", handlerName: "Nowser_JS_nip44_decrypt",
callback: (jsMsgs) async { callback: (jsMsgs) async {
var jsMsg = jsMsgs[0]; var jsMsg = jsMsgs[0];
// print("Nowser_JS_nip04_decrypt $jsMsg"); print("Nowser_JS_nip44_decrypt $jsMsg");
var jsonObj = jsonDecode(jsMsg.message); var jsonObj = jsonDecode(jsMsg.message);
var resultId = jsonObj["resultId"]; var resultId = jsonObj["resultId"];
var msg = jsonObj["msg"]; var msg = jsonObj["msg"];

View File

@@ -94,6 +94,9 @@ class _MyApp extends State<MyApp> {
ListenableProvider<KeyProvider>.value( ListenableProvider<KeyProvider>.value(
value: keyProvider, value: keyProvider,
), ),
ListenableProvider<AppProvider>.value(
value: appProvider,
),
], ],
child: MaterialApp( child: MaterialApp(
builder: BotToastInit(), builder: BotToastInit(),

View File

@@ -9,6 +9,8 @@ import '../data/app.dart';
class AppProvider extends ChangeNotifier { class AppProvider extends ChangeNotifier {
List<App> _list = []; List<App> _list = [];
List<App> get appList => _list;
Map<String, Map<String, int>> appPermissions = {}; Map<String, Map<String, int>> appPermissions = {};
Future<void> reload() async { Future<void> reload() async {

View File

@@ -105,8 +105,10 @@ class _IndexWebComponent extends State<IndexWebComponent> {
)), )),
wrapBottomBtn(const Icon(Icons.space_dashboard), wrapBottomBtn(const Icon(Icons.space_dashboard),
left: 8, right: 8), left: 8, right: 8),
wrapBottomBtn(const Icon(Icons.segment), wrapBottomBtn(const Icon(Icons.segment), left: 8, right: 13,
left: 8, right: 13), onTap: () {
RouterUtil.router(context, RouterPath.ME);
}),
], ],
), ),
), ),

View File

@@ -4,6 +4,7 @@ import 'package:nowser/component/user/user_name_component.dart';
import 'package:nowser/component/user/user_pic_component.dart'; import 'package:nowser/component/user/user_pic_component.dart';
import 'package:nowser/const/base.dart'; import 'package:nowser/const/base.dart';
import 'package:nowser/const/router_path.dart'; import 'package:nowser/const/router_path.dart';
import 'package:nowser/provider/app_provider.dart';
import 'package:nowser/provider/key_provider.dart'; import 'package:nowser/provider/key_provider.dart';
import 'package:nowser/router/me/me_router_log_item_component.dart'; import 'package:nowser/router/me/me_router_log_item_component.dart';
import 'package:nowser/router/me/me_router_web_item_component.dart'; import 'package:nowser/router/me/me_router_web_item_component.dart';
@@ -25,6 +26,7 @@ class _MeRouter extends State<MeRouter> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
var mediaQueryData = MediaQuery.of(context); var mediaQueryData = MediaQuery.of(context);
var themeData = Theme.of(context); var themeData = Theme.of(context);
var _appProvider = Provider.of<AppProvider>(context);
var listWidgetMargin = const EdgeInsets.only( var listWidgetMargin = const EdgeInsets.only(
top: Base.BASE_PADDING, top: Base.BASE_PADDING,
@@ -145,20 +147,17 @@ class _MeRouter extends State<MeRouter> {
), ),
); );
List<Widget> appList = []; List<Widget> appWidgetList = [];
appList.add(Container( var appList = _appProvider.appList;
child: MeRouterAppItemComponent(), var length = appList.length;
)); for (var i = 0; i < length && i < 3; i++) {
appList.add(Divider()); var app = appList[i];
appList.add(Container( appWidgetList.add(Container(
child: MeRouterAppItemComponent(), child: MeRouterAppItemComponent(app),
)); ));
appList.add(Divider()); appWidgetList.add(Divider());
appList.add(Container( }
child: MeRouterAppItemComponent(), appWidgetList.add(Container(
));
appList.add(Divider());
appList.add(Container(
alignment: Alignment.center, alignment: Alignment.center,
child: Text( child: Text(
"Show more", "Show more",
@@ -178,7 +177,7 @@ class _MeRouter extends State<MeRouter> {
), ),
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: appList, children: appWidgetList,
), ),
); );

View File

@@ -1,10 +1,17 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:nostr_sdk/utils/string_util.dart';
import 'package:nowser/component/app/app_type_component.dart'; import 'package:nowser/component/app/app_type_component.dart';
import 'package:nowser/component/image_component.dart';
import 'package:nowser/const/app_type.dart'; import 'package:nowser/const/app_type.dart';
import 'package:nowser/data/app.dart';
import '../../const/base.dart'; import '../../const/base.dart';
class MeRouterAppItemComponent extends StatefulWidget { class MeRouterAppItemComponent extends StatefulWidget {
App app;
MeRouterAppItemComponent(this.app);
@override @override
State<StatefulWidget> createState() { State<StatefulWidget> createState() {
return _MeRouterAppItemComponent(); return _MeRouterAppItemComponent();
@@ -15,20 +22,31 @@ class _MeRouterAppItemComponent extends State<MeRouterAppItemComponent> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var imageWidget = Container( var imageWidget = Container(
margin: EdgeInsets.only( margin: const EdgeInsets.only(
left: Base.BASE_PADDING_HALF, left: Base.BASE_PADDING_HALF,
right: Base.BASE_PADDING, right: Base.BASE_PADDING,
), ),
child: Icon(Icons.image), child: StringUtil.isBlank(widget.app.image)
? const Icon(Icons.image)
: ImageComponent(
imageUrl: widget.app.image!,
width: 40,
height: 40,
),
); );
var appName = widget.app.name;
if (StringUtil.isBlank(widget.app.code)) {
appName = widget.app.code;
}
var titleWidget = Container( var titleWidget = Container(
margin: EdgeInsets.only(right: Base.BASE_PADDING), margin: const EdgeInsets.only(right: Base.BASE_PADDING),
child: Text("Title APP"), child: Text(appName!),
); );
var typeWidget = Container( var typeWidget = Container(
child: AppTypeComponent(AppType.WEB), child: AppTypeComponent(widget.app.appType!),
); );
var rightIconWidget = Container( var rightIconWidget = Container(