Skip to content

Commit 990a720

Browse files
committed
Simulator #16
1 parent e7e6f1c commit 990a720

File tree

3 files changed

+43
-2
lines changed

3 files changed

+43
-2
lines changed

lib/src/codelessly.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,10 +153,12 @@ class Codelessly {
153153
/// If it is null, it means it has not yet been initialized.
154154
CloudDatabase? get cloudDatabase => dataManager.cloudDatabase;
155155

156+
// TODO(Saad): Move to [CodelesslyContext]
156157
String? _currentNavigatedLayoutId;
157158

158159
String? get currentNavigatedLayoutId => _currentNavigatedLayoutId;
159160

161+
// TODO(Saad): Move to [CodelesslyContext]
160162
String? _currentNavigatedCanvasId;
161163

162164
String? get currentNavigatedCanvasId => _currentNavigatedCanvasId;

lib/src/transformers/passive_transformer_manager.dart

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ class PassiveNodeTransformerManager extends WidgetNodeTransformerManager {
219219
return NodeStateProviderWidget(
220220
key: ValueKey(node.id),
221221
node: node,
222+
codelesslyContext: codelesslyContext,
222223
child: Builder(builder: (context) {
223224
if (listenables.isNotEmpty) {
224225
return ManagedListenableBuilder(
@@ -308,9 +309,14 @@ class _ManagedListenableBuilderState extends State<ManagedListenableBuilder> {
308309
class NodeStateProviderWidget extends StatefulWidget {
309310
final Widget child;
310311
final BaseNode node;
312+
final CodelesslyContext codelesslyContext;
311313

312-
const NodeStateProviderWidget(
313-
{super.key, required this.child, required this.node});
314+
const NodeStateProviderWidget({
315+
super.key,
316+
required this.child,
317+
required this.node,
318+
required this.codelesslyContext,
319+
});
314320

315321
@override
316322
State<NodeStateProviderWidget> createState() =>
@@ -321,6 +327,26 @@ class _NodeStateProviderWidgetState extends State<NodeStateProviderWidget>
321327
with AutomaticKeepAliveClientMixin {
322328
final NodeStateWrapper nodeState = NodeStateWrapper();
323329

330+
@override
331+
void initState() {
332+
super.initState();
333+
widget.codelesslyContext.nodeRebuildNotifier
334+
.addListener(onNodeNotification);
335+
}
336+
337+
@override
338+
void dispose() {
339+
widget.codelesslyContext.nodeRebuildNotifier
340+
.removeListener(onNodeNotification);
341+
super.dispose();
342+
}
343+
344+
void onNodeNotification() {
345+
if (widget.codelesslyContext.nodeRebuildNotifier.value == widget.node.id) {
346+
setState(() {});
347+
}
348+
}
349+
324350
@override
325351
Widget build(BuildContext context) {
326352
super.build(context);

lib/src/ui/codelessly_context.dart

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ class CodelesslyContext with ChangeNotifier, EquatableMixin {
5959
/// The key is the condition's id.
6060
final Map<String, BaseCondition> conditions;
6161

62+
/// A notifier that is used to rebuild individual nodes.
63+
final ValueNotifier<String> nodeRebuildNotifier = ValueNotifier('');
64+
6265
/// Creates a [CodelesslyContext] with the given [data], [functions], and
6366
/// [nodeValues].
6467
CodelesslyContext({
@@ -81,6 +84,12 @@ class CodelesslyContext with ChangeNotifier, EquatableMixin {
8184
variables = {},
8285
conditions = {};
8386

87+
@override
88+
void dispose() {
89+
nodeRebuildNotifier.dispose();
90+
super.dispose();
91+
}
92+
8493
/// Returns a map of all of the [VariableData]s in [variables] mapped by their
8594
/// name.
8695
Map<String, VariableData> variableNamesMap() =>
@@ -110,6 +119,10 @@ class CodelesslyContext with ChangeNotifier, EquatableMixin {
110119
);
111120
}
112121

122+
void rebuildNode(String nodeId) {
123+
nodeRebuildNotifier.value = nodeId;
124+
}
125+
113126
/// Used for actions that are connected to one or more nodes.
114127
/// Ex. submit action is connected to a text field node to access its data to
115128
/// submit to the server.

0 commit comments

Comments
 (0)