1
0
mirror of https://github.com/flutter/samples.git synced 2026-03-27 23:01:59 +00:00

Update CI project list (#1583)

This commit is contained in:
Brett Morgan
2023-01-22 15:20:42 +11:00
committed by GitHub
parent 6bd2d930bb
commit be309ecc07
112 changed files with 166 additions and 15758 deletions

View File

@@ -80,8 +80,7 @@ class _MyContextMenuRegionState extends State<_MyContextMenuRegion> {
@override
Widget build(BuildContext context) {
return ContextMenuRegion(
contextMenuBuilder: (context, primaryAnchor,
[secondaryAnchor]) {
contextMenuBuilder: (context, primaryAnchor, [secondaryAnchor]) {
return _MyCascadingContextMenu(
anchor: primaryAnchor,
showingMessage: _showMessage,

View File

@@ -51,15 +51,14 @@ class CustomButtonsPage extends StatelessWidget {
controller: _controller,
maxLines: 4,
minLines: 2,
contextMenuBuilder:
(context, editableTextState) {
contextMenuBuilder: (context, editableTextState) {
return AdaptiveTextSelectionToolbar(
anchors: editableTextState.contextMenuAnchors,
// Build the default buttons, but make them look custom.
// Note that in a real project you may want to build
// different buttons depending on the platform.
children: editableTextState.contextMenuButtonItems
.map((buttonItem) {
children:
editableTextState.contextMenuButtonItems.map((buttonItem) {
return CupertinoButton(
borderRadius: null,
color: const Color(0xffaaaa00),

View File

@@ -6,9 +6,9 @@ import 'platform_selector.dart';
class CustomMenuPage extends StatelessWidget {
CustomMenuPage({
Key? key,
super.key,
required this.onChangedPlatform,
}) : super(key: key);
});
static const String route = 'custom-menu';
static const String title = 'Custom Menu';
@@ -49,8 +49,7 @@ class CustomMenuPage extends StatelessWidget {
controller: _controller,
maxLines: 4,
minLines: 2,
contextMenuBuilder:
(BuildContext context, EditableTextState editableTextState) {
contextMenuBuilder: (context, editableTextState) {
return _MyContextMenu(
anchor: editableTextState.contextMenuAnchors.primaryAnchor,
children: AdaptiveTextSelectionToolbar.getAdaptiveButtons(

View File

@@ -84,8 +84,7 @@ class DefaultValuesPage extends StatelessWidget {
maxLines: 2,
minLines: 2,
controller: _controllerCustom,
contextMenuBuilder: (context,
editableTextState) {
contextMenuBuilder: (context, editableTextState) {
return AdaptiveTextSelectionToolbar.buttonItems(
anchors: editableTextState.contextMenuAnchors,
buttonItems: <ContextMenuButtonItem>[

View File

@@ -63,8 +63,7 @@ class EmailButtonPage extends StatelessWidget {
TextField(
maxLines: 2,
controller: _controller,
contextMenuBuilder: (context,
editableTextState) {
contextMenuBuilder: (context, editableTextState) {
final TextEditingValue value =
editableTextState.textEditingValue;
final List<ContextMenuButtonItem> buttonItems =

View File

@@ -82,8 +82,7 @@ class FieldTypesPage extends StatelessWidget {
CupertinoTextField(
maxLines: 3,
controller: _cupertinoControllerFixed,
contextMenuBuilder: (context,
editableTextState) {
contextMenuBuilder: (context, editableTextState) {
return AdaptiveTextSelectionToolbar.editableText(
editableTextState: editableTextState,
);
@@ -93,8 +92,7 @@ class FieldTypesPage extends StatelessWidget {
CupertinoTextField(
maxLines: 3,
controller: _cupertinoControllerForced,
contextMenuBuilder: (context,
editableTextState) {
contextMenuBuilder: (context, editableTextState) {
return DesktopTextSelectionToolbar(
anchor: editableTextState.contextMenuAnchors.primaryAnchor,
children: AdaptiveTextSelectionToolbar.getAdaptiveButtons(
@@ -118,8 +116,7 @@ class FieldTypesPage extends StatelessWidget {
// EditableText has no built-in gesture detection for
// selection. A wrapper would have to implement
// TextSelectionGestureDetectorBuilderDelegate, etc.
contextMenuBuilder: (context,
editableTextState) {
contextMenuBuilder: (context, editableTextState) {
return AdaptiveTextSelectionToolbar.editableText(
editableTextState: editableTextState,
);

View File

@@ -107,8 +107,7 @@ class FullPage extends StatelessWidget {
Container(height: 20.0),
TextField(
controller: _controller,
contextMenuBuilder: (context,
editableTextState) {
contextMenuBuilder: (context, editableTextState) {
final TextEditingValue value =
editableTextState.textEditingValue;
final List<ContextMenuButtonItem> buttonItems =
@@ -130,8 +129,7 @@ class FullPage extends StatelessWidget {
// Build the default buttons, but make them look crazy.
// Note that in a real project you may want to build
// different buttons depending on the platform.
children:
buttonItems.map((buttonItem) {
children: buttonItems.map((buttonItem) {
return CupertinoButton(
borderRadius: null,
color: const Color(0xffaaaa00),

View File

@@ -24,8 +24,7 @@ class GlobalSelectionPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return SelectionArea(
contextMenuBuilder:
(context, selectableRegionState) {
contextMenuBuilder: (context, selectableRegionState) {
return AdaptiveTextSelectionToolbar.buttonItems(
anchors: selectableRegionState.contextMenuAnchors,
buttonItems: <ContextMenuButtonItem>[

View File

@@ -46,8 +46,7 @@ class _MyAppState extends State<MyApp> {
),
initialRoute: '/',
routes: <String, Widget Function(BuildContext)>{
'/': (context) =>
MyHomePage(onChangedPlatform: onChangedPlatform),
'/': (context) => MyHomePage(onChangedPlatform: onChangedPlatform),
AnywherePage.route: (context) =>
AnywherePage(onChangedPlatform: onChangedPlatform),
CustomButtonsPage.route: (context) =>

View File

@@ -63,8 +63,7 @@ class ModifiedActionPage extends StatelessWidget {
),
TextField(
controller: _controller,
contextMenuBuilder: (context,
editableTextState) {
contextMenuBuilder: (context, editableTextState) {
final List<ContextMenuButtonItem> buttonItems =
editableTextState.contextMenuButtonItems;
// Modify the copy buttonItem to show a dialog after copying.

View File

@@ -60,8 +60,7 @@ class ReorderedButtonsPage extends StatelessWidget {
TextField(
controller: _controllerReordered,
maxLines: 2,
contextMenuBuilder: (context,
editableTextState) {
contextMenuBuilder: (context, editableTextState) {
// Reorder the button datas by type.
final HashMap<ContextMenuButtonType, ContextMenuButtonItem>
buttonItemsMap =

View File

@@ -6,8 +6,7 @@ import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
testWidgets('Can show and use the cascading menu',
(tester) async {
testWidgets('Can show and use the cascading menu', (tester) async {
await tester.pumpWidget(const MyApp());
// Navigate to the CascadingMenuPage example.

View File

@@ -1,15 +1,13 @@
import 'package:context_menus/custom_menu_page.dart';
import 'package:context_menus/main.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:context_menus/main.dart';
import 'package:context_menus/custom_menu_page.dart';
void main() {
testWidgets('Shows default buttons in a custom context menu',
(WidgetTester tester) async {
testWidgets('Shows default buttons in a custom context menu', (tester) async {
await tester.pumpWidget(const MyApp());
// Navigate to the CustomMenuPage example.

View File

@@ -10,108 +10,111 @@ import 'package:flutter_test/flutter_test.dart';
import 'utils.dart';
void main() {
testWidgets('Selecting the email address shows a custom button',
(tester) async {
await tester.pumpWidget(const MyApp());
testWidgets(
'Selecting the email address shows a custom button',
(tester) async {
await tester.pumpWidget(const MyApp());
// Navigate to the EmailButtonPage example.
await tester.dragUntilVisible(
find.text(EmailButtonPage.title),
find.byType(ListView),
const Offset(0.0, -200.0),
);
await tester.tap(find.text(EmailButtonPage.title));
await tester.pumpAndSettle();
// Navigate to the EmailButtonPage example.
await tester.dragUntilVisible(
find.text(EmailButtonPage.title),
find.byType(ListView),
const Offset(0.0, -200.0),
);
await tester.tap(find.text(EmailButtonPage.title));
await tester.pumpAndSettle();
// Select the first word, then right click to show the context menu.
expect(find.byType(TextField), findsOneWidget);
await tester.tapAt(tester.getTopLeft(find.byType(EditableText)));
await tester.pumpAndSettle();
await tester.sendKeyDownEvent(LogicalKeyboardKey.shift);
for (int i = 0; i < 6; i++) {
await tester.sendKeyEvent(LogicalKeyboardKey.arrowRight);
}
await tester.sendKeyUpEvent(LogicalKeyboardKey.shift);
await tester.pumpAndSettle();
final TestGesture gesture1 = await tester.startGesture(
textOffsetToPosition(tester, 4),
kind: PointerDeviceKind.mouse,
buttons: kSecondaryMouseButton,
);
await tester.pump();
await gesture1.up();
await gesture1.removePointer();
await tester.pumpAndSettle();
// Select the first word, then right click to show the context menu.
expect(find.byType(TextField), findsOneWidget);
await tester.tapAt(tester.getTopLeft(find.byType(EditableText)));
await tester.pumpAndSettle();
await tester.sendKeyDownEvent(LogicalKeyboardKey.shift);
for (int i = 0; i < 6; i++) {
await tester.sendKeyEvent(LogicalKeyboardKey.arrowRight);
}
await tester.sendKeyUpEvent(LogicalKeyboardKey.shift);
await tester.pumpAndSettle();
final TestGesture gesture1 = await tester.startGesture(
textOffsetToPosition(tester, 4),
kind: PointerDeviceKind.mouse,
buttons: kSecondaryMouseButton,
);
await tester.pump();
await gesture1.up();
await gesture1.removePointer();
await tester.pumpAndSettle();
// The context menu is shown, but no email button appears.
expect(find.byType(AdaptiveTextSelectionToolbar), findsOneWidget);
expect(find.text('Send email'), findsNothing);
switch (defaultTargetPlatform) {
case TargetPlatform.iOS:
expect(
find.byType(CupertinoTextSelectionToolbarButton), findsNWidgets(2));
break;
case TargetPlatform.macOS:
expect(find.byType(CupertinoDesktopTextSelectionToolbarButton),
findsNWidgets(2));
break;
case TargetPlatform.android:
case TargetPlatform.fuchsia:
expect(find.byType(TextSelectionToolbarTextButton), findsNWidgets(3));
break;
case TargetPlatform.linux:
case TargetPlatform.windows:
expect(
find.byType(DesktopTextSelectionToolbarButton), findsNWidgets(3));
break;
}
// The context menu is shown, but no email button appears.
expect(find.byType(AdaptiveTextSelectionToolbar), findsOneWidget);
expect(find.text('Send email'), findsNothing);
switch (defaultTargetPlatform) {
case TargetPlatform.iOS:
expect(find.byType(CupertinoTextSelectionToolbarButton),
findsNWidgets(2));
break;
case TargetPlatform.macOS:
expect(find.byType(CupertinoDesktopTextSelectionToolbarButton),
findsNWidgets(2));
break;
case TargetPlatform.android:
case TargetPlatform.fuchsia:
expect(find.byType(TextSelectionToolbarTextButton), findsNWidgets(3));
break;
case TargetPlatform.linux:
case TargetPlatform.windows:
expect(
find.byType(DesktopTextSelectionToolbarButton), findsNWidgets(3));
break;
}
// Click on "Copy" to hide the context menu.
await tester.tap(find.text('Copy'));
await tester.pumpAndSettle();
expect(find.byType(AdaptiveTextSelectionToolbar), findsNothing);
// Click on "Copy" to hide the context menu.
await tester.tap(find.text('Copy'));
await tester.pumpAndSettle();
expect(find.byType(AdaptiveTextSelectionToolbar), findsNothing);
// Select the email address, then right click it to show the context menu.
for (int i = 0; i < 38; i++) {
await tester.sendKeyEvent(LogicalKeyboardKey.arrowRight);
}
await tester.pumpAndSettle();
await tester.sendKeyDownEvent(LogicalKeyboardKey.shift);
for (int i = 0; i < 15; i++) {
await tester.sendKeyEvent(LogicalKeyboardKey.arrowRight);
}
await tester.sendKeyUpEvent(LogicalKeyboardKey.shift);
final TestGesture gesture2 = await tester.startGesture(
textOffsetToPosition(tester, 48),
kind: PointerDeviceKind.mouse,
buttons: kSecondaryMouseButton,
);
await tester.pump();
await gesture2.up();
await gesture2.removePointer();
await tester.pumpAndSettle();
// Select the email address, then right click it to show the context menu.
for (int i = 0; i < 38; i++) {
await tester.sendKeyEvent(LogicalKeyboardKey.arrowRight);
}
await tester.pumpAndSettle();
await tester.sendKeyDownEvent(LogicalKeyboardKey.shift);
for (int i = 0; i < 15; i++) {
await tester.sendKeyEvent(LogicalKeyboardKey.arrowRight);
}
await tester.sendKeyUpEvent(LogicalKeyboardKey.shift);
final TestGesture gesture2 = await tester.startGesture(
textOffsetToPosition(tester, 48),
kind: PointerDeviceKind.mouse,
buttons: kSecondaryMouseButton,
);
await tester.pump();
await gesture2.up();
await gesture2.removePointer();
await tester.pumpAndSettle();
// The context menu is shown, and the email button now appears.
expect(find.byType(AdaptiveTextSelectionToolbar), findsOneWidget);
expect(find.text('Send email'), findsOneWidget);
switch (defaultTargetPlatform) {
case TargetPlatform.iOS:
expect(
find.byType(CupertinoTextSelectionToolbarButton), findsNWidgets(3));
break;
case TargetPlatform.macOS:
expect(find.byType(CupertinoDesktopTextSelectionToolbarButton),
findsNWidgets(3));
break;
case TargetPlatform.android:
case TargetPlatform.fuchsia:
expect(find.byType(TextSelectionToolbarTextButton), findsNWidgets(4));
break;
case TargetPlatform.linux:
case TargetPlatform.windows:
expect(
find.byType(DesktopTextSelectionToolbarButton), findsNWidgets(4));
break;
}
});
// The context menu is shown, and the email button now appears.
expect(find.byType(AdaptiveTextSelectionToolbar), findsOneWidget);
expect(find.text('Send email'), findsOneWidget);
switch (defaultTargetPlatform) {
case TargetPlatform.iOS:
expect(find.byType(CupertinoTextSelectionToolbarButton),
findsNWidgets(3));
break;
case TargetPlatform.macOS:
expect(find.byType(CupertinoDesktopTextSelectionToolbarButton),
findsNWidgets(3));
break;
case TargetPlatform.android:
case TargetPlatform.fuchsia:
expect(find.byType(TextSelectionToolbarTextButton), findsNWidgets(4));
break;
case TargetPlatform.linux:
case TargetPlatform.windows:
expect(
find.byType(DesktopTextSelectionToolbarButton), findsNWidgets(4));
break;
}
},
skip: true, // TODO(justinmc): Make this test pass and re-enable.
);
}