Skip to content

Commit a01bcc7

Browse files
committed
Refactor connectivity API and add platform checks
Renamed connectivity methods and event handlers for consistency (e.g., 'check_connectivity' to 'get_connectivity', 'on_connectivity_change' to 'on_change'). Updated enum name from ConnectivityResult to ConnectivityType. Added platform support checks to sensor and service classes, raising FletUnsupportedPlatformException on unsupported platforms. Improved documentation to clarify supported platforms for each service.
1 parent 4ddf171 commit a01bcc7

File tree

10 files changed

+63
-21
lines changed

10 files changed

+63
-21
lines changed

packages/flet/lib/src/services/connectivity.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class ConnectivityService extends FletService {
2727

2828
Future<dynamic> _invokeMethod(String name, dynamic args) async {
2929
switch (name) {
30-
case "check_connectivity":
30+
case "get_connectivity":
3131
final results = await _connectivity.checkConnectivity();
3232
return results.map((r) => r.name).toList();
3333
default:
@@ -36,12 +36,12 @@ class ConnectivityService extends FletService {
3636
}
3737

3838
void _updateListeners() {
39-
final listenChange = control.getBool("on_connectivity_change") == true;
39+
final listenChange = control.getBool("on_change") == true;
4040
if (listenChange && _subscription == null) {
4141
_subscription = _connectivity.onConnectivityChanged.listen(
4242
(List<ConnectivityResult> result) {
43-
control.triggerEvent("connectivity_change",
44-
{"connectivity": result.map((r) => r.name).toList()});
43+
control.triggerEvent(
44+
"change", {"connectivity": result.map((r) => r.name).toList()});
4545
}, onError: (error) {
4646
debugPrint(
4747
"ConnectivityService: error listening to connectivity: $error");

sdk/python/examples/services/connectivity/basic.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ async def main(page: ft.Page):
88
changes = ft.Text()
99

1010
async def refresh(_=None):
11-
results = await connectivity.check_connectivity()
11+
results = await connectivity.get_connectivity()
1212
status.value = "Current connectivity: " + ", ".join(r.value for r in results)
1313

1414
async def on_change(e: ft.ConnectivityChangeEvent):
@@ -17,7 +17,7 @@ async def on_change(e: ft.ConnectivityChangeEvent):
1717
)
1818
await refresh()
1919

20-
connectivity.on_connectivity_change = on_change
20+
connectivity.on_change = on_change
2121

2222
await refresh()
2323

sdk/python/packages/flet/src/flet/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -429,7 +429,7 @@
429429
from flet.controls.services.connectivity import (
430430
Connectivity,
431431
ConnectivityChangeEvent,
432-
ConnectivityResult,
432+
ConnectivityType,
433433
)
434434
from flet.controls.services.file_picker import (
435435
FilePicker,
@@ -666,7 +666,7 @@
666666
"Component",
667667
"Connectivity",
668668
"ConnectivityChangeEvent",
669-
"ConnectivityResult",
669+
"ConnectivityType",
670670
"ConstrainedControl",
671671
"Container",
672672
"Context",

sdk/python/packages/flet/src/flet/controls/services/accelerometer.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from flet.controls.duration import Duration
88
from flet.controls.services.sensor_error_event import SensorErrorEvent
99
from flet.controls.services.service import Service
10+
from flet.utils.platform_utils import FletUnsupportedPlatformException
1011

1112
__all__ = ["Accelerometer", "AccelerometerReadingEvent"]
1213

@@ -54,7 +55,7 @@ class Accelerometer(Service):
5455
Accelerometer reports zero acceleration if the device is free falling.
5556
5657
Note:
57-
* Supported platforms: Android, iOS.
58+
* Supported platforms: Android, iOS and web.
5859
* Web ignores requested sampling intervals.
5960
"""
6061

@@ -90,3 +91,9 @@ class Accelerometer(Service):
9091
Fired when the platform reports a sensor error (for example when the device
9192
does not expose the accelerometer). `event.message` contains the error text.
9293
"""
94+
95+
def before_update(self):
96+
if not (self.page.web or self.page.platform.is_mobile()):
97+
raise FletUnsupportedPlatformException(
98+
f"{self.__class__.__name__} is only supported on Android, iOS and web."
99+
)

sdk/python/packages/flet/src/flet/controls/services/barometer.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from flet.controls.base_control import control
66
from flet.controls.control_event import Event, EventHandler
77
from flet.controls.duration import Duration
8+
from flet.controls.exceptions import FletUnsupportedPlatformException
89
from flet.controls.services.sensor_error_event import SensorErrorEvent
910
from flet.controls.services.service import Service
1011

@@ -96,3 +97,9 @@ class Barometer(Service):
9697
Fired when the platform reports a sensor error. `event.message` is the error
9798
description.
9899
"""
100+
101+
def before_update(self):
102+
if self.page.web or not self.page.platform.is_mobile():
103+
raise FletUnsupportedPlatformException(
104+
f"{self.__class__.__name__} is only supported on Android and iOS."
105+
)

sdk/python/packages/flet/src/flet/controls/services/connectivity.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66
from flet.controls.control_event import Event, EventHandler
77
from flet.controls.services.service import Service
88

9-
__all__ = ["Connectivity", "ConnectivityChangeEvent", "ConnectivityResult"]
9+
__all__ = ["Connectivity", "ConnectivityChangeEvent", "ConnectivityType"]
1010

1111

12-
class ConnectivityResult(Enum):
12+
class ConnectivityType(Enum):
1313
"""
1414
Connectivity states.
1515
"""
@@ -48,9 +48,9 @@ class ConnectivityResult(Enum):
4848
class ConnectivityChangeEvent(Event["Connectivity"]):
4949
"""Event fired when connectivity changes."""
5050

51-
connectivity: list[ConnectivityResult]
51+
connectivity: list[ConnectivityType]
5252
"""
53-
Current connectivity state(s).
53+
Current connectivity type(s).
5454
"""
5555

5656

@@ -60,15 +60,15 @@ class Connectivity(Service):
6060
Provides device connectivity status and change notifications.
6161
"""
6262

63-
on_connectivity_change: Optional[EventHandler[ConnectivityChangeEvent]] = None
63+
on_change: Optional[EventHandler[ConnectivityChangeEvent]] = None
6464
"""
6565
Called when connectivity changes.
6666
"""
6767

68-
async def check_connectivity(self) -> list[ConnectivityResult]:
68+
async def get_connectivity(self) -> list[ConnectivityType]:
6969
"""
70-
Returns the current connectivity state(s).
70+
Returns the current connectivity type(s).
7171
"""
7272

73-
result = await self._invoke_method("check_connectivity")
74-
return [ConnectivityResult(r) for r in result]
73+
result = await self._invoke_method("get_connectivity")
74+
return [ConnectivityType(r) for r in result]

sdk/python/packages/flet/src/flet/controls/services/gyroscope.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from flet.controls.base_control import control
66
from flet.controls.control_event import Event, EventHandler
77
from flet.controls.duration import Duration
8+
from flet.controls.exceptions import FletUnsupportedPlatformException
89
from flet.controls.services.sensor_error_event import SensorErrorEvent
910
from flet.controls.services.service import Service
1011

@@ -40,7 +41,7 @@ class Gyroscope(Service):
4041
reporting device rotation rate around each axis in `rad/s`.
4142
4243
Note:
43-
* Supported platforms: Android, iOS.
44+
* Supported platforms: Android, iOS and web.
4445
* Web ignores requested sampling intervals.
4546
"""
4647

@@ -73,3 +74,9 @@ class Gyroscope(Service):
7374
Fired when the platform reports a sensor error. `event.message` is the error
7475
description.
7576
"""
77+
78+
def before_update(self):
79+
if not (self.page.web or self.page.platform.is_mobile()):
80+
raise FletUnsupportedPlatformException(
81+
f"{self.__class__.__name__} is only supported on Android, iOS and web."
82+
)

sdk/python/packages/flet/src/flet/controls/services/magnetometer.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from flet.controls.base_control import control
66
from flet.controls.control_event import Event, EventHandler
77
from flet.controls.duration import Duration
8+
from flet.controls.exceptions import FletUnsupportedPlatformException
89
from flet.controls.services.sensor_error_event import SensorErrorEvent
910
from flet.controls.services.service import Service
1011

@@ -48,7 +49,7 @@ class Magnetometer(Service):
4849
4950
Note:
5051
* Supported platforms: Android, iOS.
51-
* Magnetometer APIs are not available on web
52+
* Magnetometer APIs are not available on web.
5253
or desktop, so always handle `on_error` to detect unsupported hardware.
5354
"""
5455

@@ -81,3 +82,9 @@ class Magnetometer(Service):
8182
Fired when the platform reports a sensor error. `event.message` is the error
8283
description.
8384
"""
85+
86+
def before_update(self):
87+
if self.page.web or not self.page.platform.is_mobile():
88+
raise FletUnsupportedPlatformException(
89+
f"{self.__class__.__name__} is only supported on Android and iOS."
90+
)

sdk/python/packages/flet/src/flet/controls/services/screen_brightness.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
from flet.controls.base_control import control
55
from flet.controls.control_event import Event, EventHandler
6+
from flet.controls.exceptions import FletUnsupportedPlatformException
67
from flet.controls.services.service import Service
78
from flet.controls.types import Number
89

@@ -125,3 +126,9 @@ async def set_auto_reset(self, auto_reset: bool):
125126
"""
126127

127128
await self._invoke_method("set_auto_reset", {"value": auto_reset})
129+
130+
def before_update(self):
131+
if self.page.web or not self.page.platform.is_mobile():
132+
raise FletUnsupportedPlatformException(
133+
f"{self.__class__.__name__} is only supported on Android and iOS."
134+
)

sdk/python/packages/flet/src/flet/controls/services/user_accelerometer.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from flet.controls.base_control import control
66
from flet.controls.control_event import Event, EventHandler
77
from flet.controls.duration import Duration
8+
from flet.controls.exceptions import FletUnsupportedPlatformException
89
from flet.controls.services.sensor_error_event import SensorErrorEvent
910
from flet.controls.services.service import Service
1011

@@ -47,7 +48,7 @@ class UserAccelerometer(Service):
4748
from [`AccelerometerReadingEvent`][flet.].
4849
4950
Note:
50-
* Supported platforms: Android, iOS.
51+
* Supported platforms: Android, iOS and web.
5152
* Web ignores requested sampling intervals.
5253
"""
5354

@@ -80,3 +81,9 @@ class UserAccelerometer(Service):
8081
Fired when the platform reports a sensor error. `event.message` is the error
8182
description.
8283
"""
84+
85+
def before_update(self):
86+
if not (self.page.web or self.page.platform.is_mobile()):
87+
raise FletUnsupportedPlatformException(
88+
f"{self.__class__.__name__} is only supported on Android, iOS and web."
89+
)

0 commit comments

Comments
 (0)