Skip to content

Commit f743acb

Browse files
Page events allow multiple subscribers (#38)
* Update control itself when isolated Re-implement control.build() * Page events allow multiple subscribers
1 parent c30be7a commit f743acb

File tree

2 files changed

+32
-8
lines changed

2 files changed

+32
-8
lines changed

sdk/python/flet/event_handler.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class EventHandler:
2+
def __init__(self) -> None:
3+
self.__handlers = {}
4+
5+
def handler(self, e):
6+
for h in self.__handlers.keys():
7+
h(e)
8+
9+
def subscribe(self, handler):
10+
self.__handlers[handler] = True
11+
12+
def unsubscribe(self, handler):
13+
if handler in self.__handlers:
14+
self.__handlers.pop(handler)

sdk/python/flet/page.py

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
ScrollMode,
2020
)
2121
from flet.control_event import ControlEvent
22+
from flet.event_handler import EventHandler
2223
from flet.floating_action_button import FloatingActionButton
2324
from flet.protocol import Command
2425
from flet.pubsub import PubSub
@@ -57,6 +58,15 @@ def __init__(self, conn: Connection, session_id):
5758
self.__dark_theme = None
5859
self.__pubsub = PubSub(conn.pubsubhub, session_id)
5960

61+
self.__on_close = EventHandler()
62+
self._add_event_handler("close", self.__on_close.handler)
63+
self.__on_resize = EventHandler()
64+
self._add_event_handler("resize", self.__on_resize.handler)
65+
self.__on_connect = EventHandler()
66+
self._add_event_handler("connect", self.__on_connect.handler)
67+
self.__on_disconnect = EventHandler()
68+
self._add_event_handler("disconnect", self.__on_disconnect.handler)
69+
6070
def __enter__(self):
6171
return self
6272

@@ -505,38 +515,38 @@ def window_height(self):
505515
# on_close
506516
@property
507517
def on_close(self):
508-
return self._get_event_handler("close")
518+
return self.__on_close
509519

510520
@on_close.setter
511521
def on_close(self, handler):
512-
self._add_event_handler("close", handler)
522+
self.__on_close.subscribe(handler)
513523

514524
# on_resize
515525
@property
516526
def on_resize(self):
517-
return self._get_event_handler("resize")
527+
return self.__on_resize
518528

519529
@on_resize.setter
520530
def on_resize(self, handler):
521-
self._add_event_handler("resize", handler)
531+
self.__on_resize.subscribe(handler)
522532

523533
# on_connect
524534
@property
525535
def on_connect(self):
526-
return self._get_event_handler("connect")
536+
return self.__on_connect
527537

528538
@on_connect.setter
529539
def on_connect(self, handler):
530-
self._add_event_handler("connect", handler)
540+
self.__on_connect.subscribe(handler)
531541

532542
# on_disconnect
533543
@property
534544
def on_disconnect(self):
535-
return self._get_event_handler("disconnect")
545+
return self.__on_disconnect
536546

537547
@on_disconnect.setter
538548
def on_disconnect(self, handler):
539-
self._add_event_handler("disconnect", handler)
549+
self.__on_disconnect.subscribe(handler)
540550

541551

542552
class Offstage(Control):

0 commit comments

Comments
 (0)