@@ -2,6 +2,8 @@ import 'dart:async';
22
33import 'package:codelessly_api/codelessly_api.dart' ;
44import 'package:flutter/material.dart' ;
5+ import 'package:flutter/services.dart' ;
6+ import 'package:provider/provider.dart' ;
57
68import '../../../codelessly_sdk.dart' ;
79import '../../functions/functions_repository.dart' ;
@@ -38,6 +40,7 @@ class PassiveCanvasTransformer extends NodeWidgetTransformer<CanvasNode> {
3840 settings: settings.copyWith (
3941 // Passes through to build a PreferredSizeWidget directly.
4042 buildRawWidget: true ,
43+ brightness: node.properties.brightness,
4144 ),
4245 );
4346
@@ -51,7 +54,9 @@ class PassiveCanvasTransformer extends NodeWidgetTransformer<CanvasNode> {
5154 final Widget appBarChild = manager.buildWidgetFromNode (
5255 appBarNode,
5356 context,
54- settings: settings,
57+ settings: settings.copyWith (
58+ brightness: node.properties.brightness,
59+ ),
5560 );
5661
5762 return PreferredSize (
@@ -386,6 +391,39 @@ class _PassiveCanvasWidgetState extends State<PassiveCanvasWidget> {
386391
387392 bool didPerformOnLoadActions = false ;
388393
394+ Codelessly ? codelessly;
395+
396+ @override
397+ void initState () {
398+ super .initState ();
399+
400+ codelessly = context.read <Codelessly >();
401+ final String ? myLayoutId = codelessly!
402+ .dataManager.publishModel? .layouts.dataMap.entries
403+ .firstWhere ((entry) {
404+ return entry.value.canvasIds.contains (widget.node.id);
405+ }).key;
406+
407+ // Set the system UI brightness to the canvas brightness.
408+ codelessly! .setSystemUIBrightness (widget.node.properties.brightness);
409+
410+ // Listen for navigation events to update the system UI brightness back
411+ // again, such as if this canvas was navigated away from, but then the view
412+ // pops and goes back to this canvas.
413+ codelessly! .addNavigationListener ('canvas-${widget .node .id }' ,
414+ (event, layoutId) {
415+ if (myLayoutId == layoutId) {
416+ codelessly! .setSystemUIBrightness (widget.node.properties.brightness);
417+ }
418+ });
419+ }
420+
421+ @override
422+ void dispose () {
423+ codelessly? .removeNavigationListener ('canvas-${widget .node .id }' );
424+ super .dispose ();
425+ }
426+
389427 @override
390428 void didUpdateWidget (covariant PassiveCanvasWidget oldWidget) {
391429 super .didUpdateWidget (oldWidget);
@@ -456,5 +494,26 @@ class _PassiveCanvasWidgetState extends State<PassiveCanvasWidget> {
456494 }
457495
458496 @override
459- Widget build (BuildContext context) => widget.builder (context);
497+ Widget build (BuildContext context) {
498+ final Brightness brightness =
499+ widget.node.properties.brightness.toFlutterBrightness (context);
500+ final SystemUiOverlayStyle ? systemOverlayStyle =
501+ Theme .of (context).appBarTheme.systemOverlayStyle;
502+ return Theme (
503+ data: Theme .of (context).copyWith (
504+ appBarTheme: systemOverlayStyle != null
505+ ? null
506+ : Theme .of (context).appBarTheme.copyWith (
507+ systemOverlayStyle: SystemUiOverlayStyle (
508+ statusBarColor: brightness == Brightness .light
509+ ? Colors .black
510+ : Colors .white,
511+ statusBarIconBrightness: brightness,
512+ statusBarBrightness: brightness,
513+ ),
514+ ),
515+ ),
516+ child: widget.builder (context),
517+ );
518+ }
460519}
0 commit comments