Flutter提示信息展示插件cs_tooltip的使用
Flutter提示信息展示插件cs_tooltip的使用
cs_tooltip
是一个灵活的提示信息展示插件,它允许你在屏幕的叠加层上显示提示信息。与Flutter标准的Tooltip
相比,它提供了更多的灵活性。你可以选择用背景色覆盖整个屏幕,并且点击背景可以关闭提示信息。
安装
运行以下命令:
flutter pub add cs_tooltip
这将会在你的包的pubspec.yaml
文件中添加如下依赖项(并隐式地运行flutter pub get
):
dependencies:
cs_tooltip: latest
现在你可以在Dart代码中使用它了:
import 'package:cs_tooltip/cs_tooltip.dart';
开始使用
你需要将你的Widget设置为StatefulWidget
,并且创建一个控制器来管理提示信息的状态。可以通过定义一个SuperTooltipController
实例并传递给构造函数来实现这一点。
final _controller = SuperTooltipController();
child: SuperTooltip(
_controller: tooltipController,
// ...
)
void makeTooltip() {
_controller.showTooltip();
}
你需要将SuperTooltip
包裹在一个GestureDetector
、MouseRegion
或InkWell
中,这些组件负责显示和隐藏内容。进一步处理提示信息的状态可以通过控制器显式管理。
child: GestureDetector(
onTap: () async {
await _controller.showTooltip();
},
child: SuperTooltip(
showBarrier: true,
controller: _controller,
content: const Text(
"Lorem ipsum dolor sit amet, consetetur sadipscing elitr,",
softWrap: true,
style: TextStyle(
color: Colors.white,
),
),
child: Container(
width: 40.0,
height: 40.0,
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Colors.blue,
),
child: Icon(
Icons.add,
color: Colors.white,
),
),
),
),
SuperTooltip
只需要一个必需参数,即内容。你可以传递一个子Widget,比如一个图标,表示应该点击什么。如下所示:
SuperTooltip(
content: const Text("Lorem ipsum dolor sit amet, consetetur sadipscing elitr",
softWrap: true,
style: TextStyle(
color: Colors.white,
),
),
child: Container(
width: 40.0,
height: 40.0,
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Colors.blue,
),
child: Icon(
Icons.add,
color: Colors.white,
),
),
),
通过传递backgroundColor
属性,可以改变背景颜色。
SuperTooltip(
backgroundColor: Color(0xff2f2d2f),
//....
),
通过传递popupDirection
属性,可以改变弹出方向到TooltipDirection.right
、TooltipDirection.left
、TooltipDirection.bottom
和 TooltipDirection.up
。
SuperTooltip(
popupDirection: TooltipDirection.right,
//...
)
屏幕阻挡
如果你想阻止用户通过点击背景来关闭提示信息,可以将showBarrier
设置为true
,这意味着点击遮罩区域不会立即隐藏提示信息。
SuperTooltip(
showBarrier: true,
barrierColor: Colors.red,
//...
)
模糊效果
如果你想在弹出窗口后面显示模糊效果,可以通过将showDropBoxFilter
设置为true
来实现,必须同时启用showBarrier
并设置sigmaX
和 sigmaY
。
SuperTooltip(
showBarrier: true,
showDropBoxFilter: true,
sigmaX: 10,
sigmaY: 10,
//...
)
如果你只是想对打开或关闭状态做出反应,可以通过默认构造函数传递onHide
或 onShow
回调。
SuperTooltip(
onDismiss: () {
// 可能继续教程?
},
onShow: () {
// 开始动画?
}
),
为了在用户按下返回按钮时隐藏提示信息,你可以将GestureDetector
组件包装在WillPopScope
组件中,并传递一个回调函数给onWillPop
。
return WillPopScope(
onWillPop: _willPopCallback,
child: GestureDetector(
onTap: () async {
await _controller.showTooltip();
},
// ..
),
);
创建一个回调函数以关闭提示信息:
Future<bool> _willPopCallback() async {
// 如果提示信息打开,我们不会在回退按钮按下时退出页面,而是关闭提示信息
if (_controller.isVisible) {
await _controller.hideTooltip();
return false;
}
return true;
}
示例应用
查看完整的示例应用 在这里。
示例代码
import 'package:cs_tooltip/cs_tooltip.dart';
import 'package:flutter/material.dart';
void main() => runApp(const MainApp());
class MainApp extends StatelessWidget {
const MainApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Super Tooltip Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const ExamplePage(),
);
}
}
class ExamplePage extends StatefulWidget {
const ExamplePage({
Key? key,
}) : super(key: key);
[@override](/user/override)
State createState() => _ExamplePageState();
}
class _ExamplePageState extends State<ExamplePage> {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: Center(
child: TargetWidget(),
),
);
}
}
class TargetWidget extends StatefulWidget {
const TargetWidget({Key? key}) : super(key: key);
[@override](/user/override)
State createState() => _TargetWidgetState();
}
class _TargetWidgetState extends State<TargetWidget> {
final _controller = SuperTooltipController();
Future<bool> _willPopCallback(bool flag) async {
// 如果提示信息打开,我们不会在回退按钮按下时退出页面,而是关闭提示信息
if (_controller.isVisible) {
await _controller.hideTooltip();
return false;
}
return true;
}
[@override](/user/override)
Widget build(BuildContext context) {
return PopScope(
onPopInvoked: _willPopCallback,
child: SuperTooltip(
showOnClick: false,
showBarrier: true,
controller: _controller,
popupDirection: TooltipDirection.down,
backgroundColor: Color(0xff2f2d2f),
left: 30,
right: 30,
arrowTipDistance: 15.0,
arrowBaseWidth: 20.0,
arrowLength: 20.0,
borderWidth: 2.0,
constraints: const BoxConstraints(
minHeight: 0.0,
maxHeight: 100,
minWidth: 0.0,
maxWidth: 100,
),
showCloseButton: ShowCloseButton.none,
touchThroughAreaShape: ClipAreaShape.rectangle,
touchThroughAreaCornerRadius: 30,
barrierColor: Color.fromARGB(26, 47, 45, 47),
content: const Text(
"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. ",
softWrap: true,
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.white,
),
),
child: GestureDetector(
child: Container(
width: 40.0,
height: 40.0,
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Colors.blue,
),
child: Icon(
Icons.add,
color: Colors.white,
),
),
onTap: makeTooltip,
),
),
);
}
void makeTooltip() {
_controller.showTooltip();
}
}
更多关于Flutter提示信息展示插件cs_tooltip的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter提示信息展示插件cs_tooltip的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,cs_tooltip
是一个用于在 Flutter 应用中展示提示信息的插件。以下是一个简单的代码示例,展示如何在 Flutter 应用中使用 cs_tooltip
插件来显示提示信息。
首先,确保在你的 pubspec.yaml
文件中添加 cs_tooltip
依赖项:
dependencies:
flutter:
sdk: flutter
cs_tooltip: ^x.y.z # 请将 x.y.z 替换为最新版本号
然后,运行 flutter pub get
来获取依赖项。
接下来,在你的 Dart 文件中使用 cs_tooltip
。以下是一个完整的示例:
import 'package:flutter/material.dart';
import 'package:cs_tooltip/cs_tooltip.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Tooltip Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
GlobalKey _tooltipKey = GlobalKey();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Tooltip Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
GestureDetector(
key: _tooltipKey,
onTap: () {},
child: Container(
padding: EdgeInsets.all(16.0),
decoration: BoxDecoration(
border: Border.all(color: Colors.blue, width: 2.0),
borderRadius: BorderRadius.circular(8.0),
),
child: Text(
'Tap me',
style: TextStyle(color: Colors.blue),
),
),
),
SizedBox(height: 20.0),
TooltipTrigger(
child: Icon(Icons.info_outline, color: Colors.grey),
tooltip: TooltipContent(
child: Container(
padding: EdgeInsets.all(8.0),
decoration: BoxDecoration(
color: Colors.black.withOpacity(0.8),
borderRadius: BorderRadius.circular(8.0),
),
child: Text(
'This is a tooltip!',
style: TextStyle(color: Colors.white),
),
),
preferredPosition: TooltipPosition.top,
),
triggerMode: TooltipTriggerMode.onTap,
keyTrigger: _tooltipKey,
),
],
),
),
);
}
}
在这个示例中,我们做了以下几件事:
- 添加依赖:在
pubspec.yaml
中添加了cs_tooltip
依赖项。 - 定义主应用:在
MyApp
中设置了基本的 Material 应用。 - 创建主页面:在
MyHomePage
中,我们创建了一个包含两个元素的列:一个可点击的容器和一个带有提示信息的图标。 - 使用
TooltipTrigger
:我们将TooltipTrigger
包裹在图标周围,并指定了提示内容和位置。此外,我们将keyTrigger
设置为之前定义的_tooltipKey
,这样当点击容器时,也会触发图标的提示信息。
请注意,cs_tooltip
插件的具体用法和功能可能会根据版本不同而有所变化。因此,请查阅最新的官方文档以确保代码的正确性和功能完整性。