Skip to content

Commit

Permalink
Merge pull request #4 from guchengxi1994/dev
Browse files Browse the repository at this point in the history
v0.1.4
  • Loading branch information
guchengxi1994 committed Apr 15, 2023
2 parents 2546742 + f5cec15 commit 8201344
Show file tree
Hide file tree
Showing 25 changed files with 742 additions and 111 deletions.
14 changes: 12 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,19 @@

## changelogs

* **0.1.3**
* **0.1.4**

* **0.1.3+1** add logger (native)
* **0.1.4+3** highlight taskbar app icons && context menu

![image-20230415221716387](./screenshots/image-20230415221716387.png)

* **0.1.4+2** using `PageView`

* **0.1.4+1** shutdown alert dialog

![image-20230415123427502](./screenshots/image-20230415123427502.png)

* **0.1.3** add logger (native)

* **0.1.2** taskbar & status-bar

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import 'package:flutter_desktop/components/applications/_system_applications/det
show appManagementDetails;
import 'package:flutter_desktop/components/applications/application.dart';

Widget managementApplication() {
Application managementApplication() {
return Application(
uuid: appManagementDetails.uuid,
name: appManagementDetails.name,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import 'package:flutter_desktop/components/applications/_system_applications/det
show myComputerDetails;
import 'package:flutter_desktop/components/applications/application.dart';

Widget myComputerApplication() {
Application myComputerApplication() {
return Application(
uuid: myComputerDetails.uuid,
name: myComputerDetails.name,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import 'package:flutter_desktop/components/applications/_system_applications/det
show recycleDetails;
import 'package:flutter_desktop/components/applications/application.dart';

Widget recycleApplication() {
Application recycleApplication() {
return Application(
uuid: recycleDetails.uuid,
name: recycleDetails.name,
Expand Down
10 changes: 6 additions & 4 deletions lib/components/applications/application_controller.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ import 'package:flutter/material.dart';

import 'application_details.dart';

class ApplicationController extends ChangeNotifier {
List<ApplicationDetails> details = [];
class ApplicationController<T extends ApplicationDetails>
extends ChangeNotifier {
List<T> details = [];

ApplicationDetails? getDetailsById(String uuid) {
T? getDetailsById(String uuid) {
final index = details.findIndex(uuid);
if (index == -1) {
return null;
Expand All @@ -14,6 +15,7 @@ class ApplicationController extends ChangeNotifier {
}

bool exists(String uuid) {
// print(details);
final index = details.findIndex(uuid);
if (index == -1) {
return false;
Expand Down Expand Up @@ -114,7 +116,7 @@ class ApplicationController extends ChangeNotifier {
return details[index].xmax - details[index].xmin;
}

addDetail(ApplicationDetails d) {
addDetail(T d) {
details.add(d);
notifyListeners();
}
Expand Down
3 changes: 3 additions & 0 deletions lib/components/applications/application_entry.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@ class ApplicationEntry extends StatelessWidget {
onDoubleTap: () {
onDoubleClick();
},
onSecondaryTapUp: (details) {
debugPrint("右键点击事件");
},
// ignore: sized_box_for_whitespace
child: Container(
width: AppStyle.appEntryWidgetSize,
Expand Down
12 changes: 12 additions & 0 deletions lib/components/applications/application_on_taskbar.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@ import 'dart:math';

import 'package:flutter/material.dart';
import 'package:flutter_desktop/components/applications/application_details.dart';
import 'package:provider/provider.dart';

import '../app_style.dart';
import '../desktop/desktop_controller.dart';

class ApplicationOnTaskbar extends StatelessWidget {
const ApplicationOnTaskbar(
Expand All @@ -14,7 +16,17 @@ class ApplicationOnTaskbar extends StatelessWidget {

@override
Widget build(BuildContext context) {
final isHighlighted = context.select<DesktopController, bool>(
(value) => value.applications.isEmpty
? false
: value.applications.last.uuid == details.uuid,
);
return Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(5),
color: isHighlighted
? AppStyle.light2.withOpacity(0.75)
: Colors.transparent),
height: min(
MediaQuery.of(context).size.width *
AppStyle.taskbarFactor /
Expand Down
94 changes: 94 additions & 0 deletions lib/components/context_menu/desktop_context_menu.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
import 'package:flutter/material.dart';
import 'package:flutter_desktop/components/app_style.dart';

mixin DesktopContextMenuMixin {
final ContextMenuController _contextMenuController = ContextMenuController();
Widget _buildContent(BuildContext context, Offset offset) {
return AdaptiveTextSelectionToolbar(
anchors: TextSelectionToolbarAnchors(
primaryAnchor: offset,
),
children:
_buildDesktopContextMenuItem(offset, MediaQuery.of(context).size),
);
}

void showContextMenu(Offset position, BuildContext context) {
_contextMenuController.show(
context: context,
contextMenuBuilder: (ctx) => _buildContent(ctx, position),
);
}

void dismiss() {
ContextMenuController.removeAny();
}

final double _types = 1;

List<Widget> _buildDesktopContextMenuItem(Offset position, Size size) {
double dx = 0;
double dy = 0;
if ((position.dx - size.width).abs() < 250) {
dx = -130;
} else {
dx = 220;
}

if ((position.dy - size.height).abs() < 200) {
dy = -(_types * 40);
} else {
dy = -40;
}

return [
MenuItemButton(
leadingIcon: const Icon(
Icons.refresh,
color: AppStyle.dark,
),
child: const Text("刷新"),
onPressed: () {
dismiss();
},
),
const Divider(
height: 1,
color: AppStyle.grey,
),
MenuItemButton(
leadingIcon: const Icon(
Icons.skip_next,
color: AppStyle.dark,
),
child: const Text("下一张壁纸"),
onPressed: () {
dismiss();
}),
SubmenuButton(
alignmentOffset: Offset(dx, dy),
leadingIcon: const Icon(
Icons.new_releases,
color: AppStyle.dark,
),
trailingIcon: const Icon(
Icons.chevron_right,
color: AppStyle.dark,
),
menuChildren: [
MenuItemButton(
leadingIcon: const Icon(
Icons.code,
color: AppStyle.dark,
),
child: const Text("新建代码文件"),
onPressed: () {
dismiss();
},
)
],
child: const Text("新建"),
),
];
}
}
49 changes: 49 additions & 0 deletions lib/components/desktop/desktop.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

import '../applications/application_controller.dart';
import '../future_builder.dart';
import '../taskbar/taskbar_controller.dart';
import '../utils.dart';
import 'desktop_controller.dart';
import 'desktop_screen.dart' deferred as desktop;
import 'package:flutter_desktop/components/login/login_screen.dart'
deferred as login;

class Desktop extends StatefulWidget {
const Desktop({super.key});

@override
State<Desktop> createState() => _DesktopState();
}

class _DesktopState extends State<Desktop> with AutomaticKeepAliveClientMixin {
List<Widget> pages = [
FutureLoaderWidget(
builder: (context) => login.LoginScreen(),
loadWidgetFuture: login.loadLibrary()),
MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => ApplicationController()),
ChangeNotifierProvider(create: (_) => DesktopController()),
ChangeNotifierProvider(create: (_) => TaskbarController())
],
child: FutureLoaderWidget(
builder: (context) => desktop.DesktopScreen(),
loadWidgetFuture: desktop.loadLibrary()),
)
];

@override
Widget build(BuildContext context) {
super.build(context);
return PageView(
controller: PageNavigateController.controller,
physics: const NeverScrollableScrollPhysics(),
children: pages,
);
}

@override
bool get wantKeepAlive => true;
}
15 changes: 8 additions & 7 deletions lib/components/desktop/desktop_controller.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
// ignore_for_file: unnecessary_type_check

import 'package:flutter/material.dart';
import 'package:flutter_desktop/components/applications/application.dart';

class DesktopController extends ChangeNotifier {
List<Widget> applications = [];
class DesktopController<T extends Application> extends ChangeNotifier {
List<T> applications = [];

String focusedApplicationUuid = "";

Expand All @@ -13,8 +15,8 @@ class DesktopController extends ChangeNotifier {
}

sortByUuid() {
final w = applications.indexWhere(
(element) => (element as Application).uuid == focusedApplicationUuid);
final w = applications
.indexWhere((element) => (element).uuid == focusedApplicationUuid);
if (w == -1) {
return;
}
Expand All @@ -23,7 +25,7 @@ class DesktopController extends ChangeNotifier {
applications.add(s);
}

addApplication(Widget w, {bool exists = false}) {
addApplication(T w, {bool exists = false}) {
if (!exists) {
applications.add(w);
}
Expand All @@ -36,8 +38,7 @@ class DesktopController extends ChangeNotifier {
}

removeWidget(String uuid) {
final w = applications
.indexWhere((element) => (element as Application).uuid == uuid);
final w = applications.indexWhere((element) => element.uuid == uuid);

if (w == -1) {
return;
Expand Down
Loading

0 comments on commit 8201344

Please sign in to comment.