@@ -235,38 +235,43 @@ class FunctionsRepository {
235235
236236 static Future <void > navigate (
237237 BuildContext context,
238- NavigationAction action,
239- ) async {
240- final ScopedValues scopedValues = ScopedValues .of (context);
241- final parsedParams = substituteVariablesInMap (action.params, scopedValues);
238+ NavigationAction action, {
239+ Codelessly ? codelessly,
240+ CodelesslyWidgetController ? codelesslyController,
241+ ScopedValues ? scopedValues,
242+ }) async {
243+ final ScopedValues effectiveScopedValues =
244+ scopedValues ?? ScopedValues .of (context);
245+ final parsedParams =
246+ substituteVariablesInMap (action.params, effectiveScopedValues);
242247
243248 _log ('Performing navigation action with params: $parsedParams ' );
244249
245- final Codelessly codelessly = context.read <Codelessly >();
246- final String ? myLayoutId = codelessly.currentNavigatedLayoutId;
247- final String ? myCanvasId = codelessly.currentNavigatedCanvasId;
250+ final Codelessly effectiveCodelessly =
251+ codelessly ?? context.read <Codelessly >();
252+ final String ? myLayoutId = effectiveCodelessly.currentNavigatedLayoutId;
253+ final String ? myCanvasId = effectiveCodelessly.currentNavigatedCanvasId;
248254
249255 if (action.navigationType == NavigationType .pop) {
250256 await Navigator .maybePop (context, parsedParams);
251257 } else {
252258 // Check if a layout exists for the action's [destinationId].
253- final String ? layoutId = codelessly
259+ final String ? layoutId = effectiveCodelessly
254260 .dataManager.publishModel? .layouts[action.destinationId]? .id ??
255- codelessly .dataManager.publishModel? .layouts.values
261+ effectiveCodelessly .dataManager.publishModel? .layouts.values
256262 .firstWhereOrNull (
257263 (layout) => layout.canvasIds.contains (action.destinationId))
258264 ? .id;
259265
260266 _log ('looking for layout with canvas id: [${action .destinationId }]' );
261267 for (final layout
262- in codelessly .dataManager.publishModel! .layouts.values) {
268+ in effectiveCodelessly .dataManager.publishModel! .layouts.values) {
263269 _log (
264270 'layout [${layout .id }] canvas ids: [${layout .canvasIds .join (', ' )}]' );
265271 }
266272
267273 if (layoutId == null ) {
268- final Codelessly codelessly = context.read <Codelessly >();
269- codelessly.errorHandler.captureException (
274+ effectiveCodelessly.errorHandler.captureException (
270275 CodelesslyException .layoutNotFound (
271276 message:
272277 'Could not find a layout with a canvas id of [${action .destinationId }]' ,
@@ -276,10 +281,11 @@ class FunctionsRepository {
276281 return ;
277282 }
278283
279- final parentController = context.read <CodelesslyWidgetController >();
284+ final parentController =
285+ codelesslyController ?? context.read <CodelesslyWidgetController >();
280286 final effectiveController = parentController.copyWith (
281287 layoutID: layoutId,
282- codelessly: codelessly ,
288+ codelessly: effectiveCodelessly ,
283289 );
284290
285291 if (action.navigationType == NavigationType .push) {
@@ -296,7 +302,7 @@ class FunctionsRepository {
296302 // to, because the Navigator.push future has completed and came
297303 // back to this screen.
298304 if (context.mounted) {
299- codelessly .notifyNavigationListeners (
305+ effectiveCodelessly .notifyNavigationListeners (
300306 context,
301307 layoutId: myLayoutId,
302308 canvasId: myCanvasId,
@@ -317,7 +323,7 @@ class FunctionsRepository {
317323 // to, because the Navigator.push future has completed and came
318324 // back to this screen.
319325 if (context.mounted) {
320- codelessly .notifyNavigationListeners (
326+ effectiveCodelessly .notifyNavigationListeners (
321327 context,
322328 layoutId: myLayoutId,
323329 canvasId: myCanvasId,
0 commit comments