diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index d0d753fbb..2a5ed86fc 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -3425,6 +3425,12 @@ get defaultOptionWhitelist => isCustomClient ? ',' : ''; get defaultOptionAccessMode => isCustomClient ? 'custom' : ''; get defaultOptionApproveMode => isCustomClient ? 'password-click' : ''; +bool whitelistNotEmpty() { + // https://rustdesk.com/docs/en/self-host/client-configuration/advanced-settings/#whitelist + final v = bind.mainGetOptionSync(key: kOptionWhitelist); + return v != '' && v != ','; +} + // `setMovable()` is only supported on macOS. // // On macOS, the window can be dragged by the tab bar by default. diff --git a/flutter/lib/desktop/pages/desktop_setting_page.dart b/flutter/lib/desktop/pages/desktop_setting_page.dart index 70aa6c54e..76c6ab270 100644 --- a/flutter/lib/desktop/pages/desktop_setting_page.dart +++ b/flutter/lib/desktop/pages/desktop_setting_page.dart @@ -1119,12 +1119,9 @@ class _SafetyState extends State<_Safety> with AutomaticKeepAliveClientMixin { bool enabled = !locked; // Simple temp wrapper for PR check tmpWrapper() { - RxBool hasWhitelist = (bind.mainGetOptionSync(key: kOptionWhitelist) != - defaultOptionWhitelist) - .obs; + RxBool hasWhitelist = whitelistNotEmpty().obs; update() async { - hasWhitelist.value = bind.mainGetOptionSync(key: kOptionWhitelist) != - defaultOptionWhitelist; + hasWhitelist.value = whitelistNotEmpty(); } onChanged(bool? checked) async { diff --git a/flutter/lib/mobile/pages/settings_page.dart b/flutter/lib/mobile/pages/settings_page.dart index 63972d0ea..cd14ca14f 100644 --- a/flutter/lib/mobile/pages/settings_page.dart +++ b/flutter/lib/mobile/pages/settings_page.dart @@ -97,8 +97,7 @@ class _SettingsState extends State with WidgetsBindingObserver { kOptionEnableAbr, bind.mainGetOptionSync(key: kOptionEnableAbr)); _denyLANDiscovery = !option2bool(kOptionEnableLanDiscovery, bind.mainGetOptionSync(key: kOptionEnableLanDiscovery)); - _onlyWhiteList = (bind.mainGetOptionSync(key: kOptionWhitelist)) != - defaultOptionWhitelist; + _onlyWhiteList = whitelistNotEmpty(); _enableDirectIPAccess = option2bool( kOptionDirectServer, bind.mainGetOptionSync(key: kOptionDirectServer)); _enableRecordSession = option2bool(kOptionEnableRecordSession, @@ -282,9 +281,7 @@ class _SettingsState extends State with WidgetsBindingObserver { initialValue: _onlyWhiteList, onToggle: (_) async { update() async { - final onlyWhiteList = - (await bind.mainGetOption(key: kOptionWhitelist)) != - defaultOptionWhitelist; + final onlyWhiteList = whitelistNotEmpty(); if (onlyWhiteList != _onlyWhiteList) { setState(() { _onlyWhiteList = onlyWhiteList;