Revert "Refactor StrokeAlign to allow double values." (#109591)
diff --git a/dev/manual_tests/lib/star_border.dart b/dev/manual_tests/lib/star_border.dart
index 7a4e893..70e8623 100644
--- a/dev/manual_tests/lib/star_border.dart
+++ b/dev/manual_tests/lib/star_border.dart
@@ -80,7 +80,7 @@
color: Colors.blue.shade100,
shape: lerpBorder(
StarBorder.polygon(
- side: const BorderSide(strokeAlign: BorderSide.strokeAlignCenter, width: 2),
+ side: const BorderSide(strokeAlign: StrokeAlign.center, width: 2),
sides: _model.points,
pointRounding: _model.pointRounding,
rotation: _model.rotation,
@@ -102,7 +102,7 @@
color: Colors.blue.shade100,
shape: lerpBorder(
StarBorder(
- side: const BorderSide(strokeAlign: BorderSide.strokeAlignCenter, width: 2),
+ side: const BorderSide(strokeAlign: StrokeAlign.center, width: 2),
points: _model.points,
innerRadiusRatio: _model.innerRadiusRatio,
pointRounding: _model.pointRounding,
diff --git a/examples/api/lib/painting/borders/border_side.0.dart b/examples/api/lib/painting/borders/border_side.0.dart
deleted file mode 100644
index 95a33e2..0000000
--- a/examples/api/lib/painting/borders/border_side.0.dart
+++ /dev/null
@@ -1,204 +0,0 @@
-// Copyright 2014 The Flutter Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-/// Flutter code sample for [BorderSide].
-
-import 'package:flutter/material.dart';
-
-void main() => runApp(const BorderSideApp());
-
-class BorderSideApp extends StatelessWidget {
- const BorderSideApp({super.key});
-
- @override
- Widget build(BuildContext context) {
- return const MaterialApp(home: BorderSideExample());
- }
-}
-
-class BorderSideExample extends StatefulWidget {
- const BorderSideExample({super.key});
-
- @override
- State<BorderSideExample> createState() => _BorderSideExampleState();
-}
-
-class _BorderSideExampleState extends State<BorderSideExample>
- with TickerProviderStateMixin {
- late final AnimationController animation;
-
- @override
- void initState() {
- super.initState();
- animation =
- AnimationController(vsync: this, duration: const Duration(seconds: 1));
- animation.repeat(reverse: true);
- animation.addListener(_markDirty);
- }
-
- @override
- void dispose() {
- animation.dispose();
- super.dispose();
- }
-
- void _markDirty() {
- setState(() {});
- }
-
- static const double borderWidth = 10;
- static const double cornerRadius = 10;
- static const Color borderColor = Color(0x8000b4fc);
-
- @override
- Widget build(BuildContext context) {
- return Material(
- child: Center(
- child: Column(
- mainAxisAlignment: MainAxisAlignment.spaceAround,
- children: <Widget>[
- TestBox(
- shape: StadiumBorder(
- side: BorderSide(
- color: borderColor,
- width: borderWidth,
- strokeAlign: (animation.value * 2) - 1,
- ),
- ),
- ),
- Row(
- mainAxisAlignment: MainAxisAlignment.spaceAround,
- children: <Widget>[
- TestBox(
- shape: CircleBorder(
- side: BorderSide(
- color: borderColor,
- width: borderWidth,
- strokeAlign: (animation.value * 2) - 1,
- ),
- ),
- ),
- TestBox(
- shape: OvalBorder(
- side: BorderSide(
- color: borderColor,
- width: borderWidth,
- strokeAlign: (animation.value * 2) - 1,
- ),
- ),
- ),
- ],
- ),
- Row(
- mainAxisAlignment: MainAxisAlignment.spaceAround,
- children: <Widget>[
- TestBox(
- shape: BeveledRectangleBorder(
- side: BorderSide(
- color: borderColor,
- width: borderWidth,
- strokeAlign: (animation.value * 2) - 1,
- ),
- ),
- ),
- TestBox(
- shape: BeveledRectangleBorder(
- borderRadius: BorderRadius.circular(cornerRadius),
- side: BorderSide(
- color: borderColor,
- width: borderWidth,
- strokeAlign: (animation.value * 2) - 1,
- ),
- ),
- ),
- ],
- ),
- Row(
- mainAxisAlignment: MainAxisAlignment.spaceAround,
- children: <Widget>[
- TestBox(
- shape: RoundedRectangleBorder(
- side: BorderSide(
- color: borderColor,
- width: borderWidth,
- strokeAlign: (animation.value * 2) - 1,
- ),
- ),
- ),
- TestBox(
- shape: RoundedRectangleBorder(
- borderRadius: BorderRadius.circular(cornerRadius),
- side: BorderSide(
- color: borderColor,
- width: borderWidth,
- strokeAlign: (animation.value * 2) - 1,
- ),
- ),
- ),
- ],
- ),
- Row(
- mainAxisAlignment: MainAxisAlignment.spaceAround,
- children: <Widget>[
- TestBox(
- shape: StarBorder(
- side: BorderSide(
- color: borderColor,
- width: borderWidth,
- strokeAlign: (animation.value * 2) - 1,
- ),
- ),
- ),
- TestBox(
- shape: StarBorder(
- pointRounding: 1,
- innerRadiusRatio: 0.5,
- points: 8,
- side: BorderSide(
- color: borderColor,
- width: borderWidth,
- strokeAlign: (animation.value * 2) - 1,
- ),
- ),
- ),
- TestBox(
- shape: StarBorder.polygon(
- sides: 6,
- pointRounding: 0.5,
- side: BorderSide(
- color: borderColor,
- width: borderWidth,
- strokeAlign: (animation.value * 2) - 1,
- ),
- ),
- ),
- ],
- ),
- ],
- ),
- ),
- );
- }
-}
-
-class TestBox extends StatelessWidget {
- const TestBox({
- super.key,
- required this.shape,
- });
-
- final ShapeBorder shape;
-
- @override
- Widget build(BuildContext context) {
- return Container(
- width: 100,
- height: 50,
- decoration: ShapeDecoration(
- color: const Color(0xff012677),
- shape: shape,
- ),
- );
- }
-}
diff --git a/examples/api/test/painting/border_side.0_test.dart b/examples/api/test/painting/border_side.0_test.dart
deleted file mode 100644
index 379641a..0000000
--- a/examples/api/test/painting/border_side.0_test.dart
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2014 The Flutter Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'package:flutter/material.dart';
-import 'package:flutter_api_samples/painting/borders/border_side.0.dart'
- as example;
-import 'package:flutter_test/flutter_test.dart';
-
-void main() {
- testWidgets('Finds the expected TestBox', (WidgetTester tester) async {
- await tester.pumpWidget(
- const MaterialApp(
- home: example.BorderSideExample(),
- ),
- );
-
- expect(find.byType(example.BorderSideExample), findsOneWidget);
- expect(find.byType(example.TestBox), findsNWidgets(10));
- });
-}
diff --git a/packages/flutter/lib/src/painting/beveled_rectangle_border.dart b/packages/flutter/lib/src/painting/beveled_rectangle_border.dart
index c058013..8e7406c 100644
--- a/packages/flutter/lib/src/painting/beveled_rectangle_border.dart
+++ b/packages/flutter/lib/src/painting/beveled_rectangle_border.dart
@@ -9,6 +9,7 @@
import 'basic_types.dart';
import 'border_radius.dart';
import 'borders.dart';
+import 'edge_insets.dart';
/// A rectangular border with flattened or "beveled" corners.
///
@@ -40,6 +41,18 @@
final BorderRadiusGeometry borderRadius;
@override
+ EdgeInsetsGeometry get dimensions {
+ switch (side.strokeAlign) {
+ case StrokeAlign.inside:
+ return EdgeInsets.all(side.width);
+ case StrokeAlign.center:
+ return EdgeInsets.all(side.width / 2);
+ case StrokeAlign.outside:
+ return EdgeInsets.zero;
+ }
+ }
+
+ @override
ShapeBorder scale(double t) {
return BeveledRectangleBorder(
side: side.scale(t),
@@ -112,7 +125,21 @@
@override
Path getInnerPath(Rect rect, { TextDirection? textDirection }) {
- return _getPath(borderRadius.resolve(textDirection).toRRect(rect).deflate(side.strokeInset));
+ final RRect borderRect = borderRadius.resolve(textDirection).toRRect(rect);
+ final RRect adjustedRect;
+ switch (side.strokeAlign) {
+ case StrokeAlign.inside:
+ adjustedRect = borderRect.deflate(side.width);
+ break;
+ case StrokeAlign.center:
+ adjustedRect = borderRect.deflate(side.width / 2);
+ break;
+ case StrokeAlign.outside:
+ adjustedRect = borderRect;
+ break;
+ }
+
+ return _getPath(adjustedRect);
}
@override
@@ -129,7 +156,21 @@
case BorderStyle.none:
break;
case BorderStyle.solid:
- final Path path = _getPath(borderRadius.resolve(textDirection).toRRect(rect).inflate(side.strokeOffset / 2));
+ final RRect borderRect = borderRadius.resolve(textDirection).toRRect(rect);
+ final RRect adjustedRect;
+ switch (side.strokeAlign) {
+ case StrokeAlign.inside:
+ adjustedRect = borderRect;
+ break;
+ case StrokeAlign.center:
+ adjustedRect = borderRect.inflate(side.width / 2);
+ break;
+ case StrokeAlign.outside:
+ adjustedRect = borderRect.inflate(side.width);
+ break;
+ }
+ final Path path = _getPath(adjustedRect)
+ ..addPath(getInnerPath(rect, textDirection: textDirection), Offset.zero);
canvas.drawPath(path, side.toPaint());
break;
}
diff --git a/packages/flutter/lib/src/painting/borders.dart b/packages/flutter/lib/src/painting/borders.dart
index fe3b57f..9d8666d 100644
--- a/packages/flutter/lib/src/painting/borders.dart
+++ b/packages/flutter/lib/src/painting/borders.dart
@@ -21,6 +21,27 @@
// if you add more, think about how they will lerp
}
+/// The relative position of the stroke on a [BorderSide] in a [Border] or [OutlinedBorder].
+/// When set to [inside], the stroke is drawn completely inside the widget.
+/// For [center] and [outside], a property such as [Container.clipBehavior]
+/// can be used in an outside widget to clip it.
+/// If [Container.decoration] has a border, the container may incorporate
+/// [BorderSide.width] as additional padding:
+/// - [inside] provides padding with full [BorderSide.width].
+/// - [center] provides padding with half [BorderSide.width].
+/// - [outside] provides zero padding, as stroke is drawn entirely outside.
+enum StrokeAlign {
+ /// The border is drawn on the inside of the border path.
+ inside,
+
+ /// The border is drawn on the center of the border path, with half of the
+ /// [BorderSide.width] on the inside, and the other half on the outside of the path.
+ center,
+
+ /// The border is drawn on the outside of the border path.
+ outside,
+}
+
/// A side of a border of a box.
///
/// A [Border] consists of four [BorderSide] objects: [Border.top],
@@ -58,7 +79,7 @@
/// ([TableBorder.horizontalInside] and [TableBorder.verticalInside]), both
/// of which are also [BorderSide] objects.
@immutable
-class BorderSide with Diagnosticable {
+class BorderSide {
/// Creates the side of a border.
///
/// By default, the border is 1.0 logical pixels wide and solid black.
@@ -66,12 +87,11 @@
this.color = const Color(0xFF000000),
this.width = 1.0,
this.style = BorderStyle.solid,
- this.strokeAlign = strokeAlignInside,
+ this.strokeAlign = StrokeAlign.inside,
}) : assert(color != null),
assert(width != null),
assert(width >= 0.0),
- assert(style != null),
- assert(strokeAlign != null);
+ assert(style != null);
/// Creates a [BorderSide] that represents the addition of the two given
/// [BorderSide]s.
@@ -104,7 +124,6 @@
return BorderSide(
color: a.color, // == b.color
width: a.width + b.width,
- strokeAlign: math.max(a.strokeAlign, b.strokeAlign),
style: a.style, // == b.style
);
}
@@ -132,50 +151,20 @@
/// A hairline black border that is not rendered.
static const BorderSide none = BorderSide(width: 0.0, style: BorderStyle.none);
- /// The relative position of the stroke on a [BorderSide] in an
- /// [OutlinedBorder] or [Border].
- ///
- /// Values typically range from -1.0 ([strokeAlignInside], inside border,
- /// default) to 1.0 ([strokeAlignOutside], outside border), without any
- /// bound constraints (e.g., a value of -2.0 is is not typical, but allowed).
- /// A value of 0 ([strokeAlignCenter]) will center the border on the edge
- /// of the widget.
- ///
- /// When set to [strokeAlignInside], the stroke is drawn completely inside
- /// the widget. For [strokeAlignCenter] and [strokeAlignOutside], a property
- /// such as [Container.clipBehavior] can be used in an outside widget to clip
- /// it. If [Container.decoration] has a border, the container may incorporate
- /// [width] as additional padding:
- /// - [strokeAlignInside] provides padding with full [width].
- /// - [strokeAlignCenter] provides padding with half [width].
- /// - [strokeAlignOutside] provides zero padding, as stroke is drawn entirely outside.
- final double strokeAlign;
-
- /// The border is drawn fully inside of the border path.
- ///
- /// This is the default.
- static const double strokeAlignInside = -1.0;
-
- /// The border is drawn on the center of the border path, with half of the
- /// [BorderSide.width] on the inside, and the other half on the outside of
- /// the path.
- static const double strokeAlignCenter = 0.0;
-
- /// The border is drawn on the outside of the border path.
- static const double strokeAlignOutside = 1.0;
+ /// The direction of where the border will be drawn relative to the container.
+ final StrokeAlign strokeAlign;
/// Creates a copy of this border but with the given fields replaced with the new values.
BorderSide copyWith({
Color? color,
double? width,
BorderStyle? style,
- double? strokeAlign,
}) {
+ assert(width == null || width >= 0.0);
return BorderSide(
color: color ?? this.color,
width: width ?? this.width,
style: style ?? this.style,
- strokeAlign: strokeAlign ?? this.strokeAlign,
);
}
@@ -240,7 +229,8 @@
return true;
}
return a.style == b.style
- && a.color == b.color;
+ && a.color == b.color
+ && a.strokeAlign == b.strokeAlign;
}
/// Linearly interpolate between two border sides.
@@ -288,10 +278,13 @@
break;
}
if (a.strokeAlign != b.strokeAlign) {
+ // When strokeAlign changes, lerp to 0, then from 0 to the target width.
+ // All StrokeAlign values share a common zero width state.
+ final StrokeAlign strokeAlign = t > 0.5 ? b.strokeAlign : a.strokeAlign;
return BorderSide(
color: Color.lerp(colorA, colorB, t)!,
- width: width,
- strokeAlign: ui.lerpDouble(a.strokeAlign, b.strokeAlign, t)!,
+ width: t > 0.5 ? ui.lerpDouble(0, b.width, t * 2 - 1)! : ui.lerpDouble(a.width, 0, t * 2)!,
+ strokeAlign: strokeAlign,
);
}
return BorderSide(
@@ -301,26 +294,6 @@
);
}
- /// Get the amount of the stroke width that lies inside of the [BorderSide].
- ///
- /// For example, this will return the [width] for a [strokeAlign] of -1, half
- /// the [width] for a [strokeAlign] of 0, and 0 for a [strokeAlign] of 1.
- double get strokeInset => width * (1 - (1 + strokeAlign) / 2);
-
- /// Get the amount of the stroke width that lies outside of the [BorderSide].
- ///
- /// For example, this will return 0 for a [strokeAlign] of -1, half the
- /// [width] for a [strokeAlign] of 0, and the [width] for a [strokeAlign]
- /// of 1.
- double get strokeOutset => width * (1 + strokeAlign) / 2;
-
- /// The offset of the stroke, taking into account the stroke alignment.
- ///
- /// For example, this will return the negative [width] of the stroke
- /// for a [strokeAlign] of -1, 0 for a [strokeAlign] of 0, and the
- /// [width] for a [strokeAlign] of -1.
- double get strokeOffset => width * strokeAlign;
-
@override
bool operator ==(Object other) {
if (identical(this, other)) {
@@ -340,15 +313,11 @@
int get hashCode => Object.hash(color, width, style, strokeAlign);
@override
- String toStringShort() => 'BorderSide';
-
- @override
- void debugFillProperties(DiagnosticPropertiesBuilder properties) {
- super.debugFillProperties(properties);
- properties.add(DiagnosticsProperty<Color>('color', color, defaultValue: const Color(0xFF000000)));
- properties.add(DoubleProperty('width', width, defaultValue: 1.0));
- properties.add(DoubleProperty('strokeAlign', strokeAlign, defaultValue: strokeAlignInside));
- properties.add(EnumProperty<BorderStyle>('style', style, defaultValue: BorderStyle.solid));
+ String toString() {
+ if (strokeAlign == StrokeAlign.inside) {
+ return '${objectRuntimeType(this, 'BorderSide')}($color, ${width.toStringAsFixed(1)}, $style)';
+ }
+ return '${objectRuntimeType(this, 'BorderSide')}($color, ${width.toStringAsFixed(1)}, $style, $strokeAlign)';
}
}
@@ -588,9 +557,6 @@
/// The value of [side] must not be null.
const OutlinedBorder({ this.side = BorderSide.none }) : assert(side != null);
- @override
- EdgeInsetsGeometry get dimensions => EdgeInsets.all(math.max(side.strokeInset, 0));
-
/// The border outline's color and weight.
///
/// If [side] is [BorderSide.none], which is the default, an outline is not drawn.
diff --git a/packages/flutter/lib/src/painting/box_border.dart b/packages/flutter/lib/src/painting/box_border.dart
index e5b88f6..1c6b54b 100644
--- a/packages/flutter/lib/src/painting/box_border.dart
+++ b/packages/flutter/lib/src/painting/box_border.dart
@@ -219,22 +219,62 @@
..strokeWidth = 0.0;
canvas.drawRRect(borderRadius.toRRect(rect), paint);
} else {
- final RRect borderRect = borderRadius.toRRect(rect);
- final RRect inner = borderRect.deflate(side.strokeInset);
- final RRect outer = borderRect.inflate(side.strokeOutset);
- canvas.drawDRRect(outer, inner, paint);
+ if (side.strokeAlign == StrokeAlign.inside) {
+ final RRect outer = borderRadius.toRRect(rect);
+ final RRect inner = outer.deflate(width);
+ canvas.drawDRRect(outer, inner, paint);
+ } else {
+ final Rect inner;
+ final Rect outer;
+ if (side.strokeAlign == StrokeAlign.center) {
+ inner = rect.deflate(width / 2);
+ outer = rect.inflate(width / 2);
+ } else {
+ inner = rect;
+ outer = rect.inflate(width);
+ }
+ canvas.drawDRRect(borderRadius.toRRect(outer), borderRadius.toRRect(inner), paint);
+ }
}
}
static void _paintUniformBorderWithCircle(Canvas canvas, Rect rect, BorderSide side) {
assert(side.style != BorderStyle.none);
- final double radius = (rect.shortestSide + side.strokeOffset) / 2;
- canvas.drawCircle(rect.center, radius, side.toPaint());
+ final double width = side.width;
+ final Paint paint = side.toPaint();
+ final double radius;
+ switch (side.strokeAlign) {
+ case StrokeAlign.inside:
+ radius = (rect.shortestSide - width) / 2.0;
+ break;
+ case StrokeAlign.center:
+ radius = rect.shortestSide / 2.0;
+ break;
+ case StrokeAlign.outside:
+ radius = (rect.shortestSide + width) / 2.0;
+ break;
+ }
+ canvas.drawCircle(rect.center, radius, paint);
}
static void _paintUniformBorderWithRectangle(Canvas canvas, Rect rect, BorderSide side) {
assert(side.style != BorderStyle.none);
- canvas.drawRect(rect.inflate(side.strokeOffset / 2), side.toPaint());
+ final double width = side.width;
+ final Paint paint = side.toPaint();
+ final Rect rectToBeDrawn;
+ switch (side.strokeAlign) {
+ case StrokeAlign.inside:
+ rectToBeDrawn = rect.deflate(width / 2.0);
+ break;
+ case StrokeAlign.center:
+ rectToBeDrawn = rect;
+ break;
+ case StrokeAlign.outside:
+ rectToBeDrawn = rect.inflate(width / 2.0);
+ break;
+ }
+
+ canvas.drawRect(rectToBeDrawn, paint);
}
}
@@ -348,7 +388,7 @@
Color color = const Color(0xFF000000),
double width = 1.0,
BorderStyle style = BorderStyle.solid,
- double strokeAlign = BorderSide.strokeAlignInside,
+ StrokeAlign strokeAlign = StrokeAlign.inside,
}) {
final BorderSide side = BorderSide(color: color, width: width, style: style, strokeAlign: strokeAlign);
return Border.fromBorderSide(side);
@@ -390,10 +430,17 @@
@override
EdgeInsetsGeometry get dimensions {
- if (_widthIsUniform) {
- return EdgeInsets.all(top.strokeInset);
+ if (isUniform) {
+ switch (top.strokeAlign) {
+ case StrokeAlign.inside:
+ return EdgeInsets.all(top.width);
+ case StrokeAlign.center:
+ return EdgeInsets.all(top.width / 2);
+ case StrokeAlign.outside:
+ return EdgeInsets.zero;
+ }
}
- return EdgeInsets.fromLTRB(left.strokeInset, top.strokeInset, right.strokeInset, bottom.strokeInset);
+ return EdgeInsets.fromLTRB(left.width, top.width, right.width, bottom.width);
}
@override
@@ -415,7 +462,7 @@
}
bool get _strokeAlignIsUniform {
- final double topStrokeAlign = top.strokeAlign;
+ final StrokeAlign topStrokeAlign = top.strokeAlign;
return right.strokeAlign == topStrokeAlign
&& bottom.strokeAlign == topStrokeAlign
&& left.strokeAlign == topStrokeAlign;
@@ -522,7 +569,7 @@
BoxBorder._paintUniformBorderWithCircle(canvas, rect, top);
break;
case BoxShape.rectangle:
- if (borderRadius != null && borderRadius != BorderRadius.zero) {
+ if (borderRadius != null) {
BoxBorder._paintUniformBorderWithRadius(canvas, rect, top, borderRadius);
return;
}
@@ -560,9 +607,9 @@
return true;
}());
assert(() {
- if (!_strokeAlignIsUniform || top.strokeAlign != BorderSide.strokeAlignInside) {
+ if (!_strokeAlignIsUniform || top.strokeAlign != StrokeAlign.inside) {
throw FlutterError.fromParts(<DiagnosticsNode>[
- ErrorSummary('A Border can only draw strokeAlign different than BorderSide.strokeAlignInside on uniform borders.'),
+ ErrorSummary('A Border can only draw strokeAlign different than StrokeAlign.inside on uniform borders.'),
]);
}
return true;
@@ -694,9 +741,16 @@
@override
EdgeInsetsGeometry get dimensions {
if (isUniform) {
- return EdgeInsetsDirectional.all(top.strokeInset);
+ switch (top.strokeAlign) {
+ case StrokeAlign.inside:
+ return EdgeInsetsDirectional.all(top.width);
+ case StrokeAlign.center:
+ return EdgeInsetsDirectional.all(top.width / 2);
+ case StrokeAlign.outside:
+ return EdgeInsetsDirectional.zero;
+ }
}
- return EdgeInsetsDirectional.fromSTEB(start.strokeInset, top.strokeInset, end.strokeInset, bottom.strokeInset);
+ return EdgeInsetsDirectional.fromSTEB(start.width, top.width, end.width, bottom.width);
}
@override
@@ -730,7 +784,7 @@
}
bool get _strokeAlignIsUniform {
- final double topStrokeAlign = top.strokeAlign;
+ final StrokeAlign topStrokeAlign = top.strokeAlign;
return start.strokeAlign == topStrokeAlign
&& bottom.strokeAlign == topStrokeAlign
&& end.strokeAlign == topStrokeAlign;
@@ -873,7 +927,7 @@
BoxBorder._paintUniformBorderWithCircle(canvas, rect, top);
break;
case BoxShape.rectangle:
- if (borderRadius != null && borderRadius != BorderRadius.zero) {
+ if (borderRadius != null) {
BoxBorder._paintUniformBorderWithRadius(canvas, rect, top, borderRadius);
return;
}
@@ -886,7 +940,7 @@
assert(borderRadius == null, 'A borderRadius can only be given for uniform borders.');
assert(shape == BoxShape.rectangle, 'A border can only be drawn as a circle if it is uniform.');
- assert(_strokeAlignIsUniform && top.strokeAlign == BorderSide.strokeAlignInside, 'A Border can only draw strokeAlign different than strokeAlignInside on uniform borders.');
+ assert(_strokeAlignIsUniform && top.strokeAlign == StrokeAlign.inside, 'A Border can only draw strokeAlign different than StrokeAlign.inside on uniform borders.');
final BorderSide left, right;
assert(textDirection != null, 'Non-uniform BorderDirectional objects require a TextDirection when painting.');
diff --git a/packages/flutter/lib/src/painting/box_decoration.dart b/packages/flutter/lib/src/painting/box_decoration.dart
index e64204a..01164b4 100644
--- a/packages/flutter/lib/src/painting/box_decoration.dart
+++ b/packages/flutter/lib/src/painting/box_decoration.dart
@@ -431,7 +431,7 @@
canvas.drawCircle(center, radius, paint);
break;
case BoxShape.rectangle:
- if (_decoration.borderRadius == null || _decoration.borderRadius == BorderRadius.zero) {
+ if (_decoration.borderRadius == null) {
canvas.drawRect(rect, paint);
} else {
canvas.drawRRect(_decoration.borderRadius!.resolve(textDirection).toRRect(rect), paint);
diff --git a/packages/flutter/lib/src/painting/circle_border.dart b/packages/flutter/lib/src/painting/circle_border.dart
index 342f6de..24b2251 100644
--- a/packages/flutter/lib/src/painting/circle_border.dart
+++ b/packages/flutter/lib/src/painting/circle_border.dart
@@ -8,6 +8,7 @@
import 'basic_types.dart';
import 'borders.dart';
+import 'edge_insets.dart';
/// A border that fits a circle within the available space.
///
@@ -45,6 +46,18 @@
final double eccentricity;
@override
+ EdgeInsetsGeometry get dimensions {
+ switch (side.strokeAlign) {
+ case StrokeAlign.inside:
+ return EdgeInsets.all(side.width);
+ case StrokeAlign.center:
+ return EdgeInsets.all(side.width / 2);
+ case StrokeAlign.outside:
+ return EdgeInsets.zero;
+ }
+ }
+
+ @override
ShapeBorder scale(double t) => CircleBorder(side: side.scale(t), eccentricity: eccentricity);
@override
@@ -71,12 +84,25 @@
@override
Path getInnerPath(Rect rect, { TextDirection? textDirection }) {
- return Path()..addOval(_adjustRect(rect).deflate(side.strokeInset));
+ final double delta;
+ switch (side.strokeAlign) {
+ case StrokeAlign.inside:
+ delta = side.width;
+ break;
+ case StrokeAlign.center:
+ delta = side.width / 2.0;
+ break;
+ case StrokeAlign.outside:
+ delta = 0;
+ break;
+ }
+ final Rect adjustedRect = _adjustRect(rect).deflate(delta);
+ return Path()..addOval(adjustedRect);
}
@override
Path getOuterPath(Rect rect, { TextDirection? textDirection }) {
- return Path()..addOval(_adjustRect(rect));
+ return Path()..addOval(_adjustRect(rect));
}
@override
@@ -90,11 +116,35 @@
case BorderStyle.none:
break;
case BorderStyle.solid:
- if (eccentricity == 0.0) {
- canvas.drawCircle(rect.center, (rect.shortestSide + side.strokeOffset) / 2, side.toPaint());
- } else {
+ if (eccentricity != 0.0) {
final Rect borderRect = _adjustRect(rect);
- canvas.drawOval(borderRect.inflate(side.strokeOffset / 2), side.toPaint());
+ final Rect adjustedRect;
+ switch (side.strokeAlign) {
+ case StrokeAlign.inside:
+ adjustedRect = borderRect.deflate(side.width / 2.0);
+ break;
+ case StrokeAlign.center:
+ adjustedRect = borderRect;
+ break;
+ case StrokeAlign.outside:
+ adjustedRect = borderRect.inflate(side.width / 2.0);
+ break;
+ }
+ canvas.drawOval(adjustedRect, side.toPaint());
+ } else {
+ final double radius;
+ switch (side.strokeAlign) {
+ case StrokeAlign.inside:
+ radius = (rect.shortestSide - side.width) / 2.0;
+ break;
+ case StrokeAlign.center:
+ radius = rect.shortestSide / 2.0;
+ break;
+ case StrokeAlign.outside:
+ radius = (rect.shortestSide + side.width) / 2.0;
+ break;
+ }
+ canvas.drawCircle(rect.center, radius, side.toPaint());
}
}
}
diff --git a/packages/flutter/lib/src/painting/continuous_rectangle_border.dart b/packages/flutter/lib/src/painting/continuous_rectangle_border.dart
index 0e289b0..b3456c9 100644
--- a/packages/flutter/lib/src/painting/continuous_rectangle_border.dart
+++ b/packages/flutter/lib/src/painting/continuous_rectangle_border.dart
@@ -149,7 +149,7 @@
break;
case BorderStyle.solid:
final Path path = getOuterPath(rect, textDirection: textDirection);
- final Paint paint = side.toPaint()..strokeJoin = StrokeJoin.round;
+ final Paint paint = side.toPaint();
canvas.drawPath(path, paint);
break;
}
diff --git a/packages/flutter/lib/src/painting/rounded_rectangle_border.dart b/packages/flutter/lib/src/painting/rounded_rectangle_border.dart
index 7ad876d1..98d0428 100644
--- a/packages/flutter/lib/src/painting/rounded_rectangle_border.dart
+++ b/packages/flutter/lib/src/painting/rounded_rectangle_border.dart
@@ -10,6 +10,7 @@
import 'border_radius.dart';
import 'borders.dart';
import 'circle_border.dart';
+import 'edge_insets.dart';
/// A rectangular border with rounded corners.
///
@@ -37,6 +38,18 @@
final BorderRadiusGeometry borderRadius;
@override
+ EdgeInsetsGeometry get dimensions {
+ switch (side.strokeAlign) {
+ case StrokeAlign.inside:
+ return EdgeInsets.all(side.width);
+ case StrokeAlign.center:
+ return EdgeInsets.all(side.width / 2);
+ case StrokeAlign.outside:
+ return EdgeInsets.zero;
+ }
+ }
+
+ @override
ShapeBorder scale(double t) {
return RoundedRectangleBorder(
side: side.scale(t),
@@ -97,7 +110,18 @@
@override
Path getInnerPath(Rect rect, { TextDirection? textDirection }) {
final RRect borderRect = borderRadius.resolve(textDirection).toRRect(rect);
- final RRect adjustedRect = borderRect.deflate(side.strokeInset);
+ final RRect adjustedRect;
+ switch (side.strokeAlign) {
+ case StrokeAlign.inside:
+ adjustedRect = borderRect.deflate(side.width);
+ break;
+ case StrokeAlign.center:
+ adjustedRect = borderRect.deflate(side.width / 2);
+ break;
+ case StrokeAlign.outside:
+ adjustedRect = borderRect;
+ break;
+ }
return Path()
..addRRect(adjustedRect);
}
@@ -114,12 +138,30 @@
case BorderStyle.none:
break;
case BorderStyle.solid:
- final Paint paint = Paint()
- ..color = side.color;
- final RRect borderRect = borderRadius.resolve(textDirection).toRRect(rect);
- final RRect inner = borderRect.deflate(side.strokeInset);
- final RRect outer = borderRect.inflate(side.strokeOutset);
- canvas.drawDRRect(outer, inner, paint);
+ final double width = side.width;
+ if (width == 0.0) {
+ canvas.drawRRect(borderRadius.resolve(textDirection).toRRect(rect), side.toPaint());
+ } else {
+ final Paint paint = Paint()
+ ..color = side.color;
+ if (side.strokeAlign == StrokeAlign.inside) {
+ final RRect outer = borderRadius.resolve(textDirection).toRRect(rect);
+ final RRect inner = outer.deflate(width);
+ canvas.drawDRRect(outer, inner, paint);
+ } else {
+ final Rect inner;
+ final Rect outer;
+ if (side.strokeAlign == StrokeAlign.center) {
+ inner = rect.deflate(width / 2);
+ outer = rect.inflate(width / 2);
+ } else {
+ inner = rect;
+ outer = rect.inflate(width);
+ }
+ final BorderRadius borderRadiusResolved = borderRadius.resolve(textDirection);
+ canvas.drawDRRect(borderRadiusResolved.toRRect(outer), borderRadiusResolved.toRRect(inner), paint);
+ }
+ }
}
}
@@ -157,6 +199,18 @@
final double eccentricity;
@override
+ EdgeInsetsGeometry get dimensions {
+ switch (side.strokeAlign) {
+ case StrokeAlign.inside:
+ return EdgeInsets.all(side.width);
+ case StrokeAlign.center:
+ return EdgeInsets.all(side.width / 2);
+ case StrokeAlign.outside:
+ return EdgeInsets.zero;
+ }
+ }
+
+ @override
ShapeBorder scale(double t) {
return _RoundedRectangleToCircleBorder(
side: side.scale(t),
@@ -276,7 +330,18 @@
@override
Path getInnerPath(Rect rect, { TextDirection? textDirection }) {
final RRect borderRect = _adjustBorderRadius(rect, textDirection)!.toRRect(_adjustRect(rect));
- final RRect adjustedRect = borderRect.deflate(ui.lerpDouble(side.width, 0, side.strokeAlign)!);
+ final RRect adjustedRect;
+ switch (side.strokeAlign) {
+ case StrokeAlign.inside:
+ adjustedRect = borderRect.deflate(side.width);
+ break;
+ case StrokeAlign.center:
+ adjustedRect = borderRect.deflate(side.width / 2);
+ break;
+ case StrokeAlign.outside:
+ adjustedRect = borderRect;
+ break;
+ }
return Path()
..addRRect(adjustedRect);
}
@@ -303,9 +368,25 @@
case BorderStyle.none:
break;
case BorderStyle.solid:
- final BorderRadius adjustedBorderRadius = _adjustBorderRadius(rect, textDirection)!;
- final RRect borderRect = adjustedBorderRadius.toRRect(_adjustRect(rect));
- canvas.drawRRect(borderRect.inflate(side.strokeOffset / 2), side.toPaint());
+ final double width = side.width;
+ if (width == 0.0) {
+ canvas.drawRRect(_adjustBorderRadius(rect, textDirection)!.toRRect(_adjustRect(rect)), side.toPaint());
+ } else {
+ final RRect borderRect = _adjustBorderRadius(rect, textDirection)!.toRRect(_adjustRect(rect));
+ final RRect adjustedRect;
+ switch (side.strokeAlign) {
+ case StrokeAlign.inside:
+ adjustedRect = borderRect.deflate(width / 2);
+ break;
+ case StrokeAlign.center:
+ adjustedRect = borderRect;
+ break;
+ case StrokeAlign.outside:
+ adjustedRect = borderRect.inflate(width / 2);
+ break;
+ }
+ canvas.drawRRect(adjustedRect, side.toPaint());
+ }
}
}
diff --git a/packages/flutter/lib/src/painting/stadium_border.dart b/packages/flutter/lib/src/painting/stadium_border.dart
index 560a2a2..cda9d91 100644
--- a/packages/flutter/lib/src/painting/stadium_border.dart
+++ b/packages/flutter/lib/src/painting/stadium_border.dart
@@ -10,6 +10,7 @@
import 'border_radius.dart';
import 'borders.dart';
import 'circle_border.dart';
+import 'edge_insets.dart';
import 'rounded_rectangle_border.dart';
/// A border that fits a stadium-shaped border (a box with semicircles on the ends)
@@ -30,6 +31,18 @@
const StadiumBorder({ super.side }) : assert(side != null);
@override
+ EdgeInsetsGeometry get dimensions {
+ switch (side.strokeAlign) {
+ case StrokeAlign.inside:
+ return EdgeInsets.all(side.width);
+ case StrokeAlign.center:
+ return EdgeInsets.all(side.width / 2);
+ case StrokeAlign.outside:
+ return EdgeInsets.zero;
+ }
+ }
+
+ @override
ShapeBorder scale(double t) => StadiumBorder(side: side.scale(t));
@override
@@ -87,7 +100,18 @@
Path getInnerPath(Rect rect, { TextDirection? textDirection }) {
final Radius radius = Radius.circular(rect.shortestSide / 2.0);
final RRect borderRect = RRect.fromRectAndRadius(rect, radius);
- final RRect adjustedRect = borderRect.deflate(side.strokeInset);
+ final RRect adjustedRect;
+ switch (side.strokeAlign) {
+ case StrokeAlign.inside:
+ adjustedRect = borderRect.deflate(side.width);
+ break;
+ case StrokeAlign.center:
+ adjustedRect = borderRect.deflate(side.width / 2);
+ break;
+ case StrokeAlign.outside:
+ adjustedRect = borderRect;
+ break;
+ }
return Path()
..addRRect(adjustedRect);
}
@@ -107,7 +131,22 @@
case BorderStyle.solid:
final Radius radius = Radius.circular(rect.shortestSide / 2);
final RRect borderRect = RRect.fromRectAndRadius(rect, radius);
- canvas.drawRRect(borderRect.inflate(side.strokeOffset / 2), side.toPaint());
+ final RRect adjustedRect;
+ switch (side.strokeAlign) {
+ case StrokeAlign.inside:
+ adjustedRect = borderRect.deflate(side.width / 2);
+ break;
+ case StrokeAlign.center:
+ adjustedRect = borderRect;
+ break;
+ case StrokeAlign.outside:
+ adjustedRect = borderRect.inflate(side.width / 2);
+ break;
+ }
+ canvas.drawRRect(
+ adjustedRect,
+ side.toPaint(),
+ );
}
}
@@ -142,6 +181,18 @@
final double eccentricity;
@override
+ EdgeInsetsGeometry get dimensions {
+ switch (side.strokeAlign) {
+ case StrokeAlign.inside:
+ return EdgeInsets.all(side.width);
+ case StrokeAlign.center:
+ return EdgeInsets.all(side.width / 2);
+ case StrokeAlign.outside:
+ return EdgeInsets.zero;
+ }
+ }
+
+ @override
ShapeBorder scale(double t) {
return _StadiumToCircleBorder(
side: side.scale(t),
@@ -252,7 +303,7 @@
@override
Path getInnerPath(Rect rect, { TextDirection? textDirection }) {
return Path()
- ..addRRect(_adjustBorderRadius(rect).toRRect(_adjustRect(rect)).deflate(side.strokeInset));
+ ..addRRect(_adjustBorderRadius(rect).toRRect(_adjustRect(rect)).deflate(side.width));
}
@override
@@ -276,8 +327,25 @@
case BorderStyle.none:
break;
case BorderStyle.solid:
- final RRect borderRect = _adjustBorderRadius(rect).toRRect(_adjustRect(rect));
- canvas.drawRRect(borderRect.inflate(side.strokeOffset / 2), side.toPaint());
+ final double width = side.width;
+ if (width == 0.0) {
+ canvas.drawRRect(_adjustBorderRadius(rect).toRRect(_adjustRect(rect)), side.toPaint());
+ } else {
+ final RRect borderRect = _adjustBorderRadius(rect).toRRect(_adjustRect(rect));
+ final RRect adjustedRect;
+ switch (side.strokeAlign) {
+ case StrokeAlign.inside:
+ adjustedRect = borderRect.deflate(width / 2);
+ break;
+ case StrokeAlign.center:
+ adjustedRect = borderRect;
+ break;
+ case StrokeAlign.outside:
+ adjustedRect = borderRect.inflate(width / 2);
+ break;
+ }
+ canvas.drawRRect(adjustedRect, side.toPaint());
+ }
}
}
@@ -318,6 +386,11 @@
final double rectness;
@override
+ EdgeInsetsGeometry get dimensions {
+ return EdgeInsets.all(side.width);
+ }
+
+ @override
ShapeBorder scale(double t) {
return _StadiumToRoundedRectangleBorder(
side: side.scale(t),
@@ -391,7 +464,18 @@
@override
Path getInnerPath(Rect rect, { TextDirection? textDirection }) {
final RRect borderRect = _adjustBorderRadius(rect).toRRect(rect);
- final RRect adjustedRect = borderRect.deflate(ui.lerpDouble(side.width, 0, side.strokeAlign)!);
+ final RRect adjustedRect;
+ switch (side.strokeAlign) {
+ case StrokeAlign.inside:
+ adjustedRect = borderRect.deflate(side.width);
+ break;
+ case StrokeAlign.center:
+ adjustedRect = borderRect.deflate(side.width / 2);
+ break;
+ case StrokeAlign.outside:
+ adjustedRect = borderRect;
+ break;
+ }
return Path()
..addRRect(adjustedRect);
}
@@ -417,9 +501,26 @@
case BorderStyle.none:
break;
case BorderStyle.solid:
- final BorderRadius adjustedBorderRadius = _adjustBorderRadius(rect);
- final RRect borderRect = adjustedBorderRadius.resolve(textDirection).toRRect(rect);
- canvas.drawRRect(borderRect.inflate(side.strokeOffset / 2), side.toPaint());
+ final double width = side.width;
+ if (width == 0.0) {
+ canvas.drawRRect(_adjustBorderRadius(rect).toRRect(rect), side.toPaint());
+ } else {
+ if (side.strokeAlign == StrokeAlign.inside) {
+ final RRect outer = _adjustBorderRadius(rect).toRRect(rect);
+ final RRect inner = outer.deflate(width);
+ final Paint paint = Paint()
+ ..color = side.color;
+ canvas.drawDRRect(outer, inner, paint);
+ } else {
+ final RRect outer;
+ if (side.strokeAlign == StrokeAlign.center) {
+ outer = _adjustBorderRadius(rect).toRRect(rect);
+ } else {
+ outer = _adjustBorderRadius(rect.inflate(width)).toRRect(rect.inflate(width / 2));
+ }
+ canvas.drawRRect(outer, side.toPaint());
+ }
+ }
}
}
diff --git a/packages/flutter/lib/src/painting/star_border.dart b/packages/flutter/lib/src/painting/star_border.dart
index aadd095..7e51a13 100644
--- a/packages/flutter/lib/src/painting/star_border.dart
+++ b/packages/flutter/lib/src/painting/star_border.dart
@@ -11,6 +11,7 @@
import 'basic_types.dart';
import 'borders.dart';
import 'circle_border.dart';
+import 'edge_insets.dart';
import 'rounded_rectangle_border.dart';
import 'stadium_border.dart';
@@ -166,6 +167,18 @@
final double squash;
@override
+ EdgeInsetsGeometry get dimensions {
+ switch (side.strokeAlign) {
+ case StrokeAlign.inside:
+ return EdgeInsets.all(side.width);
+ case StrokeAlign.center:
+ return EdgeInsets.all(side.width / 2);
+ case StrokeAlign.outside:
+ return EdgeInsets.zero;
+ }
+ }
+
+ @override
ShapeBorder scale(double t) {
return StarBorder(
points: points,
@@ -375,7 +388,18 @@
@override
Path getInnerPath(Rect rect, {TextDirection? textDirection}) {
- final Rect adjustedRect = rect.deflate(side.strokeInset);
+ final Rect adjustedRect;
+ switch (side.strokeAlign) {
+ case StrokeAlign.inside:
+ adjustedRect = rect.deflate(side.width);
+ break;
+ case StrokeAlign.center:
+ adjustedRect = rect.deflate(side.width / 2);
+ break;
+ case StrokeAlign.outside:
+ adjustedRect = rect;
+ break;
+ }
return _StarGenerator(
points: points,
rotation: _rotationRadians,
@@ -404,7 +428,18 @@
case BorderStyle.none:
break;
case BorderStyle.solid:
- final Rect adjustedRect = rect.inflate(side.strokeOffset / 2);
+ final Rect adjustedRect;
+ switch (side.strokeAlign) {
+ case StrokeAlign.inside:
+ adjustedRect = rect.deflate(side.width / 2);
+ break;
+ case StrokeAlign.center:
+ adjustedRect = rect;
+ break;
+ case StrokeAlign.outside:
+ adjustedRect = rect.inflate(side.width / 2);
+ break;
+ }
final Path path = _StarGenerator(
points: points,
rotation: _rotationRadians,
diff --git a/packages/flutter/test/material/bottom_sheet_theme_test.dart b/packages/flutter/test/material/bottom_sheet_theme_test.dart
index d01aad5..51b1cd9 100644
--- a/packages/flutter/test/material/bottom_sheet_theme_test.dart
+++ b/packages/flutter/test/material/bottom_sheet_theme_test.dart
@@ -51,7 +51,7 @@
expect(description, <String>[
'backgroundColor: Color(0xffffffff)',
'elevation: 2.0',
- 'shape: RoundedRectangleBorder(BorderSide(width: 0.0, style: none), BorderRadius.circular(2.0))',
+ 'shape: RoundedRectangleBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none), BorderRadius.circular(2.0))',
'clipBehavior: Clip.antiAlias',
'constraints: BoxConstraints(200.0<=w<=640.0, 0.0<=h<=Infinity)',
]);
diff --git a/packages/flutter/test/material/button_style_test.dart b/packages/flutter/test/material/button_style_test.dart
index 44599e5..11de84c 100644
--- a/packages/flutter/test/material/button_style_test.dart
+++ b/packages/flutter/test/material/button_style_test.dart
@@ -88,8 +88,8 @@
'minimumSize: MaterialStatePropertyAll(Size(1.0, 2.0))',
'maximumSize: MaterialStatePropertyAll(Size(100.0, 200.0))',
'iconSize: MaterialStatePropertyAll(48.1)',
- 'side: MaterialStatePropertyAll(BorderSide(color: Color(0xfffffff6), width: 4.0))',
- 'shape: MaterialStatePropertyAll(StadiumBorder(BorderSide(width: 0.0, style: none)))',
+ 'side: MaterialStatePropertyAll(BorderSide(Color(0xfffffff6), 4.0, BorderStyle.solid))',
+ 'shape: MaterialStatePropertyAll(StadiumBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none)))',
'mouseCursor: MaterialStatePropertyAll(SystemMouseCursor(forbidden))',
'tapTargetSize: shrinkWrap',
'animationDuration: 0:00:01.000000',
diff --git a/packages/flutter/test/material/chip_theme_test.dart b/packages/flutter/test/material/chip_theme_test.dart
index c0878ad..80a95c4 100644
--- a/packages/flutter/test/material/chip_theme_test.dart
+++ b/packages/flutter/test/material/chip_theme_test.dart
@@ -119,8 +119,8 @@
'checkMarkColor: Color(0xfffffff7)',
'labelPadding: EdgeInsets.all(1.0)',
'padding: EdgeInsets.all(2.0)',
- 'side: BorderSide(width: 10.0)',
- 'shape: RoundedRectangleBorder(BorderSide(width: 0.0, style: none), BorderRadius.zero)',
+ 'side: BorderSide(Color(0xff000000), 10.0, BorderStyle.solid)',
+ 'shape: RoundedRectangleBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none), BorderRadius.zero)',
'labelStyle: TextStyle(inherit: true, size: 10.0)',
'secondaryLabelStyle: TextStyle(inherit: true, size: 20.0)',
'brightness: dark',
diff --git a/packages/flutter/test/material/drawer_theme_test.dart b/packages/flutter/test/material/drawer_theme_test.dart
index da6b9e8..df79277 100644
--- a/packages/flutter/test/material/drawer_theme_test.dart
+++ b/packages/flutter/test/material/drawer_theme_test.dart
@@ -43,7 +43,7 @@
'backgroundColor: Color(0x00000099)',
'scrimColor: Color(0x00000098)',
'elevation: 5.0',
- 'shape: RoundedRectangleBorder(BorderSide(width: 0.0, style: none), BorderRadius.circular(2.0))',
+ 'shape: RoundedRectangleBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none), BorderRadius.circular(2.0))',
'width: 200.0',
]);
});
diff --git a/packages/flutter/test/material/floating_action_button_theme_test.dart b/packages/flutter/test/material/floating_action_button_theme_test.dart
index b30c677..1eca032 100644
--- a/packages/flutter/test/material/floating_action_button_theme_test.dart
+++ b/packages/flutter/test/material/floating_action_button_theme_test.dart
@@ -307,7 +307,7 @@
'hoverElevation: 10.0',
'disabledElevation: 11.0',
'highlightElevation: 43.0',
- 'shape: BeveledRectangleBorder(BorderSide(width: 0.0, style: none), BorderRadius.zero)',
+ 'shape: BeveledRectangleBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none), BorderRadius.zero)',
'enableFeedback: true',
'iconSize: 42.0',
'sizeConstraints: BoxConstraints(w=100.0, h=100.0)',
diff --git a/packages/flutter/test/material/list_tile_test.dart b/packages/flutter/test/material/list_tile_test.dart
index 319e85f..8aaca6f 100644
--- a/packages/flutter/test/material/list_tile_test.dart
+++ b/packages/flutter/test/material/list_tile_test.dart
@@ -2286,7 +2286,7 @@
'isThreeLine: THREE_LINE',
'dense: true',
'visualDensity: VisualDensity#00000(h: 0.0, v: 0.0)',
- 'shape: RoundedRectangleBorder(BorderSide(width: 0.0, style: none), BorderRadius.zero)',
+ 'shape: RoundedRectangleBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none), BorderRadius.zero)',
'style: ListTileStyle.list',
'selectedColor: Color(0xff0000ff)',
'iconColor: Color(0xff00ff00)',
diff --git a/packages/flutter/test/material/list_tile_theme_test.dart b/packages/flutter/test/material/list_tile_theme_test.dart
index 6b43bb8..bed8707 100644
--- a/packages/flutter/test/material/list_tile_theme_test.dart
+++ b/packages/flutter/test/material/list_tile_theme_test.dart
@@ -111,7 +111,7 @@
description,
equalsIgnoringHashCodes(<String>[
'dense: true',
- 'shape: StadiumBorder(BorderSide(width: 0.0, style: none))',
+ 'shape: StadiumBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none))',
'style: drawer',
'selectedColor: Color(0x00000001)',
'iconColor: Color(0x00000002)',
diff --git a/packages/flutter/test/material/navigation_bar_theme_test.dart b/packages/flutter/test/material/navigation_bar_theme_test.dart
index 055ba41..bd79843 100644
--- a/packages/flutter/test/material/navigation_bar_theme_test.dart
+++ b/packages/flutter/test/material/navigation_bar_theme_test.dart
@@ -46,7 +46,7 @@
expect(description[1], 'backgroundColor: Color(0x00000099)');
expect(description[2], 'elevation: 20.0');
expect(description[3], 'indicatorColor: Color(0x00000098)');
- expect(description[4], 'indicatorShape: CircleBorder(BorderSide(width: 0.0, style: none))');
+ expect(description[4], 'indicatorShape: CircleBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none))');
expect(description[5], 'labelTextStyle: MaterialStatePropertyAll(TextStyle(inherit: true, size: 7.0))');
// Ignore instance address for IconThemeData.
diff --git a/packages/flutter/test/material/popup_menu_theme_test.dart b/packages/flutter/test/material/popup_menu_theme_test.dart
index a37e883..768c5b6 100644
--- a/packages/flutter/test/material/popup_menu_theme_test.dart
+++ b/packages/flutter/test/material/popup_menu_theme_test.dart
@@ -60,7 +60,7 @@
expect(description, <String>[
'color: Color(0xffffffff)',
- 'shape: RoundedRectangleBorder(BorderSide(width: 0.0, style: none), BorderRadius.circular(2.0))',
+ 'shape: RoundedRectangleBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none), BorderRadius.circular(2.0))',
'elevation: 2.0',
'text style: TextStyle(inherit: true, color: Color(0xffffffff))',
'mouseCursor: MaterialStateMouseCursor(clickable)',
diff --git a/packages/flutter/test/material/snack_bar_theme_test.dart b/packages/flutter/test/material/snack_bar_theme_test.dart
index 5477413..cd82a63 100644
--- a/packages/flutter/test/material/snack_bar_theme_test.dart
+++ b/packages/flutter/test/material/snack_bar_theme_test.dart
@@ -58,7 +58,7 @@
'disabledActionTextColor: Color(0xff00aa00)',
'contentTextStyle: TextStyle(inherit: true, color: Color(0xff123456))',
'elevation: 2.0',
- 'shape: RoundedRectangleBorder(BorderSide(width: 0.0, style: none), BorderRadius.circular(2.0))',
+ 'shape: RoundedRectangleBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none), BorderRadius.circular(2.0))',
'behavior: SnackBarBehavior.floating',
]);
});
diff --git a/packages/flutter/test/material/time_picker_theme_test.dart b/packages/flutter/test/material/time_picker_theme_test.dart
index 1e44ae3..021674b 100644
--- a/packages/flutter/test/material/time_picker_theme_test.dart
+++ b/packages/flutter/test/material/time_picker_theme_test.dart
@@ -86,10 +86,10 @@
'hourMinuteTextStyle: TextStyle(<all styles inherited>)',
'dayPeriodTextStyle: TextStyle(<all styles inherited>)',
'helpTextStyle: TextStyle(<all styles inherited>)',
- 'shape: RoundedRectangleBorder(BorderSide(width: 0.0, style: none), BorderRadius.zero)',
- 'hourMinuteShape: RoundedRectangleBorder(BorderSide(width: 0.0, style: none), BorderRadius.zero)',
- 'dayPeriodShape: RoundedRectangleBorder(BorderSide(width: 0.0, style: none), BorderRadius.zero)',
- 'dayPeriodBorderSide: BorderSide',
+ 'shape: RoundedRectangleBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none), BorderRadius.zero)',
+ 'hourMinuteShape: RoundedRectangleBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none), BorderRadius.zero)',
+ 'dayPeriodShape: RoundedRectangleBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none), BorderRadius.zero)',
+ 'dayPeriodBorderSide: BorderSide(Color(0xff000000), 1.0, BorderStyle.solid)',
]);
});
diff --git a/packages/flutter/test/painting/beveled_rectangle_border_test.dart b/packages/flutter/test/painting/beveled_rectangle_border_test.dart
index c3d4330..14f4dd9 100644
--- a/packages/flutter/test/painting/beveled_rectangle_border_test.dart
+++ b/packages/flutter/test/painting/beveled_rectangle_border_test.dart
@@ -110,8 +110,8 @@
test('BeveledRectangleBorder with StrokeAlign', () {
const BorderRadius borderRadius = BorderRadius.all(Radius.circular(10));
const BeveledRectangleBorder inside = BeveledRectangleBorder(side: BorderSide(width: 10.0), borderRadius: borderRadius);
- const BeveledRectangleBorder center = BeveledRectangleBorder(side: BorderSide(width: 10.0, strokeAlign: BorderSide.strokeAlignCenter), borderRadius: borderRadius);
- const BeveledRectangleBorder outside = BeveledRectangleBorder(side: BorderSide(width: 10.0, strokeAlign: BorderSide.strokeAlignOutside), borderRadius: borderRadius);
+ const BeveledRectangleBorder center = BeveledRectangleBorder(side: BorderSide(width: 10.0, strokeAlign: StrokeAlign.center), borderRadius: borderRadius);
+ const BeveledRectangleBorder outside = BeveledRectangleBorder(side: BorderSide(width: 10.0, strokeAlign: StrokeAlign.outside), borderRadius: borderRadius);
expect(inside.dimensions, const EdgeInsets.all(10.0));
expect(center.dimensions, const EdgeInsets.all(5.0));
expect(outside.dimensions, EdgeInsets.zero);
diff --git a/packages/flutter/test/painting/border_rtl_test.dart b/packages/flutter/test/painting/border_rtl_test.dart
index 47b4f1d..18946a7 100644
--- a/packages/flutter/test/painting/border_rtl_test.dart
+++ b/packages/flutter/test/painting/border_rtl_test.dart
@@ -142,7 +142,8 @@
' BoxBorder.lerp() was called with two objects of type SillyBorder\n'
' and Border:\n'
' SillyBorder()\n'
- ' Border.all(BorderSide(width: 0.0, style: none))\n'
+ ' Border.all(BorderSide(Color(0xff000000), 0.0,\n'
+ ' BorderStyle.none))\n'
' However, only Border and BorderDirectional classes are supported\n'
' by this method.\n'
' For a more general interpolation method, consider using\n'
diff --git a/packages/flutter/test/painting/border_side_test.dart b/packages/flutter/test/painting/border_side_test.dart
index b4c33c1..35f5023 100644
--- a/packages/flutter/test/painting/border_side_test.dart
+++ b/packages/flutter/test/painting/border_side_test.dart
@@ -119,21 +119,21 @@
test('BorderSide - toString', () {
expect(
const BorderSide(color: Color(0xFFAABBCC), width: 1.2345).toString(),
- 'BorderSide(color: Color(0xffaabbcc), width: 1.2)',
+ 'BorderSide(Color(0xffaabbcc), 1.2, BorderStyle.solid)',
);
});
test('BorderSide - lerp with strokeAlign', () {
- const BorderSide side0 = BorderSide(width: 2.0);
- const BorderSide side1 = BorderSide(width: 2.0, strokeAlign: BorderSide.strokeAlignOutside);
- expect(BorderSide.lerp(side0, side1, 0), const BorderSide(width: 2.0));
- expect(BorderSide.lerp(side0, side1, 0.5), const BorderSide(width: 2.0, strokeAlign: BorderSide.strokeAlignCenter));
- expect(BorderSide.lerp(side0, side1, 1), const BorderSide(width: 2.0, strokeAlign: BorderSide.strokeAlignOutside));
+ const BorderSide side0 = BorderSide(width: 2.0, strokeAlign: StrokeAlign.center);
+ const BorderSide side1 = BorderSide(width: 2.0, strokeAlign: StrokeAlign.outside);
+ expect(BorderSide.lerp(side0, side1, 0), const BorderSide(width: 2.0, strokeAlign: StrokeAlign.center));
+ expect(BorderSide.lerp(side0, side1, 0.5), const BorderSide(width: 0.0, strokeAlign: StrokeAlign.center));
+ expect(BorderSide.lerp(side0, side1, 1), const BorderSide(width: 2.0, strokeAlign: StrokeAlign.outside));
const BorderSide side2 = BorderSide(width: 2.0);
- const BorderSide side3 = BorderSide(width: 2.0, strokeAlign: BorderSide.strokeAlignCenter);
+ const BorderSide side3 = BorderSide(width: 2.0, strokeAlign: StrokeAlign.center);
expect(BorderSide.lerp(side2, side3, 0), const BorderSide(width: 2.0));
- expect(BorderSide.lerp(side2, side3, 0.5), const BorderSide(width: 2.0, strokeAlign: -0.5));
- expect(BorderSide.lerp(side2, side3, 1), const BorderSide(width: 2.0, strokeAlign: BorderSide.strokeAlignCenter));
+ expect(BorderSide.lerp(side2, side3, 0.5), const BorderSide(width: 0.0));
+ expect(BorderSide.lerp(side2, side3, 1), const BorderSide(width: 2.0, strokeAlign: StrokeAlign.center));
});
}
diff --git a/packages/flutter/test/painting/border_test.dart b/packages/flutter/test/painting/border_test.dart
index 2e05515..fa2fd47 100644
--- a/packages/flutter/test/painting/border_test.dart
+++ b/packages/flutter/test/painting/border_test.dart
@@ -202,8 +202,8 @@
expect(
const Border(
left: BorderSide(),
- top: BorderSide(strokeAlign: BorderSide.strokeAlignCenter),
- right: BorderSide(strokeAlign: BorderSide.strokeAlignOutside),
+ top: BorderSide(strokeAlign: StrokeAlign.center),
+ right: BorderSide(strokeAlign: StrokeAlign.outside),
).isUniform,
false,
);
@@ -262,10 +262,10 @@
try {
final TestCanvas canvas = TestCanvas();
// Border.all supports all StrokeAlign values.
- // Border() supports [BorderSide.strokeAlignInside] only.
+ // Border() supports StrokeAlign.inside only.
const Border(
- left: BorderSide(strokeAlign: BorderSide.strokeAlignCenter),
- right: BorderSide(strokeAlign: BorderSide.strokeAlignOutside),
+ left: BorderSide(strokeAlign: StrokeAlign.center),
+ right: BorderSide(strokeAlign: StrokeAlign.outside),
).paint(canvas, const Rect.fromLTWH(10.0, 20.0, 30.0, 40.0));
} on FlutterError catch (e) {
error = e;
@@ -274,7 +274,7 @@
expect(error.diagnostics.length, 1);
expect(
error.diagnostics[0].toStringDeep(),
- 'A Border can only draw strokeAlign different than\nBorderSide.strokeAlignInside on uniform borders.\n',
+ 'A Border can only draw strokeAlign different than\nStrokeAlign.inside on uniform borders.\n',
);
});
@@ -282,21 +282,21 @@
final Border insideBorder = Border.all(width: 10);
expect(insideBorder.dimensions, const EdgeInsets.all(10));
- final Border centerBorder = Border.all(width: 10, strokeAlign: BorderSide.strokeAlignCenter);
+ final Border centerBorder = Border.all(width: 10, strokeAlign: StrokeAlign.center);
expect(centerBorder.dimensions, const EdgeInsets.all(5));
- final Border outsideBorder = Border.all(width: 10, strokeAlign: BorderSide.strokeAlignOutside);
+ final Border outsideBorder = Border.all(width: 10, strokeAlign: StrokeAlign.outside);
expect(outsideBorder.dimensions, EdgeInsets.zero);
const BorderSide insideSide = BorderSide(width: 10);
const BorderDirectional insideBorderDirectional = BorderDirectional(top: insideSide, bottom: insideSide, start: insideSide, end: insideSide);
expect(insideBorderDirectional.dimensions, const EdgeInsetsDirectional.all(10));
- const BorderSide centerSide = BorderSide(width: 10, strokeAlign: BorderSide.strokeAlignCenter);
+ const BorderSide centerSide = BorderSide(width: 10, strokeAlign: StrokeAlign.center);
const BorderDirectional centerBorderDirectional = BorderDirectional(top: centerSide, bottom: centerSide, start: centerSide, end: centerSide);
expect(centerBorderDirectional.dimensions, const EdgeInsetsDirectional.all(5));
- const BorderSide outsideSide = BorderSide(width: 10, strokeAlign: BorderSide.strokeAlignOutside);
+ const BorderSide outsideSide = BorderSide(width: 10, strokeAlign: StrokeAlign.outside);
const BorderDirectional outsideBorderDirectional = BorderDirectional(top: outsideSide, bottom: outsideSide, start: outsideSide, end: outsideSide);
expect(outsideBorderDirectional.dimensions, EdgeInsetsDirectional.zero);
});
diff --git a/packages/flutter/test/painting/box_painter_test.dart b/packages/flutter/test/painting/box_painter_test.dart
index 85fec3f..7271cbc 100644
--- a/packages/flutter/test/painting/box_painter_test.dart
+++ b/packages/flutter/test/painting/box_painter_test.dart
@@ -54,8 +54,8 @@
style: BorderStyle.solid,
);
- expect(side1.toString(), equals('BorderSide'));
- expect(side2.toString(), equals('BorderSide(color: Color(0xff00ffff), width: 2.0)'));
+ expect(side1.toString(), equals('BorderSide(Color(0xff000000), 1.0, BorderStyle.solid)'));
+ expect(side2.toString(), equals('BorderSide(Color(0xff00ffff), 2.0, BorderStyle.solid)'));
});
test('Border control test', () {
@@ -76,7 +76,9 @@
test('Border toString test', () {
expect(
Border.all(width: 4.0).toString(),
- equals('Border.all(BorderSide(width: 4.0))'),
+ equals(
+ 'Border.all(BorderSide(Color(0xff000000), 4.0, BorderStyle.solid))',
+ ),
);
expect(
const Border(
@@ -85,7 +87,9 @@
bottom: BorderSide(width: 3.0),
left: BorderSide(width: 3.0),
).toString(),
- equals('Border.all(BorderSide(width: 3.0))'),
+ equals(
+ 'Border.all(BorderSide(Color(0xff000000), 3.0, BorderStyle.solid))',
+ ),
);
});
diff --git a/packages/flutter/test/painting/rounded_rectangle_border_test.dart b/packages/flutter/test/painting/rounded_rectangle_border_test.dart
index 94acd9c..aa9c6c8 100644
--- a/packages/flutter/test/painting/rounded_rectangle_border_test.dart
+++ b/packages/flutter/test/painting/rounded_rectangle_border_test.dart
@@ -97,28 +97,28 @@
expect(
ShapeBorder.lerp(r, c, 0.1).toString(),
- 'RoundedRectangleBorder(BorderSide(width: 0.0, style: none), BorderRadius.circular(10.0), 10.0% of the way to being a CircleBorder)',
+ 'RoundedRectangleBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none), BorderRadius.circular(10.0), 10.0% of the way to being a CircleBorder)',
);
expect(
ShapeBorder.lerp(r, c, 0.2).toString(),
- 'RoundedRectangleBorder(BorderSide(width: 0.0, style: none), BorderRadius.circular(10.0), 20.0% of the way to being a CircleBorder)',
+ 'RoundedRectangleBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none), BorderRadius.circular(10.0), 20.0% of the way to being a CircleBorder)',
);
expect(
ShapeBorder.lerp(ShapeBorder.lerp(r, c, 0.1), ShapeBorder.lerp(r, c, 0.9), 0.9).toString(),
- 'RoundedRectangleBorder(BorderSide(width: 0.0, style: none), BorderRadius.circular(10.0), 82.0% of the way to being a CircleBorder)',
+ 'RoundedRectangleBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none), BorderRadius.circular(10.0), 82.0% of the way to being a CircleBorder)',
);
expect(
ShapeBorder.lerp(c, r, 0.9).toString(),
- 'RoundedRectangleBorder(BorderSide(width: 0.0, style: none), BorderRadius.circular(10.0), 10.0% of the way to being a CircleBorder)',
+ 'RoundedRectangleBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none), BorderRadius.circular(10.0), 10.0% of the way to being a CircleBorder)',
);
expect(
ShapeBorder.lerp(c, r, 0.8).toString(),
- 'RoundedRectangleBorder(BorderSide(width: 0.0, style: none), BorderRadius.circular(10.0), 20.0% of the way to being a CircleBorder)',
+ 'RoundedRectangleBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none), BorderRadius.circular(10.0), 20.0% of the way to being a CircleBorder)',
);
expect(
ShapeBorder.lerp(ShapeBorder.lerp(r, c, 0.9), ShapeBorder.lerp(r, c, 0.1), 0.1).toString(),
- 'RoundedRectangleBorder(BorderSide(width: 0.0, style: none), BorderRadius.circular(10.0), 82.0% of the way to being a CircleBorder)',
+ 'RoundedRectangleBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none), BorderRadius.circular(10.0), 82.0% of the way to being a CircleBorder)',
);
expect(ShapeBorder.lerp(r, c, 0.1), ShapeBorder.lerp(r, c, 0.1));
@@ -135,26 +135,19 @@
const RoundedRectangleBorder insideRoundedRectangleBorder = RoundedRectangleBorder(side: BorderSide(width: 10));
expect(insideRoundedRectangleBorder.dimensions, const EdgeInsets.all(10));
- const RoundedRectangleBorder centerRoundedRectangleBorder = RoundedRectangleBorder(side: BorderSide(width: 10, strokeAlign: BorderSide.strokeAlignCenter));
+ const RoundedRectangleBorder centerRoundedRectangleBorder = RoundedRectangleBorder(side: BorderSide(width: 10, strokeAlign: StrokeAlign.center));
expect(centerRoundedRectangleBorder.dimensions, const EdgeInsets.all(5));
- const RoundedRectangleBorder outsideRoundedRectangleBorder = RoundedRectangleBorder(side: BorderSide(width: 10, strokeAlign: BorderSide.strokeAlignOutside));
+ const RoundedRectangleBorder outsideRoundedRectangleBorder = RoundedRectangleBorder(side: BorderSide(width: 10, strokeAlign: StrokeAlign.outside));
expect(outsideRoundedRectangleBorder.dimensions, EdgeInsets.zero);
const CircleBorder insideCircleBorder = CircleBorder(side: BorderSide(width: 10));
expect(insideCircleBorder.dimensions, const EdgeInsets.all(10));
- const CircleBorder centerCircleBorder = CircleBorder(side: BorderSide(width: 10, strokeAlign: BorderSide.strokeAlignCenter));
+ const CircleBorder centerCircleBorder = CircleBorder(side: BorderSide(width: 10, strokeAlign: StrokeAlign.center));
expect(centerCircleBorder.dimensions, const EdgeInsets.all(5));
- const CircleBorder outsideCircleBorder = CircleBorder(side: BorderSide(width: 10, strokeAlign: BorderSide.strokeAlignOutside));
+ const CircleBorder outsideCircleBorder = CircleBorder(side: BorderSide(width: 10, strokeAlign: StrokeAlign.outside));
expect(outsideCircleBorder.dimensions, EdgeInsets.zero);
});
-
- test('RoundedRectangleBorder.lerp with different StrokeAlign', () {
- const RoundedRectangleBorder rInside = RoundedRectangleBorder(side: BorderSide(width: 10.0));
- const RoundedRectangleBorder rOutside = RoundedRectangleBorder(side: BorderSide(width: 20.0, strokeAlign: BorderSide.strokeAlignOutside));
- const RoundedRectangleBorder rCenter = RoundedRectangleBorder(side: BorderSide(width: 15.0, strokeAlign: BorderSide.strokeAlignCenter));
- expect(ShapeBorder.lerp(rInside, rOutside, 0.5), rCenter);
- });
}
diff --git a/packages/flutter/test/painting/shape_border_test.dart b/packages/flutter/test/painting/shape_border_test.dart
index fbb217b..632db92 100644
--- a/packages/flutter/test/painting/shape_border_test.dart
+++ b/packages/flutter/test/painting/shape_border_test.dart
@@ -13,49 +13,49 @@
final Border b2 = Border.all(color: const Color(0xFF0000FF));
expect(
(b1 + b2).toString(),
- 'Border.all(BorderSide(color: Color(0xff00ff00))) + '
- 'Border.all(BorderSide(color: Color(0xff0000ff)))',
+ 'Border.all(BorderSide(Color(0xff00ff00), 1.0, BorderStyle.solid)) + '
+ 'Border.all(BorderSide(Color(0xff0000ff), 1.0, BorderStyle.solid))',
);
expect(
(b1 + (b2 + b2)).toString(),
- 'Border.all(BorderSide(color: Color(0xff00ff00))) + '
- 'Border.all(BorderSide(color: Color(0xff0000ff), width: 2.0))',
+ 'Border.all(BorderSide(Color(0xff00ff00), 1.0, BorderStyle.solid)) + '
+ 'Border.all(BorderSide(Color(0xff0000ff), 2.0, BorderStyle.solid))',
);
expect(
((b1 + b2) + b2).toString(),
- 'Border.all(BorderSide(color: Color(0xff00ff00))) + '
- 'Border.all(BorderSide(color: Color(0xff0000ff), width: 2.0))',
+ 'Border.all(BorderSide(Color(0xff00ff00), 1.0, BorderStyle.solid)) + '
+ 'Border.all(BorderSide(Color(0xff0000ff), 2.0, BorderStyle.solid))',
);
expect((b1 + b2) + b2, b1 + (b2 + b2));
expect(
(b1 + b2).scale(3.0).toString(),
- 'Border.all(BorderSide(color: Color(0xff00ff00), width: 3.0)) + '
- 'Border.all(BorderSide(color: Color(0xff0000ff), width: 3.0))',
+ 'Border.all(BorderSide(Color(0xff00ff00), 3.0, BorderStyle.solid)) + '
+ 'Border.all(BorderSide(Color(0xff0000ff), 3.0, BorderStyle.solid))',
);
expect(
(b1 + b2).scale(0.0).toString(),
- 'Border.all(BorderSide(color: Color(0xff00ff00), width: 0.0, style: none)) + '
- 'Border.all(BorderSide(color: Color(0xff0000ff), width: 0.0, style: none))',
+ 'Border.all(BorderSide(Color(0xff00ff00), 0.0, BorderStyle.none)) + '
+ 'Border.all(BorderSide(Color(0xff0000ff), 0.0, BorderStyle.none))',
);
expect(
ShapeBorder.lerp(b2 + b1, b1 + b2, 0.0).toString(),
- 'Border.all(BorderSide(color: Color(0xff0000ff))) + '
- 'Border.all(BorderSide(color: Color(0xff00ff00)))',
+ 'Border.all(BorderSide(Color(0xff0000ff), 1.0, BorderStyle.solid)) + '
+ 'Border.all(BorderSide(Color(0xff00ff00), 1.0, BorderStyle.solid))',
);
expect(
ShapeBorder.lerp(b2 + b1, b1 + b2, 0.25).toString(),
- 'Border.all(BorderSide(color: Color(0xff003fbf))) + '
- 'Border.all(BorderSide(color: Color(0xff00bf3f)))',
+ 'Border.all(BorderSide(Color(0xff003fbf), 1.0, BorderStyle.solid)) + '
+ 'Border.all(BorderSide(Color(0xff00bf3f), 1.0, BorderStyle.solid))',
);
expect(
ShapeBorder.lerp(b2 + b1, b1 + b2, 0.5).toString(),
- 'Border.all(BorderSide(color: Color(0xff007f7f))) + '
- 'Border.all(BorderSide(color: Color(0xff007f7f)))',
+ 'Border.all(BorderSide(Color(0xff007f7f), 1.0, BorderStyle.solid)) + '
+ 'Border.all(BorderSide(Color(0xff007f7f), 1.0, BorderStyle.solid))',
);
expect(
ShapeBorder.lerp(b2 + b1, b1 + b2, 1.0).toString(),
- 'Border.all(BorderSide(color: Color(0xff00ff00))) + '
- 'Border.all(BorderSide(color: Color(0xff0000ff)))',
+ 'Border.all(BorderSide(Color(0xff00ff00), 1.0, BorderStyle.solid)) + '
+ 'Border.all(BorderSide(Color(0xff0000ff), 1.0, BorderStyle.solid))',
);
expect((b1 + b2).dimensions, const EdgeInsets.all(2.0));
const Rect rect = Rect.fromLTRB(11.0, 15.0, 299.0, 175.0);
@@ -78,49 +78,49 @@
const BorderDirectional b2 = BorderDirectional(top: side2, start: side2, end: side2, bottom: side2);
expect(
(b1 + b2).toString(),
- 'BorderDirectional(top: BorderSide(color: Color(0xff00ff00)), start: BorderSide(color: Color(0xff00ff00)), end: BorderSide(color: Color(0xff00ff00)), bottom: BorderSide(color: Color(0xff00ff00))) + '
- 'BorderDirectional(top: BorderSide(color: Color(0xff0000ff)), start: BorderSide(color: Color(0xff0000ff)), end: BorderSide(color: Color(0xff0000ff)), bottom: BorderSide(color: Color(0xff0000ff)))',
+ 'BorderDirectional(top: BorderSide(Color(0xff00ff00), 1.0, BorderStyle.solid), start: BorderSide(Color(0xff00ff00), 1.0, BorderStyle.solid), end: BorderSide(Color(0xff00ff00), 1.0, BorderStyle.solid), bottom: BorderSide(Color(0xff00ff00), 1.0, BorderStyle.solid)) + '
+ 'BorderDirectional(top: BorderSide(Color(0xff0000ff), 1.0, BorderStyle.solid), start: BorderSide(Color(0xff0000ff), 1.0, BorderStyle.solid), end: BorderSide(Color(0xff0000ff), 1.0, BorderStyle.solid), bottom: BorderSide(Color(0xff0000ff), 1.0, BorderStyle.solid))',
);
expect(
(b1 + (b2 + b2)).toString(),
- 'BorderDirectional(top: BorderSide(color: Color(0xff00ff00)), start: BorderSide(color: Color(0xff00ff00)), end: BorderSide(color: Color(0xff00ff00)), bottom: BorderSide(color: Color(0xff00ff00))) + '
- 'BorderDirectional(top: BorderSide(color: Color(0xff0000ff), width: 2.0), start: BorderSide(color: Color(0xff0000ff), width: 2.0), end: BorderSide(color: Color(0xff0000ff), width: 2.0), bottom: BorderSide(color: Color(0xff0000ff), width: 2.0))',
+ 'BorderDirectional(top: BorderSide(Color(0xff00ff00), 1.0, BorderStyle.solid), start: BorderSide(Color(0xff00ff00), 1.0, BorderStyle.solid), end: BorderSide(Color(0xff00ff00), 1.0, BorderStyle.solid), bottom: BorderSide(Color(0xff00ff00), 1.0, BorderStyle.solid)) + '
+ 'BorderDirectional(top: BorderSide(Color(0xff0000ff), 2.0, BorderStyle.solid), start: BorderSide(Color(0xff0000ff), 2.0, BorderStyle.solid), end: BorderSide(Color(0xff0000ff), 2.0, BorderStyle.solid), bottom: BorderSide(Color(0xff0000ff), 2.0, BorderStyle.solid))',
);
expect(
((b1 + b2) + b2).toString(),
- 'BorderDirectional(top: BorderSide(color: Color(0xff00ff00)), start: BorderSide(color: Color(0xff00ff00)), end: BorderSide(color: Color(0xff00ff00)), bottom: BorderSide(color: Color(0xff00ff00))) + '
- 'BorderDirectional(top: BorderSide(color: Color(0xff0000ff), width: 2.0), start: BorderSide(color: Color(0xff0000ff), width: 2.0), end: BorderSide(color: Color(0xff0000ff), width: 2.0), bottom: BorderSide(color: Color(0xff0000ff), width: 2.0))',
+ 'BorderDirectional(top: BorderSide(Color(0xff00ff00), 1.0, BorderStyle.solid), start: BorderSide(Color(0xff00ff00), 1.0, BorderStyle.solid), end: BorderSide(Color(0xff00ff00), 1.0, BorderStyle.solid), bottom: BorderSide(Color(0xff00ff00), 1.0, BorderStyle.solid)) + '
+ 'BorderDirectional(top: BorderSide(Color(0xff0000ff), 2.0, BorderStyle.solid), start: BorderSide(Color(0xff0000ff), 2.0, BorderStyle.solid), end: BorderSide(Color(0xff0000ff), 2.0, BorderStyle.solid), bottom: BorderSide(Color(0xff0000ff), 2.0, BorderStyle.solid))',
);
expect((b1 + b2) + b2, b1 + (b2 + b2));
expect(
(b1 + b2).scale(3.0).toString(),
- 'BorderDirectional(top: BorderSide(color: Color(0xff00ff00), width: 3.0), start: BorderSide(color: Color(0xff00ff00), width: 3.0), end: BorderSide(color: Color(0xff00ff00), width: 3.0), bottom: BorderSide(color: Color(0xff00ff00), width: 3.0)) + '
- 'BorderDirectional(top: BorderSide(color: Color(0xff0000ff), width: 3.0), start: BorderSide(color: Color(0xff0000ff), width: 3.0), end: BorderSide(color: Color(0xff0000ff), width: 3.0), bottom: BorderSide(color: Color(0xff0000ff), width: 3.0))',
+ 'BorderDirectional(top: BorderSide(Color(0xff00ff00), 3.0, BorderStyle.solid), start: BorderSide(Color(0xff00ff00), 3.0, BorderStyle.solid), end: BorderSide(Color(0xff00ff00), 3.0, BorderStyle.solid), bottom: BorderSide(Color(0xff00ff00), 3.0, BorderStyle.solid)) + '
+ 'BorderDirectional(top: BorderSide(Color(0xff0000ff), 3.0, BorderStyle.solid), start: BorderSide(Color(0xff0000ff), 3.0, BorderStyle.solid), end: BorderSide(Color(0xff0000ff), 3.0, BorderStyle.solid), bottom: BorderSide(Color(0xff0000ff), 3.0, BorderStyle.solid))',
);
expect(
(b1 + b2).scale(0.0).toString(),
- 'BorderDirectional(top: BorderSide(color: Color(0xff00ff00), width: 0.0, style: none), start: BorderSide(color: Color(0xff00ff00), width: 0.0, style: none), end: BorderSide(color: Color(0xff00ff00), width: 0.0, style: none), bottom: BorderSide(color: Color(0xff00ff00), width: 0.0, style: none)) + '
- 'BorderDirectional(top: BorderSide(color: Color(0xff0000ff), width: 0.0, style: none), start: BorderSide(color: Color(0xff0000ff), width: 0.0, style: none), end: BorderSide(color: Color(0xff0000ff), width: 0.0, style: none), bottom: BorderSide(color: Color(0xff0000ff), width: 0.0, style: none))',
+ 'BorderDirectional(top: BorderSide(Color(0xff00ff00), 0.0, BorderStyle.none), start: BorderSide(Color(0xff00ff00), 0.0, BorderStyle.none), end: BorderSide(Color(0xff00ff00), 0.0, BorderStyle.none), bottom: BorderSide(Color(0xff00ff00), 0.0, BorderStyle.none)) + '
+ 'BorderDirectional(top: BorderSide(Color(0xff0000ff), 0.0, BorderStyle.none), start: BorderSide(Color(0xff0000ff), 0.0, BorderStyle.none), end: BorderSide(Color(0xff0000ff), 0.0, BorderStyle.none), bottom: BorderSide(Color(0xff0000ff), 0.0, BorderStyle.none))',
);
expect(
ShapeBorder.lerp(b2 + b1, b1 + b2, 0.0).toString(),
- 'BorderDirectional(top: BorderSide(color: Color(0xff0000ff)), start: BorderSide(color: Color(0xff0000ff)), end: BorderSide(color: Color(0xff0000ff)), bottom: BorderSide(color: Color(0xff0000ff))) + '
- 'BorderDirectional(top: BorderSide(color: Color(0xff00ff00)), start: BorderSide(color: Color(0xff00ff00)), end: BorderSide(color: Color(0xff00ff00)), bottom: BorderSide(color: Color(0xff00ff00)))',
+ 'BorderDirectional(top: BorderSide(Color(0xff0000ff), 1.0, BorderStyle.solid), start: BorderSide(Color(0xff0000ff), 1.0, BorderStyle.solid), end: BorderSide(Color(0xff0000ff), 1.0, BorderStyle.solid), bottom: BorderSide(Color(0xff0000ff), 1.0, BorderStyle.solid)) + '
+ 'BorderDirectional(top: BorderSide(Color(0xff00ff00), 1.0, BorderStyle.solid), start: BorderSide(Color(0xff00ff00), 1.0, BorderStyle.solid), end: BorderSide(Color(0xff00ff00), 1.0, BorderStyle.solid), bottom: BorderSide(Color(0xff00ff00), 1.0, BorderStyle.solid))',
);
expect(
ShapeBorder.lerp(b2 + b1, b1 + b2, 0.25).toString(),
- 'BorderDirectional(top: BorderSide(color: Color(0xff003fbf)), start: BorderSide(color: Color(0xff003fbf)), end: BorderSide(color: Color(0xff003fbf)), bottom: BorderSide(color: Color(0xff003fbf))) + '
- 'BorderDirectional(top: BorderSide(color: Color(0xff00bf3f)), start: BorderSide(color: Color(0xff00bf3f)), end: BorderSide(color: Color(0xff00bf3f)), bottom: BorderSide(color: Color(0xff00bf3f)))',
+ 'BorderDirectional(top: BorderSide(Color(0xff003fbf), 1.0, BorderStyle.solid), start: BorderSide(Color(0xff003fbf), 1.0, BorderStyle.solid), end: BorderSide(Color(0xff003fbf), 1.0, BorderStyle.solid), bottom: BorderSide(Color(0xff003fbf), 1.0, BorderStyle.solid)) + '
+ 'BorderDirectional(top: BorderSide(Color(0xff00bf3f), 1.0, BorderStyle.solid), start: BorderSide(Color(0xff00bf3f), 1.0, BorderStyle.solid), end: BorderSide(Color(0xff00bf3f), 1.0, BorderStyle.solid), bottom: BorderSide(Color(0xff00bf3f), 1.0, BorderStyle.solid))',
);
expect(
ShapeBorder.lerp(b2 + b1, b1 + b2, 0.5).toString(),
- 'BorderDirectional(top: BorderSide(color: Color(0xff007f7f)), start: BorderSide(color: Color(0xff007f7f)), end: BorderSide(color: Color(0xff007f7f)), bottom: BorderSide(color: Color(0xff007f7f))) + '
- 'BorderDirectional(top: BorderSide(color: Color(0xff007f7f)), start: BorderSide(color: Color(0xff007f7f)), end: BorderSide(color: Color(0xff007f7f)), bottom: BorderSide(color: Color(0xff007f7f)))',
+ 'BorderDirectional(top: BorderSide(Color(0xff007f7f), 1.0, BorderStyle.solid), start: BorderSide(Color(0xff007f7f), 1.0, BorderStyle.solid), end: BorderSide(Color(0xff007f7f), 1.0, BorderStyle.solid), bottom: BorderSide(Color(0xff007f7f), 1.0, BorderStyle.solid)) + '
+ 'BorderDirectional(top: BorderSide(Color(0xff007f7f), 1.0, BorderStyle.solid), start: BorderSide(Color(0xff007f7f), 1.0, BorderStyle.solid), end: BorderSide(Color(0xff007f7f), 1.0, BorderStyle.solid), bottom: BorderSide(Color(0xff007f7f), 1.0, BorderStyle.solid))',
);
expect(
ShapeBorder.lerp(b2 + b1, b1 + b2, 1.0).toString(),
- 'BorderDirectional(top: BorderSide(color: Color(0xff00ff00)), start: BorderSide(color: Color(0xff00ff00)), end: BorderSide(color: Color(0xff00ff00)), bottom: BorderSide(color: Color(0xff00ff00))) + '
- 'BorderDirectional(top: BorderSide(color: Color(0xff0000ff)), start: BorderSide(color: Color(0xff0000ff)), end: BorderSide(color: Color(0xff0000ff)), bottom: BorderSide(color: Color(0xff0000ff)))',
+ 'BorderDirectional(top: BorderSide(Color(0xff00ff00), 1.0, BorderStyle.solid), start: BorderSide(Color(0xff00ff00), 1.0, BorderStyle.solid), end: BorderSide(Color(0xff00ff00), 1.0, BorderStyle.solid), bottom: BorderSide(Color(0xff00ff00), 1.0, BorderStyle.solid)) + '
+ 'BorderDirectional(top: BorderSide(Color(0xff0000ff), 1.0, BorderStyle.solid), start: BorderSide(Color(0xff0000ff), 1.0, BorderStyle.solid), end: BorderSide(Color(0xff0000ff), 1.0, BorderStyle.solid), bottom: BorderSide(Color(0xff0000ff), 1.0, BorderStyle.solid))',
);
expect((b1 + b2).dimensions, const EdgeInsetsDirectional.fromSTEB(2.0, 2.0, 2.0, 2.0));
const Rect rect = Rect.fromLTRB(11.0, 15.0, 299.0, 175.0);
diff --git a/packages/flutter/test/painting/stadium_border_test.dart b/packages/flutter/test/painting/stadium_border_test.dart
index 3902843..5b7edb5 100644
--- a/packages/flutter/test/painting/stadium_border_test.dart
+++ b/packages/flutter/test/painting/stadium_border_test.dart
@@ -48,8 +48,8 @@
});
test('StadiumBorder with StrokeAlign', () {
- const StadiumBorder center = StadiumBorder(side: BorderSide(width: 10.0, strokeAlign: BorderSide.strokeAlignCenter));
- const StadiumBorder outside = StadiumBorder(side: BorderSide(width: 10.0, strokeAlign: BorderSide.strokeAlignOutside));
+ const StadiumBorder center = StadiumBorder(side: BorderSide(width: 10.0, strokeAlign: StrokeAlign.center));
+ const StadiumBorder outside = StadiumBorder(side: BorderSide(width: 10.0, strokeAlign: StrokeAlign.outside));
expect(center.dimensions, const EdgeInsets.all(5.0));
expect(outside.dimensions, EdgeInsets.zero);
@@ -103,28 +103,28 @@
expect(
ShapeBorder.lerp(stadium, circle, 0.1).toString(),
- 'StadiumBorder(BorderSide(width: 0.0, style: none), 10.0% of the way to being a CircleBorder)',
+ 'StadiumBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none), 10.0% of the way to being a CircleBorder)',
);
expect(
ShapeBorder.lerp(stadium, circle, 0.2).toString(),
- 'StadiumBorder(BorderSide(width: 0.0, style: none), 20.0% of the way to being a CircleBorder)',
+ 'StadiumBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none), 20.0% of the way to being a CircleBorder)',
);
expect(
ShapeBorder.lerp(ShapeBorder.lerp(stadium, circle, 0.1), ShapeBorder.lerp(stadium, circle, 0.9), 0.9).toString(),
- 'StadiumBorder(BorderSide(width: 0.0, style: none), 82.0% of the way to being a CircleBorder)',
+ 'StadiumBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none), 82.0% of the way to being a CircleBorder)',
);
expect(
ShapeBorder.lerp(circle, stadium, 0.9).toString(),
- 'StadiumBorder(BorderSide(width: 0.0, style: none), 10.0% of the way to being a CircleBorder)',
+ 'StadiumBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none), 10.0% of the way to being a CircleBorder)',
);
expect(
ShapeBorder.lerp(circle, stadium, 0.8).toString(),
- 'StadiumBorder(BorderSide(width: 0.0, style: none), 20.0% of the way to being a CircleBorder)',
+ 'StadiumBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none), 20.0% of the way to being a CircleBorder)',
);
expect(
ShapeBorder.lerp(ShapeBorder.lerp(stadium, circle, 0.9), ShapeBorder.lerp(stadium, circle, 0.1), 0.1).toString(),
- 'StadiumBorder(BorderSide(width: 0.0, style: none), 82.0% of the way to being a CircleBorder)',
+ 'StadiumBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none), 82.0% of the way to being a CircleBorder)',
);
expect(ShapeBorder.lerp(stadium, circle, 0.1), ShapeBorder.lerp(stadium, circle, 0.1));
@@ -182,33 +182,33 @@
expect(
ShapeBorder.lerp(stadium, rrect, 0.1).toString(),
- 'StadiumBorder(BorderSide(width: 0.0, style: none), '
+ 'StadiumBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none), '
'BorderRadius.zero, 10.0% of the way to being a RoundedRectangleBorder)',
);
expect(
ShapeBorder.lerp(stadium, rrect, 0.2).toString(),
- 'StadiumBorder(BorderSide(width: 0.0, style: none), '
+ 'StadiumBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none), '
'BorderRadius.zero, 20.0% of the way to being a RoundedRectangleBorder)',
);
expect(
ShapeBorder.lerp(ShapeBorder.lerp(stadium, rrect, 0.1), ShapeBorder.lerp(stadium, rrect, 0.9), 0.9).toString(),
- 'StadiumBorder(BorderSide(width: 0.0, style: none), '
+ 'StadiumBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none), '
'BorderRadius.zero, 82.0% of the way to being a RoundedRectangleBorder)',
);
expect(
ShapeBorder.lerp(rrect, stadium, 0.9).toString(),
- 'StadiumBorder(BorderSide(width: 0.0, style: none), '
+ 'StadiumBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none), '
'BorderRadius.zero, 10.0% of the way to being a RoundedRectangleBorder)',
);
expect(
ShapeBorder.lerp(rrect, stadium, 0.8).toString(),
- 'StadiumBorder(BorderSide(width: 0.0, style: none), '
+ 'StadiumBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none), '
'BorderRadius.zero, 20.0% of the way to being a RoundedRectangleBorder)',
);
expect(
ShapeBorder.lerp(ShapeBorder.lerp(stadium, rrect, 0.9), ShapeBorder.lerp(stadium, rrect, 0.1), 0.1).toString(),
- 'StadiumBorder(BorderSide(width: 0.0, style: none), '
+ 'StadiumBorder(BorderSide(Color(0xff000000), 0.0, BorderStyle.none), '
'BorderRadius.zero, 82.0% of the way to being a RoundedRectangleBorder)',
);
diff --git a/packages/flutter/test/painting/star_border_test.dart b/packages/flutter/test/painting/star_border_test.dart
index d799485..fe336f1 100644
--- a/packages/flutter/test/painting/star_border_test.dart
+++ b/packages/flutter/test/painting/star_border_test.dart
@@ -105,9 +105,9 @@
await testBorder(tester, 'side_1', const StarBorder(side: BorderSide(color: Color(0xffff0000))));
await testBorder(tester, 'side_10', const StarBorder(side: BorderSide(color: Color(0xffff0000), width: 10)));
await testBorder(tester, 'side_align_center',
- const StarBorder(side: BorderSide(color: Color(0xffff0000), strokeAlign: BorderSide.strokeAlignCenter)));
+ const StarBorder(side: BorderSide(color: Color(0xffff0000), strokeAlign: StrokeAlign.center)));
await testBorder(tester, 'side_align_outside',
- const StarBorder(side: BorderSide(color: Color(0xffff0000), strokeAlign: BorderSide.strokeAlignOutside)));
+ const StarBorder(side: BorderSide(color: Color(0xffff0000), strokeAlign: StrokeAlign.outside)));
});
testWidgets('StarBorder.polygon parameters', (WidgetTester tester) async {
@@ -127,9 +127,9 @@
await testBorder(
tester, 'poly_side_10', const StarBorder.polygon(side: BorderSide(color: Color(0xffff0000), width: 10)));
await testBorder(tester, 'poly_side_align_center',
- const StarBorder.polygon(side: BorderSide(color: Color(0xffff0000), strokeAlign: BorderSide.strokeAlignCenter)));
+ const StarBorder.polygon(side: BorderSide(color: Color(0xffff0000), strokeAlign: StrokeAlign.center)));
await testBorder(tester, 'poly_side_align_outside',
- const StarBorder.polygon(side: BorderSide(color: Color(0xffff0000), strokeAlign: BorderSide.strokeAlignOutside)));
+ const StarBorder.polygon(side: BorderSide(color: Color(0xffff0000), strokeAlign: StrokeAlign.outside)));
});
testWidgets('StarBorder lerped with StarBorder', (WidgetTester tester) async {