mirror of
https://github.com/flutter/flutter
synced 2024-10-13 03:32:55 +00:00
Add shape
property to SliverAppBar (#31662)
This commit is contained in:
parent
017997b9c1
commit
28b58db1f2
|
@ -681,6 +681,7 @@ class _SliverAppBarDelegate extends SliverPersistentHeaderDelegate {
|
|||
@required this.floating,
|
||||
@required this.pinned,
|
||||
@required this.snapConfiguration,
|
||||
@required this.shape,
|
||||
}) : assert(primary || topPadding == 0.0),
|
||||
_bottomHeight = bottom?.preferredSize?.height ?? 0.0;
|
||||
|
||||
|
@ -705,6 +706,7 @@ class _SliverAppBarDelegate extends SliverPersistentHeaderDelegate {
|
|||
final double topPadding;
|
||||
final bool floating;
|
||||
final bool pinned;
|
||||
final ShapeBorder shape;
|
||||
|
||||
final double _bottomHeight;
|
||||
|
||||
|
@ -759,6 +761,7 @@ class _SliverAppBarDelegate extends SliverPersistentHeaderDelegate {
|
|||
primary: primary,
|
||||
centerTitle: centerTitle,
|
||||
titleSpacing: titleSpacing,
|
||||
shape: shape,
|
||||
toolbarOpacity: toolbarOpacity,
|
||||
bottomOpacity: pinned ? 1.0 : (visibleMainHeight / _bottomHeight).clamp(0.0, 1.0),
|
||||
),
|
||||
|
@ -902,6 +905,7 @@ class SliverAppBar extends StatefulWidget {
|
|||
this.floating = false,
|
||||
this.pinned = false,
|
||||
this.snap = false,
|
||||
this.shape,
|
||||
}) : assert(automaticallyImplyLeading != null),
|
||||
assert(forceElevated != null),
|
||||
assert(primary != null),
|
||||
|
@ -1062,6 +1066,12 @@ class SliverAppBar extends StatefulWidget {
|
|||
/// Defaults to [NavigationToolbar.kMiddleSpacing].
|
||||
final double titleSpacing;
|
||||
|
||||
/// The material's shape as well its shadow.
|
||||
///
|
||||
/// A shadow is only displayed if the [elevation] is greater than
|
||||
/// zero.
|
||||
final ShapeBorder shape;
|
||||
|
||||
/// The size of the app bar when it is fully expanded.
|
||||
///
|
||||
/// By default, the total height of the toolbar and the bottom widget (if
|
||||
|
@ -1215,6 +1225,7 @@ class _SliverAppBarState extends State<SliverAppBar> with TickerProviderStateMix
|
|||
topPadding: topPadding,
|
||||
floating: widget.floating,
|
||||
pinned: widget.pinned,
|
||||
shape: widget.shape,
|
||||
snapConfiguration: _snapConfiguration,
|
||||
),
|
||||
),
|
||||
|
|
|
@ -1514,4 +1514,39 @@ void main() {
|
|||
|
||||
expect(getMaterialWidget().shape, roundedRectangleBorder);
|
||||
});
|
||||
|
||||
testWidgets('SliverAppBar with shape', (WidgetTester tester) async {
|
||||
const RoundedRectangleBorder roundedRectangleBorder = RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.all(Radius.circular(15.0)),
|
||||
);
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
home: CustomScrollView(
|
||||
slivers: const <Widget>[
|
||||
SliverAppBar(
|
||||
leading: Text('L'),
|
||||
title: Text('No Scaffold'),
|
||||
shape: roundedRectangleBorder,
|
||||
actions: <Widget>[Text('A1'), Text('A2')],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
final Finder sliverAppBarFinder = find.byType(SliverAppBar);
|
||||
|
||||
SliverAppBar getAppBarWidget() {
|
||||
return tester.widget<SliverAppBar>(sliverAppBarFinder);
|
||||
}
|
||||
|
||||
expect(getAppBarWidget().shape, roundedRectangleBorder);
|
||||
|
||||
final Finder materialFinder = find.byType(Material);
|
||||
Material getMaterialWidget() {
|
||||
return tester.widget<Material>(materialFinder);
|
||||
}
|
||||
|
||||
expect(getMaterialWidget().shape, roundedRectangleBorder);
|
||||
});
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue