Unverified Commit 38a5bbb4 authored by chunhtai's avatar chunhtai Committed by GitHub

fix empty selection arrow when double clicked on empty read only textfield in ios (#34068)

parent 991da4f7
......@@ -115,6 +115,10 @@ class _TextSelectionToolbar extends StatelessWidget {
items.add(onePhysicalPixelVerticalDivider);
items.add(_buildToolbarButton(localizations.selectAllButtonLabel, handleSelectAll));
}
// If there is no option available, build an empty widget.
if (items.isEmpty) {
return Container(width: 0.0, height: 0.0);
}
const Widget padding = Padding(padding: EdgeInsets.only(bottom: 10.0));
......
......@@ -49,6 +49,11 @@ class _TextSelectionToolbar extends StatelessWidget {
if (handleSelectAll != null)
items.add(FlatButton(child: Text(localizations.selectAllButtonLabel), onPressed: handleSelectAll));
// If there is no option available, build an empty widget.
if (items.isEmpty) {
return Container(width: 0.0, height: 0.0);
}
return Material(
elevation: 1.0,
child: Container(
......
......@@ -854,6 +854,55 @@ void main() {
expect(find.text('CUT'), findsNothing);
});
testWidgets('text field build empty tool bar when no options available ios', (WidgetTester tester) async {
await tester.pumpWidget(
MaterialApp(
theme: ThemeData(platform: TargetPlatform.iOS),
home: const Material(
child: TextField(
readOnly: true,
),
),
)
);
await tester.tap(find.byType(TextField));
await tester.pump(const Duration(milliseconds: 50));
await tester.tap(find.byType(TextField));
// Wait for context menu to be built.
await tester.pumpAndSettle();
final RenderBox container = tester.renderObject(find.descendant(
of: find.byType(FadeTransition),
matching: find.byType(Container),
));
expect(container.size, Size.zero);
});
testWidgets('text field build empty tool bar when no options available android', (WidgetTester tester) async {
await tester.pumpWidget(
const MaterialApp(
home: Material(
child: TextField(
readOnly: true,
),
),
)
);
await tester.tap(find.byType(TextField));
await tester.pump(const Duration(milliseconds: 50));
await tester.tap(find.byType(TextField));
// Wait for context menu to be built.
await tester.pumpAndSettle();
final RenderBox container = tester.renderObject(find.descendant(
of: find.byType(FadeTransition),
matching: find.byType(Container),
));
expect(container.size, Size.zero);
});
testWidgets('Sawping controllers should update selection', (WidgetTester tester) async {
TextEditingController controller = TextEditingController(text: 'readonly');
final OverlayEntry entry = OverlayEntry(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment