Skip to content

Commit 556f492

Browse files
Controls Enhancement (#2882)
* initial commit * Pass data to Control.__init__ Fixes #2826 * CircleAvatar: on_image_error * Card: clip_behavior, is_semantic_container, show_border_on_foreground * Checkbox: semantics_label, shape, splash_radius, border_side, is_error * DragTarget: on_move, deprecated DragTargetAcceptEvent in favour of DragTargetEvent * Draggable: on_drag_start, on_drag_end * More types * Divider: indent, end_indent * Fix #2839 * Stack: alignment, fit * Divider: rename indent to leading_indent and end_indent to trailing_indent * Draggable: rename on_drag_end to on_drag_complete * Checkbox: rename border_side to border * Revert "Checkbox: rename border_side to border" This reverts commit b92ce30. * Card: variant * VerticalDivider: leading_indent, trailing_indent * Tooltip: exclude_from_semantics, enable_tap_to_dismiss * Reformat _set_attr calls * TimePicker: orientation * FAB - dart: colors, elevation, enableFeedback * ProgressRing: stroke_cap, stroke_align, semantics_label, semantics_value * ProgressBar: border_radius, semantics_label, semantics_value * OutlinedButton: clip_behavior * NavBar: animation_duration * AlertDialog: action_button_padding, clip_behavior, icon_padding, shadow_color, surface_tint_color * ListTile: enable_feedback, horizontal_spacing, min_leading_width, min_vertical_padding, selected_color, selected_tile_color, splash_color, style * Image: exclude_from_semantics, filter_quality, semantics_label * SelectionArea: on_change * ListView: semantic_child_count, clipBehavior * FAB: colors, elevations, enable_feedback, clip_behavior * ElevatedButton: clip_behavior, * SnackBar: clip_behavior, shape, on_visible * Slider: interaction, overlay_color * IconButton: alignment, disabled_color, enable_feedback, hover_color, padding * Radio: focus_color, hover_color, overlay_color, splash_radius, toggleable, visual_density * GridView: semantic_child_count, clipBehavior * Tabs: divider_height, enable_feedback, indicator_thickness * Cleanup + Code Reformat * Fix CI: import enum * Reformat: replace is_dataclass with isinstance * add kwargs in run_task * Tabs: secondary * Fix CI: typing error * Option: alignment, on_click * Dropdown: hint_content, icon_content, elevation, item_height, max_menu_height, icon_size, enable_feedback, padding, icon_enabled_color, icon_disabled_color, on_click * Cleanup * PopupMenuButton: clip_behavior, splash_radius, elevation, enable_feedback, icon_size, surface_tint_color, shadow_color, bgcolor, icon_color, shape, padding * Dropdown: remove dense getter and setter * PopupMenuItem: padding, height * Page: locale_configuration * Card: rename NORMAL to ELEVATED * CircleAvatar: rename foreground_image_url and background_image_url to *_src * UrlTarget enum * PopupMenuButton: reintroduce on_cancelled, but as deprecated * Reformat: created control.attrColor to ease color parsing * ListView+GridView: cache_extent * AppBar: elevation_on_scroll, shadow_color, surface_tint_color, clip_behavior, force_material_transparency, is_secondary, title_spacing, exclude_header_semantics * Reformat: avoid spamming warnings * TextField: fill_color, hover_color * Dropdown: fill_color * Fix failing CI: omitted parenthesis * Locale: script_code * Locale: rename used_locale to default_locale * CupertinoBottomSheet default values * CupertinoBottomSheet: check the type of content control * Locale: rename default_locale to current_locale :) * TimePicker.value: avoid splitting None * AlertDialog: alignment, icon_color, scrollable, content_text_style, title_text_style, actions_overflow_button_spacing, * AppBar: toolbar_opacity, title_text_style, toolbar_text_style,shape * parseMouseCursor: defaultMouseCursor * Checkbox: visual_density, mouse_cursor * Banner: content_text_style, margin, elevation, divider_color, shadow_color, surface_tint_color, on_visible * CupertinoListTile: leading_size, leading_to_title * Chip: surface_tint_color, color, click_elevation, clip_behavior, visual_density, border_side * CupertinoRadio: toggleable, focus_color * CupertinoSegmentedButton: click_color * CupertinoSwitch: on_label_color, off_label_color * Switch: hover_color, splash_radius, overlay_color, track_outline_color,mouse_cursor * Snackbar: action_overflow_threshold * Tabs: is_secondary, mouseCursor, clipBehavior * Slider: mouse_cursor, secondary_track_value, secondary_active_color * PopupMenuItem: mouse_cursor * NavigationDrawerDestination: bgcolor * NavigationDestination: bgcolor * NavigationBar: overlay_color * CupertinoTimerPicker: item_extent * ExpansionTile: dense, enable_feedback, visual_density * SearchBar: keyboard_type, view_surface_tint_color, autofocus * NavigationRail: (un)selected_label_text_style | Destination: indicator_color, indicator_shape * IconButton: mouse_cursor, visual_density * Radio: mouse_cursor * FAB: mouse_cursor * DataTable: clip_behavior * DatePicker: on_entry_mode_change * ListTile: title_alignment, icon_color, text_color, shape, visual_density, mouse_cursor, title_text_style, subtitle_text_style, leading_and_trailing_text_style * TimePicker: on_entry_mode_change * Cleanup * Fix failing CI concerning circular import * Cleanup * Remove None from enums * Updated rive package version * Added Rive to CI --------- Co-authored-by: Feodor Fitsner <[email protected]>
1 parent dc9cc6c commit 556f492

File tree

162 files changed

+4527
-1287
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

162 files changed

+4527
-1287
lines changed

.appveyor.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ for:
122122
python3 ci/patch_pubspec.py packages/flet_audio/pubspec.yaml $PKG_VER
123123
python3 ci/patch_pubspec.py packages/flet_audio_recorder/pubspec.yaml $PKG_VER
124124
python3 ci/patch_pubspec.py packages/flet_lottie/pubspec.yaml $PKG_VER
125+
python3 ci/patch_pubspec.py packages/flet_rive/pubspec.yaml $PKG_VER
125126
python3 ci/patch_pubspec.py packages/flet_video/pubspec.yaml $PKG_VER
126127
python3 ci/patch_pubspec.py packages/flet_webview/pubspec.yaml $PKG_VER
127128
@@ -142,6 +143,10 @@ for:
142143
dart pub publish --force || exit 1
143144
cd $APPVEYOR_BUILD_FOLDER
144145
146+
cd packages/flet_rive
147+
dart pub publish --force || exit 1
148+
cd $APPVEYOR_BUILD_FOLDER
149+
145150
cd packages/flet_video
146151
dart pub publish --force || exit 1
147152
cd $APPVEYOR_BUILD_FOLDER
@@ -169,6 +174,10 @@ for:
169174
dart pub publish --dry-run
170175
cd $APPVEYOR_BUILD_FOLDER
171176
177+
cd packages/flet_rive
178+
dart pub publish --dry-run
179+
cd $APPVEYOR_BUILD_FOLDER
180+
172181
cd packages/flet_video
173182
dart pub publish --dry-run
174183
cd $APPVEYOR_BUILD_FOLDER

client/pubspec.lock

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,11 @@ packages:
300300
url: "https://pub.dev"
301301
source: hosted
302302
version: "1.0.4"
303+
flutter_localizations:
304+
dependency: transitive
305+
description: flutter
306+
source: sdk
307+
version: "0.0.0"
303308
flutter_markdown:
304309
dependency: transitive
305310
description:
@@ -392,6 +397,14 @@ packages:
392397
description: flutter
393398
source: sdk
394399
version: "0.0.0"
400+
intl:
401+
dependency: transitive
402+
description:
403+
name: intl
404+
sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d"
405+
url: "https://pub.dev"
406+
source: hosted
407+
version: "0.18.1"
395408
js:
396409
dependency: transitive
397410
description:

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

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import '../flet_control_backend.dart';
44
import '../models/control.dart';
55
import '../utils/alignment.dart';
66
import '../utils/borders.dart';
7-
import '../utils/colors.dart';
87
import '../utils/edge_insets.dart';
8+
import '../utils/text.dart';
99
import 'create_control.dart';
1010
import 'cupertino_alert_dialog.dart';
1111
import 'error.dart';
@@ -49,10 +49,15 @@ class _AlertDialogControlState extends State<AlertDialogControl>
4949
var actionCtrls =
5050
widget.children.where((c) => c.name == "action" && c.isVisible);
5151
final actionsAlignment = parseMainAxisAlignment(
52-
widget.control, "actionsAlignment", MainAxisAlignment.start);
52+
widget.control, "actionsAlignment", MainAxisAlignment.end);
5353
if (titleCtrls.isEmpty && contentCtrls.isEmpty && actionCtrls.isEmpty) {
5454
return const ErrorControl("AlertDialog does not have any content.");
5555
}
56+
var clipBehavior = Clip.values.firstWhere(
57+
(e) =>
58+
e.name.toLowerCase() ==
59+
widget.control.attrString("clipBehavior", "")!.toLowerCase(),
60+
orElse: () => Clip.none);
5661

