diff --git a/packages/cassowary/lib/param.dart b/packages/cassowary/lib/param.dart
index 0b2b5c14f9a..f296c9d3af4 100644
--- a/packages/cassowary/lib/param.dart
+++ b/packages/cassowary/lib/param.dart
@@ -6,12 +6,17 @@ part of cassowary;
class Param extends _EquationMember {
final Variable variable;
+ final dynamic context;
- Param.withVariable(this.variable) {
+ Param([double value = 0.0])
+ : variable = new Variable(value),
+ context = null {
variable._owner = this;
}
- Param([double value = 0.0]) : this.variable = new Variable(value) {
+ Param.withContext(ctx)
+ : variable = new Variable(0.0),
+ context = ctx {
variable._owner = this;
}
diff --git a/packages/cassowary/lib/solver.dart b/packages/cassowary/lib/solver.dart
index 59ee312bc1e..f76ea239a57 100644
--- a/packages/cassowary/lib/solver.dart
+++ b/packages/cassowary/lib/solver.dart
@@ -168,8 +168,8 @@ class Solver {
return _dualOptimize();
}
- List flushParameterUpdates() {
- List updates = new List();
+ Set flushUpdates() {
+ Set updates = new Set();
for (Variable variable in _vars.keys) {
_Symbol symbol = _vars[variable];
@@ -178,9 +178,14 @@ class Solver {
double updatedValue = row == null ? 0.0 : row.constant;
if (variable._applyUpdate(updatedValue) && variable._owner != null) {
- updates.add(variable._owner);
+ dynamic context = variable._owner.context;
+
+ if (context != null) {
+ updates.add(context);
+ }
}
}
+
return updates;
}
diff --git a/packages/cassowary/test/cassowary_test.dart b/packages/cassowary/test/cassowary_test.dart
index 7c2e60d7aa8..1ea67e13733 100644
--- a/packages/cassowary/test/cassowary_test.dart
+++ b/packages/cassowary/test/cassowary_test.dart
@@ -427,7 +427,7 @@ void main() {
var left = new Param(-20.0);
Solver s = new Solver();
s.addConstraint(left >= CM(0.0));
- s.flushParameterUpdates();
+ s.flushUpdates();
expect(left.value, 0.0);
});
@@ -443,7 +443,7 @@ void main() {
expect(s.addConstraint(right - left >= CM(100.0)), Result.success);
expect(s.addConstraint(left >= CM(0.0)), Result.success);
- s.flushParameterUpdates();
+ s.flushUpdates();
expect(left.value, 0.0);
expect(mid.value, 50.0);
@@ -484,7 +484,7 @@ void main() {
expect(s.addEditVariable(mid.variable, Priority.strong), Result.success);
expect(s.suggestValueForVariable(mid.variable, 300.0), Result.success);
- s.flushParameterUpdates();
+ s.flushUpdates();
expect(left.value, 0.0);
expect(mid.value, 300.0);
@@ -523,7 +523,7 @@ void main() {
solver.addConstraint((p2 == CM(2.0) * p1) as Constraint);
solver.addConstraint((container == (p1 + p2 + p3)) as Constraint);
- solver.flushParameterUpdates();
+ solver.flushUpdates();
expect(container.value, 100.0);
@@ -533,9 +533,9 @@ void main() {
});
test('test_updates_collection', () {
- Param left = new Param();
- Param mid = new Param();
- Param right = new Param();
+ Param left = new Param.withContext("left");
+ Param mid = new Param.withContext("mid");
+ Param right = new Param.withContext("right");
Solver s = new Solver();
@@ -547,13 +547,36 @@ void main() {
expect(s.suggestValueForVariable(mid.variable, 50.0), Result.success);
- var updates = s.flushParameterUpdates();
+ var updates = s.flushUpdates();
expect(updates.length, 2);
- expect(updates[0] is Param, true);
expect(left.value, 0.0);
expect(mid.value, 50.0);
expect(right.value, 100.0);
});
+
+ test('test_updates_collection_is_set', () {
+ Param left = new Param.withContext("a");
+ Param mid = new Param.withContext("a");
+ Param right = new Param.withContext("a");
+
+ Solver s = new Solver();
+
+ expect(s.addEditVariable(mid.variable, Priority.strong), Result.success);
+
+ expect(s.addConstraint((mid * CM(2.0) == left + right) as Constraint),
+ Result.success);
+ expect(s.addConstraint(left >= CM(10.0)), Result.success);
+
+ expect(s.suggestValueForVariable(mid.variable, 50.0), Result.success);
+
+ var updates = s.flushUpdates();
+
+ expect(updates.length, 1);
+
+ expect(left.value, 10.0);
+ expect(mid.value, 50.0);
+ expect(right.value, 90.0);
+ });
}