189 lines
5.0 KiB
Dart
189 lines
5.0 KiB
Dart
// 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 'dart:ui';
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
|
|
void main() {
|
|
testWidgets('TapRegionSurface detects outside taps', (WidgetTester tester) async {
|
|
final Set<String> clickedOutside = <String>{};
|
|
await tester.pumpWidget(
|
|
Directionality(
|
|
textDirection: TextDirection.ltr,
|
|
child: Column(
|
|
children: <Widget>[
|
|
const Text('Outside Surface'),
|
|
TapRegionSurface(
|
|
child: Row(
|
|
children: <Widget>[
|
|
const Text('Outside'),
|
|
TapRegion(
|
|
onTapOutside: (PointerEvent event) {
|
|
clickedOutside.add('No Group');
|
|
},
|
|
child: const Text('No Group'),
|
|
),
|
|
TapRegion(
|
|
groupId: 1,
|
|
onTapOutside: (PointerEvent event) {
|
|
clickedOutside.add('Group 1 A');
|
|
},
|
|
child: const Text('Group 1 A'),
|
|
),
|
|
TapRegion(
|
|
groupId: 1,
|
|
onTapOutside: (PointerEvent event) {
|
|
clickedOutside.add('Group 1 B');
|
|
},
|
|
child: const Text('Group 1 B'),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
|
|
await tester.pump();
|
|
|
|
Future<void> click(Finder finder) async {
|
|
final TestGesture gesture = await tester.startGesture(
|
|
tester.getCenter(finder),
|
|
kind: PointerDeviceKind.mouse,
|
|
);
|
|
await gesture.up();
|
|
await gesture.removePointer();
|
|
}
|
|
|
|
expect(clickedOutside, isEmpty);
|
|
|
|
await click(find.text('No Group'));
|
|
expect(
|
|
clickedOutside,
|
|
unorderedEquals(<String>{
|
|
'Group 1 A',
|
|
'Group 1 B',
|
|
}));
|
|
clickedOutside.clear();
|
|
|
|
await click(find.text('Group 1 A'));
|
|
expect(
|
|
clickedOutside,
|
|
equals(<String>{
|
|
'No Group',
|
|
}));
|
|
clickedOutside.clear();
|
|
|
|
await click(find.text('Group 1 B'));
|
|
expect(
|
|
clickedOutside,
|
|
equals(<String>{
|
|
'No Group',
|
|
}));
|
|
clickedOutside.clear();
|
|
|
|
await click(find.text('Outside'));
|
|
expect(
|
|
clickedOutside,
|
|
unorderedEquals(<String>{
|
|
'No Group',
|
|
'Group 1 A',
|
|
'Group 1 B',
|
|
}));
|
|
clickedOutside.clear();
|
|
|
|
await click(find.text('Outside Surface'));
|
|
expect(clickedOutside, isEmpty);
|
|
});
|
|
testWidgets('TapRegionSurface detects inside taps', (WidgetTester tester) async {
|
|
final Set<String> clickedInside = <String>{};
|
|
await tester.pumpWidget(
|
|
Directionality(
|
|
textDirection: TextDirection.ltr,
|
|
child: Column(
|
|
children: <Widget>[
|
|
const Text('Outside Surface'),
|
|
TapRegionSurface(
|
|
child: Row(
|
|
children: <Widget>[
|
|
const Text('Outside'),
|
|
TapRegion(
|
|
onTapInside: (PointerEvent event) {
|
|
clickedInside.add('No Group');
|
|
},
|
|
child: const Text('No Group'),
|
|
),
|
|
TapRegion(
|
|
groupId: 1,
|
|
onTapInside: (PointerEvent event) {
|
|
clickedInside.add('Group 1 A');
|
|
},
|
|
child: const Text('Group 1 A'),
|
|
),
|
|
TapRegion(
|
|
groupId: 1,
|
|
onTapInside: (PointerEvent event) {
|
|
clickedInside.add('Group 1 B');
|
|
},
|
|
child: const Text('Group 1 B'),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
|
|
await tester.pump();
|
|
|
|
Future<void> click(Finder finder) async {
|
|
final TestGesture gesture = await tester.startGesture(
|
|
tester.getCenter(finder),
|
|
kind: PointerDeviceKind.mouse,
|
|
);
|
|
await gesture.up();
|
|
await gesture.removePointer();
|
|
}
|
|
|
|
expect(clickedInside, isEmpty);
|
|
|
|
await click(find.text('No Group'));
|
|
expect(
|
|
clickedInside,
|
|
unorderedEquals(<String>{
|
|
'No Group',
|
|
}));
|
|
clickedInside.clear();
|
|
|
|
await click(find.text('Group 1 A'));
|
|
expect(
|
|
clickedInside,
|
|
equals(<String>{
|
|
'Group 1 A',
|
|
'Group 1 B',
|
|
}));
|
|
clickedInside.clear();
|
|
|
|
await click(find.text('Group 1 B'));
|
|
expect(
|
|
clickedInside,
|
|
equals(<String>{
|
|
'Group 1 A',
|
|
'Group 1 B',
|
|
}));
|
|
clickedInside.clear();
|
|
|
|
await click(find.text('Outside'));
|
|
expect(clickedInside, isEmpty);
|
|
clickedInside.clear();
|
|
|
|
await click(find.text('Outside Surface'));
|
|
expect(clickedInside, isEmpty);
|
|
});
|
|
}
|