Flutter自定义提示工具插件super_tooltip的使用

发布于 1周前 作者 vueper 来自 Flutter

Flutter自定义提示工具插件super_tooltip的使用

super_tooltip 是一个非常灵活的Flutter插件,允许你在屏幕的覆盖层中显示工具提示(Tooltips)。它比Flutter标准的 Tooltip 提供了更多的灵活性。你可以选择让整个屏幕被背景色覆盖,点击背景即可关闭工具提示。

安装

要安装 super_tooltip 插件,请运行以下命令:

flutter pub add super_tooltip

这将在你的 pubspec.yaml 文件中添加一行依赖项,并自动执行 flutter pub get

dependencies:
  super_tooltip: latest

然后在你的Dart代码中导入:

import 'package:super_tooltip/super_tooltip.dart';

使用方法

创建控制器

首先,你需要创建一个 SuperTooltipController 来管理工具提示的状态:

final _controller = SuperTooltipController();

构建工具提示

接下来,将 SuperTooltip 包装在一个可以响应用户交互的 widget 中,例如 GestureDetectorMouseRegionInkWell。这些 widget 负责显示和隐藏工具提示的内容。以下是完整的示例代码:

import 'package:flutter/material.dart';
import 'package:super_tooltip/super_tooltip.dart';

void main() => runApp(const MainApp());

class MainApp extends StatelessWidget {
  const MainApp({Key? key}) : super(key: key);

  @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
  State createState() => _ExamplePageState();
}

class _ExamplePageState extends State<ExamplePage> {
  @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
  State createState() => _TargetWidgetState();
}

class _TargetWidgetState extends State<TargetWidget> {
  final _controller = SuperTooltipController();

  Future<bool> _willPopCallback() async {
    if (_controller.isVisible) {
      await _controller.hideTooltip();
      return false;
    }
    return true;
  }

  @override
  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: _willPopCallback,
      child: GestureDetector(
        onTap: () async {
          await _controller.showTooltip();
        },
        child: SuperTooltip(
          controller: _controller,
          popupDirection: TooltipDirection.down,
          backgroundColor: Color(0xff2f2d2f),
          showCloseButton: true,
          left: 30,
          right: 30,
          bottom: 200,
          arrowTipDistance: 20.0,
          minimumOutsideMargin: 120,
          arrowBaseWidth: 20.0,
          arrowLength: 20.0,
          borderWidth: 2.0,
          constraints: const BoxConstraints(
            minHeight: 0.0,
            maxHeight: 100,
            minWidth: 0.0,
            maxWidth: 100,
          ),
          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: Container(
            width: 40.0,
            height: 40.0,
            decoration: const BoxDecoration(
              shape: BoxShape.circle,
              color: Colors.blue,
            ),
            child: Icon(
              Icons.add,
              color: Colors.white,
            ),
          ),
        ),
      ),
    );
  }
}

自定义属性

  • showBarrier: 设置为 true 可以防止用户通过点击遮罩区域来关闭工具提示。
  • barrierColor: 设置遮罩的颜色。
  • backgroundColor: 设置工具提示的背景颜色。
  • popupDirection: 设置工具提示弹出的方向(如:上、下、左、右)。
  • decorationBuilder: 自定义工具提示的形状或装饰。
  • sigmaXsigmaY: 启用模糊效果时设置模糊程度。
  • onShowonHide: 工具提示显示和隐藏时触发的回调函数。

通过这些属性,你可以完全定制工具提示的外观和行为,使其更好地适应你的应用需求。


更多关于Flutter自定义提示工具插件super_tooltip的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter自定义提示工具插件super_tooltip的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中集成和使用自定义提示工具插件 super_tooltip 的示例代码。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 super_tooltip 依赖:

dependencies:
  flutter:
    sdk: flutter
  super_tooltip: ^最新版本号  # 请替换为实际最新版本号

然后运行 flutter pub get 来获取依赖。

2. 导入插件

在你需要使用 super_tooltip 的 Dart 文件中导入插件:

import 'package:super_tooltip/super_tooltip.dart';

3. 使用 SuperTooltip

以下是一个简单的示例,展示如何在按钮上添加自定义提示:

import 'package:flutter/material.dart';
import 'package:super_tooltip/super_tooltip.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Super Tooltip Example'),
        ),
        body: Center(
          child: TooltipButtonExample(),
        ),
      ),
    );
  }
}

class TooltipButtonExample extends StatefulWidget {
  @override
  _TooltipButtonExampleState createState() => _TooltipButtonExampleState();
}

class _TooltipButtonExampleState extends State<TooltipButtonExample> {
  final GlobalKey<SuperTooltipState> tooltipKey = GlobalKey();

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        ElevatedButton(
          onPressed: () {
            tooltipKey.currentState?.showTooltip(
              context,
              message: '这是一个自定义提示',
              position: TooltipPosition.top,
              backgroundColor: Colors.blue.withOpacity(0.8),
              textColor: Colors.white,
              borderRadius: BorderRadius.circular(10),
              arrowColor: Colors.white,
              arrowSize: 10,
              duration: Duration(seconds: 2),
            );
          },
          child: Text('显示提示'),
        ),
        SizedBox(height: 20),
        SuperTooltip(
          key: tooltipKey,
          child: ElevatedButton(
            onPressed: () {},
            child: Text('带内置提示的按钮'),
          ),
          tooltipMessage: '这是一个内置提示',
          tooltipPosition: TooltipPosition.bottom,
          backgroundColor: Colors.green.withOpacity(0.8),
          textColor: Colors.white,
          borderRadius: BorderRadius.circular(10),
          arrowColor: Colors.white,
          arrowSize: 10,
          duration: Duration(seconds: 1),
          triggerMode: TooltipTriggerMode.hover, // 或者 TooltipTriggerMode.click
        ),
      ],
    );
  }
}

解释

  1. 依赖添加:在 pubspec.yaml 中添加 super_tooltip 依赖。
  2. 导入插件:在 Dart 文件中导入 super_tooltip
  3. 使用 SuperTooltip
    • 第一个按钮通过 tooltipKey 手动触发提示。
    • 第二个按钮使用 SuperTooltip 组件自带的提示功能,通过 triggerMode 设置触发模式(悬停或点击)。

注意事项

  • 确保 super_tooltip 插件的版本与 Flutter SDK 兼容。
  • 根据需要调整提示的样式和位置。
  • triggerMode 可以是 TooltipTriggerMode.hoverTooltipTriggerMode.click,根据需求选择。

这个示例展示了如何使用 super_tooltip 插件在 Flutter 应用中创建自定义提示。你可以根据需要进一步自定义和扩展这些功能。

回到顶部