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:nostr_sdk/utils/string_util.dart';
import 'package:nowser/component/image_component.dart';
import 'package:nowser/const/app_type.dart';
import 'package:nowser/const/base.dart';
import 'package:nowser/data/app.dart';
@@ -57,9 +58,15 @@ class _AuthAppInfoComponent extends State<AuthAppInfoComponent> {
Container(
margin:
const EdgeInsets.only(right: Base.BASE_PADDING_HALF),
child: Icon(
child: StringUtil.isBlank(widget.app.image)
? const Icon(
Icons.image,
size: 46,
)
: ImageComponent(
imageUrl: widget.app.image!,
width: 40,
height: 40,
),
),
Column(

View File

@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:nostr_sdk/utils/string_util.dart';
import 'package:nowser/component/auth_dialog/auth_dialog_base_componnet.dart';
import 'package:nowser/const/auth_result.dart';
import 'package:nowser/const/auth_type.dart';
import 'package:nowser/data/app.dart';
import 'package:nowser/util/router_util.dart';
@@ -56,10 +57,35 @@ class _AuthDialog extends State<AuthDialog> {
);
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
String authTitle = "Sign Event";
String authDes = "Allow web.nostrmo.com to sign a authenticate event";
authTitle = "AuthType ${widget.authType}";
String authDes = "Allow $appName to ";
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.add(Container(
@@ -124,6 +150,7 @@ class _AuthDialog extends State<AuthDialog> {
app: widget.app,
title: authTitle,
onConfirm: onConfirm,
pubkeyReadonly: true,
child: child,
);
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -105,8 +105,10 @@ class _IndexWebComponent extends State<IndexWebComponent> {
)),
wrapBottomBtn(const Icon(Icons.space_dashboard),
left: 8, right: 8),
wrapBottomBtn(const Icon(Icons.segment),
left: 8, right: 13),
wrapBottomBtn(const Icon(Icons.segment), 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/const/base.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/router/me/me_router_log_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) {
var mediaQueryData = MediaQuery.of(context);
var themeData = Theme.of(context);
var _appProvider = Provider.of<AppProvider>(context);
var listWidgetMargin = const EdgeInsets.only(
top: Base.BASE_PADDING,
@@ -145,20 +147,17 @@ class _MeRouter extends State<MeRouter> {
),
);
List<Widget> appList = [];
appList.add(Container(
child: MeRouterAppItemComponent(),
List<Widget> appWidgetList = [];
var appList = _appProvider.appList;
var length = appList.length;
for (var i = 0; i < length && i < 3; i++) {
var app = appList[i];
appWidgetList.add(Container(
child: MeRouterAppItemComponent(app),
));
appList.add(Divider());
appList.add(Container(
child: MeRouterAppItemComponent(),
));
appList.add(Divider());
appList.add(Container(
child: MeRouterAppItemComponent(),
));
appList.add(Divider());
appList.add(Container(
appWidgetList.add(Divider());
}
appWidgetList.add(Container(
alignment: Alignment.center,
child: Text(
"Show more",
@@ -178,7 +177,7 @@ class _MeRouter extends State<MeRouter> {
),
child: Column(
mainAxisSize: MainAxisSize.min,
children: appList,
children: appWidgetList,
),
);

View File

@@ -1,10 +1,17 @@
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/image_component.dart';
import 'package:nowser/const/app_type.dart';
import 'package:nowser/data/app.dart';
import '../../const/base.dart';
class MeRouterAppItemComponent extends StatefulWidget {
App app;
MeRouterAppItemComponent(this.app);
@override
State<StatefulWidget> createState() {
return _MeRouterAppItemComponent();
@@ -15,20 +22,31 @@ class _MeRouterAppItemComponent extends State<MeRouterAppItemComponent> {
@override
Widget build(BuildContext context) {
var imageWidget = Container(
margin: EdgeInsets.only(
margin: const EdgeInsets.only(
left: Base.BASE_PADDING_HALF,
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(
margin: EdgeInsets.only(right: Base.BASE_PADDING),
child: Text("Title APP"),
margin: const EdgeInsets.only(right: Base.BASE_PADDING),
child: Text(appName!),
);
var typeWidget = Container(
child: AppTypeComponent(AppType.WEB),
child: AppTypeComponent(widget.app.appType!),
);
var rightIconWidget = Container(