Fix negative usableCrossAxisExtent in release mode (#64441)
This commit is contained in:
parent
c26c2363a0
commit
619eccd2e3
1
AUTHORS
1
AUTHORS
@ -64,3 +64,4 @@ Brian Wang <xinlei966@gmail.com>
|
|||||||
CaiJingLong <cjl_spy@163.com>
|
CaiJingLong <cjl_spy@163.com>
|
||||||
Alex Li <google@alexv525.com>
|
Alex Li <google@alexv525.com>
|
||||||
Ram Navan <hiramprasad@gmail.com>
|
Ram Navan <hiramprasad@gmail.com>
|
||||||
|
meritozh <ah841814092@gmail.com>
|
||||||
|
@ -326,7 +326,8 @@ class SliverGridDelegateWithFixedCrossAxisCount extends SliverGridDelegate {
|
|||||||
@override
|
@override
|
||||||
SliverGridLayout getLayout(SliverConstraints constraints) {
|
SliverGridLayout getLayout(SliverConstraints constraints) {
|
||||||
assert(_debugAssertIsValid());
|
assert(_debugAssertIsValid());
|
||||||
final double usableCrossAxisExtent = constraints.crossAxisExtent - crossAxisSpacing * (crossAxisCount - 1);
|
final double usableCrossAxisExtent = math.max(0.0,
|
||||||
|
constraints.crossAxisExtent - crossAxisSpacing * (crossAxisCount - 1));
|
||||||
final double childCrossAxisExtent = usableCrossAxisExtent / crossAxisCount;
|
final double childCrossAxisExtent = usableCrossAxisExtent / crossAxisCount;
|
||||||
final double childMainAxisExtent = childCrossAxisExtent / childAspectRatio;
|
final double childMainAxisExtent = childCrossAxisExtent / childAspectRatio;
|
||||||
return SliverGridRegularTileLayout(
|
return SliverGridRegularTileLayout(
|
||||||
@ -425,7 +426,8 @@ class SliverGridDelegateWithMaxCrossAxisExtent extends SliverGridDelegate {
|
|||||||
SliverGridLayout getLayout(SliverConstraints constraints) {
|
SliverGridLayout getLayout(SliverConstraints constraints) {
|
||||||
assert(_debugAssertIsValid(constraints.crossAxisExtent));
|
assert(_debugAssertIsValid(constraints.crossAxisExtent));
|
||||||
final int crossAxisCount = (constraints.crossAxisExtent / (maxCrossAxisExtent + crossAxisSpacing)).ceil();
|
final int crossAxisCount = (constraints.crossAxisExtent / (maxCrossAxisExtent + crossAxisSpacing)).ceil();
|
||||||
final double usableCrossAxisExtent = constraints.crossAxisExtent - crossAxisSpacing * (crossAxisCount - 1);
|
final double usableCrossAxisExtent = math.max(0.0,
|
||||||
|
constraints.crossAxisExtent - crossAxisSpacing * (crossAxisCount - 1));
|
||||||
final double childCrossAxisExtent = usableCrossAxisExtent / crossAxisCount;
|
final double childCrossAxisExtent = usableCrossAxisExtent / crossAxisCount;
|
||||||
final double childMainAxisExtent = childCrossAxisExtent / childAspectRatio;
|
final double childMainAxisExtent = childCrossAxisExtent / childAspectRatio;
|
||||||
return SliverGridRegularTileLayout(
|
return SliverGridRegularTileLayout(
|
||||||
|
@ -308,6 +308,44 @@ void main() {
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
testWidgets(
|
||||||
|
'SliverGrid negative usableCrossAxisExtent',
|
||||||
|
(WidgetTester tester) async {
|
||||||
|
await tester.pumpWidget(
|
||||||
|
Directionality(
|
||||||
|
textDirection: TextDirection.ltr,
|
||||||
|
child: Center(
|
||||||
|
child: SizedBox(
|
||||||
|
width: 4,
|
||||||
|
height: 4,
|
||||||
|
child: CustomScrollView(
|
||||||
|
slivers: <Widget>[
|
||||||
|
SliverGrid(
|
||||||
|
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
|
||||||
|
crossAxisCount: 2,
|
||||||
|
crossAxisSpacing: 8,
|
||||||
|
mainAxisSpacing: 8,
|
||||||
|
),
|
||||||
|
delegate: SliverChildListDelegate(
|
||||||
|
<Widget>[
|
||||||
|
Container(child: const Center(child: Text('A'))),
|
||||||
|
Container(child: const Center(child: Text('B'))),
|
||||||
|
Container(child: const Center(child: Text('C'))),
|
||||||
|
Container(child: const Center(child: Text('D'))),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(tester.takeException(), isNull);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
testWidgets(
|
testWidgets(
|
||||||
'SliverList can handle inaccurate scroll offset due to changes in children list',
|
'SliverList can handle inaccurate scroll offset due to changes in children list',
|
||||||
(WidgetTester tester) async {
|
(WidgetTester tester) async {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user