mirror of
https://github.com/rustdesk/rustdesk.git
synced 2025-12-14 20:16:28 +00:00
feat: add customed titlebar
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_hbb/common.dart';
|
||||
import 'package:flutter_hbb/desktop/pages/connection_page.dart';
|
||||
import 'package:flutter_hbb/desktop/widgets/titlebar_widget.dart';
|
||||
import 'package:flutter_hbb/models/model.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
@@ -11,26 +12,49 @@ class DesktopHomePage extends StatefulWidget {
|
||||
State<StatefulWidget> createState() => _DesktopHomePageState();
|
||||
}
|
||||
|
||||
const borderColor = Color(0xFF2F65BA);
|
||||
|
||||
class _DesktopHomePageState extends State<DesktopHomePage> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
body: Container(
|
||||
child: Row(
|
||||
children: [
|
||||
Flexible(
|
||||
child: buildServerInfo(context),
|
||||
flex: 1,
|
||||
body: Column(
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
DesktopTitleBar(
|
||||
child: Center(
|
||||
child: Text(
|
||||
"RustDesk",
|
||||
style: TextStyle(
|
||||
color: Colors.white,
|
||||
fontSize: 20,
|
||||
fontWeight: FontWeight.bold),
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
Expanded(
|
||||
child: Container(
|
||||
child: Row(
|
||||
children: [
|
||||
Flexible(
|
||||
child: buildServerInfo(context),
|
||||
flex: 1,
|
||||
),
|
||||
SizedBox(
|
||||
width: 16.0,
|
||||
),
|
||||
Flexible(
|
||||
child: buildServerBoard(context),
|
||||
flex: 4,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: 16.0,
|
||||
),
|
||||
Flexible(
|
||||
child: buildServerBoard(context),
|
||||
flex: 4,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// Remote Page, use it in multi window context
|
||||
class DesktopRemotePage extends StatefulWidget {
|
||||
const DesktopRemotePage({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
State<DesktopRemotePage> createState() => _DesktopRemotePageState();
|
||||
}
|
||||
|
||||
class _DesktopRemotePageState extends State<DesktopRemotePage> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container();
|
||||
}
|
||||
}
|
||||
66
flutter/lib/desktop/widgets/titlebar_widget.dart
Normal file
66
flutter/lib/desktop/widgets/titlebar_widget.dart
Normal file
@@ -0,0 +1,66 @@
|
||||
import 'package:bitsdojo_window/bitsdojo_window.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
const sidebarColor = Color(0xFF0C6AF6);
|
||||
const backgroundStartColor = Color(0xFF7BBCF5);
|
||||
const backgroundEndColor = Color(0xFF0CCBF6);
|
||||
|
||||
class DesktopTitleBar extends StatelessWidget {
|
||||
final Widget? child;
|
||||
|
||||
const DesktopTitleBar({Key? key, this.child}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Expanded(
|
||||
child: Container(
|
||||
decoration: const BoxDecoration(
|
||||
gradient: LinearGradient(
|
||||
begin: Alignment.topCenter,
|
||||
end: Alignment.bottomCenter,
|
||||
colors: [backgroundStartColor, backgroundEndColor],
|
||||
stops: [0.0, 1.0]),
|
||||
),
|
||||
child: WindowTitleBarBox(
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
child: MoveWindow(
|
||||
child: child,
|
||||
)),
|
||||
const WindowButtons()
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
final buttonColors = WindowButtonColors(
|
||||
iconNormal: const Color(0xFF805306),
|
||||
mouseOver: const Color(0xFFF6A00C),
|
||||
mouseDown: const Color(0xFF805306),
|
||||
iconMouseOver: const Color(0xFF805306),
|
||||
iconMouseDown: const Color(0xFFFFD500));
|
||||
|
||||
final closeButtonColors = WindowButtonColors(
|
||||
mouseOver: const Color(0xFFD32F2F),
|
||||
mouseDown: const Color(0xFFB71C1C),
|
||||
iconNormal: const Color(0xFF805306),
|
||||
iconMouseOver: Colors.white);
|
||||
|
||||
class WindowButtons extends StatelessWidget {
|
||||
const WindowButtons({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Row(
|
||||
children: [
|
||||
MinimizeWindowButton(colors: buttonColors),
|
||||
MaximizeWindowButton(colors: buttonColors),
|
||||
CloseWindowButton(colors: closeButtonColors),
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,12 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:bitsdojo_window/bitsdojo_window.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_hbb/desktop/pages/desktop_home_page.dart';
|
||||
import 'package:flutter_hbb/desktop/screen/desktop_remote_screen.dart';
|
||||
import 'package:flutter_hbb/utils/multi_window_manager.dart';
|
||||
import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:window_manager/window_manager.dart';
|
||||
|
||||
import 'common.dart';
|
||||
import 'mobile/pages/home_page.dart';
|
||||
@@ -50,22 +50,28 @@ void runRustDeskApp(List<String> args) async {
|
||||
}
|
||||
} else {
|
||||
// main window
|
||||
await windowManager.ensureInitialized();
|
||||
// await windowManager.ensureInitialized();
|
||||
// start service
|
||||
FFI.serverModel.startService();
|
||||
WindowOptions windowOptions = WindowOptions(
|
||||
size: Size(1280, 720),
|
||||
center: true,
|
||||
backgroundColor: Colors.transparent,
|
||||
skipTaskbar: false,
|
||||
titleBarStyle: TitleBarStyle.normal,
|
||||
);
|
||||
windowManager.waitUntilReadyToShow(windowOptions, () async {
|
||||
await windowManager.show();
|
||||
await windowManager.focus();
|
||||
});
|
||||
|
||||
// WindowOptions windowOptions = WindowOptions(
|
||||
// size: Size(1280, 720),
|
||||
// center: true,
|
||||
// backgroundColor: Colors.transparent,
|
||||
// skipTaskbar: false,
|
||||
// titleBarStyle: TitleBarStyle.normal,
|
||||
// );
|
||||
// windowManager.waitUntilReadyToShow(windowOptions, () async {
|
||||
// await windowManager.show();
|
||||
// await windowManager.focus();
|
||||
// });
|
||||
runApp(App());
|
||||
doWhenWindowReady(() {
|
||||
const initialSize = Size(1280, 720);
|
||||
appWindow.minSize = initialSize;
|
||||
appWindow.size = initialSize;
|
||||
appWindow.alignment = Alignment.center;
|
||||
appWindow.show();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user