SelectableRegion does not merge child semantics nodes (#104659)
This commit is contained in:
parent
3e7e01c893
commit
6a88c221d5
@ -780,6 +780,7 @@ class _SelectableRegionState extends State<SelectableRegion> with TextSelectionD
|
|||||||
child: Actions(
|
child: Actions(
|
||||||
actions: _actions,
|
actions: _actions,
|
||||||
child: Focus(
|
child: Focus(
|
||||||
|
includeSemantics: false,
|
||||||
focusNode: widget.focusNode,
|
focusNode: widget.focusNode,
|
||||||
child: SelectionContainer(
|
child: SelectionContainer(
|
||||||
registrar: this,
|
registrar: this,
|
||||||
|
@ -10,6 +10,7 @@ import 'package:flutter/services.dart';
|
|||||||
import 'package:flutter_test/flutter_test.dart';
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
|
||||||
import '../widgets/clipboard_utils.dart';
|
import '../widgets/clipboard_utils.dart';
|
||||||
|
import 'semantics_tester.dart';
|
||||||
|
|
||||||
Offset textOffsetToPosition(RenderParagraph paragraph, int offset) {
|
Offset textOffsetToPosition(RenderParagraph paragraph, int offset) {
|
||||||
const Rect caret = Rect.fromLTWH(0.0, 0.0, 2.0, 20.0);
|
const Rect caret = Rect.fromLTWH(0.0, 0.0, 2.0, 20.0);
|
||||||
@ -34,7 +35,7 @@ void main() {
|
|||||||
TestDefaultBinaryMessengerBinding.instance!.defaultBinaryMessenger.setMockMethodCallHandler(SystemChannels.platform, null);
|
TestDefaultBinaryMessengerBinding.instance!.defaultBinaryMessenger.setMockMethodCallHandler(SystemChannels.platform, null);
|
||||||
});
|
});
|
||||||
|
|
||||||
group('SelectionArea', () {
|
group('SelectableRegion', () {
|
||||||
testWidgets('mouse selection sends correct events', (WidgetTester tester) async {
|
testWidgets('mouse selection sends correct events', (WidgetTester tester) async {
|
||||||
final UniqueKey spy = UniqueKey();
|
final UniqueKey spy = UniqueKey();
|
||||||
await tester.pumpWidget(
|
await tester.pumpWidget(
|
||||||
@ -94,6 +95,81 @@ void main() {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
testWidgets('does not merge semantics node of the children', (WidgetTester tester) async {
|
||||||
|
final SemanticsTester semantics = SemanticsTester(tester);
|
||||||
|
await tester.pumpWidget(
|
||||||
|
MaterialApp(
|
||||||
|
home: SelectableRegion(
|
||||||
|
focusNode: FocusNode(),
|
||||||
|
selectionControls: materialTextSelectionControls,
|
||||||
|
child: Scaffold(
|
||||||
|
body: Center(
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: <Widget>[
|
||||||
|
const Text('Line one'),
|
||||||
|
const Text('Line two'),
|
||||||
|
ElevatedButton(
|
||||||
|
onPressed: () {},
|
||||||
|
child: const Text('Button'),
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(
|
||||||
|
semantics,
|
||||||
|
hasSemantics(
|
||||||
|
TestSemantics.root(
|
||||||
|
children: <TestSemantics>[
|
||||||
|
TestSemantics(
|
||||||
|
textDirection: TextDirection.ltr,
|
||||||
|
children: <TestSemantics>[
|
||||||
|
TestSemantics(
|
||||||
|
children: <TestSemantics>[
|
||||||
|
TestSemantics(
|
||||||
|
flags: <SemanticsFlag>[SemanticsFlag.scopesRoute],
|
||||||
|
children: <TestSemantics>[
|
||||||
|
TestSemantics(
|
||||||
|
label: 'Line one',
|
||||||
|
textDirection: TextDirection.ltr,
|
||||||
|
),
|
||||||
|
TestSemantics(
|
||||||
|
label: 'Line two',
|
||||||
|
textDirection: TextDirection.ltr,
|
||||||
|
),
|
||||||
|
TestSemantics(
|
||||||
|
flags: <SemanticsFlag>[
|
||||||
|
SemanticsFlag.isButton,
|
||||||
|
SemanticsFlag.hasEnabledState,
|
||||||
|
SemanticsFlag.isEnabled,
|
||||||
|
SemanticsFlag.isFocusable
|
||||||
|
],
|
||||||
|
actions: <SemanticsAction>[SemanticsAction.tap],
|
||||||
|
label: 'Button',
|
||||||
|
textDirection: TextDirection.ltr,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
ignoreRect: true,
|
||||||
|
ignoreTransform: true,
|
||||||
|
ignoreId: true,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
semantics.dispose();
|
||||||
|
});
|
||||||
|
|
||||||
testWidgets('mouse selection always cancels previous selection', (WidgetTester tester) async {
|
testWidgets('mouse selection always cancels previous selection', (WidgetTester tester) async {
|
||||||
final UniqueKey spy = UniqueKey();
|
final UniqueKey spy = UniqueKey();
|
||||||
await tester.pumpWidget(
|
await tester.pumpWidget(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user