Skip to content

Commit 440009d

Browse files
authored
feat: expose events (on_double_tap, on_pan_start) in WindowDragArea (#5043)
* improve events typing in gesture_detector.py * window.start_dragging * delete window_drag_area.dart * rework WindowDragArea inheriting from GestureDetector * export more utils
1 parent 414cf65 commit 440009d

File tree

9 files changed

+116
-232
lines changed

9 files changed

+116
-232
lines changed

packages/flet/lib/flet.dart

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,41 @@ export 'src/models/page_size_view_model.dart';
1919
export 'src/utils.dart';
2020
export 'src/utils/alignment.dart';
2121
export 'src/utils/animations.dart';
22+
export 'src/utils/auto_complete.dart';
23+
export 'src/utils/autofill.dart';
24+
export 'src/utils/badge.dart';
2225
export 'src/utils/borders.dart';
2326
export 'src/utils/box.dart';
27+
export 'src/utils/browser_context_menu.dart';
2428
export 'src/utils/buttons.dart';
29+
export 'src/utils/charts.dart';
30+
export 'src/utils/client_storage.dart';
31+
export 'src/utils/clipboard.dart';
2532
export 'src/utils/collections.dart';
2633
export 'src/utils/colors.dart';
34+
export 'src/utils/cupertino_colors.dart';
35+
export 'src/utils/cupertino_icons.dart';
2736
export 'src/utils/dash_path.dart';
2837
export 'src/utils/debouncer.dart';
38+
export 'src/utils/desktop.dart';
39+
export 'src/utils/dismissible.dart';
2940
export 'src/utils/drawing.dart';
3041
export 'src/utils/edge_insets.dart';
42+
export 'src/utils/form_field.dart';
3143
export 'src/utils/gradient.dart';
3244
export 'src/utils/icons.dart';
3345
export 'src/utils/images.dart';
46+
export 'src/utils/launch_url.dart';
47+
export 'src/utils/locale.dart';
48+
export 'src/utils/markdown.dart';
49+
export 'src/utils/material_icons.dart';
3450
export 'src/utils/material_state.dart';
3551
export 'src/utils/menu.dart';
3652
export 'src/utils/mouse.dart';
53+
export 'src/utils/networking.dart';
3754
export 'src/utils/numbers.dart';
3855
export 'src/utils/others.dart';
56+
export 'src/utils/overlay_style.dart';
3957
export 'src/utils/platform.dart';
4058
export 'src/utils/platform_utils_non_web.dart'
4159
if (dart.library.js) "src/utils/platform_utils_web.dart";
@@ -45,4 +63,5 @@ export 'src/utils/text.dart';
4563
export 'src/utils/textfield.dart';
4664
export 'src/utils/theme.dart';
4765
export 'src/utils/time.dart';
66+
export 'src/utils/tooltip.dart';
4867
export 'src/utils/transforms.dart';

packages/flet/lib/src/controls/create_control.dart

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,6 @@ import 'textfield.dart';
116116
import 'time_picker.dart';
117117
import 'transparent_pointer.dart';
118118
import 'vertical_divider.dart';
119-
import 'window_drag_area.dart';
120119

121120
Widget createControl(Control? parent, String id, bool parentDisabled,
122121
{Widget? nextChild, bool? parentAdaptive}) {
@@ -980,13 +979,6 @@ Widget createWidget(
980979
parentAdaptive: parentAdaptive,
981980
children: controlView.children,
982981
);
983-
case "windowdragarea":
984-
return WindowDragAreaControl(
985-
parent: parent,
986-
control: controlView.control,
987-
children: controlView.children,
988-
parentDisabled: parentDisabled,
989-
parentAdaptive: parentAdaptive);
990982
case "linechart":
991983
return LineChartControl(
992984
key: key,

packages/flet/lib/src/controls/window_drag_area.dart

Lines changed: 0 additions & 75 deletions
This file was deleted.

packages/flet/lib/src/reducers.dart

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ import 'package:flutter/foundation.dart';
55
import 'package:url_launcher/url_launcher.dart';
66
import 'package:device_info_plus/device_info_plus.dart';
77

8-
9-
108
import 'actions.dart';
119
import 'flet_control_backend.dart';
1210
import 'models/app_state.dart';
@@ -97,7 +95,8 @@ AppState appReducer(AppState state, dynamic action) {
9795
try {
9896
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
9997
AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
100-
if (androidInfo.systemFeatures.contains('android.software.leanback')) {
98+
if (androidInfo.systemFeatures
99+
.contains('android.software.leanback')) {
101100
platformValue = "android_tv";
102101
}
103102
} on Exception catch (e) {
@@ -324,6 +323,9 @@ AppState appReducer(AppState state, dynamic action) {
324323
case "windowToFront":
325324
windowToFront();
326325
break;
326+
case "windowStartDragging":
327+
windowStartDragging();
328+
break;
327329
}
328330
var clientStoragePrefix = "clientStorage:";
329331
if (action.payload.methodName.startsWith(clientStoragePrefix)) {

packages/flet/lib/src/utils/desktop.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,12 @@ Future windowToFront() async {
235235
}
236236
}
237237

238+
Future windowStartDragging() async {
239+
if (isDesktopPlatform()) {
240+
await windowManager.startDragging();
241+
}
242+
}
243+
238244
Future blurWindow() async {
239245
if (isDesktopPlatform() &&
240246
(defaultTargetPlatform == TargetPlatform.windows ||

sdk/python/packages/flet-cli/src/flet_cli/commands/build.py

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,10 @@
1010
from typing import Optional, cast
1111

1212
import flet.version
13-
import flet_cli.utils.processes as processes
1413
import yaml
1514
from flet.utils import cleanup_path, copy_tree, is_windows, slugify
1615
from flet.utils.platform_utils import get_bool_env_var
1716
from flet.version import update_version
18-
from flet_cli.commands.base import BaseCommand
19-
from flet_cli.utils.hash_stamp import HashStamp
20-
from flet_cli.utils.merge import merge_dict
21-
from flet_cli.utils.project_dependencies import (
22-
get_poetry_dependencies,
23-
get_project_dependencies,
24-
)
25-
from flet_cli.utils.pyproject_toml import load_pyproject_toml
2617
from packaging import version
2718
from packaging.requirements import Requirement
2819
from rich.console import Console, Group
@@ -33,6 +24,16 @@
3324
from rich.table import Column, Table
3425
from rich.theme import Theme
3526

27+
import flet_cli.utils.processes as processes
28+
from flet_cli.commands.base import BaseCommand
29+
from flet_cli.utils.hash_stamp import HashStamp
30+
from flet_cli.utils.merge import merge_dict
31+
from flet_cli.utils.project_dependencies import (
32+
get_poetry_dependencies,
33+
get_project_dependencies,
34+
)
35+
from flet_cli.utils.pyproject_toml import load_pyproject_toml
36+
3637
PYODIDE_ROOT_URL = "https://cdn.jsdelivr.net/pyodide/v0.27.2/full"
3738
DEFAULT_TEMPLATE_URL = "gh:flet-dev/flet-build-template"
3839

@@ -75,7 +76,6 @@ def __init__(self, parser: argparse.ArgumentParser) -> None:
7576
self.python_module_name = None
7677
self.get_pyproject = None
7778
self.python_app_path = None
78-
self.no_rich_output = None
7979
self.emojis = {}
8080
self.dart_exe = None
8181
self.verbose = False
@@ -1145,7 +1145,9 @@ def setup_template_data(self):
11451145
"target_arch": (
11461146
target_arch
11471147
if isinstance(target_arch, list)
1148-
else [target_arch] if isinstance(target_arch, str) else []
1148+
else [target_arch]
1149+
if isinstance(target_arch, str)
1150+
else []
11491151
),
11501152
"info_plist": info_plist,
11511153
"macos_entitlements": macos_entitlements,

sdk/python/packages/flet/src/flet/core/gesture_detector.py

Lines changed: 34 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -79,37 +79,39 @@ def __init__(
7979
exclude_from_semantics: Optional[bool] = None,
8080
trackpad_scroll_causes_scale: Optional[bool] = None,
8181
allowed_devices: Optional[Set[PointerDeviceType]] = None,
82-
on_tap=None,
83-
on_tap_down=None,
84-
on_tap_up=None,
85-
on_multi_tap=None,
86-
multi_tap_touches=None,
87-
on_multi_long_press=None,
88-
on_secondary_tap=None,
89-
on_secondary_tap_down=None,
90-
on_secondary_tap_up=None,
91-
on_long_press_start=None,
92-
on_long_press_end=None,
93-
on_secondary_long_press_start=None,
94-
on_secondary_long_press_end=None,
95-
on_double_tap=None,
96-
on_double_tap_down=None,
97-
on_horizontal_drag_start=None,
98-
on_horizontal_drag_update=None,
99-
on_horizontal_drag_end=None,
100-
on_vertical_drag_start=None,
101-
on_vertical_drag_update=None,
102-
on_vertical_drag_end=None,
103-
on_pan_start=None,
104-
on_pan_update=None,
105-
on_pan_end=None,
106-
on_scale_start=None,
107-
on_scale_update=None,
108-
on_scale_end=None,
109-
on_hover=None,
110-
on_enter=None,
111-
on_exit=None,
112-
on_scroll=None,
82+
on_tap: OptionalEventCallable["TapEvent"] = None,
83+
on_tap_down: OptionalEventCallable["TapEvent"] = None,
84+
on_tap_up: OptionalEventCallable["TapEvent"] = None,
85+
on_multi_tap: OptionalEventCallable["TapEvent"] = None,
86+
multi_tap_touches: Optional[int] = None,
87+
on_multi_long_press: OptionalEventCallable["LongPressEndEvent"] = None,
88+
on_secondary_tap: OptionalEventCallable["TapEvent"] = None,
89+
on_secondary_tap_down: OptionalEventCallable["TapEvent"] = None,
90+
on_secondary_tap_up: OptionalEventCallable["TapEvent"] = None,
91+
on_long_press_start: OptionalEventCallable["LongPressEndEvent"] = None,
92+
on_long_press_end: OptionalEventCallable["LongPressEndEvent"] = None,
93+
on_secondary_long_press_start: OptionalEventCallable[
94+
"LongPressEndEvent"
95+
] = None,
96+
on_secondary_long_press_end: OptionalEventCallable["LongPressEndEvent"] = None,
97+
on_double_tap: OptionalEventCallable["TapEvent"] = None,
98+
on_double_tap_down: OptionalEventCallable["TapEvent"] = None,
99+
on_horizontal_drag_start: OptionalEventCallable["DragStartEvent"] = None,
100+
on_horizontal_drag_update: OptionalEventCallable["DragUpdateEvent"] = None,
101+
on_horizontal_drag_end: OptionalEventCallable["DragEndEvent"] = None,
102+
on_vertical_drag_start: OptionalEventCallable["DragStartEvent"] = None,
103+
on_vertical_drag_update: OptionalEventCallable["DragUpdateEvent"] = None,
104+
on_vertical_drag_end: OptionalEventCallable["DragEndEvent"] = None,
105+
on_pan_start: OptionalEventCallable["DragStartEvent"] = None,
106+
on_pan_update: OptionalEventCallable["DragUpdateEvent"] = None,
107+
on_pan_end: OptionalEventCallable["DragEndEvent"] = None,
108+
on_scale_start: OptionalEventCallable["ScaleStartEvent"] = None,
109+
on_scale_update: OptionalEventCallable["ScaleUpdateEvent"] = None,
110+
on_scale_end: OptionalEventCallable["ScaleEndEvent"] = None,
111+
on_hover: OptionalEventCallable["HoverEvent"] = None,
112+
on_enter: OptionalEventCallable["HoverEvent"] = None,
113+
on_exit: OptionalEventCallable["HoverEvent"] = None,
114+
on_scroll: OptionalEventCallable["ScrollEvent"] = None,
113115
#
114116
# ConstrainedControl
115117
#
@@ -329,6 +331,7 @@ def _get_control_name(self):
329331
return "gesturedetector"
330332

331333
def before_update(self):
334+
super().before_update()
332335
self._set_attr_json("allowedDevices", self.__allowed_devices)
333336

334337
def _get_children(self):

sdk/python/packages/flet/src/flet/core/page.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,9 @@ def close(self) -> None:
503503
def to_front(self) -> None:
504504
self.page._invoke_method("windowToFront")
505505

506+
def start_dragging(self) -> None:
507+
self.page._invoke_method("windowStartDragging")
508+
506509
# Events
507510
# on_event
508511
@property

0 commit comments

Comments
 (0)