forked from flutter/plugins
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update
PopupRoute
docs and add an example (#106948)
- Loading branch information
1 parent
a8d0479
commit 66cd09d
Showing
5 changed files
with
178 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
// 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 PopupRoute | ||
|
||
import 'package:flutter/material.dart'; | ||
|
||
void main() => runApp(const PopupRouteApp()); | ||
|
||
class PopupRouteApp extends StatelessWidget { | ||
const PopupRouteApp({super.key}); | ||
|
||
@override | ||
Widget build(BuildContext context) { | ||
return const MaterialApp( | ||
home: PopupRouteExample(), | ||
); | ||
} | ||
} | ||
|
||
class PopupRouteExample extends StatelessWidget { | ||
const PopupRouteExample({super.key}); | ||
|
||
@override | ||
Widget build(BuildContext context) { | ||
return Scaffold( | ||
body: Center( | ||
child: OutlinedButton( | ||
onPressed: () { | ||
/// This shows a dismissible dialog. | ||
Navigator.of(context).push(DismissibleDialog<void>()); | ||
}, | ||
child: const Text('Open DismissibleDialog'), | ||
), | ||
), | ||
); | ||
} | ||
} | ||
|
||
class DismissibleDialog<T> extends PopupRoute<T> { | ||
@override | ||
Color? get barrierColor => Colors.black.withAlpha(0x50); | ||
|
||
/// This allows the popup to be dismissed by tapping the scrim or by | ||
/// pressing escape key on the keyboard. | ||
@override | ||
bool get barrierDismissible => true; | ||
|
||
@override | ||
String? get barrierLabel => 'Dismissible Dialog'; | ||
|
||
@override | ||
Duration get transitionDuration => const Duration(milliseconds: 300); | ||
|
||
@override | ||
Widget buildPage(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation) { | ||
return Center( | ||
/// Provide DefaultTextStyle to ensure that the dialog's text style matches | ||
/// the rest of the text in the app. | ||
child: DefaultTextStyle( | ||
style: Theme.of(context).textTheme.bodyMedium!, | ||
/// `UnconstrainedBox` is used to make the dialog size itself | ||
/// to fit to the size of the content. | ||
child: UnconstrainedBox( | ||
child: Container( | ||
padding: const EdgeInsets.all(20.0), | ||
decoration: BoxDecoration( | ||
borderRadius: BorderRadius.circular(10), | ||
color: Colors.white, | ||
), | ||
child: Column( | ||
children: <Widget>[ | ||
Text('Dismissible Dialog', style: Theme.of(context).textTheme.headlineSmall), | ||
const SizedBox(height: 20), | ||
const Text('Tap in the scrim or press escape key to dismiss.'), | ||
], | ||
), | ||
), | ||
), | ||
), | ||
); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
// 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/services.dart'; | ||
import 'package:flutter_api_samples/widgets/routes/popup_route.0.dart' as example; | ||
import 'package:flutter_test/flutter_test.dart'; | ||
|
||
void main() { | ||
testWidgets('Dismiss dialog with tap on the scrim and escape key', (WidgetTester tester) async { | ||
const String dialogText = 'Tap in the scrim or press escape key to dismiss.'; | ||
|
||
await tester.pumpWidget( | ||
const example.PopupRouteApp(), | ||
); | ||
|
||
expect(find.text(dialogText), findsNothing); | ||
|
||
// Tap on the button to show the dialog. | ||
await tester.tap(find.byType(OutlinedButton)); | ||
await tester.pumpAndSettle(); | ||
expect(find.text(dialogText), findsOneWidget); | ||
|
||
// Try to dismiss the dialog with a tap on the scrim. | ||
await tester.tapAt(const Offset(10.0, 10.0)); | ||
await tester.pumpAndSettle(); | ||
expect(find.text(dialogText), findsNothing); | ||
|
||
// Open the dialog again. | ||
await tester.tap(find.byType(OutlinedButton)); | ||
await tester.pumpAndSettle(); | ||
expect(find.text(dialogText), findsOneWidget); | ||
|
||
// Try to dismiss the dialog with the escape key. | ||
await tester.sendKeyEvent(LogicalKeyboardKey.escape); | ||
await tester.pumpAndSettle(); | ||
expect(find.text(dialogText), findsNothing); | ||
}); | ||
} |
29 changes: 29 additions & 0 deletions
29
examples/api/test/widgets/routes/show_general_dialog.0_test.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
// 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/widgets/routes/show_general_dialog.0.dart' as example; | ||
import 'package:flutter_test/flutter_test.dart'; | ||
|
||
void main() { | ||
testWidgets('Open and dismiss general dialog', (WidgetTester tester) async { | ||
const String dialogText = 'Alert!'; | ||
|
||
await tester.pumpWidget( | ||
const example.GeneralDialogApp(), | ||
); | ||
|
||
expect(find.text(dialogText), findsNothing); | ||
|
||
// Tap on the button to show the dialog. | ||
await tester.tap(find.byType(OutlinedButton)); | ||
await tester.pumpAndSettle(); | ||
expect(find.text(dialogText), findsOneWidget); | ||
|
||
// Try to dismiss the dialog with a tap on the scrim. | ||
await tester.tapAt(const Offset(10.0, 10.0)); | ||
await tester.pumpAndSettle(); | ||
expect(find.text(dialogText), findsNothing); | ||
}); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters