Skip to content

Commit 2b48b5d

Browse files
committed
Merge remote-tracking branch 'origin/master' into next
2 parents 4c55f08 + e5006f6 commit 2b48b5d

File tree

12 files changed

+105
-57
lines changed

12 files changed

+105
-57
lines changed

.github/workflows/backward_compatibility.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ jobs:
3434
env:
3535
GOLDEN_SKIP: "yes"
3636
steps:
37-
- uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
37+
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
3838
- name: Update pubspec.yaml
3939
run: |
4040
set -e
@@ -76,7 +76,7 @@ jobs:
7676
cat pubspec.yaml
7777
7878
- name: Setup Flutter
79-
uses: subosito/flutter-action@48cafc24713cca54bbe03cdc3a423187d413aafa # v2.10.0
79+
uses: subosito/flutter-action@cc97e1648fff6ca5cc647fa67f47e70f7895510b # v2.11.0
8080
with:
8181
flutter-version: ${{ env.FLUTTER_VERSION }}
8282
- run: flutter test
@@ -99,7 +99,7 @@ jobs:
9999
env:
100100
GOLDEN_SKIP: "yes"
101101
steps:
102-
- uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
102+
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
103103
- name: Update pubspec.yaml
104104
run: |
105105
set -e
@@ -112,7 +112,7 @@ jobs:
112112
# output for debugging
113113
cat pubspec.yaml
114114
- name: Setup Flutter
115-
uses: subosito/flutter-action@48cafc24713cca54bbe03cdc3a423187d413aafa # v2.10.0
115+
uses: subosito/flutter-action@cc97e1648fff6ca5cc647fa67f47e70f7895510b # v2.11.0
116116
with:
117117
channel: ${{ matrix.channel }}
118118
- run: flutter test

.github/workflows/demo_app.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,13 @@ jobs:
1111
name: vercel
1212
runs-on: ubuntu-latest
1313
steps:
14-
- uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
14+
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
1515
- name: Setup Flutter
16-
uses: subosito/flutter-action@48cafc24713cca54bbe03cdc3a423187d413aafa # v2.10.0
16+
uses: subosito/flutter-action@cc97e1648fff6ca5cc647fa67f47e70f7895510b # v2.11.0
1717
with:
1818
cache: true
1919
- name: Gradle cache
20-
uses: gradle/gradle-build-action@ef76a971e2fa3f867b617efd72f2fbd72cf6f8bc # v2.8.0
20+
uses: gradle/gradle-build-action@842c587ad8aa4c68eeba24c396e15af4c2e9f30a # v2.9.0
2121

2222
- name: Run flutter build apk --debug
2323
run: |

.github/workflows/flutter.yml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ jobs:
1616
name: Unit test
1717
runs-on: ubuntu-latest
1818
steps:
19-
- uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
19+
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
2020
- uses: actions/dependency-review-action@6c5ccdad469c9f8a2996bfecaec55a631a347034 # v3.1.0
2121
if: github.base_ref
2222
- name: Setup Flutter
23-
uses: subosito/flutter-action@48cafc24713cca54bbe03cdc3a423187d413aafa # v2.10.0
23+
uses: subosito/flutter-action@cc97e1648fff6ca5cc647fa67f47e70f7895510b # v2.11.0
2424
with:
2525
cache: true
2626
- run: dart format --set-exit-if-changed --output none .
@@ -43,13 +43,13 @@ jobs:
4343
name: Integration test (Android)
4444
runs-on: macos-latest
4545
steps:
46-
- uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
46+
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
4747
- name: Setup Flutter
48-
uses: subosito/flutter-action@48cafc24713cca54bbe03cdc3a423187d413aafa # v2.10.0
48+
uses: subosito/flutter-action@cc97e1648fff6ca5cc647fa67f47e70f7895510b # v2.11.0
4949
with:
5050
cache: true
5151
- name: Gradle cache
52-
uses: gradle/gradle-build-action@ef76a971e2fa3f867b617efd72f2fbd72cf6f8bc # v2.8.0
52+
uses: gradle/gradle-build-action@842c587ad8aa4c68eeba24c396e15af4c2e9f30a # v2.9.0
5353
with:
5454
# only update gradle cache from demo_app.yml jobs
5555
cache-read-only: false
@@ -90,9 +90,9 @@ jobs:
9090
name: Integration test (iOS)
9191
runs-on: macos-latest
9292
steps:
93-
- uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
93+
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
9494
- name: Setup Flutter
95-
uses: subosito/flutter-action@48cafc24713cca54bbe03cdc3a423187d413aafa # v2.10.0
95+
uses: subosito/flutter-action@cc97e1648fff6ca5cc647fa67f47e70f7895510b # v2.11.0
9696
with:
9797
cache: true
9898

.github/workflows/flutter_beta.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ jobs:
1717
env:
1818
GOLDEN_SKIP: "yes"
1919
steps:
20-
- uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
20+
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
2121
- name: Setup Flutter
22-
uses: subosito/flutter-action@48cafc24713cca54bbe03cdc3a423187d413aafa # v2.10.0
22+
uses: subosito/flutter-action@cc97e1648fff6ca5cc647fa67f47e70f7895510b # v2.11.0
2323
with:
2424
channel: beta
2525
- run: ./tool/test.sh --coverage

.github/workflows/flutter_master.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,9 @@ jobs:
1717
env:
1818
GOLDEN_SKIP: "yes"
1919
steps:
20-
- uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
20+
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
2121
- name: Setup Flutter
22-
uses: subosito/flutter-action@48cafc24713cca54bbe03cdc3a423187d413aafa # v2.10.0
22+
uses: subosito/flutter-action@cc97e1648fff6ca5cc647fa67f47e70f7895510b # v2.11.0
2323
with:
2424
channel: master
2525
- run: ./tool/test.sh

.github/workflows/scorecard.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,15 @@ jobs:
1616
id-token: write
1717
security-events: write
1818
steps:
19-
- uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0
20-
- uses: ossf/scorecard-action@08b4669551908b1024bb425080c797723083c031 # v2.2.0
19+
- uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
20+
- uses: ossf/scorecard-action@483ef80eb98fb506c348f7d62e28055e49fe2398 # v2.3.0
2121
with:
2222
results_file: results.sarif
2323
results_format: sarif
2424
publish_results: true
2525
- uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
2626
with:
2727
path: results.sarif
28-
- uses: github/codeql-action/upload-sarif@00e563ead9f72a8461b24876bee2d0c2e8bd2ee8 # v2.21.5
28+
- uses: github/codeql-action/upload-sarif@d90b8d79de6dc1f58e83a1499aa58d6c93dc28de # v2.22.2
2929
with:
3030
sarif_file: results.sarif

demo_app/android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ buildscript {
66
}
77

88
dependencies {
9-
classpath 'com.android.tools.build:gradle:8.1.1'
9+
classpath 'com.android.tools.build:gradle:8.1.2'
1010
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
1111
}
1212
}

packages/core/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ Major breaking changes if you have custom rendering:
5555
- Removed: BuildMetadata, RebuildTriggers
5656
- Changed: BuildBit, WidgetPlaceholder
5757

58+
## 0.10.6
59+
60+
- Fix border 0 is still being rendered (#1045)
61+
5862
## 0.10.5
5963

6064
- Replace the deprecated `DecoderCallback` in tests (#1014)

packages/core/lib/src/data/css.dart

Lines changed: 51 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,13 @@ class CssBorder {
4242

4343
/// Returns `true` if all sides are unset, all radius are zero.
4444
bool get isNoOp =>
45-
(_all == null || _all == CssBorderSide.none) &&
46-
(_bottom == null || _bottom == CssBorderSide.none) &&
47-
(_inlineEnd == null || _inlineEnd == CssBorderSide.none) &&
48-
(_inlineStart == null || _inlineStart == CssBorderSide.none) &&
49-
(_left == null || _left == CssBorderSide.none) &&
50-
(_right == null || _right == CssBorderSide.none) &&
51-
(_top == null || _top == CssBorderSide.none) &&
45+
(_all?.isNoOp != false) &&
46+
(_bottom?.isNoOp != false) &&
47+
(_inlineEnd?.isNoOp != false) &&
48+
(_inlineStart?.isNoOp != false) &&
49+
(_left?.isNoOp != false) &&
50+
(_right?.isNoOp != false) &&
51+
(_top?.isNoOp != false) &&
5252
radiusBottomLeft == CssRadius.zero &&
5353
radiusBottomRight == CssRadius.zero &&
5454
radiusTopLeft == CssRadius.zero &&
@@ -193,27 +193,51 @@ class CssBorderSide {
193193
/// A border that is not rendered.
194194
static const none = CssBorderSide();
195195

196-
BorderSide? _getValue(HtmlStyle style) => identical(this, none)
197-
? null
198-
: BorderSide(
199-
color: color ?? style.textStyle.color ?? const BorderSide().color,
200-
// TODO: add proper support for other border styles
201-
style: this.style != null ? BorderStyle.solid : BorderStyle.none,
202-
// TODO: look for official document regarding this default value
203-
// WebKit & Blink seem to follow the same (hidden?) specs
204-
width: width?.getValue(style) ?? 1.0,
205-
);
196+
/// Returns `true` if either [style] or [width] is invalid.
197+
///
198+
/// Border will use the default text color so [color] is not required.
199+
bool get isNoOp => style == null || width?.isPositive != true;
200+
201+
BorderSide? _getValue(HtmlStyle style) {
202+
if (identical(this, none)) {
203+
return null;
204+
}
206205

207-
static CssBorderSide? _copyWith(CssBorderSide? base, CssBorderSide? value) =>
208-
base == null || value == none
209-
? value
210-
: value == null
211-
? base
212-
: CssBorderSide(
213-
color: value.color ?? base.color,
214-
style: value.style ?? base.style,
215-
width: value.width ?? base.width,
216-
);
206+
final scopedColor = color ?? style.textStyle.color;
207+
if (scopedColor == null) {
208+
return null;
209+
}
210+
211+
final scopedWidth = width?.getValue(style);
212+
if (scopedWidth == null) {
213+
return null;
214+
}
215+
216+
return BorderSide(
217+
color: scopedColor,
218+
// TODO: add proper support for other border styles
219+
style: this.style != null ? BorderStyle.solid : BorderStyle.none,
220+
width: scopedWidth,
221+
);
222+
}
223+
224+
static CssBorderSide? _copyWith(CssBorderSide? base, CssBorderSide? value) {
225+
final copied = base == null || value == none
226+
? value
227+
: value == null
228+
? base
229+
: CssBorderSide(
230+
color: value.color ?? base.color,
231+
style: value.style ?? base.style,
232+
width: value.width ?? base.width,
233+
);
234+
235+
if (copied?.isNoOp == true) {
236+
return none;
237+
}
238+
239+
return copied;
240+
}
217241
}
218242

219243
/// A length measurement.

packages/core/lib/src/internal/parser/border.dart

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ part of '../core_parser.dart';
22

33
const kCssBorder = 'border';
44
const kCssBorderInherit = 'inherit';
5+
const kCssBorderNone = 'none';
56

67
const kCssBorderRadius = 'border-radius';
78
const kCssBorderRadiusSuffix = 'radius';
@@ -42,9 +43,20 @@ CssBorder _tryParseBorderSide(CssBorder border, css.Declaration style) {
4243
}
4344

4445
TextDecorationStyle? borderStyle;
45-
CssLength? width;
4646
Color? color;
47+
// TODO: look for official document regarding this default value
48+
// WebKit & Blink seem to follow the same (hidden?) specs
49+
var width = const CssLength(1);
4750
for (final expression in style.values) {
51+
final value =
52+
expression is css.LiteralTerm ? expression.valueAsString : null;
53+
if (value == kCssBorderNone) {
54+
borderStyle = null;
55+
color = null;
56+
width = CssLength.zero;
57+
break;
58+
}
59+
4860
final parsedStyle = tryParseTextDecorationStyle(expression);
4961
if (parsedStyle != null) {
5062
borderStyle = parsedStyle;
@@ -64,13 +76,11 @@ CssBorder _tryParseBorderSide(CssBorder border, css.Declaration style) {
6476
}
6577
}
6678

67-
final borderSide = borderStyle == null
68-
? CssBorderSide.none
69-
: CssBorderSide(
70-
color: color,
71-
style: borderStyle,
72-
width: width,
73-
);
79+
final borderSide = CssBorderSide(
80+
color: color,
81+
style: borderStyle,
82+
width: width,
83+
);
7484

7585
if (suffix.isEmpty) {
7686
return border.copyWith(all: borderSide);

0 commit comments

Comments
 (0)