fix: mobile, query onlines, on active (#8796)
* fix: mobile, query onlines, on active Signed-off-by: dignow <linlong1265@gmail.com> * Update peer_tab_page.dart --------- Signed-off-by: dignow <linlong1265@gmail.com> Co-authored-by: RustDesk <71636191+rustdesk@users.noreply.github.com>
This commit is contained in:
parent
2ffc2ad85b
commit
614086a216
@ -875,11 +875,14 @@ class _PeerSortDropdownState extends State<PeerSortDropdown> {
|
|||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
if (!PeerSortType.values.contains(peerSort.value)) {
|
if (!PeerSortType.values.contains(peerSort.value)) {
|
||||||
|
Future.delayed(Duration.zero, () {
|
||||||
|
// do not change obx directly in initState, so do in future.
|
||||||
peerSort.value = PeerSortType.remoteId;
|
peerSort.value = PeerSortType.remoteId;
|
||||||
bind.setLocalFlutterOption(
|
bind.setLocalFlutterOption(
|
||||||
k: kOptionPeerSorting,
|
k: kOptionPeerSorting,
|
||||||
v: peerSort.value,
|
v: peerSort.value,
|
||||||
);
|
);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
super.initState();
|
super.initState();
|
||||||
}
|
}
|
||||||
|
@ -70,7 +70,8 @@ class _PeersView extends StatefulWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// State for the peer widget.
|
/// State for the peer widget.
|
||||||
class _PeersViewState extends State<_PeersView> with WindowListener {
|
class _PeersViewState extends State<_PeersView>
|
||||||
|
with WindowListener, WidgetsBindingObserver {
|
||||||
static const int _maxQueryCount = 3;
|
static const int _maxQueryCount = 3;
|
||||||
final HashMap<String, String> _emptyMessages = HashMap.from({
|
final HashMap<String, String> _emptyMessages = HashMap.from({
|
||||||
LoadEvent.recent: 'empty_recent_tip',
|
LoadEvent.recent: 'empty_recent_tip',
|
||||||
@ -85,6 +86,7 @@ class _PeersViewState extends State<_PeersView> with WindowListener {
|
|||||||
var _lastQueryTime = DateTime.now();
|
var _lastQueryTime = DateTime.now();
|
||||||
var _queryCount = 0;
|
var _queryCount = 0;
|
||||||
var _exit = false;
|
var _exit = false;
|
||||||
|
bool _isActive = true;
|
||||||
|
|
||||||
final _scrollController = ScrollController();
|
final _scrollController = ScrollController();
|
||||||
|
|
||||||
@ -95,12 +97,14 @@ class _PeersViewState extends State<_PeersView> with WindowListener {
|
|||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
windowManager.addListener(this);
|
windowManager.addListener(this);
|
||||||
|
WidgetsBinding.instance.addObserver(this);
|
||||||
super.initState();
|
super.initState();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
windowManager.removeListener(this);
|
windowManager.removeListener(this);
|
||||||
|
WidgetsBinding.instance.removeObserver(this);
|
||||||
_exit = true;
|
_exit = true;
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
@ -115,6 +119,20 @@ class _PeersViewState extends State<_PeersView> with WindowListener {
|
|||||||
_queryCount = _maxQueryCount;
|
_queryCount = _maxQueryCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This function is required for mobile.
|
||||||
|
// `onWindowFocus` works fine for desktop.
|
||||||
|
@override
|
||||||
|
void didChangeAppLifecycleState(AppLifecycleState state) {
|
||||||
|
super.didChangeAppLifecycleState(state);
|
||||||
|
if (isDesktop) return;
|
||||||
|
if (state == AppLifecycleState.resumed) {
|
||||||
|
_isActive = true;
|
||||||
|
_queryCount = 0;
|
||||||
|
} else if (state == AppLifecycleState.inactive) {
|
||||||
|
_isActive = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return ChangeNotifierProvider<Peers>(
|
return ChangeNotifierProvider<Peers>(
|
||||||
@ -268,7 +286,7 @@ class _PeersViewState extends State<_PeersView> with WindowListener {
|
|||||||
_queryOnlines(false);
|
_queryOnlines(false);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (_queryCount < _maxQueryCount || !p) {
|
if (_isActive && (_queryCount < _maxQueryCount || !p)) {
|
||||||
if (now.difference(_lastQueryTime) >= _queryInterval) {
|
if (now.difference(_lastQueryTime) >= _queryInterval) {
|
||||||
if (_curPeers.isNotEmpty) {
|
if (_curPeers.isNotEmpty) {
|
||||||
bind.queryOnlines(ids: _curPeers.toList(growable: false));
|
bind.queryOnlines(ids: _curPeers.toList(growable: false));
|
||||||
@ -286,14 +304,14 @@ class _PeersViewState extends State<_PeersView> with WindowListener {
|
|||||||
_queryOnlines(bool isLoadEvent) {
|
_queryOnlines(bool isLoadEvent) {
|
||||||
if (_curPeers.isNotEmpty) {
|
if (_curPeers.isNotEmpty) {
|
||||||
bind.queryOnlines(ids: _curPeers.toList(growable: false));
|
bind.queryOnlines(ids: _curPeers.toList(growable: false));
|
||||||
|
_queryCount = 0;
|
||||||
|
}
|
||||||
_lastQueryPeers = {..._curPeers};
|
_lastQueryPeers = {..._curPeers};
|
||||||
if (isLoadEvent) {
|
if (isLoadEvent) {
|
||||||
_lastChangeTime = DateTime.now();
|
_lastChangeTime = DateTime.now();
|
||||||
} else {
|
} else {
|
||||||
_lastQueryTime = DateTime.now().subtract(_queryInterval);
|
_lastQueryTime = DateTime.now().subtract(_queryInterval);
|
||||||
}
|
}
|
||||||
_queryCount = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<List<Peer>>? matchPeers(
|
Future<List<Peer>>? matchPeers(
|
||||||
|
@ -384,7 +384,7 @@ class FfiModel with ChangeNotifier {
|
|||||||
} else if (name == 'use_texture_render') {
|
} else if (name == 'use_texture_render') {
|
||||||
_handleUseTextureRender(evt, sessionId, peerId);
|
_handleUseTextureRender(evt, sessionId, peerId);
|
||||||
} else {
|
} else {
|
||||||
debugPrint('Unknown event name: $name');
|
debugPrint('Event is not handled in the fixed branch: $name');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user