Merge pull request #1287 from fufesou/flutter_desktop_fullscreen

Flutter desktop fullscreen
This commit is contained in:
RustDesk 2022-08-17 05:07:54 +08:00 committed by GitHub
commit 1b5075168e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 255 additions and 211 deletions

View File

@ -27,6 +27,7 @@ class _ConnectionTabPageState extends State<ConnectionTabPage>
RxList<TabInfo> tabs = RxList<TabInfo>.empty(growable: true); RxList<TabInfo> tabs = RxList<TabInfo>.empty(growable: true);
late Rx<TabController> tabController; late Rx<TabController> tabController;
static final Rx<int> _selected = 0.obs; static final Rx<int> _selected = 0.obs;
static final Rx<String> _fullscreenID = "".obs;
IconData icon = Icons.desktop_windows_sharp; IconData icon = Icons.desktop_windows_sharp;
var connectionMap = RxList<Widget>.empty(growable: true); var connectionMap = RxList<Widget>.empty(growable: true);
@ -70,24 +71,32 @@ class _ConnectionTabPageState extends State<ConnectionTabPage>
return Scaffold( return Scaffold(
body: Column( body: Column(
children: [ children: [
DesktopTabBar( Obx(() => Visibility(
controller: tabController, visible: _fullscreenID.value.isEmpty,
tabs: tabs, child: DesktopTabBar(
onTabClose: onRemoveId, controller: tabController,
selected: _selected, tabs: tabs,
dark: isDarkTheme(), onTabClose: onRemoveId,
mainTab: false, selected: _selected,
), dark: isDarkTheme(),
Expanded( mainTab: false,
child: Obx(() => TabBarView( ))),
controller: tabController.value, Expanded(child: Obx(() {
children: tabs WindowController.fromWindowId(windowId())
.map((tab) => RemotePage( .setFullscreen(_fullscreenID.value.isNotEmpty);
key: ValueKey(tab.label), return TabBarView(
id: tab.label, controller: tabController.value,
tabBarHeight: kDesktopRemoteTabBarHeight, children: tabs
)) //RemotePage(key: ValueKey(e), id: e)) .map((tab) => RemotePage(
.toList()))), key: ValueKey(tab.label),
id: tab.label,
tabBarHeight: _fullscreenID.value.isNotEmpty
? 0
: kDesktopRemoteTabBarHeight,
fullscreenID: _fullscreenID,
)) //RemotePage(key: ValueKey(e), id: e))
.toList());
})),
], ],
), ),
); );

View File

@ -21,11 +21,16 @@ import '../../models/platform_model.dart';
final initText = '\1' * 1024; final initText = '\1' * 1024;
class RemotePage extends StatefulWidget { class RemotePage extends StatefulWidget {
RemotePage({Key? key, required this.id, required this.tabBarHeight}) RemotePage(
{Key? key,
required this.id,
required this.tabBarHeight,
required this.fullscreenID})
: super(key: key); : super(key: key);
final String id; final String id;
final double tabBarHeight; final double tabBarHeight;
final Rx<String> fullscreenID;
@override @override
_RemotePageState createState() => _RemotePageState(); _RemotePageState createState() => _RemotePageState();
@ -41,6 +46,7 @@ class _RemotePageState extends State<RemotePage>
final FocusNode _mobileFocusNode = FocusNode(); final FocusNode _mobileFocusNode = FocusNode();
final FocusNode _physicalFocusNode = FocusNode(); final FocusNode _physicalFocusNode = FocusNode();
var _isPhysicalMouse = false; var _isPhysicalMouse = false;
var _imageFocused = false;
late FFI _ffi; late FFI _ffi;
@ -238,6 +244,9 @@ class _RemotePageState extends State<RemotePage>
autofocus: true, autofocus: true,
canRequestFocus: true, canRequestFocus: true,
focusNode: _physicalFocusNode, focusNode: _physicalFocusNode,
onFocusChange: (bool v) {
_imageFocused = v;
},
onKey: (data, e) { onKey: (data, e) {
final key = e.logicalKey; final key = e.logicalKey;
if (e is RawKeyDownEvent) { if (e is RawKeyDownEvent) {
@ -307,6 +316,23 @@ class _RemotePageState extends State<RemotePage>
}, },
) )
] + ] +
(isWebDesktop
? []
: <Widget>[
IconButton(
color: Colors.white,
icon: Icon(widget.fullscreenID.value.isEmpty
? Icons.fullscreen
: Icons.close_fullscreen),
onPressed: () {
if (widget.fullscreenID.value.isEmpty) {
widget.fullscreenID.value = widget.id;
} else {
widget.fullscreenID.value = "";
}
},
)
]) +
(isWebDesktop (isWebDesktop
? [] ? []
: _ffi.ffiModel.isPeerAndroid : _ffi.ffiModel.isPeerAndroid
@ -434,6 +460,9 @@ class _RemotePageState extends State<RemotePage>
onPointerSignal: _onPointerSignalImage, onPointerSignal: _onPointerSignalImage,
child: MouseRegion( child: MouseRegion(
onEnter: (evt) { onEnter: (evt) {
if (!_imageFocused) {
_physicalFocusNode.requestFocus();
}
_cursorOverImage.value = true; _cursorOverImage.value = true;
}, },
onExit: (evt) { onExit: (evt) {

View File

@ -50,26 +50,29 @@ class ChatPage extends StatelessWidget implements PageShape {
final currentUser = chatModel.currentUser; final currentUser = chatModel.currentUser;
return Stack( return Stack(
children: [ children: [
DashChat( LayoutBuilder(builder: (context, constraints) {
onSend: (chatMsg) { return DashChat(
chatModel.send(chatMsg); onSend: (chatMsg) {
}, chatModel.send(chatMsg);
currentUser: chatModel.me, },
messages: currentUser: chatModel.me,
chatModel.messages[chatModel.currentID]?.chatMessages ?? messages: chatModel
[], .messages[chatModel.currentID]?.chatMessages ??
messageOptions: MessageOptions( [],
showOtherUsersAvatar: false, messageOptions: MessageOptions(
showTime: true, showOtherUsersAvatar: false,
messageDecorationBuilder: (_, __, ___) => showTime: true,
defaultMessageDecoration( maxWidth: constraints.maxWidth * 0.7,
color: MyTheme.accent80, messageDecorationBuilder: (_, __, ___) =>
borderTopLeft: 8, defaultMessageDecoration(
borderTopRight: 8, color: MyTheme.accent80,
borderBottomRight: 8, borderTopLeft: 8,
borderBottomLeft: 8, borderTopRight: 8,
)), borderBottomRight: 8,
), borderBottomLeft: 8,
)),
);
}),
chatModel.currentID == ChatModel.clientModeID chatModel.currentID == ChatModel.clientModeID
? SizedBox.shrink() ? SizedBox.shrink()
: Padding( : Padding(

File diff suppressed because it is too large Load Diff

View File

@ -40,7 +40,10 @@ dependencies:
url_launcher: ^6.0.9 url_launcher: ^6.0.9
shared_preferences: ^2.0.6 shared_preferences: ^2.0.6
toggle_switch: ^1.4.0 toggle_switch: ^1.4.0
dash_chat_2: ^0.0.12 dash_chat_2:
git:
url: https://github.com/fufesou/Dash-Chat-2
ref: feat_maxWidth
draggable_float_widget: ^0.0.2 draggable_float_widget: ^0.0.2
settings_ui: ^2.0.2 settings_ui: ^2.0.2
flutter_breadcrumb: ^1.0.1 flutter_breadcrumb: ^1.0.1