diff --git a/lib/data/provider/server.dart b/lib/data/provider/server.dart index 0d1f727c..13e08da4 100644 --- a/lib/data/provider/server.dart +++ b/lib/data/provider/server.dart @@ -23,6 +23,8 @@ class ServerProvider extends BusyProvider { List _servers = []; List get servers => _servers; + Timer? _timer; + final logger = Logger('ServerProvider'); Memory get emptyMemory => @@ -95,11 +97,19 @@ class ServerProvider extends BusyProvider { final duration = locator().serverStatusUpdateInterval.fetch()!; if (duration == 0) return; - Timer.periodic(Duration(seconds: duration), (_) async { + stopAutoRefresh(); + _timer = Timer.periodic(Duration(seconds: duration), (_) async { await refreshData(); }); } + void stopAutoRefresh() { + if (_timer != null) { + _timer!.cancel(); + _timer = null; + } + } + void addServer(ServerPrivateInfo info) { _servers.add(genInfo(info)); locator().put(info); diff --git a/lib/data/res/build_data.dart b/lib/data/res/build_data.dart index f5c9d9ce..56d4e89e 100644 --- a/lib/data/res/build_data.dart +++ b/lib/data/res/build_data.dart @@ -2,9 +2,9 @@ class BuildData { static const String name = "ToolBox"; - static const int build = 65; + static const int build = 68; static const String engine = "Flutter 2.8.1 • channel stable • https://github.com/flutter/flutter.git\nFramework • revision 77d935af4d (2 weeks ago) • 2021-12-16 08:37:33 -0800\nEngine • revision 890a5fca2e\nTools • Dart 2.15.1\n"; - static const String buildAt = "2021-12-31 15:55:47.350456"; - static const int modifications = 7; + static const String buildAt = "2022-01-02 14:53:09.769990"; + static const int modifications = 3; } diff --git a/lib/view/page/home.dart b/lib/view/page/home.dart index 5f9ed47b..0ef6429f 100644 --- a/lib/view/page/home.dart +++ b/lib/view/page/home.dart @@ -31,16 +31,37 @@ class _MyHomePageState extends State with AutomaticKeepAliveClientMixin, SingleTickerProviderStateMixin, - AfterLayoutMixin { + AfterLayoutMixin, + WidgetsBindingObserver { final List _tabs = ['Servers', 'En/Decode']; late final TabController _tabController; + late final ServerProvider _serverProvider; @override void initState() { super.initState(); + _serverProvider = locator(); + WidgetsBinding.instance?.addObserver(this); _tabController = TabController(length: _tabs.length, vsync: this); } + @override + void dispose() { + super.dispose(); + WidgetsBinding.instance?.removeObserver(this); + } + + @override + void didChangeAppLifecycleState(AppLifecycleState state) { + super.didChangeAppLifecycleState(state); + if (state == AppLifecycleState.paused) { + _serverProvider.stopAutoRefresh(); + } + if (state == AppLifecycleState.resumed) { + _serverProvider.startAutoRefresh(); + } + } + @override Widget build(BuildContext context) { setTransparentNavigationBar(context); diff --git a/lib/view/page/server/detail.dart b/lib/view/page/server/detail.dart index 72d99d90..be4ee9ee 100644 --- a/lib/view/page/server/detail.dart +++ b/lib/view/page/server/detail.dart @@ -210,8 +210,8 @@ class _ServerDetailPageState extends State _buildMemExplain(convertMB(ss.memory.used), pColor), _buildMemExplain( convertMB(ss.memory.cache), pColor.withAlpha(77)), - _buildMemExplain( - convertMB(ss.memory.total - ss.memory.avail), progressColor.resolve(context)) + _buildMemExplain(convertMB(ss.memory.total - ss.memory.used), + progressColor.resolve(context)) ], ), const SizedBox( @@ -243,7 +243,7 @@ class _ServerDetailPageState extends State )); } - Widget _buildMemExplain(String type, Color color) { + Widget _buildMemExplain(String value, Color color) { return Row( children: [ Container( @@ -252,7 +252,12 @@ class _ServerDetailPageState extends State width: 11, ), const SizedBox(width: 4), - Text(type, style: style11, textScaleFactor: 1.0) + Text( + value, + style: style11, + textScaleFactor: 1.0, + textAlign: TextAlign.center, + ) ], ); } diff --git a/lib/view/page/server/tab.dart b/lib/view/page/server/tab.dart index 97e62725..f424503e 100644 --- a/lib/view/page/server/tab.dart +++ b/lib/view/page/server/tab.dart @@ -67,7 +67,7 @@ class _ServerPageState extends State child: AnimationLimiter( child: Column( children: AnimationConfiguration.toStaggeredList( - duration: const Duration(milliseconds: 777), + duration: const Duration(milliseconds: 477), childAnimationBuilder: (widget) => SlideAnimation( verticalOffset: 77.0, child: FadeInAnimation( @@ -155,7 +155,9 @@ class _ServerPageState extends State accelerationCurve: Curves.linear, decelerationDuration: const Duration(seconds: 3), decelerationCurve: Curves.linear, - text: topRightStr, textScaleFactor: 1.0, style: style), + text: topRightStr, + textScaleFactor: 1.0, + style: style), ) : Text(topRightStr, style: style, textScaleFactor: 1.0), ], diff --git a/lib/view/page/setting.dart b/lib/view/page/setting.dart index 7f32d237..e0cd30fb 100644 --- a/lib/view/page/setting.dart +++ b/lib/view/page/setting.dart @@ -3,6 +3,7 @@ import 'package:flutter_material_color_picker/flutter_material_color_picker.dart import 'package:provider/provider.dart'; import 'package:toolbox/core/update.dart'; import 'package:toolbox/data/provider/app.dart'; +import 'package:toolbox/data/provider/server.dart'; import 'package:toolbox/data/res/build_data.dart'; import 'package:toolbox/data/res/color.dart'; import 'package:toolbox/data/store/setting.dart'; @@ -22,6 +23,7 @@ class _SettingPageState extends State { double _intervalValue = 0; late Color priColor; static const textStyle = TextStyle(fontSize: 14); + late final ServerProvider _serverProvider; @override void didChangeDependencies() { @@ -32,6 +34,7 @@ class _SettingPageState extends State { @override void initState() { super.initState(); + _serverProvider = locator(); _store = locator(); _intervalValue = _store.serverStatusUpdateInterval.fetch()!.toDouble(); } @@ -88,7 +91,7 @@ class _SettingPageState extends State { textAlign: TextAlign.start, ), subtitle: const Text( - 'Will take effect the next time app launches.', + 'Will take effect immediately.', style: TextStyle(color: Colors.grey), ), trailing: Text('${_intervalValue.toInt()} s'), @@ -104,8 +107,10 @@ class _SettingPageState extends State { _intervalValue = newValue; }); }, - onChangeEnd: (val) => - _store.serverStatusUpdateInterval.put(val.toInt()), + onChangeEnd: (val) { + _store.serverStatusUpdateInterval.put(val.toInt()); + _serverProvider.startAutoRefresh(); + }, label: '${_intervalValue.toInt()} seconds', divisions: 10, ),