Skip to content

Commit 73b2b54

Browse files
committed
Update FVariants method names
1 parent 047f329 commit 73b2b54

4 files changed

Lines changed: 255 additions & 161 deletions

File tree

design_docs/shipped/styling_2.0.md

Lines changed: 35 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -742,23 +742,27 @@ class FVariantsDelta<K extends FVariantConstraint, E extends FVariant, V, D exte
742742
743743
// Delta-based operations.
744744
class FVariantOperation<K extends FVariantConstraint, E extends FVariant, V, D extends Delta<V>> {
745-
// Adds a new variant
746-
FVariantOperation.add(Set<K> constraints, D delta);
747-
748745
// Applies [delta] to the base without modifying existing variants.
749746
FVariantOperation.onBase(D delta);
750747
751-
// Applies [delta] to variants whose constraints are satisfied by [variants].
752-
FVariantOperation.on(Set<E> variants, D delta);
748+
// Applies [delta] to the base and associates the result with each constraint in [constraints].
749+
// Creates exact entries rather than matching existing variants.
750+
FVariantOperation.on(Set<K> constraints, D delta);
751+
752+
// Applies [delta] to existing variants whose constraint's variants are all present in [variants].
753+
FVariantOperation.onMatching(Set<E> variants, D delta);
753754
754755
// Applies [delta] to all variants.
755756
FVariantOperation.onVariants(D delta);
756757
757758
// Applies [delta] to all variants and base.
758759
FVariantOperation.onAll(D delta);
759760
760-
// Removes variants matching [variants].
761-
FVariantOperation.remove(Set<E> variants);
761+
// Removes exact [constraints] from existing variants.
762+
FVariantOperation.remove(Set<K> constraints);
763+
764+
// Removes existing variants whose constraint's variants are all present in [variants].
765+
FVariantOperation.removeMatching(Set<E> variants);
762766
763767
// Removes all variants.
764768
FVariantOperation.removeAll();
@@ -776,39 +780,48 @@ class FVariantsValueDelta<K extends FVariantConstraint, E extends FVariant, V> w
776780
777781
// Concrete value-based operations
778782
class FVariantValueDeltaOperation<K extends FVariantConstraint, E extends FVariant, V> {
779-
// Adds a new variant
780-
FVariantValueDeltaOperation.add(Set<K> constraints, V value);
781-
782783
// Replaces the base with [base].
783784
FVariantValueDeltaOperation.onBase(V base);
784785
785-
// Replaces variants matching [variants] with [value].
786-
FVariantValueDeltaOperation.on(Set<E> variants, V value);
786+
// Sets [value] for each constraint in [constraints], creating or overriding entries.
787+
// Creates exact entries rather than matching existing variants.
788+
FVariantValueDeltaOperation.on(Set<K> constraints, V value);
789+
790+
// Replaces existing variants whose constraint's variants are all present in [variants].
791+
FVariantValueDeltaOperation.onMatching(Set<E> variants, V value);
787792
788793
// Replaces all variants with [value].
789794
FVariantValueDeltaOperation.onVariants(V value);
790795
791796
// Replaces all variants and base with [value].
792797
FVariantValueDeltaOperation.onAll(V value);
793798
794-
// Removes variants matching [variants].
795-
FVariantValueDeltaOperation.remove(Set<E> variants);
799+
// Removes exact [constraints] from existing variants.
800+
FVariantValueDeltaOperation.remove(Set<K> constraints);
801+
802+
// Removes existing variants whose constraint's variants are all present in [variants].
803+
FVariantValueDeltaOperation.removeMatching(Set<E> variants);
796804
797805
// Removes all variants.
798806
FVariantValueDeltaOperation.removeAll();
799807
}
800808
```
801809

802-
The `on` and remove` operations use inclusive matching. For example: `.on({.hovered, .focused}, delta)` affects:
810+
The `on` and `remove` operations work on **exact** constraint entries. For example, `.on({.hovered, .focused}, delta)`
811+
creates separate entries for `.hovered` and `.focused`, but not `.hovered.and(.focused)`.
812+
813+
In contrast, `onMatching` and `removeMatching` match constraints whose variants are all present in the given set.
814+
For example, `.onMatching({.hovered, .focused}, delta)` affects constraints that are **satisfied by** `{.hovered, .focused}`:
803815

804816
```dart
805817
final decoration = FVariants.delta(
806818
BoxDecoration(color: Colors.white),
807819
variants: {
808-
[.hovered]: .delta(color: Colors.blue), // ✓ contains hovered
809-
[.hovered, .pressed]: .delta(color: Colors.darkBlue), // ✓ contains hovered
810-
[.focused]: .delta(color: Colors.green), // ✓ contains focused
811-
[.disabled]: .value(BoxDecoration(color: Colors.grey)), // ✗ contains neither
820+
[.hovered]: .delta(color: Colors.blue), // ✓ hovered ⊆ {hovered, focused}
821+
[.hovered.and(.focused)]: .delta(color: Colors.darkBlue), // ✓ hovered & focused ⊆ {hovered, focused}
822+
[.focused]: .delta(color: Colors.green), // ✓ focused ⊆ {hovered, focused}
823+
[.hovered.and(.pressed)]: .delta(color: Colors.red), // ✗ pressed ∉ {hovered, focused}
824+
[.disabled]: .value(BoxDecoration(color: Colors.grey)), // ✗ disabled ∉ {hovered, focused}
812825
},
813826
);
814827
```
@@ -822,8 +835,8 @@ FTappable(
822835
style: .delta(
823836
// Apply all modifications without needing to extract base variant.
824837
decoration: .apply([
825-
.on({.hovered}, .delta(color: Colors.blue)),
826-
.on({.pressed}, .delta(color: Colors.darkBlue)),
838+
.onMatching({.hovered}, .delta(color: Colors.blue)),
839+
.onMatching({.pressed}, .delta(color: Colors.darkBlue)),
827840
]),
828841
),
829842
)
@@ -837,7 +850,7 @@ Lastly, `FVariants` also provides `apply(...)` and `applyValues(...)` which dire
837850
```dart
838851
final updated = variants.apply([
839852
.onAll(.delta(color: Colors.blue)),
840-
.add({.disabled}, .delta(color: Colors.grey)),
853+
.on({.disabled}, .delta(color: Colors.grey)),
841854
]);
842855
```
843856

forui/lib/src/theme/variant.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,11 @@ Set<FTextFieldVariant> toTextFieldVariants(FPlatformVariant platform, Set<Widget
3535
sealed class FVariantConstraint {
3636
/// Returns the more specific of two constraints.
3737
///
38+
/// {@template forui.theme.FVariantConstraint.max}
3839
/// Specificity is determined tier-by-tier from highest to lowest. At each tier, the constraint with more operands
3940
/// wins. This means a compound constraint with two tier-2 operands beats one with only one tier-2 operand, even if
40-
/// the latter has additional lower-tier operands.
41+
/// the latter has additional lower-tier operands. Typically `platform < interaction < semantic`.
42+
/// {@endtemplate}
4143
///
4244
/// ```dart
4345
/// max(hovered, disabled); // disabled (tier 2 > tier 1)
@@ -80,7 +82,7 @@ sealed class FVariantConstraint {
8082
return operandsA.join().compareTo(operandsB.join()) <= 0 ? a : b;
8183
}
8284

83-
/// Returns true if this constraint is satisfied by [variants].
85+
/// Returns true if all variants in this constraint are present in [variants].
8486
///
8587
/// ```dart
8688
/// final variants = {.hovered, .focused};

0 commit comments

Comments
 (0)