Skip to content

Commit e175224

Browse files
authored
AppBar.system_overlay_style prop (#2615)
* SystemOverlayStyle dataclass * parseSystemOverlayStyle * export PlaylistMode
1 parent 24b8004 commit e175224

File tree

4 files changed

+76
-2
lines changed

4 files changed

+76
-2
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
22

33
import '../models/control.dart';
44
import '../utils/colors.dart';
5+
import '../utils/overlay_style.dart';
56
import 'create_control.dart';
67
import 'cupertino_app_bar.dart';
78
import 'flet_store_mixin.dart';
@@ -56,6 +57,8 @@ class AppBarControl extends StatelessWidget
5657
Theme.of(context), control.attrString("color", "")!);
5758
var bgcolor = HexColor.fromString(
5859
Theme.of(context), control.attrString("bgcolor", "")!);
60+
var systemOverlayStyle = parseSystemOverlayStyle(
61+
Theme.of(context), control, "systemOverlayStyle");
5962

6063
return AppBar(
6164
leading: leadingCtrls.isNotEmpty
@@ -77,6 +80,7 @@ class AppBarControl extends StatelessWidget
7780
.map((c) => createControl(control, c.id, control.isDisabled,
7881
parentAdaptive: adaptive))
7982
.toList(),
83+
systemOverlayStyle: systemOverlayStyle,
8084
);
8185
});
8286
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
import 'dart:convert';
2+
3+
import 'package:flutter/material.dart';
4+
import 'package:flutter/services.dart';
5+
6+
import '../models/control.dart';
7+
import '../utils/numbers.dart';
8+
import 'colors.dart';
9+
10+
SystemUiOverlayStyle? parseSystemOverlayStyle(
11+
ThemeData theme, Control control, String propName) {
12+
dynamic j;
13+
var v = control.attrString(propName, null);
14+
if (v == null) {
15+
return null;
16+
}
17+
j = json.decode(v);
18+
return overlayStyleFromJson(theme, j);
19+
}
20+
21+
SystemUiOverlayStyle overlayStyleFromJson(
22+
ThemeData theme, Map<String, dynamic> json) {
23+
return SystemUiOverlayStyle(
24+
statusBarColor: json["status_bar_color"] != null
25+
? HexColor.fromString(theme, json["status_bar_color"] ?? "")
26+
: null,
27+
systemNavigationBarColor: json["system_navigation_bar_color"] != null
28+
? HexColor.fromString(theme, json["system_navigation_bar_color"] ?? "")
29+
: null,
30+
systemNavigationBarDividerColor:
31+
json["system_navigation_bar_divider_color"] != null
32+
? HexColor.fromString(theme, json["system_navigation_bar_divider_color"] ?? "")
33+
: null,
34+
systemStatusBarContrastEnforced:
35+
json["enforce_system_status_bar_contrast"] != null
36+
? parseBool(json["enforce_system_status_bar_contrast"])
37+
: null,
38+
systemNavigationBarContrastEnforced:
39+
json["enforce_system_navigation_bar_contrast"] != null
40+
? parseBool(json["enforce_system_navigation_bar_contrast"])
41+
: null,
42+
);
43+
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
from flet_core.alignment import Alignment
2121
from flet_core.animated_switcher import AnimatedSwitcher, AnimatedSwitcherTransition
2222
from flet_core.animation import Animation, AnimationCurve
23-
from flet_core.app_bar import AppBar
23+
from flet_core.app_bar import AppBar, SystemOverlayStyle
2424
from flet_core.audio import Audio
2525
from flet_core.audio_recorder import AudioEncoder, AudioRecorder
2626
from flet_core.badge import Badge
@@ -249,7 +249,7 @@
249249
)
250250
from flet_core.user_control import UserControl
251251
from flet_core.vertical_divider import VerticalDivider
252-
from flet_core.video import FilterQuality, Video, VideoMedia
252+
from flet_core.video import FilterQuality, PlaylistMode, Video, VideoMedia
253253
from flet_core.view import View
254254
from flet_core.webview import WebView
255255
from flet_core.window_drag_area import WindowDragArea

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

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,21 @@
1+
import dataclasses
2+
from dataclasses import field
13
from typing import List, Optional
24

35
from flet_core.adaptive_control import AdaptiveControl
46
from flet_core.control import Control, OptionalNumber
57
from flet_core.ref import Ref
68

79

10+
@dataclasses.dataclass
11+
class SystemOverlayStyle:
12+
status_bar_color: Optional[str] = field(default=None)
13+
system_navigation_bar_color: Optional[str] = field(default=None)
14+
system_navigation_bar_divider_color: Optional[str] = field(default=None)
15+
enforce_system_navigation_bar_contrast: Optional[bool] = field(default=None)
16+
enforce_system_status_bar_contrast: Optional[bool] = field(default=None)
17+
18+
819
class AppBar(AdaptiveControl):
920
"""
1021
A material design app bar.
@@ -60,6 +71,7 @@ def __init__(
6071
toolbar_height: OptionalNumber = None,
6172
color: Optional[str] = None,
6273
bgcolor: Optional[str] = None,
74+
system_overlay_style: Optional[SystemOverlayStyle] = None,
6375
elevation: OptionalNumber = None,
6476
actions: Optional[List[Control]] = None,
6577
adaptive: Optional[bool] = None,
@@ -82,10 +94,16 @@ def __init__(
8294
self.bgcolor = bgcolor
8395
self.elevation = elevation
8496
self.actions = actions
97+
self.system_overlay_style = system_overlay_style
8598

8699
def _get_control_name(self):
87100
return "appbar"
88101

102+
def _before_build_command(self):
103+
super()._before_build_command()
104+
if dataclasses.is_dataclass(self.__system_overlay_style):
105+
self._set_attr_json("systemOverlayStyle", self.__system_overlay_style)
106+
89107
def _get_children(self):
90108
children = []
91109
if self.__leading:
@@ -142,6 +160,15 @@ def title(self) -> Optional[Control]:
142160
def title(self, value: Optional[Control]):
143161
self.__title = value
144162

163+
# system_overlay_style
164+
@property
165+
def system_overlay_style(self) -> Optional[SystemOverlayStyle]:
166+
return self.__system_overlay_style
167+
168+
@system_overlay_style.setter
169+
def system_overlay_style(self, value: Optional[SystemOverlayStyle]):
170+
self.__system_overlay_style = value
171+
145172
# center_title
146173
@property
147174
def center_title(self) -> Optional[bool]:

0 commit comments

Comments
 (0)