[FEAT] Added a multiConsumer

This commit is contained in:
2026-01-25 17:26:18 +02:00
parent b8995a809d
commit 25b9366131

View File

@@ -34,6 +34,40 @@ class AstromicFieldConsumer<T> extends StatelessWidget {
}
}
class AstromicMultiFieldConsumer extends StatelessWidget {
const AstromicMultiFieldConsumer({
super.key,
required this.controller,
required this.ids,
required this.builder,
});
final AstromicFormController controller;
final List<String> ids;
// Returns a Map where key is the field ID and value is the current field value
final Widget Function(BuildContext context, Map<String, dynamic> values) builder;
@override
Widget build(BuildContext context) {
// 1. Get all the listenable nodes for the requested IDs
final nodes = ids.map((id) => controller.node<dynamic>(id)).toList();
// 2. Use Listenable.merge to create a single trigger for all nodes
return AnimatedBuilder(
animation: Listenable.merge(nodes),
builder: (context, _) {
// 3. Rebuild the map of current values whenever any node changes
final values = {
for (var id in ids) id: controller.tryGet<dynamic>(id),
};
return builder(context, values);
},
);
}
}
/// A reactive consumer that listens to an entire dynamic group and its nested fields.
///
/// Rebuilds whenever the group manifest changes (items added/removed) or when