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:
@@ -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,
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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>[
|
||||
|
||||
@@ -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 =
|
||||
|
||||
@@ -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,
|
||||
);
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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>[
|
||||
|
||||
@@ -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) =>
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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 =
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user