fix: web/mobile, skip querying onlines, if not in main page (#9535)

* fix: web, skip querying onlines, if not in main page

Signed-off-by: fufesou <linlong1266@gmail.com>

* fix: web/mobile, skip querying onlines

Signed-off-by: fufesou <linlong1266@gmail.com>

* Set isInMainPage to false after router is changed.

Signed-off-by: fufesou <linlong1266@gmail.com>

---------

Signed-off-by: fufesou <linlong1266@gmail.com>
This commit is contained in:
fufesou 2024-10-01 15:25:59 +08:00 committed by GitHub
parent b5414ec002
commit 334526026c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 24 additions and 3 deletions

View File

@ -680,10 +680,12 @@ closeConnection({String? id}) {
overlays: SystemUiOverlay.values);
gFFI.chatModel.hideChatOverlay();
Navigator.popUntil(globalKey.currentContext!, ModalRoute.withName("/"));
stateGlobal.isInMainPage = true;
}();
} else {
if (isWeb) {
Navigator.popUntil(globalKey.currentContext!, ModalRoute.withName("/"));
stateGlobal.isInMainPage = true;
} else {
final controller = Get.find<DesktopTabController>();
controller.closeBy(id);
@ -2405,6 +2407,7 @@ connect(BuildContext context, String id,
);
}
}
stateGlobal.isInMainPage = false;
}
FocusScopeNode currentFocus = FocusScope.of(context);

View File

@ -332,7 +332,12 @@ class _PeersViewState extends State<_PeersView>
_queryOnlines(false);
}
} else {
if (_isActive && (_queryCount < _maxQueryCount || !p)) {
final skipIfIsWeb =
isWeb && !(stateGlobal.isWebVisible && stateGlobal.isInMainPage);
final skipIfMobile =
(isAndroid || isIOS) && !stateGlobal.isInMainPage;
final skipIfNotActive = skipIfIsWeb || skipIfMobile || !_isActive;
if (!skipIfNotActive && (_queryCount < _maxQueryCount || !p)) {
if (now.difference(_lastQueryTime) >= _queryInterval) {
if (_curPeers.isNotEmpty) {
bind.queryOnlines(ids: _curPeers.toList(growable: false));

View File

@ -6,6 +6,7 @@ import 'package:get/get.dart';
import '../../common.dart';
import '../../common/widgets/chat_page.dart';
import '../../models/platform_model.dart';
import '../../models/state_model.dart';
import 'connection_page.dart';
abstract class PageShape extends Widget {
@ -159,6 +160,7 @@ class WebHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
stateGlobal.isInMainPage = true;
return Scaffold(
// backgroundColor: MyTheme.grayBg,
appBar: AppBar(

View File

@ -19,6 +19,9 @@ class StateGlobal {
final RxBool showRemoteToolBar = false.obs;
final svcStatus = SvcStatus.notReady.obs;
final RxBool isFocused = false.obs;
// for mobile and web
bool isInMainPage = true;
bool isWebVisible = true;
final isPortrait = false.obs;

View File

@ -7,6 +7,7 @@ import 'dart:html';
import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter_hbb/models/state_model.dart';
import 'package:flutter_hbb/web/bridge.dart';
import 'package:flutter_hbb/common.dart';
@ -28,7 +29,15 @@ class PlatformFFI {
context.callMethod('setByName', [name, value]);
}
PlatformFFI._();
PlatformFFI._() {
window.document.addEventListener(
'visibilitychange',
(event) => {
stateGlobal.isWebVisible =
window.document.visibilityState == 'visible'
});
}
static final PlatformFFI instance = PlatformFFI._();
static get localeName => window.navigator.language;

View File

@ -95,4 +95,3 @@ class WebSettingsPage extends StatelessWidget {
});
}
}