Add file editor Fix android service issues Optimize desktop background performance Optimize android main process performance Optimize delay test Optimize vpn protect
57 lines
1.1 KiB
Dart
57 lines
1.1 KiB
Dart
import 'package:fl_clash/common/common.dart';
|
|
import 'package:flutter/cupertino.dart';
|
|
import 'package:flutter/scheduler.dart';
|
|
|
|
class Render {
|
|
static Render? _instance;
|
|
bool _isPaused = false;
|
|
final _dispatcher = SchedulerBinding.instance.platformDispatcher;
|
|
FrameCallback? _beginFrame;
|
|
VoidCallback? _drawFrame;
|
|
|
|
Render._internal();
|
|
|
|
factory Render() {
|
|
_instance ??= Render._internal();
|
|
return _instance!;
|
|
}
|
|
|
|
active() {
|
|
resume();
|
|
pause();
|
|
}
|
|
|
|
pause() {
|
|
debouncer.call(
|
|
"render_pause",
|
|
_pause,
|
|
duration: Duration(seconds: 5),
|
|
);
|
|
}
|
|
|
|
resume() {
|
|
debouncer.cancel("render_pause");
|
|
_resume();
|
|
}
|
|
|
|
void _pause() {
|
|
if (_isPaused) return;
|
|
_isPaused = true;
|
|
_beginFrame = _dispatcher.onBeginFrame;
|
|
_drawFrame = _dispatcher.onDrawFrame;
|
|
_dispatcher.onBeginFrame = null;
|
|
_dispatcher.onDrawFrame = null;
|
|
debugPrint("[App] pause");
|
|
}
|
|
|
|
void _resume() {
|
|
if (!_isPaused) return;
|
|
_isPaused = false;
|
|
_dispatcher.onBeginFrame = _beginFrame;
|
|
_dispatcher.onDrawFrame = _drawFrame;
|
|
debugPrint("[App] resume");
|
|
}
|
|
}
|
|
|
|
final render = system.isDesktop ? Render() : null;
|