Skip to content

Commit eb209ed

Browse files
Android support (#1666)
* Added `page.debug` and `page.platform_brightness` props Close #1649, close #1630 * Store session ID in `window.name` Fix #1629 * Do not assign random port on Windows with `--ios` flag Fix #1620 * Update local_connection.py * Build Android QR
1 parent 764b252 commit eb209ed

File tree

16 files changed

+178
-47
lines changed

16 files changed

+178
-47
lines changed

client/android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,6 @@ subprojects {
2626
project.evaluationDependsOn(':app')
2727
}
2828

29-
task clean(type: Delete) {
29+
tasks.register("clean", Delete) {
3030
delete rootProject.buildDir
3131
}

package/lib/src/actions.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ class WindowEventAction {
5050

5151
class PageBrightnessChangeAction {
5252
final Brightness brightness;
53-
PageBrightnessChangeAction(this.brightness);
53+
final FletServer server;
54+
PageBrightnessChangeAction(this.brightness, this.server);
5455
}
5556

5657
class RegisterWebClientAction {

package/lib/src/flet_server.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,9 @@ class FletServer {
4444
String _windowLeft = "";
4545
String _isPWA = "";
4646
String _isWeb = "";
47+
String _isDebug = "";
4748
String _platform = "";
49+
String _platformBrightness = "";
4850
int reconnectStarted = 0;
4951
final Map<String, ControlInvokeMethodCallback> controlInvokeMethods;
5052

@@ -114,7 +116,9 @@ class FletServer {
114116
required String windowLeft,
115117
required String isPWA,
116118
required String isWeb,
119+
required String isDebug,
117120
required String platform,
121+
required String platformBrightness,
118122
}) {
119123
_pageName = pageName;
120124
_pageHash = pageRoute;
@@ -126,7 +130,9 @@ class FletServer {
126130
_windowLeft = windowLeft;
127131
_isPWA = isPWA;
128132
_isWeb = isWeb;
133+
_isDebug = isDebug;
129134
_platform = platform;
135+
_platformBrightness = platformBrightness;
130136
}
131137

132138
registerWebClientInternal() {
@@ -145,7 +151,9 @@ class FletServer {
145151
windowHeight: page?.attrString("windowHeight") ?? _windowHeight,
146152
isPWA: _isPWA,
147153
isWeb: _isWeb,
154+
isDebug: _isDebug,
148155
platform: _platform,
156+
platformBrightness: _platformBrightness,
149157
sessionId: _store.state.sessionId)));
150158
_pageHash = "";
151159
}

package/lib/src/protocol/register_webclient_request.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ class RegisterWebClientRequest {
99
final String? windowLeft;
1010
final String? isPWA;
1111
final String? isWeb;
12+
final String? isDebug;
1213
final String? platform;
14+
final String? platformBrightness;
1315
final String? sessionId;
1416

1517
RegisterWebClientRequest(
@@ -23,7 +25,9 @@ class RegisterWebClientRequest {
2325
this.windowLeft,
2426
this.isPWA,
2527
this.isWeb,
28+
this.isDebug,
2629
this.platform,
30+
this.platformBrightness,
2731
this.sessionId});
2832

2933
Map<String, dynamic> toJson() => <String, dynamic>{
@@ -37,7 +41,9 @@ class RegisterWebClientRequest {
3741
'windowLeft': windowLeft,
3842
'isPWA': isPWA,
3943
'isWeb': isWeb,
44+
'isDebug': isDebug,
4045
'platform': platform,
46+
'platformBrightness': platformBrightness,
4147
'sessionId': sessionId
4248
};
4349
}

package/lib/src/reducers.dart

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ enum Actions { increment, setText, setError }
2727

2828
AppState appReducer(AppState state, dynamic action) {
2929
if (action is PageLoadAction) {
30-
var sessionId = SessionStore.get("sessionId");
30+
var sessionId = SessionStore.sessionId;
3131
return state.copyWith(
3232
pageUri: action.pageUri,
3333
assetsDir: action.assetsDir,
@@ -95,7 +95,9 @@ AppState appReducer(AppState state, dynamic action) {
9595
windowLeft: wmd.left != null ? wmd.left.toString() : "",
9696
isPWA: isProgressiveWebApp().toString(),
9797
isWeb: kIsWeb.toString(),
98-
platform: defaultTargetPlatform.name.toLowerCase());
98+
isDebug: kDebugMode.toString(),
99+
platform: defaultTargetPlatform.name.toLowerCase(),
100+
platformBrightness: state.displayBrightness.name.toString());
99101

100102
action.server.connect(address: state.pageUri!.toString());
101103
});
@@ -137,6 +139,28 @@ AppState appReducer(AppState state, dynamic action) {
137139

138140
return state.copyWith(controls: controls);
139141
} else if (action is PageBrightnessChangeAction) {
142+
//
143+
// platform brightness changed
144+
//
145+
debugPrint("New platform brightness: ${action.brightness.name}");
146+
147+
var page = state.controls["page"];
148+
var controls = Map.of(state.controls);
149+
if (page != null && !state.isLoading) {
150+
var pageAttrs = Map.of(page.attrs);
151+
pageAttrs["platformBrightness"] = action.brightness.name.toString();
152+
153+
List<Map<String, String>> props = [
154+
{"i": "page", "platformBrightness": action.brightness.name.toString()},
155+
];
156+
157+
controls[page.id] = page.copyWith(attrs: pageAttrs);
158+
action.server.updateControlProps(props: props);
159+
action.server.sendPageEvent(
160+
eventTarget: "page",
161+
eventName: "platformBrightnessChange",
162+
eventData: action.brightness.name.toString());
163+
}
140164
return state.copyWith(displayBrightness: action.brightness);
141165
} else if (action is RegisterWebClientAction) {
142166
//
@@ -152,7 +176,7 @@ AppState appReducer(AppState state, dynamic action) {
152176
final sessionId = action.payload.session!.id;
153177

154178
// store sessionId in a cookie
155-
SessionStore.set("sessionId", sessionId);
179+
SessionStore.sessionId = sessionId;
156180

157181
if (state.deepLinkingRoute != "") {
158182
debugPrint(

package/lib/src/utils/session_store_non_web.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
import 'package:flutter/foundation.dart';
22

33
class SessionStore {
4+
static String? get sessionId {
5+
return null;
6+
}
7+
8+
static set sessionId(String? value) {
9+
// nothing to do
10+
}
11+
412
static String? get(String name) {
513
return null;
614
}

package/lib/src/utils/session_store_web.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,14 @@ import 'dart:html' as html;
44
import 'package:flutter/foundation.dart';
55

66
class SessionStore {
7+
static String? get sessionId {
8+
return html.window.name;
9+
}
10+
11+
static set sessionId(String? value) {
12+
html.window.name = value;
13+
}
14+
715
static String? get(String name) {
816
debugPrint("Get session storage $name");
917

package/lib/src/widgets/page_media.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ class _PageMediaState extends State<PageMedia> {
4343

4444
_onScreenBrightnessChanged(Brightness brightness, Function dispatch) {
4545
debugPrint("Send new brightness to reducer: $brightness");
46-
dispatch(PageBrightnessChangeAction(brightness));
46+
dispatch(PageBrightnessChangeAction(
47+
brightness, FletAppServices.of(context).server));
4748
}
4849

4950
@override

package/test/protocol/register_webclient_request_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ void main() {
1212

1313
final j = json.encode(m);
1414
expect(j,
15-
'{"action":"registerWebClient","payload":{"pageName":"test-page1","pageRoute":null,"pageWidth":null,"pageHeight":null,"windowWidth":null,"windowHeight":null,"windowTop":null,"windowLeft":null,"isPWA":null,"isWeb":null,"platform":null,"sessionId":null}}');
15+
'{"action":"registerWebClient","payload":{"pageName":"test-page1","pageRoute":null,"pageWidth":null,"pageHeight":null,"windowWidth":null,"windowHeight":null,"windowTop":null,"windowLeft":null,"isPWA":null,"isWeb":null,"isDebug":null,"platform":null,"platformBrightness":null,"sessionId":null}}');
1616
});
1717
}

sdk/python/packages/flet-core/src/flet_core/local_connection.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,9 @@ def _create_register_web_client_response(self):
3636
"windowleft": self._client_details.windowLeft,
3737
"pwa": self._client_details.isPWA,
3838
"web": self._client_details.isWeb,
39+
"debug": self._client_details.isDebug,
3940
"platform": self._client_details.platform,
41+
"platformBrightness": self._client_details.platformBrightness,
4042
}
4143
},
4244
),
@@ -216,8 +218,12 @@ def _process_get_command(self, values: List[str]):
216218
r = self._client_details.isPWA
217219
elif prop_name == "web":
218220
r = self._client_details.isWeb
221+
elif prop_name == "debug":
222+
r = self._client_details.isDebug
219223
elif prop_name == "platform":
220224
r = self._client_details.platform
225+
elif prop_name == "platformBrightness":
226+
r = self._client_details.platformBrightness
221227
elif prop_name == "width":
222228
r = self._client_details.pageWidth
223229
elif prop_name == "height":

0 commit comments

Comments
 (0)