mirror of
https://github.com/flutter/packages.git
synced 2025-06-28 22:02:38 +08:00
[animations] Exposed clipBehavior for Opencontainer (#241)
This commit is contained in:

committed by
GitHub

parent
fda7ed4703
commit
9c38ae4ef6
1
AUTHORS
1
AUTHORS
@ -5,3 +5,4 @@
|
|||||||
|
|
||||||
Google Inc.
|
Google Inc.
|
||||||
Britannio Jarrett <britanniojarrett@gmail.com>
|
Britannio Jarrett <britanniojarrett@gmail.com>
|
||||||
|
Sarbagya Dhaubanjar <mail@sarbagyastha.com.np>
|
@ -98,6 +98,7 @@ class OpenContainer<T extends Object?> extends StatefulWidget {
|
|||||||
this.transitionType = ContainerTransitionType.fade,
|
this.transitionType = ContainerTransitionType.fade,
|
||||||
this.useRootNavigator = false,
|
this.useRootNavigator = false,
|
||||||
this.routeSettings,
|
this.routeSettings,
|
||||||
|
this.clipBehavior = Clip.antiAlias,
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
|
|
||||||
/// Background color of the container while it is closed.
|
/// Background color of the container while it is closed.
|
||||||
@ -250,6 +251,15 @@ class OpenContainer<T extends Object?> extends StatefulWidget {
|
|||||||
/// Provides additional data to the [openBuilder] route pushed by the Navigator.
|
/// Provides additional data to the [openBuilder] route pushed by the Navigator.
|
||||||
final RouteSettings? routeSettings;
|
final RouteSettings? routeSettings;
|
||||||
|
|
||||||
|
/// The [closedBuilder] will be clipped (or not) according to this option.
|
||||||
|
///
|
||||||
|
/// Defaults to [Clip.antiAlias], and must not be null.
|
||||||
|
///
|
||||||
|
/// See also:
|
||||||
|
///
|
||||||
|
/// * [Material.clipBehavior], which is used to implement this property.
|
||||||
|
final Clip clipBehavior;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
_OpenContainerState<T> createState() => _OpenContainerState<T>();
|
_OpenContainerState<T> createState() => _OpenContainerState<T>();
|
||||||
}
|
}
|
||||||
@ -302,7 +312,7 @@ class _OpenContainerState<T> extends State<OpenContainer<T?>> {
|
|||||||
child: GestureDetector(
|
child: GestureDetector(
|
||||||
onTap: widget.tappable ? openContainer : null,
|
onTap: widget.tappable ? openContainer : null,
|
||||||
child: Material(
|
child: Material(
|
||||||
clipBehavior: Clip.antiAlias,
|
clipBehavior: widget.clipBehavior,
|
||||||
color: widget.closedColor,
|
color: widget.closedColor,
|
||||||
elevation: widget.closedElevation,
|
elevation: widget.closedElevation,
|
||||||
shape: widget.closedShape,
|
shape: widget.closedShape,
|
||||||
|
@ -1572,6 +1572,62 @@ void main() {
|
|||||||
expect(value, isTrue);
|
expect(value, isTrue);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
testWidgets('closedBuilder has anti-alias clip by default',
|
||||||
|
(WidgetTester tester) async {
|
||||||
|
final GlobalKey closedBuilderKey = GlobalKey();
|
||||||
|
final Widget openContainer = OpenContainer(
|
||||||
|
closedBuilder: (BuildContext context, VoidCallback action) {
|
||||||
|
return Text('Close', key: closedBuilderKey);
|
||||||
|
},
|
||||||
|
openBuilder:
|
||||||
|
(BuildContext context, CloseContainerActionCallback<bool> action) {
|
||||||
|
return const Text('Open');
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
await tester.pumpWidget(
|
||||||
|
_boilerplate(child: openContainer),
|
||||||
|
);
|
||||||
|
|
||||||
|
final Finder closedBuilderMaterial = find
|
||||||
|
.ancestor(
|
||||||
|
of: find.byKey(closedBuilderKey),
|
||||||
|
matching: find.byType(Material),
|
||||||
|
)
|
||||||
|
.first;
|
||||||
|
|
||||||
|
final Material material = tester.widget<Material>(closedBuilderMaterial);
|
||||||
|
expect(material.clipBehavior, Clip.antiAlias);
|
||||||
|
});
|
||||||
|
|
||||||
|
testWidgets('closedBuilder has no clip', (WidgetTester tester) async {
|
||||||
|
final GlobalKey closedBuilderKey = GlobalKey();
|
||||||
|
final Widget openContainer = OpenContainer(
|
||||||
|
closedBuilder: (BuildContext context, VoidCallback action) {
|
||||||
|
return Text('Close', key: closedBuilderKey);
|
||||||
|
},
|
||||||
|
openBuilder:
|
||||||
|
(BuildContext context, CloseContainerActionCallback<bool> action) {
|
||||||
|
return const Text('Open');
|
||||||
|
},
|
||||||
|
clipBehavior: Clip.none,
|
||||||
|
);
|
||||||
|
|
||||||
|
await tester.pumpWidget(
|
||||||
|
_boilerplate(child: openContainer),
|
||||||
|
);
|
||||||
|
|
||||||
|
final Finder closedBuilderMaterial = find
|
||||||
|
.ancestor(
|
||||||
|
of: find.byKey(closedBuilderKey),
|
||||||
|
matching: find.byType(Material),
|
||||||
|
)
|
||||||
|
.first;
|
||||||
|
|
||||||
|
final Material material = tester.widget<Material>(closedBuilderMaterial);
|
||||||
|
expect(material.clipBehavior, Clip.none);
|
||||||
|
});
|
||||||
|
|
||||||
Widget _createRootNavigatorTest({
|
Widget _createRootNavigatorTest({
|
||||||
required Key appKey,
|
required Key appKey,
|
||||||
required Key nestedNavigatorKey,
|
required Key nestedNavigatorKey,
|
||||||
|
Reference in New Issue
Block a user