Fix core crash caused by windows resource manager restart Optimize logs, requests, access to pages Fix macos bypass domain issues
58 lines
1.2 KiB
Dart
58 lines
1.2 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;
|
|
_dispatcher.scheduleFrame();
|
|
debugPrint("[App] resume");
|
|
}
|
|
}
|
|
|
|
final render = system.isDesktop ? Render() : null;
|