mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-04-02 03:31:28 +03:00
new dialog impl based on Overlay
This commit is contained in:
@@ -625,7 +625,7 @@ class _ConnectionPageState extends State<ConnectionPage> {
|
||||
var field = "";
|
||||
var msg = "";
|
||||
var isInProgress = false;
|
||||
DialogManager.show((setState, close) {
|
||||
gFFI.dialogManager.show((setState, close) {
|
||||
return CustomAlertDialog(
|
||||
title: Text(translate("Add ID")),
|
||||
content: Column(
|
||||
@@ -698,7 +698,7 @@ class _ConnectionPageState extends State<ConnectionPage> {
|
||||
var field = "";
|
||||
var msg = "";
|
||||
var isInProgress = false;
|
||||
DialogManager.show((setState, close) {
|
||||
gFFI.dialogManager.show((setState, close) {
|
||||
return CustomAlertDialog(
|
||||
title: Text(translate("Add Tag")),
|
||||
content: Column(
|
||||
@@ -769,7 +769,7 @@ class _ConnectionPageState extends State<ConnectionPage> {
|
||||
final tags = List.of(gFFI.abModel.tags);
|
||||
var selectedTag = gFFI.abModel.getPeerTags(id).obs;
|
||||
|
||||
DialogManager.show((setState, close) {
|
||||
gFFI.dialogManager.show((setState, close) {
|
||||
return CustomAlertDialog(
|
||||
title: Text(translate("Edit Tag")),
|
||||
content: Column(
|
||||
@@ -884,16 +884,16 @@ class _WebMenuState extends State<WebMenu> {
|
||||
},
|
||||
onSelected: (value) {
|
||||
if (value == 'server') {
|
||||
showServerSettings();
|
||||
showServerSettings(gFFI.dialogManager);
|
||||
}
|
||||
if (value == 'about') {
|
||||
showAbout();
|
||||
showAbout(gFFI.dialogManager);
|
||||
}
|
||||
if (value == 'login') {
|
||||
if (username == null) {
|
||||
showLogin();
|
||||
showLogin(gFFI.dialogManager);
|
||||
} else {
|
||||
logout();
|
||||
logout(gFFI.dialogManager);
|
||||
}
|
||||
}
|
||||
if (value == 'scan') {
|
||||
|
||||
@@ -116,7 +116,7 @@ class _DesktopHomePageState extends State<DesktopHomePage>
|
||||
onDoubleTap: () {
|
||||
Clipboard.setData(
|
||||
ClipboardData(text: model.serverId.text));
|
||||
showToast(translate("Copied"));
|
||||
gFFI.dialogManager.showToast(translate("Copied"));
|
||||
},
|
||||
child: TextFormField(
|
||||
controller: model.serverId,
|
||||
@@ -253,7 +253,7 @@ class _DesktopHomePageState extends State<DesktopHomePage>
|
||||
kUsePermanentPassword) {
|
||||
Clipboard.setData(
|
||||
ClipboardData(text: model.serverPasswd.text));
|
||||
showToast(translate("Copied"));
|
||||
gFFI.dialogManager.showToast(translate("Copied"));
|
||||
}
|
||||
},
|
||||
child: TextFormField(
|
||||
@@ -604,7 +604,7 @@ class _DesktopHomePageState extends State<DesktopHomePage>
|
||||
var newId = "";
|
||||
var msg = "";
|
||||
var isInProgress = false;
|
||||
DialogManager.show((setState, close) {
|
||||
gFFI.dialogManager.show((setState, close) {
|
||||
return CustomAlertDialog(
|
||||
title: Text(translate("Change ID")),
|
||||
content: Column(
|
||||
@@ -690,7 +690,7 @@ class _DesktopHomePageState extends State<DesktopHomePage>
|
||||
var key = oldOptions['key'] ?? "";
|
||||
|
||||
var isInProgress = false;
|
||||
DialogManager.show((setState, close) {
|
||||
gFFI.dialogManager.show((setState, close) {
|
||||
return CustomAlertDialog(
|
||||
title: Text(translate("ID/Relay Server")),
|
||||
content: ConstrainedBox(
|
||||
@@ -891,7 +891,7 @@ class _DesktopHomePageState extends State<DesktopHomePage>
|
||||
var newWhiteListField = newWhiteList.join('\n');
|
||||
var msg = "";
|
||||
var isInProgress = false;
|
||||
DialogManager.show((setState, close) {
|
||||
gFFI.dialogManager.show((setState, close) {
|
||||
return CustomAlertDialog(
|
||||
title: Text(translate("IP Whitelisting")),
|
||||
content: Column(
|
||||
@@ -980,7 +980,7 @@ class _DesktopHomePageState extends State<DesktopHomePage>
|
||||
}
|
||||
|
||||
var isInProgress = false;
|
||||
DialogManager.show((setState, close) {
|
||||
gFFI.dialogManager.show((setState, close) {
|
||||
return CustomAlertDialog(
|
||||
title: Text(translate("Socks5 Proxy")),
|
||||
content: ConstrainedBox(
|
||||
@@ -1117,7 +1117,7 @@ class _DesktopHomePageState extends State<DesktopHomePage>
|
||||
final license = await bind.mainGetLicense();
|
||||
final version = await bind.mainGetVersion();
|
||||
final linkStyle = TextStyle(decoration: TextDecoration.underline);
|
||||
DialogManager.show((setState, close) {
|
||||
gFFI.dialogManager.show((setState, close) {
|
||||
return CustomAlertDialog(
|
||||
title: Text("About $appName"),
|
||||
content: ConstrainedBox(
|
||||
@@ -1208,7 +1208,7 @@ Future<bool> loginDialog() async {
|
||||
|
||||
var isInProgress = false;
|
||||
var completer = Completer<bool>();
|
||||
DialogManager.show((setState, close) {
|
||||
gFFI.dialogManager.show((setState, close) {
|
||||
return CustomAlertDialog(
|
||||
title: Text(translate("Login")),
|
||||
content: ConstrainedBox(
|
||||
@@ -1339,7 +1339,7 @@ void setPasswordDialog() async {
|
||||
var errMsg0 = "";
|
||||
var errMsg1 = "";
|
||||
|
||||
DialogManager.show((setState, close) {
|
||||
gFFI.dialogManager.show((setState, close) {
|
||||
return CustomAlertDialog(
|
||||
title: Text(translate("Set Password")),
|
||||
content: ConstrainedBox(
|
||||
|
||||
@@ -4,7 +4,6 @@ import 'dart:math';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_hbb/mobile/pages/file_manager_page.dart';
|
||||
import 'package:flutter_hbb/models/file_model.dart';
|
||||
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:wakelock/wakelock.dart';
|
||||
@@ -26,8 +25,7 @@ class _FileManagerPageState extends State<FileManagerPage>
|
||||
final _localSelectedItems = SelectedItems();
|
||||
final _remoteSelectedItems = SelectedItems();
|
||||
|
||||
/// FFI with name file_transfer_id
|
||||
FFI get _ffi => ffi('ft_${widget.id}');
|
||||
late FFI _ffi;
|
||||
|
||||
FileModel get model => _ffi.fileModel;
|
||||
|
||||
@@ -38,8 +36,9 @@ class _FileManagerPageState extends State<FileManagerPage>
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
Get.put(FFI()..connect(widget.id, isFileTransfer: true),
|
||||
tag: 'ft_${widget.id}');
|
||||
_ffi = FFI();
|
||||
_ffi.connect(widget.id, isFileTransfer: true);
|
||||
Get.put(_ffi, tag: 'ft_${widget.id}');
|
||||
// _ffi.ffiModel.updateEventListener(widget.id);
|
||||
if (!Platform.isLinux) {
|
||||
Wakelock.enable();
|
||||
@@ -51,7 +50,7 @@ class _FileManagerPageState extends State<FileManagerPage>
|
||||
void dispose() {
|
||||
model.onClose();
|
||||
_ffi.close();
|
||||
SmartDialog.dismiss();
|
||||
_ffi.dialogManager.dismissAll();
|
||||
if (!Platform.isLinux) {
|
||||
Wakelock.disable();
|
||||
}
|
||||
@@ -552,7 +551,7 @@ class _FileManagerPageState extends State<FileManagerPage>
|
||||
IconButton(
|
||||
onPressed: () {
|
||||
final name = TextEditingController();
|
||||
DialogManager.show((setState, close) =>
|
||||
_ffi.dialogManager.show((setState, close) =>
|
||||
CustomAlertDialog(
|
||||
title: Text(translate("Create Folder")),
|
||||
content: Column(
|
||||
|
||||
@@ -7,9 +7,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_hbb/mobile/widgets/gesture_help.dart';
|
||||
import 'package:flutter_hbb/models/chat_model.dart';
|
||||
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:get/route_manager.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:wakelock/wakelock.dart';
|
||||
|
||||
@@ -51,18 +49,19 @@ class _RemotePageState extends State<RemotePage>
|
||||
var _showEdit = false; // use soft keyboard
|
||||
var _isPhysicalMouse = false;
|
||||
|
||||
FFI get _ffi => ffi(widget.id);
|
||||
late FFI _ffi;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
var ffitmp = FFI();
|
||||
ffitmp.canvasModel.tabBarHeight = super.widget.tabBarHeight;
|
||||
final ffi = Get.put(ffitmp, tag: widget.id);
|
||||
ffi.connect(widget.id, tabBarHeight: super.widget.tabBarHeight);
|
||||
_ffi = FFI();
|
||||
_ffi.canvasModel.tabBarHeight = super.widget.tabBarHeight;
|
||||
Get.put(_ffi, tag: widget.id);
|
||||
_ffi.connect(widget.id, tabBarHeight: super.widget.tabBarHeight);
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: []);
|
||||
showLoading(translate('Connecting...'));
|
||||
_ffi.dialogManager
|
||||
.showLoading(translate('Connecting...'), cancelToClose: true);
|
||||
_interval =
|
||||
Timer.periodic(Duration(milliseconds: 30), (timer) => interval());
|
||||
});
|
||||
@@ -70,8 +69,8 @@ class _RemotePageState extends State<RemotePage>
|
||||
Wakelock.enable();
|
||||
}
|
||||
_physicalFocusNode.requestFocus();
|
||||
ffi.ffiModel.updateEventListener(widget.id);
|
||||
ffi.listenToMouse(true);
|
||||
_ffi.ffiModel.updateEventListener(widget.id);
|
||||
_ffi.listenToMouse(true);
|
||||
// WindowManager.instance.addListener(this);
|
||||
}
|
||||
|
||||
@@ -86,7 +85,7 @@ class _RemotePageState extends State<RemotePage>
|
||||
_ffi.close();
|
||||
_interval?.cancel();
|
||||
_timer?.cancel();
|
||||
SmartDialog.dismiss();
|
||||
_ffi.dialogManager.dismissAll();
|
||||
SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual,
|
||||
overlays: SystemUiOverlay.values);
|
||||
if (!Platform.isLinux) {
|
||||
@@ -262,8 +261,11 @@ class _RemotePageState extends State<RemotePage>
|
||||
initialEntries: [
|
||||
OverlayEntry(builder: (context) {
|
||||
_ffi.chatModel.setOverlayState(Overlay.of(context));
|
||||
_ffi.dialogManager.setOverlayState(Overlay.of(context));
|
||||
return Container(
|
||||
child: getRawPointerAndKeyBody(getBodyForDesktop(keyboard)));
|
||||
color: Colors.black,
|
||||
child: getRawPointerAndKeyBody(
|
||||
getBodyForDesktop(context, keyboard)));
|
||||
})
|
||||
],
|
||||
));
|
||||
@@ -275,7 +277,7 @@ class _RemotePageState extends State<RemotePage>
|
||||
_ffi.canvasModel.tabBarHeight = super.widget.tabBarHeight;
|
||||
return WillPopScope(
|
||||
onWillPop: () async {
|
||||
clientClose();
|
||||
clientClose(_ffi.dialogManager);
|
||||
return false;
|
||||
},
|
||||
child: MultiProvider(
|
||||
@@ -410,7 +412,7 @@ class _RemotePageState extends State<RemotePage>
|
||||
color: Colors.white,
|
||||
icon: Icon(Icons.clear),
|
||||
onPressed: () {
|
||||
clientClose();
|
||||
clientClose(_ffi.dialogManager);
|
||||
},
|
||||
)
|
||||
] +
|
||||
@@ -420,7 +422,7 @@ class _RemotePageState extends State<RemotePage>
|
||||
icon: Icon(Icons.tv),
|
||||
onPressed: () {
|
||||
setState(() => _showEdit = false);
|
||||
showOptions(widget.id);
|
||||
showOptions(widget.id, _ffi.dialogManager);
|
||||
},
|
||||
)
|
||||
] +
|
||||
@@ -497,7 +499,7 @@ class _RemotePageState extends State<RemotePage>
|
||||
/// DoubleFiner -> right click
|
||||
/// HoldDrag -> left drag
|
||||
|
||||
Widget getBodyForDesktop(bool keyboard) {
|
||||
Widget getBodyForDesktop(BuildContext context, bool keyboard) {
|
||||
var paints = <Widget>[
|
||||
MouseRegion(onEnter: (evt) {
|
||||
bind.hostStopSystemKeyPropagate(stopped: false);
|
||||
@@ -567,7 +569,7 @@ class _RemotePageState extends State<RemotePage>
|
||||
style: flatButtonStyle,
|
||||
onPressed: () {
|
||||
Navigator.pop(context);
|
||||
showSetOSPassword(widget.id, false);
|
||||
showSetOSPassword(widget.id, false, _ffi.dialogManager);
|
||||
},
|
||||
child: Icon(Icons.edit, color: MyTheme.accent),
|
||||
)
|
||||
@@ -632,7 +634,7 @@ class _RemotePageState extends State<RemotePage>
|
||||
if (password != null) {
|
||||
bind.sessionInputOsPassword(id: widget.id, value: password);
|
||||
} else {
|
||||
showSetOSPassword(widget.id, true);
|
||||
showSetOSPassword(widget.id, true, _ffi.dialogManager);
|
||||
}
|
||||
} else if (value == 'reset_canvas') {
|
||||
_ffi.cursorModel.reset();
|
||||
@@ -889,7 +891,7 @@ class ImagePainter extends CustomPainter {
|
||||
}
|
||||
}
|
||||
|
||||
void showOptions(String id) async {
|
||||
void showOptions(String id, OverlayDialogManager dialogManager) async {
|
||||
String quality = await bind.getSessionImageQuality(id: id) ?? 'balanced';
|
||||
if (quality == '') quality = 'balanced';
|
||||
String viewStyle =
|
||||
@@ -907,7 +909,7 @@ void showOptions(String id) async {
|
||||
onTap: () {
|
||||
if (i == cur) return;
|
||||
bind.sessionSwitchDisplay(id: id, value: i);
|
||||
SmartDialog.dismiss();
|
||||
dialogManager.dismissAll();
|
||||
},
|
||||
child: Ink(
|
||||
width: 40,
|
||||
@@ -932,7 +934,7 @@ void showOptions(String id) async {
|
||||
}
|
||||
final perms = ffi(id).ffiModel.permissions;
|
||||
|
||||
DialogManager.show((setState, close) {
|
||||
dialogManager.show((setState, close) {
|
||||
final more = <Widget>[];
|
||||
if (perms['audio'] != false) {
|
||||
more.add(getToggle(id, setState, 'disable-audio', 'Mute'));
|
||||
@@ -990,12 +992,13 @@ void showOptions(String id) async {
|
||||
}, clickMaskDismiss: true, backDismiss: true);
|
||||
}
|
||||
|
||||
void showSetOSPassword(String id, bool login) async {
|
||||
void showSetOSPassword(
|
||||
String id, bool login, OverlayDialogManager dialogManager) async {
|
||||
final controller = TextEditingController();
|
||||
var password = await bind.getSessionOption(id: id, arg: "os-password") ?? "";
|
||||
var autoLogin = await bind.getSessionOption(id: id, arg: "auto-login") != "";
|
||||
controller.text = password;
|
||||
DialogManager.show((setState, close) {
|
||||
dialogManager.show((setState, close) {
|
||||
return CustomAlertDialog(
|
||||
title: Text(translate('OS Password')),
|
||||
content: Column(mainAxisSize: MainAxisSize.min, children: [
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_hbb/common.dart';
|
||||
import 'package:flutter_hbb/desktop/pages/file_manager_tab_page.dart';
|
||||
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
/// multi-tab file transfer remote screen
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_hbb/common.dart';
|
||||
import 'package:flutter_hbb/desktop/pages/connection_tab_page.dart';
|
||||
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
/// multi-tab desktop remote screen
|
||||
|
||||
@@ -258,7 +258,7 @@ class _PeerCardState extends State<_PeerCard>
|
||||
final tags = List.of(gFFI.abModel.tags);
|
||||
var selectedTag = gFFI.abModel.getPeerTags(id).obs;
|
||||
|
||||
DialogManager.show((setState, close) {
|
||||
gFFI.dialogManager.show((setState, close) {
|
||||
return CustomAlertDialog(
|
||||
title: Text(translate("Edit Tag")),
|
||||
content: Column(
|
||||
@@ -314,7 +314,7 @@ class _PeerCardState extends State<_PeerCard>
|
||||
}
|
||||
}
|
||||
final k = GlobalKey<FormState>();
|
||||
DialogManager.show((setState, close) {
|
||||
gFFI.dialogManager.show((setState, close) {
|
||||
return CustomAlertDialog(
|
||||
title: Text(translate("Rename")),
|
||||
content: Column(
|
||||
|
||||
Reference in New Issue
Block a user