5762
return AlertDialog(
5863
title: titleCtrls.isNotEmpty
@@ -76,13 +81,26 @@ class _AlertDialogControlState extends State<AlertDialogControl>
7681
semanticLabel: widget.control.attrString("semanticsLabel"),
7782
insetPadding: parseEdgeInsets(widget.control, "insetPadding") ??
7883
const EdgeInsets.symmetric(horizontal: 40.0, vertical: 24.0),
79-
backgroundColor: HexColor.fromString(
80-
Theme.of(context), widget.control.attrString("bgcolor", "")!),
84+
iconPadding: parseEdgeInsets(widget.control, "iconPadding"),
85+
backgroundColor: widget.control.attrColor("bgcolor", context),
86+
buttonPadding: parseEdgeInsets(widget.control, "actionButtonPadding"),
87+
surfaceTintColor: widget.control.attrColor("surfaceTintColor", context),
88+
shadowColor: widget.control.attrColor("shadowColor", context),
8189
elevation: widget.control.attrDouble("elevation"),
90+
clipBehavior: clipBehavior,
8291
icon: iconCtrls.isNotEmpty
8392
? createControl(widget.control, iconCtrls.first.id, disabled,
8493
parentAdaptive: adaptive)
8594
: null,
95+
iconColor: widget.control.attrColor("iconColor", context),
96+
scrollable: widget.control.attrBool("scrollable", false)!,
97+
actionsOverflowButtonSpacing:
98+
widget.control.attrDouble("actionsOverflowButtonSpacing"),
99+
alignment: parseAlignment(widget.control, "alignment"),
100+
contentTextStyle:
101+
parseTextStyle(Theme.of(context), widget.control, "contentTextStyle"),
102+
titleTextStyle:
103+
parseTextStyle(Theme.of(context), widget.control, "titleTextStyle"),
86104
);
87105
}
88106

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

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1+
import 'package:collection/collection.dart';
12
import 'package:flutter/material.dart';
23

