Skip to content

Commit

Permalink
Panel Info
Browse files Browse the repository at this point in the history
  • Loading branch information
Muska-Ami committed Dec 17, 2023
1 parent 95ab942 commit 63c4485
Show file tree
Hide file tree
Showing 13 changed files with 173 additions and 94 deletions.
32 changes: 32 additions & 0 deletions lib/controller.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import 'package:get/get.dart';
import 'package:nyalcf/util/cache/InfoCache.dart';
import 'package:nyalcf/util/model/User.dart';

class Controller extends GetxController {
var user = "".obs;
var email = "".obs;
var token = "".obs;
var avatar = "".obs;
var inbound = 0.obs;
var outbound = 0.obs;

var welcomeText = "好".obs;

load() async {
User userinfo = await InfoCache.getInfo();
user.value = userinfo.user;
email.value = userinfo.email;
token.value = userinfo.token;
avatar.value = userinfo.avatar;
inbound.value = userinfo.inbound;
outbound.value = userinfo.outbound;

int hour = DateTime.now().hour;

if (hour <= 12) {
welcomeText.value = "上午好";
} else {
welcomeText.value = "下午好";
}
}
}
2 changes: 2 additions & 0 deletions lib/main.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import 'package:bitsdojo_window/bitsdojo_window.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:nyalcf/controller.dart';
import 'package:nyalcf/ui/auth/login.dart';
import 'package:nyalcf/ui/auth/register.dart';
import 'package:nyalcf/ui/home.dart';
Expand All @@ -26,6 +27,7 @@ class App extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
Get.put(Controller());
return GetMaterialApp(
title: 'NyaLCF',
routes: {
Expand Down
7 changes: 4 additions & 3 deletions lib/ui/auth/login.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:nyalcf/util/cache/InfoCache.dart';
import 'package:nyalcf/util/dio/auth/login.dart';
import 'package:nyalcf/ui/model/AppbarActions.dart';
Expand Down Expand Up @@ -45,7 +46,7 @@ class _LoginState extends State<Login> {
constraints: const BoxConstraints(maxWidth: 400.0),
child: Column(children: <Widget>[
const Text(
"登录到LocyanFrp",
"登录到LoCyanFrp",
style: TextStyle(fontSize: 30),
),
Form(
Expand Down Expand Up @@ -107,9 +108,9 @@ class _LoginState extends State<Login> {
//print(UserInfoCache.info);
await InfoCache.setInfo(res);
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text('登录成功,欢迎您 ${res.UserName}'),
content: Text('登录成功,欢迎您 ${res.user}'),
));
Navigator.of(context).pushNamed("/panel/home");
Get.toNamed("/panel/home");
} else {
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text('登陆失败:${res}'),
Expand Down
2 changes: 1 addition & 1 deletion lib/ui/auth/register.dart
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class _RegisterState extends State<Register> {
constraints: const BoxConstraints(maxWidth: 400.0),
child: Column(children: <Widget>[
const Text(
"注册LocyanFrp账户",
"注册LoCyanFrp账户",
style: TextStyle(fontSize: 30),
),
Form(
Expand Down
7 changes: 3 additions & 4 deletions lib/ui/home.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:nyalcf/ui/model/FloatingActionButton.dart';

import 'model/AppbarActions.dart';
Expand Down Expand Up @@ -34,15 +35,13 @@ class Home extends StatelessWidget {
Container(
margin: const EdgeInsets.all(8.0),
child: ElevatedButton(
onPressed: () =>
Navigator.of(context).pushNamed("/login"),
onPressed: () => Get.toNamed("/login"),
child: const Text("登录")),
),
Container(
margin: const EdgeInsets.all(8.0),
child: ElevatedButton(
onPressed: () =>
Navigator.of(context).pushNamed("/register"),
onPressed: () => Get.toNamed("/register"),
child: const Text("注册"))),
],
),
Expand Down
10 changes: 6 additions & 4 deletions lib/ui/model/AppbarActions.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,13 @@
import 'package:bitsdojo_window/bitsdojo_window.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:nyalcf/controller.dart';

class AppbarActions {
AppbarActions({required this.context});

final Controller c = Get.find();

final context;

List<Widget> list() {
Expand All @@ -22,11 +26,9 @@ class AppbarActions {
}

List<Widget> actions({List<Widget>? append}) {
List<Widget> l = list();
if (append != null) {
return l;
}
List<Widget> l = <Widget>[];
l.addAll(append ?? []);
l.addAll(list());
return l;
}

Expand Down
6 changes: 3 additions & 3 deletions lib/ui/model/ToolDialog.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ class ToolDialog {
title: const Text("请问您今天想做点什么?"),
children: <Widget>[
SimpleDialogOption(
child: const Text("LocyanFrp Website"),
child: const Text("LoCyanFrp Website"),
onPressed: () async {
const url = 'https://www.locyanfrp.cn';
if (!await launchUrl(Uri.parse(url))) {
Expand All @@ -22,7 +22,7 @@ class ToolDialog {
}
}),
SimpleDialogOption(
child: const Text("LocyanFrp Dashboard"),
child: const Text("LoCyanFrp Dashboard"),
onPressed: () async {
const url = 'https://dashboard.locyanfrp.cn';
if (!await launchUrl(Uri.parse(url))) {
Expand All @@ -33,7 +33,7 @@ class ToolDialog {
}
}),
SimpleDialogOption(
child: const Text("LocyanFrp Dashboard (Preview)"),
child: const Text("LoCyanFrp Dashboard (Preview)"),
onPressed: () async {
const url = 'https://preview.locyanfrp.cn';
if (!await launchUrl(Uri.parse(url))) {
Expand Down
112 changes: 73 additions & 39 deletions lib/ui/panel/home.dart
Original file line number Diff line number Diff line change
@@ -1,21 +1,18 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:nyalcf/ui/model/FloatingActionButton.dart';
import 'package:nyalcf/util/cache/InfoCache.dart';
import 'package:nyalcf/util/model/User.dart';
import 'package:nyalcf/controller.dart';

import '../model/AppbarActions.dart';

class PanelHome extends StatelessWidget {
const PanelHome({super.key, required this.title});
PanelHome({super.key, required this.title});

final Controller c = Get.find();
final String title;

@override
Widget build(BuildContext context) {

// GetX
final Controller c = Get.put(Controller());
c.load();

return Scaffold(
Expand All @@ -25,41 +22,78 @@ class PanelHome extends StatelessWidget {
backgroundColor: Colors.pink[100],
automaticallyImplyLeading: false,
actions: AppbarActions(context: context).actions(append: <Widget>[
IconButton(
onPressed: () => {},
icon: ImageIcon(Image.network("").image),
color: Colors.white,
),
Obx(
() => IconButton(
onPressed: () => {},
icon: ImageIcon(
Image.network("${c.avatar}").image,
),
),
)
]),
),
body: Center(
child: Container(
margin: const EdgeInsets.all(40.0),
child: Column(
children: <Widget>[
Obx(() => Text(
"${c.user}",
style: TextStyle(fontSize: 30),
))
],
),
),
),
body: ListView(children: [
Container(
margin: const EdgeInsets.all(40.0),
child: Container(
child: Column(
children: <Widget>[
Obx(() => Text(
"指挥官 ${c.user},${c.welcomeText}喵!",
style: TextStyle(fontSize: 15),
)),
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Expanded(
child: Card(
child: Column(
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
ListTile(
leading: Icon(Icons.info),
title: Text("指挥官信息"),
),
Container(
margin: EdgeInsets.only(
left: 15.0, right: 15.0, bottom: 15.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.max,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Obx(() => Text("用户名:${c.user}")),
Obx(() => Text("邮箱:${c.email}")),
Obx(() => Text(
"限制速率:${c.inbound / 1024 * 8}Mbps/${c.outbound / 1024 * 8}Mbps")),
//Obx(() => Text(""))
],
),
)
],
),
)),
Expanded(
child: Card(
child: Column(
children: <Widget>[
ListTile(
leading: Icon(Icons.announcement),
title: Text("公告"),
),
Container(
margin: EdgeInsets.only(bottom: 15.0),
child: Text("看什么看,偷懒没写!(")),
],
),
)),
],
),
],
),
)),
]),
floatingActionButton: FloatingActionButtonX().button());
}
}

class Controller extends GetxController {
var user = "".obs;
var email = "".obs;
var token = "".obs;
var avatar = "".obs;

load() async {
User userinfo = await InfoCache.getInfo();
user = userinfo.user.obs;
email = userinfo.email.obs;
token = userinfo.token.obs;
avatar = userinfo.avatar.obs;
}
}
5 changes: 3 additions & 2 deletions lib/util/FileIO.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ import 'dart:io';
import 'package:path_provider/path_provider.dart';

class FileIO {

final _support_path = getApplicationSupportDirectory();
final _cache_path = getApplicationCacheDirectory();

Future<void> saveDataToFile(String fi, String data) async {
final File file = new File("${await _support_path}/$fi");
await file.writeAsString(data);
}

Future<String> readDataFromFile(String fi) async {
final File file = new File("${await _support_path}/$fi");
return await file.readAsString(encoding: utf8);
Expand All @@ -21,6 +21,7 @@ class FileIO {
final File file = new File("${await _cache_path}/$fi");
await file.writeAsString(data);
}

Future<String> readCache(String fi, String data) async {
final File file = new File("${_cache_path}/$fi");
return await file.readAsString(encoding: utf8);
Expand All @@ -29,4 +30,4 @@ class FileIO {
Future<Directory> get cache_path {
return _cache_path;
}
}
}
28 changes: 19 additions & 9 deletions lib/util/cache/InfoCache.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,37 @@ import 'package:shared_preferences/shared_preferences.dart';
import '../model/User.dart';

class InfoCache {

static Future<void> setInfo(User userinfo) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString("user_name", userinfo.user);
prefs.setString("user_email", userinfo.email);
prefs.setString("user_token", userinfo.token);
prefs.setString("user_avatar", userinfo.avatar);
prefs.setInt("user_inbound", userinfo.inbound);
prefs.setInt("user_outbound", userinfo.outbound);
prefs.setString("user_frp_token", userinfo.frp_token);
prefs.setInt("user_traffic", userinfo.traffic);
}

static Future<User> getInfo() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
String user = prefs.getString("user_name") ?? "";
String email = prefs.getString("user_email") ?? "";
String token = prefs.getString("user_token") ?? "";
String user = prefs.getString("user_name") ?? "";
String email = prefs.getString("user_email") ?? "";
String token = prefs.getString("user_token") ?? "";
String avatar = prefs.getString("user_avatar") ?? "";
int inbound = prefs.getInt("user_inbound") ?? 0;
int outbound = prefs.getInt("user_outbound") ?? 0;
String frp_token = prefs.getString("user_frp_token") ?? "";
int traffic = prefs.getInt("user_traffic") ?? 0;
return User(
user: user,
email: email,
token: token,
avatar: avatar
);
user: user,
email: email,
token: token,
avatar: avatar,
inbound: inbound,
outbound: outbound,
frp_token: frp_token,
traffic: traffic);
}

static void reset() {
Expand Down
6 changes: 5 additions & 1 deletion lib/util/dio/auth/login.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,11 @@ class LoginDio {
user: resData["username"],
email: resData["email"],
token: resData["token"],
avatar: resData["avatar"]);
avatar: resData["avatar"],
inbound: resData['inbound'],
outbound: resData['outbound'],
frp_token: resData['frp_token'],
traffic: resData['traffic']);
return userInfo;
} else {
return resData["msg"] ?? responseJson["status"];
Expand Down
1 change: 1 addition & 0 deletions lib/util/dio/frpc/download.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

Loading

0 comments on commit 63c4485

Please sign in to comment.