Noo design system rebuild #1
@@ -101,8 +101,19 @@ class NooBottomBar extends StatelessWidget {
|
|||||||
child: Padding(
|
child: Padding(
|
||||||
padding: const EdgeInsets.fromLTRB(16, 0, 16, 12),
|
padding: const EdgeInsets.fromLTRB(16, 0, 16, 12),
|
||||||
child: hasSearch
|
child: hasSearch
|
||||||
? Row(
|
// A fixed-height SizedBox, not just a Row with
|
||||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
// crossAxisAlignment.stretch - the bottomNavigationBar slot
|
||||||
|
// gives this widget a *loose* (unbounded-max) height
|
||||||
|
// constraint, and stretch on an unbounded cross axis blows up
|
||||||
|
// to fill the screen in profile/release (the assertion that
|
||||||
|
// would catch it in debug is stripped there) - the same
|
||||||
|
// silent-oversizing bug files_controls_row.dart hit earlier
|
||||||
|
// from a different cause. Both children already size
|
||||||
|
// themselves explicitly (pill's own `height`, the
|
||||||
|
// satellite's `size`), so stretch was never actually needed.
|
||||||
|
? SizedBox(
|
||||||
|
height: barHeight,
|
||||||
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
Expanded(child: pill),
|
Expanded(child: pill),
|
||||||
const SizedBox(width: 8),
|
const SizedBox(width: 8),
|
||||||
@@ -112,6 +123,7 @@ class NooBottomBar extends StatelessWidget {
|
|||||||
size: barHeight,
|
size: barHeight,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
),
|
||||||
)
|
)
|
||||||
: pill,
|
: pill,
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -303,5 +303,39 @@ void main() {
|
|||||||
await tester.pump();
|
await tester.pump();
|
||||||
expect(searchTaps, 1);
|
expect(searchTaps, 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
testWidgets('floating with search sizes correctly in a real Scaffold '
|
||||||
|
'(regression: unbounded stretch used to fill the whole screen)', (
|
||||||
|
tester,
|
||||||
|
) async {
|
||||||
|
// A bare SizedBox host (as the other tests use) gives this widget a
|
||||||
|
// bounded height, masking this exact bug - Scaffold.bottomNavigationBar
|
||||||
|
// gives its child a *loose*, unbounded-max height instead, which is
|
||||||
|
// what a Row with crossAxisAlignment.stretch blows up against in
|
||||||
|
// profile/release (the debug assertion that would catch it is
|
||||||
|
// stripped there). Only a real Scaffold reproduces that.
|
||||||
|
await tester.pumpWidget(
|
||||||
|
MaterialApp(
|
||||||
|
theme: nooTheme(Brightness.light),
|
||||||
|
home: Scaffold(
|
||||||
|
body: const SizedBox.expand(),
|
||||||
|
bottomNavigationBar: NooBottomBar(
|
||||||
|
style: NooNavStyle.android,
|
||||||
|
barStyle: NooBottomBarStyle.floating,
|
||||||
|
destinations: _destinations,
|
||||||
|
selectedIndex: 0,
|
||||||
|
onSelected: (_) {},
|
||||||
|
searchDestination: const NooNavDestination(
|
||||||
|
icon: LucideIcons.search,
|
||||||
|
label: 'Search',
|
||||||
|
),
|
||||||
|
onSearchTap: () {},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
final size = tester.getSize(find.byType(NooBottomBar));
|
||||||
|
expect(size.height, lessThan(150));
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user