Skip to content

Commit

Permalink
add support to debugFillProperties
Browse files Browse the repository at this point in the history
  • Loading branch information
tilucasoli committed Jul 11, 2024
1 parent e09255f commit bcada1e
Show file tree
Hide file tree
Showing 31 changed files with 379 additions and 14 deletions.
16 changes: 15 additions & 1 deletion packages/mix/lib/src/attributes/color/color_dto.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';

import '../../core/dto.dart';
Expand All @@ -15,7 +16,7 @@ import 'color_directives.dart';
/// * [Color], which is the Flutter equivalent class.
/// {@category DTO}
@immutable
class ColorDto extends Dto<Color> {
class ColorDto extends Dto<Color> with Diagnosticable {
final Color? value;
final List<ColorDirective> directives;

Expand Down Expand Up @@ -51,6 +52,19 @@ class ColorDto extends Dto<Color> {
);
}

@override
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
super.debugFillProperties(properties);

Color color = value ?? defaultValue;

if (color is ColorRef) {
properties.add(DiagnosticsProperty('token', color.token.name));
}

properties.add(ColorProperty('color', color));
}

@override
Color get defaultValue => const Color(0x00000000);

Expand Down
40 changes: 39 additions & 1 deletion packages/mix/lib/src/attributes/decoration/decoration_dto.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// ignore_for_file: no_leading_underscores_for_local_identifiers
// ignore_for_file: prefer_relative_imports,avoid-importing-entrypoint-exports

