home_view.dart 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. import 'dart:io';
  2. import 'package:flutter/foundation.dart';
  3. import 'package:flutter/material.dart';
  4. import 'package:get/get.dart';
  5. import 'package:naiyouwl/app/component/sys_app_bar.dart';
  6. import 'package:window_manager/window_manager.dart';
  7. import '../../../component/connection_status.dart';
  8. import '../../../component/connection_widget.dart';
  9. import '../../../global_controller/GlobalController.dart';
  10. import '../controllers/home_controller.dart';
  11. class HomeView extends GetView<HomeController> {
  12. const HomeView({Key? key}) : super(key: key);
  13. @override
  14. Widget build(BuildContext context) {
  15. return Container(
  16. decoration: const BoxDecoration(
  17. image: DecorationImage(
  18. image: AssetImage("images/main/main.png"),
  19. fit: BoxFit.fill,
  20. ),
  21. ),
  22. child: Scaffold(
  23. backgroundColor: Colors.transparent,
  24. appBar: const SysAppBar(title: Text("首页"),),
  25. body: Obx(() {
  26. return controller.globalController.isLoading.value ? const CircularProgressIndicator() : Column(
  27. children: [
  28. UserStatusWidget(isActive: controller.GetEnable(),isLoading: controller.isLoading.value,username:controller.GetUserName(),expiryDate: controller.GetExpiredAt(),userTraffic:controller.GetTraffic(),onRefresh: () async {
  29. // 这里插入刷新操作代码
  30. //await Future.delayed(Duration(seconds: 2));
  31. if(controller.isLoading.value != true){
  32. controller.fetchUserinfo();
  33. }
  34. },),
  35. Padding(
  36. padding: const EdgeInsets.fromLTRB(20, 20, 0, 0),
  37. child: Row(
  38. children: controller.imageMap.entries.expand((entry) {
  39. return [
  40. GestureDetector(
  41. onTap: () => controller.onImageTap(entry.key),
  42. child: Image(
  43. image: AssetImage(entry.value),
  44. width: 60,
  45. height: 60,
  46. ),
  47. ),
  48. //Spacer(), // 平均分配间隔
  49. const SizedBox(width: 30),
  50. ];
  51. }).toList()
  52. ..removeLast(), // 删除最后一个Spacer
  53. )
  54. ),
  55. const SizedBox(height: 35,),
  56. const Padding(
  57. padding: EdgeInsets.fromLTRB(30, 0, 30, 0),
  58. child: Row(
  59. children: [
  60. Text("http://127.0.0.1:5336"),
  61. Spacer(),
  62. Text("socks://127.0.0.1:5337"),
  63. ],
  64. ),
  65. ),
  66. ConnectionWidget(
  67. status: ConnectionStatus.disconnected, onStatusChange: (con) {
  68. },),
  69. Padding(
  70. padding: const EdgeInsets.fromLTRB(20, 0, 20, 0),
  71. child: SizedBox(
  72. width: 200,
  73. height: 40,
  74. child: ElevatedButton(
  75. onPressed: () {
  76. controller.RouteNode();
  77. },
  78. style: ElevatedButton.styleFrom(
  79. primary: Colors.white, // 设置背景颜色为白色
  80. onPrimary: Colors.black, // 设置文字颜色为黑色,确保在白色背景上可见
  81. shape: RoundedRectangleBorder(
  82. borderRadius: BorderRadius.circular(20), // 设置圆角
  83. ),
  84. ),
  85. child: Text(controller.GetNode()),
  86. ),
  87. ),
  88. ),
  89. ],
  90. );
  91. })
  92. ),
  93. );
  94. }
  95. }
  96. class UserStatusWidget extends StatefulWidget {
  97. final Future<void> Function() onRefresh; // 新增的回调
  98. final bool isActive;
  99. final bool isLoading; // 新增的变量
  100. final String username;
  101. final String userTraffic;
  102. final String expiryDate;
  103. const UserStatusWidget({Key? key, required this.isActive, required this.isLoading,required this.username, required this.userTraffic, required this.expiryDate, required this.onRefresh}) : super(key: key);
  104. @override
  105. _UserStatusWidgetState createState() => _UserStatusWidgetState();
  106. }
  107. class _UserStatusWidgetState extends State<UserStatusWidget> {
  108. @override
  109. Widget build(BuildContext context) {
  110. String imagePath = widget.isActive
  111. ? "images/main/userstatus.png"
  112. : "images/main/userstatusoff.png";
  113. return Align(
  114. alignment: Alignment.topCenter,
  115. child: Padding(
  116. padding: const EdgeInsets.fromLTRB(10.0, 0, 10.0, 10.0),
  117. child:
  118. Row(
  119. children: [
  120. const SizedBox(
  121. width: 80,
  122. height: 20,
  123. ),
  124. Column(
  125. crossAxisAlignment: CrossAxisAlignment.start, // 这将使子组件从左边开始对齐
  126. children: [
  127. Row(
  128. children: [
  129. Text(widget.username),
  130. const SizedBox(width: 10,),
  131. Image(
  132. image: AssetImage(imagePath),
  133. width: 80,
  134. height: 30,
  135. ),
  136. const SizedBox(width: 10,),
  137. IconButton(
  138. icon: widget.isLoading ? const CircularProgressIndicator() : Image.asset("images/main/refresh.png"),
  139. onPressed: () {
  140. // 刷新操作
  141. if(!widget.isLoading){
  142. widget.onRefresh();
  143. }
  144. },
  145. )
  146. ],
  147. ),
  148. Text(
  149. widget.expiryDate,
  150. style: const TextStyle(
  151. fontSize: 8.0, // 设置字体大小为20像素
  152. ),
  153. ),
  154. Text(
  155. widget.userTraffic,
  156. style: const TextStyle(
  157. fontSize: 8.0, // 设置字体大小为20像素
  158. ),
  159. )
  160. ],
  161. ),
  162. ],
  163. ),
  164. // const SizedBox(height: 10,), // 可调整间隔
  165. ),
  166. );
  167. }
  168. }