34
import '../models/control.dart';
4-
import '../utils/colors.dart';
5+
import '../utils/borders.dart';
6+
import '../utils/text.dart';
57
import '../utils/theme.dart';
68
import 'create_control.dart';
79
import 'cupertino_app_bar.dart';
@@ -50,13 +52,27 @@ class AppBarControl extends StatelessWidget
5052

5153
var leadingWidth = control.attrDouble("leadingWidth");
5254
var elevation = control.attrDouble("elevation");
55+
var toolbarOpacity = control.attrDouble("toolbarOpacity", 1)!;
5356
var centerTitle = control.attrBool("centerTitle", false)!;
5457
var automaticallyImplyLeading =
5558
control.attrBool("automaticallyImplyLeading", true)!;
56-
var color = HexColor.fromString(
57-
Theme.of(context), control.attrString("color", "")!);
58-
var bgcolor = HexColor.fromString(
59-
Theme.of(context), control.attrString("bgcolor", "")!);
59+
var color = control.attrColor("color", context);
60+
var bgcolor = control.attrColor("bgcolor", context);
61+
var shadowColor = control.attrColor("shadowColor", context);
62+
var surfaceTintColor = control.attrColor("surfaceTintColor", context);
63+
var elevationOnScroll = control.attrDouble("elevationOnScroll");
64+
var forceMaterialTransparency =
65+
control.attrBool("forceMaterialTransparency", false)!;
66+
var isSecondary = control.attrBool("isSecondary", false)!;
67+
var excludeHeaderSemantics =
68+
control.attrBool("excludeHeaderSemantics", false)!;
69+
var titleSpacing = control.attrDouble("titleSpacing");
70+
71+
var clipBehavior = Clip.values.firstWhereOrNull(
72+
(e) =>
73+
e.name.toLowerCase() ==
74+
control.attrString("clipBehavior", "")!.toLowerCase(),
75+
);
6076