import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';
import 'package:mix/mix.dart';
import 'package:mix_annotations/mix_annotations.dart';
Expand All @@ -21,7 +22,8 @@ typedef _BaseDecorProperties = ({
/// This class needs to have the different properties that are not found in the [Modifiers] class.
/// In order to support merging of [Decoration] values, and reusable of common properties.
@immutable
sealed class DecorationDto<T extends Decoration> extends Dto<T> {
sealed class DecorationDto<T extends Decoration> extends Dto<T>
with Diagnosticable {
final ColorDto? color;
final GradientDto? gradient;
final DecorationImageDto? image;
Expand Down Expand Up @@ -78,6 +80,7 @@ sealed class DecorationDto<T extends Decoration> extends Dto<T> {
bool get isMergeable;

DecorationDto? mergeableDecor(covariant DecorationDto? other);

@override
DecorationDto<T> merge(covariant DecorationDto<T>? other);
}
Expand Down Expand Up @@ -141,6 +144,41 @@ final class BoxDecorationDto extends DecorationDto<BoxDecoration>
);
}

@override
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
super.debugFillProperties(properties);
properties
..defaultDiagnosticsTreeStyle = DiagnosticsTreeStyle.whitespace
..emptyBodyDescription = '<no decorations specified>';

properties.add(DiagnosticsProperty('image', image, defaultValue: null));
properties.add(DiagnosticsProperty('color', color, defaultValue: null));
properties.add(
DiagnosticsProperty('border', border, defaultValue: null),
);
properties.add(DiagnosticsProperty(
'borderRadius',
borderRadius,
defaultValue: null,
));
properties.add(IterableProperty<BoxShadowDto>(
'boxShadow',
boxShadow,
defaultValue: null,
style: DiagnosticsTreeStyle.whitespace,
));
properties.add(DiagnosticsProperty(
'gradient',
gradient,
defaultValue: null,
));
properties.add(EnumProperty<BoxShape>(
'shape',
shape,
defaultValue: BoxShape.rectangle,
));
}

@override
bool get isMergeable => backgroundBlendMode == null;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import 'package:flutter/foundation.dart';

import '../../core/core.dart';
import 'widget_modifiers_data.dart';

class WidgetModifiersDataDto extends Dto<WidgetModifiersData> {
class WidgetModifiersDataDto extends Dto<WidgetModifiersData>
with Diagnosticable {
final List<WidgetModifierAttribute> value;

const WidgetModifiersDataDto(this.value);
Expand All @@ -21,6 +24,14 @@ class WidgetModifiersDataDto extends Dto<WidgetModifiersData> {
return WidgetModifiersData(value.map((e) => e.resolve(mix)).toList());
}

@override
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
super.debugFillProperties(properties);
for (var attr in value) {
properties.add(DiagnosticsProperty(attr.runtimeType.toString(), attr));
}
}

@override
WidgetModifiersData get defaultValue => const WidgetModifiersData([]);

Expand Down
22 changes: 20 additions & 2 deletions packages/mix/lib/src/core/factory/mix_data.dart
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
// ignore_for_file: avoid-dynamic

import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';

import '../../attributes/animated/animated_data.dart';
import '../../attributes/attributes.dart';
import '../../internal/iterable_ext.dart';
import '../../internal/string_ext.dart';
import '../../theme/tokens/token_resolver.dart';
import '../../variants/context_variant.dart';
import '../../variants/variant_attribute.dart';
Expand All @@ -16,7 +19,7 @@ import 'style_mix.dart';
/// It contains a mixture of properties and methods useful for handling different attributes,
/// modifiers and token resolvers.
@immutable
class MixData {
class MixData with Diagnosticable {
final AnimatedData? animation;

// Instance variables for widget attributes, widget modifiers and token resolver.
Expand Down Expand Up @@ -132,6 +135,21 @@ class MixData {
other.animation == animation;
}

@override
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
super.debugFillProperties(properties);
for (var attr in attributes.values) {
properties.add(
DiagnosticsProperty(
attr.runtimeType.toString().camelCase,
attr,
description: attr.runtimeType.toString().camelCase,
expandableValue: true,
),
);
}
}

@override
int get hashCode => _attributes.hashCode ^ animation.hashCode;
}
Expand Down
12 changes: 12 additions & 0 deletions packages/mix/lib/src/core/factory/mix_provider.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';

import 'mix_data.dart';
Expand Down Expand Up @@ -30,6 +31,17 @@ class Mix extends InheritedWidget {
@override
bool updateShouldNotify(Mix oldWidget) => data != oldWidget.data;

@override
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
super.debugFillProperties(properties);

properties.add(DiagnosticsProperty<MixData>(
'attributes',
data,
expandableValue: true,
));
}

/// Builds a [Mix] widget.
///
/// The [context] and [style] are used to create a [MixData] instance.
Expand Down
6 changes: 4 additions & 2 deletions packages/mix/lib/src/core/modifier.dart
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';

import 'attribute.dart';
Expand Down Expand Up @@ -30,8 +31,9 @@ abstract base class WidgetModifierSpec<Self extends WidgetModifierSpec<Self>>
}

abstract base class WidgetModifierAttribute<
Self extends WidgetModifierAttribute<Self, Value>,
Value extends WidgetModifierSpec<Value>> extends SpecAttribute<Value> {
Self extends WidgetModifierAttribute<Self, Value>,
Value extends WidgetModifierSpec<Value>> extends SpecAttribute<Value>
with Diagnosticable {
const WidgetModifierAttribute();

@override
Expand Down
9 changes: 9 additions & 0 deletions packages/mix/lib/src/modifiers/align_widget_modifier.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import 'dart:ui';

import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';

import '../core/attribute.dart';
Expand Down Expand Up @@ -86,6 +87,14 @@ final class AlignModifierAttribute
);
}

@override
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
super.debugFillProperties(properties);
properties.add(DiagnosticsProperty('alignment', alignment));
properties.add(DiagnosticsProperty('widthFactor', widthFactor));
properties.add(DiagnosticsProperty('heightFactor', heightFactor));
}

@override
get props => [alignment, widthFactor, heightFactor];
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import 'dart:ui';

import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';

import '../core/attribute.dart';
Expand Down Expand Up @@ -30,6 +31,12 @@ final class AspectRatioModifierAttribute extends WidgetModifierAttribute<
return AspectRatioModifierSpec(aspectRatio);
}

@override
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
super.debugFillProperties(properties);
properties.add(DiagnosticsProperty('aspectRatio', aspectRatio));
}

