[FEAT] Added a multiConsumer
This commit is contained in:
@@ -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.
|
/// 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
|
/// Rebuilds whenever the group manifest changes (items added/removed) or when
|
||||||
|
|||||||
Reference in New Issue
Block a user