diff --git a/packages/flet/lib/src/controls/view.dart b/packages/flet/lib/src/controls/view.dart index cff69c6bfb..2176b79d0d 100644 --- a/packages/flet/lib/src/controls/view.dart +++ b/packages/flet/lib/src/controls/view.dart @@ -15,6 +15,8 @@ import '../utils/box.dart'; import '../utils/buttons.dart'; import '../utils/colors.dart'; import '../utils/edge_insets.dart'; +import '../utils/gradient.dart'; +import '../utils/images.dart'; import '../utils/numbers.dart'; import '../utils/theme.dart'; import '../widgets/loading_page.dart'; @@ -272,9 +274,21 @@ class _ViewControlState extends State { var foregroundDecoration = control.getBoxDecoration("foreground_decoration", context); if (backgroundDecoration != null || foregroundDecoration != null) { - result = Container( + var bgContainer = Container( decoration: backgroundDecoration, foregroundDecoration: foregroundDecoration, + ); + result = Stack( + fit: StackFit.expand, + children: [bgContainer, result], + ); + } + + var shaderGradient = control.getGradient("shader", Theme.of(context)); + if (shaderGradient != null) { + result = ShaderMask( + shaderCallback: (bounds) => shaderGradient.createShader(bounds), + blendMode: control.getBlendMode("blend_mode", BlendMode.modulate)!, child: result, ); } diff --git a/sdk/python/packages/flet/src/flet/controls/core/view.py b/sdk/python/packages/flet/src/flet/controls/core/view.py index 23bd290133..4c6004ce9a 100644 --- a/sdk/python/packages/flet/src/flet/controls/core/view.py +++ b/sdk/python/packages/flet/src/flet/controls/core/view.py @@ -7,6 +7,7 @@ from flet.controls.control_event import ControlEventHandler from flet.controls.cupertino.cupertino_app_bar import CupertinoAppBar from flet.controls.cupertino.cupertino_navigation_bar import CupertinoNavigationBar +from flet.controls.gradients import Gradient from flet.controls.layout_control import LayoutControl from flet.controls.material.app_bar import AppBar from flet.controls.material.bottom_app_bar import BottomAppBar @@ -18,6 +19,7 @@ from flet.controls.services.service import Service from flet.controls.transform import OffsetValue from flet.controls.types import ( + BlendMode, ColorValue, CrossAxisAlignment, FloatingActionButtonLocation, @@ -156,6 +158,16 @@ class View(ScrollableControl, LayoutControl): The foreground decoration. """ + shader: Optional[Gradient] = None + """ + Use gradient as a shader. + """ + + blend_mode: BlendMode = BlendMode.MODULATE + """ + The blend mode to use when applying the shader + """ + fullscreen_dialog: bool = False """ If `True`, the view is a fullscreen modal dialog.