new: full screen jitter

This commit is contained in:
lollipopkit
2023-06-08 22:45:38 +08:00
parent 0ddfc4ec75
commit 2095b79b9a
9 changed files with 120 additions and 48 deletions

View File

@@ -486,6 +486,18 @@ abstract class S {
/// **'Full screen mode'** /// **'Full screen mode'**
String get fullScreen; String get fullScreen;
/// No description provided for @fullScreenJitter.
///
/// In en, this message translates to:
/// **'Full screen jitter'**
String get fullScreenJitter;
/// No description provided for @fullScreenJitterHelp.
///
/// In en, this message translates to:
/// **'To avoid screen burn-in'**
String get fullScreenJitterHelp;
/// No description provided for @getPushTokenFailed. /// No description provided for @getPushTokenFailed.
/// ///
/// In en, this message translates to: /// In en, this message translates to:

View File

@@ -215,6 +215,12 @@ class SDe extends S {
@override @override
String get fullScreen => 'Full screen mode'; String get fullScreen => 'Full screen mode';
@override
String get fullScreenJitter => 'Full screen jitter';
@override
String get fullScreenJitterHelp => 'To avoid screen burn-in';
@override @override
String get getPushTokenFailed => 'Push-Token kann nicht abgerufen werden'; String get getPushTokenFailed => 'Push-Token kann nicht abgerufen werden';

View File

@@ -215,6 +215,12 @@ class SEn extends S {
@override @override
String get fullScreen => 'Full screen mode'; String get fullScreen => 'Full screen mode';
@override
String get fullScreenJitter => 'Full screen jitter';
@override
String get fullScreenJitterHelp => 'To avoid screen burn-in';
@override @override
String get getPushTokenFailed => 'Can\'t fetch push token'; String get getPushTokenFailed => 'Can\'t fetch push token';

View File

@@ -215,6 +215,12 @@ class SZh extends S {
@override @override
String get fullScreen => '全屏模式'; String get fullScreen => '全屏模式';
@override
String get fullScreenJitter => '全屏模式抖动';
@override
String get fullScreenJitterHelp => '防止烧屏';
@override @override
String get getPushTokenFailed => '未能获取到推送token'; String get getPushTokenFailed => '未能获取到推送token';

View File

@@ -69,4 +69,7 @@ class SettingStore extends PersistentStore {
StoreProperty<bool> get fullScreen => StoreProperty<bool> get fullScreen =>
property('fullScreen', defaultValue: false); property('fullScreen', defaultValue: false);
StoreProperty<bool> get fullScreenJitter =>
property('fullScreenJitter', defaultValue: true);
} }

View File

@@ -65,6 +65,8 @@
"fontSize": "Font size", "fontSize": "Font size",
"foundNUpdate": "Found {count} update", "foundNUpdate": "Found {count} update",
"fullScreen": "Full screen mode", "fullScreen": "Full screen mode",
"fullScreenJitter": "Full screen jitter",
"fullScreenJitterHelp": "To avoid screen burn-in",
"getPushTokenFailed": "Can't fetch push token", "getPushTokenFailed": "Can't fetch push token",
"gettingToken": "Getting token...", "gettingToken": "Getting token...",
"goto": "Go to", "goto": "Go to",

View File

@@ -65,6 +65,8 @@
"fontSize": "字体大小", "fontSize": "字体大小",
"foundNUpdate": "找到 {count} 个更新", "foundNUpdate": "找到 {count} 个更新",
"fullScreen": "全屏模式", "fullScreen": "全屏模式",
"fullScreenJitter": "全屏模式抖动",
"fullScreenJitterHelp": "防止烧屏",
"getPushTokenFailed": "未能获取到推送token", "getPushTokenFailed": "未能获取到推送token",
"gettingToken": "正在获取Token...", "gettingToken": "正在获取Token...",
"goto": "前往", "goto": "前往",

View File

@@ -1,3 +1,6 @@
import 'dart:async';
import 'dart:math';
import 'package:after_layout/after_layout.dart'; import 'package:after_layout/after_layout.dart';
import 'package:circle_chart/circle_chart.dart'; import 'package:circle_chart/circle_chart.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@@ -28,10 +31,11 @@ class FullScreenPage extends StatefulWidget {
} }
class _FullScreenPageState extends State<FullScreenPage> class _FullScreenPageState extends State<FullScreenPage>
with AfterLayoutMixin, AutomaticKeepAliveClientMixin { with AfterLayoutMixin {
late S _s; late S _s;
late MediaQueryData _media; late MediaQueryData _media;
late ThemeData _theme; late ThemeData _theme;
late Timer _timer;
final _pageController = PageController(initialPage: 0); final _pageController = PageController(initialPage: 0);
final _serverProvider = locator<ServerProvider>(); final _serverProvider = locator<ServerProvider>();
@@ -40,6 +44,13 @@ class _FullScreenPageState extends State<FullScreenPage>
void initState() { void initState() {
super.initState(); super.initState();
hideStatusBar(); hideStatusBar();
_timer = Timer.periodic(const Duration(minutes: 1), (_) => setState(() {}));
}
@override
void dispose() {
super.dispose();
_timer.cancel();
} }
@override @override
@@ -50,22 +61,35 @@ class _FullScreenPageState extends State<FullScreenPage>
_theme = Theme.of(context); _theme = Theme.of(context);
} }
// x = _media.size.width * 0.1
// r = Random().nextDouble()
// Return [-x * r, x * r]
double get _offset {
final x = _media.size.width * 0.03;
var r = Random().nextDouble();
final n = Random().nextBool() ? -1 : 1;
return n * x * r;
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
super.build(context); final offset = Offset(_offset, _offset);
return Scaffold( return Scaffold(
body: SafeArea( body: SafeArea(
child: RotatedBox( child: RotatedBox(
quarterTurns: 3, quarterTurns: 3,
child: Stack( child: Transform.translate(
children: [ offset: offset,
_buildMain(), child: Stack(
Positioned( children: [
top: 0, _buildMain(),
left: 0, Positioned(
child: _buildSettingBtn(), top: 0,
), left: 0,
], child: _buildSettingBtn(),
),
],
),
), ),
), ),
), ),
@@ -124,40 +148,44 @@ class _FullScreenPageState extends State<FullScreenPage>
'server detail page', 'server detail page',
).go(context), ).go(context),
child: Stack( child: Stack(
children: [ children: [
Positioned(top: 0, left: 0, right: 0, child: _buildServerCardTitle(ss, cs, spi)), Positioned(
Column( top: 0,
crossAxisAlignment: CrossAxisAlignment.center, left: 0,
mainAxisAlignment: MainAxisAlignment.center, right: 0,
children: [ child: _buildServerCardTitle(ss, cs, spi)),
SizedBox(height: _media.size.width * 0.1), Column(
Row( crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.spaceAround, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
_buildPercentCircle(ss.cpu.usedPercent()), SizedBox(height: _media.size.width * 0.1),
_buildPercentCircle(ss.mem.usedPercent * 100), Row(
_buildIOData( mainAxisAlignment: MainAxisAlignment.spaceAround,
'Conn:\n${ss.tcp.maxConn}', 'Fail:\n${ss.tcp.fail}'), children: [
_buildIOData( _buildPercentCircle(ss.cpu.usedPercent()),
'Total:\n${rootDisk.size}', _buildPercentCircle(ss.mem.usedPercent * 100),
'Used:\n${rootDisk.usedPercent}%', _buildIOData(
) 'Conn:\n${ss.tcp.maxConn}', 'Fail:\n${ss.tcp.fail}'),
], _buildIOData(
), 'Total:\n${rootDisk.size}',
SizedBox(height: _media.size.width * 0.1), 'Used:\n${rootDisk.usedPercent}%',
Row( )
mainAxisAlignment: MainAxisAlignment.spaceAround, ],
children: [ ),
_buildExplainText('CPU'), SizedBox(height: _media.size.width * 0.1),
_buildExplainText('Mem'), Row(
_buildExplainText('Net'), mainAxisAlignment: MainAxisAlignment.spaceAround,
_buildExplainText('Disk'), children: [
], _buildExplainText('CPU'),
), _buildExplainText('Mem'),
], _buildExplainText('Net'),
), _buildExplainText('Disk'),
], ],
), ),
],
),
],
),
); );
} }
@@ -172,6 +200,7 @@ class _FullScreenPageState extends State<FullScreenPage>
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
height13,
Row( Row(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
@@ -311,9 +340,6 @@ class _FullScreenPageState extends State<FullScreenPage>
); );
} }
@override
bool get wantKeepAlive => true;
@override @override
Future<void> afterFirstLayout(BuildContext context) async { Future<void> afterFirstLayout(BuildContext context) async {
await GetIt.I.allReady(); await GetIt.I.allReady();

View File

@@ -128,6 +128,7 @@ class _SettingPageState extends State<SettingPage> {
_buildLaunchPage(), _buildLaunchPage(),
_buildCheckUpdate(), _buildCheckUpdate(),
_buildFullScreen(), _buildFullScreen(),
_buildFullScreenJitter(),
]; ];
if (isIOS) { if (isIOS) {
children.add(_buildPushToken()); children.add(_buildPushToken());
@@ -672,4 +673,12 @@ class _SettingPageState extends State<SettingPage> {
), ),
); );
} }
Widget _buildFullScreenJitter() {
return ListTile(
title: Text(_s.fullScreenJitter),
subtitle: Text(_s.fullScreenJitterHelp, style: grey),
trailing: buildSwitch(context, _setting.fullScreenJitter),
);
}
} }