Unverified Commit 45265192 authored by Taha Tesser's avatar Taha Tesser Committed by GitHub

`Tooltip`: Add an example for `TooltipTriggerMode.manual` and add tests for...

`Tooltip`: Add an example for `TooltipTriggerMode.manual` and add tests for existing `Tooltip` examples (#100554)
parent bfa272ac
......@@ -11,7 +11,7 @@ void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
static const String _title = 'Flutter Code Sample';
static const String _title = 'Tooltip Sample';
@override
Widget build(BuildContext context) {
......@@ -20,15 +20,15 @@ class MyApp extends StatelessWidget {
home: Scaffold(
appBar: AppBar(title: const Text(_title)),
body: const Center(
child: MyStatelessWidget(),
child: TooltipSample(),
),
),
);
}
}
class MyStatelessWidget extends StatelessWidget {
const MyStatelessWidget({Key? key}) : super(key: key);
class TooltipSample extends StatelessWidget {
const TooltipSample({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
......
......@@ -11,7 +11,7 @@ void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
static const String _title = 'Flutter Code Sample';
static const String _title = 'Tooltip Sample';
@override
Widget build(BuildContext context) {
......@@ -20,15 +20,15 @@ class MyApp extends StatelessWidget {
home: Scaffold(
appBar: AppBar(title: const Text(_title)),
body: const Center(
child: MyStatelessWidget(),
child: TooltipSample(),
),
),
);
}
}
class MyStatelessWidget extends StatelessWidget {
const MyStatelessWidget({Key? key}) : super(key: key);
class TooltipSample extends StatelessWidget {
const TooltipSample({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
......
......@@ -11,7 +11,7 @@ void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
static const String _title = 'Flutter Code Sample';
static const String _title = 'Tooltip Sample';
@override
Widget build(BuildContext context) {
......@@ -20,15 +20,15 @@ class MyApp extends StatelessWidget {
home: Scaffold(
appBar: AppBar(title: const Text(_title)),
body: const Center(
child: MyStatelessWidget(),
child: TooltipSample(),
),
),
);
}
}
class MyStatelessWidget extends StatelessWidget {
const MyStatelessWidget({Key? key}) : super(key: key);
class TooltipSample extends StatelessWidget {
const TooltipSample({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
......
// 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.
// Flutter code sample for Tooltip
import 'package:flutter/material.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
static const String _title = 'Tooltip Sample';
@override
Widget build(BuildContext context) {
return const MaterialApp(
title: _title,
home: TooltipSample(title: _title),
);
}
}
class TooltipSample extends StatelessWidget {
const TooltipSample({Key? key, required this.title}) : super(key: key);
final String title;
@override
Widget build(BuildContext context) {
final GlobalKey<TooltipState> tooltipkey = GlobalKey<TooltipState>();
return Scaffold(
appBar: AppBar(title: Text(title)),
body: Center(
child: Tooltip(
// Provide a global key with the "TooltipState" type to show
// the tooltip manually when trigger mode is set to manual.
key: tooltipkey,
triggerMode: TooltipTriggerMode.manual,
showDuration: const Duration(seconds: 1),
message: 'I am a Tooltip',
child: const Text('Tap on the FAB'),
),
),
floatingActionButton: FloatingActionButton.extended(
onPressed: () {
// Show Tooltip programmatically on button tap.
tooltipkey.currentState?.ensureTooltipVisible();
},
label: const Text('Show Tooltip'),
),
);
}
}
// 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 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter_api_samples/material/tooltip/tooltip.0.dart' as example;
import 'package:flutter_test/flutter_test.dart';
void main() {
testWidgets('Tooltip is visible when hovering over text', (WidgetTester tester) async {
const String tooltipText = 'I am a Tooltip';
await tester.pumpWidget(
const example.MyApp(),
);
TestGesture? gesture = await tester.createGesture(kind: PointerDeviceKind.mouse);
addTearDown(() async {
if (gesture != null)
return gesture.removePointer();
});
await gesture.addPointer();
await gesture.moveTo(const Offset(1.0, 1.0));
await tester.pump();
expect(find.text(tooltipText), findsNothing);
// Move the mouse over the text and wait for the tooltip to appear.
final Finder tooltip = find.byType(Tooltip);
await gesture.moveTo(tester.getCenter(tooltip));
await tester.pump(const Duration(milliseconds: 10));
expect(find.text(tooltipText), findsOneWidget);
// Move the mouse away and wait for the tooltip to disappear.
await gesture.moveTo(const Offset(1.0, 1.0));
await tester.pumpAndSettle();
await gesture.removePointer();
gesture = null;
expect(find.text(tooltipText), findsNothing);
});
}
// 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 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter_api_samples/material/tooltip/tooltip.1.dart' as example;
import 'package:flutter_test/flutter_test.dart';
void main() {
testWidgets('Tooltip wait and show duration', (WidgetTester tester) async {
const String tooltipText = 'I am a Tooltip';
await tester.pumpWidget(
const example.MyApp(),
);
TestGesture? gesture = await tester.createGesture(kind: PointerDeviceKind.mouse);
addTearDown(() async {
if (gesture != null)
return gesture.removePointer();
});
await gesture.addPointer();
await gesture.moveTo(const Offset(1.0, 1.0));
await tester.pump();
expect(find.text(tooltipText), findsNothing);
// Move the mouse over the text and wait for the tooltip to appear.
final Finder tooltip = find.byType(Tooltip);
await gesture.moveTo(tester.getCenter(tooltip));
// Wait half a second and the tooltip should still not be visible.
await tester.pump(const Duration(milliseconds: 500));
expect(find.text(tooltipText), findsNothing);
// Wait another half a second and the tooltip should be visible now.
await tester.pump(const Duration(milliseconds: 500));
expect(find.text(tooltipText), findsOneWidget);
// Move the mouse away and wait for the tooltip to disappear.
await gesture.moveTo(const Offset(1.0, 1.0));
await tester.pump();
// Wait a second and the tooltip should still be visible.
await tester.pump(const Duration(seconds: 1));
expect(find.text(tooltipText), findsOneWidget);
// Wait another second and the tooltip should be gone.
await tester.pump(const Duration(seconds: 1));
await tester.pumpAndSettle();
await gesture.removePointer();
gesture = null;
expect(find.text(tooltipText), findsNothing);
});
}
// 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 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter_api_samples/material/tooltip/tooltip.2.dart' as example;
import 'package:flutter_test/flutter_test.dart';
void main() {
testWidgets('Tooltip is visible when hovering over text', (WidgetTester tester) async {
const String tooltipText = 'I am a rich tooltip. I am another span of this rich tooltip';
await tester.pumpWidget(
const example.MyApp(),
);
TestGesture? gesture = await tester.createGesture(kind: PointerDeviceKind.mouse);
addTearDown(() async {
if (gesture != null)
return gesture.removePointer();
});
await gesture.addPointer();
await gesture.moveTo(const Offset(1.0, 1.0));
await tester.pump();
expect(find.text(tooltipText), findsNothing);
// Move the mouse over the text and wait for the tooltip to appear.
final Finder tooltip = find.byType(Tooltip);
await gesture.moveTo(tester.getCenter(tooltip));
await tester.pump(const Duration(milliseconds: 10));
expect(find.text(tooltipText), findsOneWidget);
// Move the mouse away and wait for the tooltip to disappear.
await gesture.moveTo(const Offset(1.0, 1.0));
await tester.pumpAndSettle();
await gesture.removePointer();
gesture = null;
expect(find.text(tooltipText), findsNothing);
});
}
// 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 'package:flutter/material.dart';
import 'package:flutter_api_samples/material/tooltip/tooltip.3.dart' as example;
import 'package:flutter_test/flutter_test.dart';
void main() {
testWidgets('Tooltip is visible when tapping button', (WidgetTester tester) async {
const String tooltipText = 'I am a Tooltip';
await tester.pumpWidget(
const example.MyApp(),
);
// Tooltip is not visible before tapping the button.
expect(find.text(tooltipText), findsNothing);
// Tap on the button and wait for the tooltip to appear.
await tester.tap(find.byType(FloatingActionButton));
await tester.pump(const Duration(milliseconds: 10));
expect(find.text(tooltipText), findsOneWidget);
// Wait for the tooltip to disappear.
await tester.pump(const Duration(seconds: 1));
expect(find.text(tooltipText), findsNothing);
});
}
......@@ -66,6 +66,13 @@ import 'tooltip_visibility.dart';
/// ** See code in examples/api/lib/material/tooltip/tooltip.2.dart **
/// {@end-tool}
///
/// {@tool dartpad}
/// This example shows how [Tooltip] can be shown manually with [TooltipTriggerMode.manual]
/// by calling the [TooltipState.ensureTooltipVisible] function.
///
/// ** See code in examples/api/lib/material/tooltip/tooltip.3.dart **
/// {@end-tool}
///
/// See also:
///
/// * <https://material.io/design/components/tooltips.html>
......
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