@override
get props => [aspectRatio];
}
Expand Down
8 changes: 8 additions & 0 deletions packages/mix/lib/src/modifiers/clip_widget_modifier.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// ignore_for_file: prefer-named-boolean-parameters

import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';

import '../core/attribute.dart';
Expand Down Expand Up @@ -67,6 +68,13 @@ final class ClipOvalModifierAttribute extends WidgetModifierAttribute<
return ClipOvalModifierSpec(clipper: clipper, clipBehavior: clipBehavior);
}

@override
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
super.debugFillProperties(properties);
properties.add(DiagnosticsProperty('clipper', clipper));
properties.add(DiagnosticsProperty('clipBehavior', clipBehavior));
}

@override
get props => [clipper, clipBehavior];
}
Expand Down
8 changes: 8 additions & 0 deletions packages/mix/lib/src/modifiers/flexible_widget_modifier.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// ignore_for_file: prefer-named-boolean-parameters

import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';

import '../attributes/enum/enum_util.dart';
Expand Down Expand Up @@ -63,6 +64,13 @@ final class FlexibleModifierAttribute extends WidgetModifierAttribute<
return FlexibleModifierSpec(flex: flex, fit: fit);
}

@override
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
super.debugFillProperties(properties);
properties.add(DiagnosticsProperty('flex', flex));
properties.add(DiagnosticsProperty('fit', fit));
}

@override
get props => [flex, fit];
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import 'dart:ui';

import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';

import '../core/attribute.dart';
Expand Down Expand Up @@ -93,6 +94,14 @@ final class FractionallySizedBoxModifierAttribute
);
}

@override
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
super.debugFillProperties(properties);
properties.add(DiagnosticsProperty('widthFactor', widthFactor));
properties.add(DiagnosticsProperty('heightFactor', heightFactor));
properties.add(DiagnosticsProperty('alignment', alignment));
}

@override
get props => [widthFactor, heightFactor, alignment];
}
Expand Down
7 changes: 7 additions & 0 deletions packages/mix/lib/src/modifiers/opacity_widget_modifier.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import 'dart:ui';

import 'package:flutter/src/foundation/diagnostics.dart';
import 'package:flutter/widgets.dart';

import '../core/attribute.dart';
Expand Down Expand Up @@ -60,6 +61,12 @@ final class OpacityModifierAttribute extends WidgetModifierAttribute<
return OpacityModifierSpec(opacity);
}

@override
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
super.debugFillProperties(properties);
properties.add(DiagnosticsProperty('opacity', opacity));
}

@override
get props => [opacity];
}
Expand Down
7 changes: 7 additions & 0 deletions packages/mix/lib/src/modifiers/padding_widget_modifier.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// ignore_for_file: prefer-named-boolean-parameters

import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';

import '../attributes/spacing/edge_insets_dto.dart';
Expand Down Expand Up @@ -46,6 +47,12 @@ final class PaddingModifierAttribute
@override
PaddingSpec resolve(MixData mix) => PaddingSpec(padding.resolve(mix));

@override
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
super.debugFillProperties(properties);
properties.add(DiagnosticsProperty('padding', padding));
}

@override
get props => [padding];
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// ignore_for_file: prefer-named-boolean-parameters

import 'package:flutter/foundation.dart';
import 'package:flutter/widgets.dart';

import '../core/attribute.dart';
Expand Down Expand Up @@ -50,6 +51,12 @@ final class RotatedBoxModifierAttribute extends WidgetModifierAttribute<
RotatedBoxModifierSpec resolve(MixData mix) =>
RotatedBoxModifierSpec(quarterTurns);

@override
void debugFillProperties(DiagnosticPropertiesBuilder properties) {
super.debugFillProperties(properties);
properties.add(DiagnosticsProperty('quarterTurns', quarterTurns));
}

@override
List<Object?> get props => [quarterTurns];
}
Expand Down
Loading

0 comments on commit bcada1e

Please sign in to comment.