6177
return AppBar(
6278
leading: leadingCtrls.isNotEmpty
@@ -81,6 +97,20 @@ class AppBarControl extends StatelessWidget
8197
systemOverlayStyle: Theme.of(context)
8298
.extension<SystemUiOverlayStyleTheme>()
8399
?.systemUiOverlayStyle,
100+
shadowColor: shadowColor,
101+
surfaceTintColor: surfaceTintColor,
102+
scrolledUnderElevation: elevationOnScroll,
103+
forceMaterialTransparency: forceMaterialTransparency,
104+
primary: !isSecondary,
105+
titleSpacing: titleSpacing,
106+
excludeHeaderSemantics: excludeHeaderSemantics,
107+
clipBehavior: clipBehavior,
108+
titleTextStyle:
109+
parseTextStyle(Theme.of(context), control, "titleTextStyle"),
110+
shape: parseOutlinedBorder(control, "shape"),
111+
toolbarOpacity: toolbarOpacity,
112+
toolbarTextStyle:
113+
parseTextStyle(Theme.of(context), control, "toolbarTextStyle"),
84114
);
85115
});
86116
}

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

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

33
import '../models/control.dart';
44
import '../utils/alignment.dart';
5-
import '../utils/colors.dart';
65
import '../utils/edge_insets.dart';
76
import '../utils/text.dart';
87
import '../utils/transforms.dart';
@@ -40,11 +39,9 @@ class BadgeControl extends StatelessWidget {
4039

4140
var offsetDetails = parseOffset(control, "offset");
4241

43-
var bgColor = HexColor.fromString(
44-
Theme.of(context), control.attrString("bgColor", "")!);
42+
var bgColor = control.attrColor("bgcolor", context);
4543

46-
var textColor = HexColor.fromString(
47-
Theme.of(context), control.attrString("textColor", "")!);
44+
var textColor = control.attrColor("textColor", context);
4845

4946
bool isLabelVisible = control.attrBool("isLabelVisible", true)!;
5047
var largeSize = control.attrDouble("largeSize");

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

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import 'package:flutter/material.dart';
22

3+
import '../flet_control_backend.dart';
34
import '../models/control.dart';
4-
import '../utils/colors.dart';
55
import '../utils/edge_insets.dart';
6+
import '../utils/text.dart';
67
import 'create_control.dart';
78
import 'error.dart';
89

@@ -13,6 +14,7 @@ class BannerControl extends StatefulWidget {
1314
final bool parentDisabled;
1415
final bool? parentAdaptive;
1516
final Widget? nextChild;
17+
final FletControlBackend backend;
1618

1719
const BannerControl(
1820
{super.key,
@@ -21,7 +23,8 @@ class BannerControl extends StatefulWidget {
2123
required this.children,
2224
required this.parentDisabled,
2325
required this.parentAdaptive,
24-
required this.nextChild});
26+
required this.nextChild,
27+
required this.backend});
2528

2629
@override
2730
State<BannerControl> createState() => _BannerControlState();
@@ -59,8 +62,17 @@ class _BannerControlState extends State<BannerControl> {
5962
parentAdaptive: widget.parentAdaptive))
6063
.toList(),
6164
forceActionsBelow: widget.control.attrBool("forceActionsBelow", false)!,
62-
backgroundColor: HexColor.fromString(
63-
Theme.of(context), widget.control.attrString("bgcolor", "")!),
65+
backgroundColor: widget.control.attrColor("bgcolor", context),
66+
contentTextStyle:
67+
parseTextStyle(Theme.of(context), widget.control, "contentTextStyle"),
68+
surfaceTintColor: widget.control.attrColor("surfaceTintColor", context),
69+
shadowColor: widget.control.attrColor("shadowColor", context),
70+
dividerColor: widget.control.attrColor("dividerColor", context),
71+
elevation: widget.control.attrDouble("elevation"),
72+
margin: parseEdgeInsets(widget.control, "margin"),
73+
onVisible: () {
74+
widget.backend.triggerControlEvent(widget.control.id, "visible");
75+
},
6476
);
6577
}
6678

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

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import '../models/control.dart';
1313
import '../utils/animations.dart';
1414
import '../utils/borders.dart';
1515
import '../utils/charts.dart';
16-
import '../utils/colors.dart';
1716
import '../utils/gradient.dart';
1817
import '../utils/text.dart';
1918
import 'charts.dart';
@@ -205,8 +204,7 @@ class _BarChartControlState extends State<BarChartControl> {
205204

206205
var chart = BarChart(
207206
BarChartData(
208-
backgroundColor: HexColor.fromString(
209-
Theme.of(context), widget.control.attrString("bgcolor", "")!),
207+
backgroundColor: widget.control.attrColor("bgcolor", context),
210208
minY: widget.control.attrDouble("miny"),
211209
maxY: widget.control.attrDouble("maxy"),
212210
baselineY: widget.control.attrDouble("baseliney"),
@@ -231,8 +229,8 @@ class _BarChartControlState extends State<BarChartControl> {
231229
barTouchData: BarTouchData(
232230
enabled: interactive,
233231
touchTooltipData: BarTouchTooltipData(
234-
tooltipBgColor: HexColor.fromString(Theme.of(context),
235-
widget.control.attrString("tooltipBgcolor", "")!),
232+
tooltipBgColor:
233+
widget.control.attrColor("tooltipBgColor", context),
236234
getTooltipItem: (group, groupIndex, rod, rodIndex) {
237235
var dp = viewModel.barGroups[groupIndex].barRods[rodIndex];
238236

@@ -333,16 +331,14 @@ class _BarChartControlState extends State<BarChartControl> {
333331
bool interactiveChart, BarChartRodViewModel rodViewModel) {
334332
var bgFromY = rodViewModel.control.attrDouble("bgFromY");
335333
var bgToY = rodViewModel.control.attrDouble("bgToY");
336-
var bgColor = HexColor.fromString(
337-
theme, rodViewModel.control.attrString("bgColor", "")!);
334+
var bgColor = rodViewModel.control.attrColor("bgColor", context);
338335
var bgGradient = parseGradient(theme, rodViewModel.control, "bgGradient");
339336

340337
return BarChartRodData(
341338
fromY: rodViewModel.control.attrDouble("fromY"),
342339
toY: rodViewModel.control.attrDouble("toY", 0)!,
343340
width: rodViewModel.control.attrDouble("width"),
344-
color: HexColor.fromString(
345-
theme, rodViewModel.control.attrString("color", "")!),
341+
color: rodViewModel.control.attrColor("color", context),
346342
gradient: parseGradient(theme, rodViewModel.control, "gradient"),
347343
borderRadius: parseBorderRadius(rodViewModel.control, "borderRadius"),
348344
borderSide:
@@ -370,8 +366,7 @@ class _BarChartControlState extends State<BarChartControl> {
370366
return BarChartRodStackItem(
371367
stackItemViewModel.control.attrDouble("fromY")!,
372368
stackItemViewModel.control.attrDouble("toY", 0)!,
373-
HexColor.fromString(
374-
theme, stackItemViewModel.control.attrString("color", "")!)!,
369+
stackItemViewModel.control.attrColor("color", context)!,
375370
parseBorderSide(theme, stackItemViewModel.control, "borderSide") ??
376371
BorderSide.none);
377372
}

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

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

33
import '../models/control.dart';
4-
import '../utils/colors.dart';
54
import '../utils/edge_insets.dart';
65
import 'create_control.dart';
76
import 'error.dart';
@@ -65,12 +64,9 @@ class _BottomAppBarControlState extends State<BottomAppBarControl>
6564
height: widget.control.attrDouble("height"),
6665
elevation: elevation,
6766
shape: shape,
68-
shadowColor: HexColor.fromString(
69-
Theme.of(context), widget.control.attrString("shadowColor", "")!),
70-
surfaceTintColor: HexColor.fromString(Theme.of(context),
71-
widget.control.attrString("surfaceTintColor", "")!),
72-
color: HexColor.fromString(
73-
Theme.of(context), widget.control.attrString("bgColor", "")!),
67+
shadowColor: widget.control.attrColor("shadowColor", context),
68+
surfaceTintColor: widget.control.attrColor("surfaceTintColor", context),
69+
color: widget.control.attrColor("bgColor", context),
7470
notchMargin: widget.control.attrDouble("notchMargin", 4.0)!,
7571
child: contentCtrls.isNotEmpty
7672
? createControl(widget.control, contentCtrls.first.id, disabled,

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

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

33
import '../flet_control_backend.dart';
44
import '../models/control.dart';
5-
import '../utils/colors.dart';
65
import 'create_control.dart';
76
import 'error.dart';
87

@@ -89,8 +88,7 @@ class _BottomSheetControlState extends State<BottomSheetControl> {
8988
return content;
9089
},
9190
isDismissible: dismissible,
92-
backgroundColor: HexColor.fromString(Theme.of(context),
93-
widget.control.attrString("bgColor", "")!),
91+
backgroundColor: widget.control.attrColor("bgColor", context),
9492
elevation: widget.control.attrDouble("elevation"),
9593
isScrollControlled: isScrollControlled,
9694
enableDrag: enableDrag,

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

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import '../models/control.dart';
1313
import '../models/control_tree_view_model.dart';
1414
import '../utils/alignment.dart';
1515
import '../utils/borders.dart';
16-
import '../utils/colors.dart';
1716
import '../utils/dash_path.dart';
1817
import '../utils/drawing.dart';
1918
import '../utils/numbers.dart';
@@ -232,9 +231,7 @@ class FletCustomPainter extends CustomPainter {
232231
}
233232

234233
void drawColor(Canvas canvas, ControlTreeViewModel shape) {
235-
var color =
236-
HexColor.fromString(theme, shape.control.attrString("color", "")!) ??
237-
Colors.black;
234+
var color = shape.control.attrColor("color", context) ?? Colors.black;
238235
var blendMode = BlendMode.values.firstWhere(
239236
(e) =>
240237
e.name.toLowerCase() ==
@@ -333,9 +330,7 @@ class FletCustomPainter extends CustomPainter {
333330

334331
void drawShadow(Canvas canvas, ControlTreeViewModel shape) {
335332
var path = buildPath(json.decode(shape.control.attrString("path", "[]")!));
336-
var color =
337-
HexColor.fromString(theme, shape.control.attrString("color", "")!) ??
338-
Colors.black;
333+
var color = shape.control.attrColor("color", context) ?? Colors.black;
339334
var elevation = shape.control.attrDouble("elevation", 0)!;
340335
var transparentOccluder =
341336
shape.control.attrBool("transparentOccluder", false)!;

0 commit comments

Comments
 (0)