Files
UUVPN/flutter/lib/widgets/connection_stats.dart
T
Zeus 876d355b18 update dio to dio: ^5.5.0+1
update  dio to  dio: ^5.5.0+1
2024-07-24 11:12:17 +08:00

233 lines
8.4 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:provider/provider.dart';
import 'package:uuvpn/channels/Platform.dart';
import 'package:uuvpn/constant/app_colors.dart';
import 'package:uuvpn/model/themeCollection.dart';
import 'package:uuvpn/models/app_model.dart';
import 'package:uuvpn/models/server_model.dart';
import 'package:uuvpn/models/user_model.dart';
import 'package:uuvpn/utils/l10n.dart';
import 'package:uuvpn/utils/navigator_util.dart';
class ConnectionStats extends StatefulWidget {
const ConnectionStats({Key? key}) : super(key: key);
@override
ConnectionStatsState createState() => ConnectionStatsState();
}
class ConnectionStatsState extends State<ConnectionStats> {
late UserModel _userModel;
late AppModel _appModel;
late ServerModel _serverModel;
@override
void didChangeDependencies() {
super.didChangeDependencies();
_userModel = Provider.of<UserModel>(context);
_appModel = Provider.of<AppModel>(context);
_serverModel = Provider.of<ServerModel>(context);
}
String toDateString(DateTime date) {
var duration = DateTime.now().difference(date);
var microseconds = duration.inMicroseconds;
var sign = (microseconds < 0) ? "-" : "";
var hours = microseconds ~/ Duration.microsecondsPerHour;
microseconds = microseconds.remainder(Duration.microsecondsPerHour);
var hoursPadding = hours.abs() < 10 ? "0" : "";
if (microseconds < 0) microseconds = -microseconds;
var minutes = microseconds ~/ Duration.microsecondsPerMinute;
microseconds = microseconds.remainder(Duration.microsecondsPerMinute);
var minutesPadding = minutes < 10 ? "0" : "";
var seconds = microseconds ~/ Duration.microsecondsPerSecond;
microseconds = microseconds.remainder(Duration.microsecondsPerSecond);
var secondsPadding = seconds < 10 ? "0" : "";
return "$sign$hoursPadding${hours.abs()}:"
"$minutesPadding$minutes:"
"$secondsPadding$seconds";
}
@override
Widget build(BuildContext context) {
bool isDarkTheme = Provider.of<ThemeCollection>(context).isDarkActive;
Color colortheme = isDarkTheme ? Colors.white : Colors.black;
//isDarkTheme ? Colors.white : Colors.black
if (Platform.isAndroid || Platform.isMacOS) {
return Column(
children: [
Padding(
padding:
EdgeInsets.symmetric(horizontal: ScreenUtil().setWidth(75)),
child: TextButton(
onPressed: () => _userModel.checkHasLogin(
context, () => NavigatorUtil.goServerList(context)),
child:
Row(mainAxisAlignment: MainAxisAlignment.center, children: [
Icon(Icons.map,
color: isDarkTheme ? Colors.white : Colors.black,
size: 20),
Text(context.l10n.clicktoselectanothernode,
style: TextStyle(
fontSize: 18,
color: isDarkTheme ? Colors.white : Colors.black)),
Icon(Icons.chevron_right,
color: isDarkTheme ? Colors.white : Colors.black,
size: 20)
])),
),
],
);
}
return Column(
children: [
Text(toDateString(_appModel.connectedDate!),
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 40,
color: colortheme,
)),
Padding(
padding: EdgeInsets.symmetric(horizontal: ScreenUtil().setWidth(75)),
child: TextButton(
onPressed: () => _userModel.checkHasLogin(
context, () => NavigatorUtil.goServerList(context)),
child:
Row(mainAxisAlignment: MainAxisAlignment.center, children: [
Icon(Icons.map,
color: isDarkTheme ? Colors.white : Colors.black, size: 20),
// Text(context.l10n.clicktoselectanothernode,
Text(" ${_serverModel.selectServerEntity?.name}",
style: TextStyle(
fontSize: 18,
color: isDarkTheme ? Colors.white : Colors.black)),
Icon(Icons.chevron_right,
color: isDarkTheme ? Colors.white : Colors.black, size: 20)
])),
),
/* Padding(
padding: EdgeInsets.symmetric(
horizontal: ScreenUtil().setWidth(75), vertical: 10),
child: Row(
children: [
// Download Stats
Row(children: [
// Download Icon
Container(
decoration: BoxDecoration(
boxShadow: const [
BoxShadow(
color: Color(0xffff0000),
blurRadius: 13,
spreadRadius: -2)
],
color: const Color(0xffff0000),
borderRadius: BorderRadius.circular(13)),
padding: const EdgeInsets.all(5),
child: const Icon(
Icons.arrow_downward,
color: Colors.white,
),
),
// Labels
Padding(
padding: const EdgeInsets.symmetric(horizontal: 8),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text(
"下行速度",
style: TextStyle(
color: AppColors.grayColor,
fontWeight: FontWeight.w500),
),
RichText(
text: const TextSpan(
style: TextStyle(
color: AppColors.grayColor,
fontWeight: FontWeight.w900),
children: [
TextSpan(text: "75.9"),
TextSpan(
text: " KB/s",
style:
TextStyle(fontWeight: FontWeight.normal)),
]),
)
],
),
)
]),
Expanded(child: Container()),
// Upload Stats
Row(children: [
// Upload Icon
Container(
decoration: BoxDecoration(
boxShadow: const [
BoxShadow(
color: Color(0xff03a305),
blurRadius: 13,
spreadRadius: -2)
],
color: const Color(0xff03a305),
borderRadius: BorderRadius.circular(13)),
padding: const EdgeInsets.all(5),
child: const Icon(
Icons.arrow_upward,
color: Colors.white,
),
),
// Labels
Padding(
padding: const EdgeInsets.symmetric(horizontal: 8),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text(
"上行速度",
style: TextStyle(
color: AppColors.grayColor,
fontWeight: FontWeight.w500),
),
RichText(
text: const TextSpan(
style: TextStyle(
color: AppColors.grayColor,
fontWeight: FontWeight.w900),
children: [
TextSpan(text: "29.6"),
TextSpan(
text: " KB/s",
style:
TextStyle(fontWeight: FontWeight.normal)),
]),
)
],
),
)
]),
],
),
)*/
],
);
}
}