Flutter智能提示插件smart_tooltip的使用

Flutter智能提示插件 smart_tooltip 的使用

smart_tooltip 是一个灵活且可自定义的Flutter工具提示(Tooltip)插件,允许你在应用中展示带有丰富内容、自定义样式和动态定位的工具提示。本文将详细介绍如何使用该插件,并提供完整的示例代码。

特性

  • 可自定义的工具提示外观:调整颜色、字体、大小和形状。
  • 交互式工具提示:支持在工具提示中显示复杂的组件,如小部件、图像和文本。
  • 可自定义的触发事件:通过悬停、点击或聚焦来显示工具提示,易于使用的事件监听器。
  • 位置灵活性:相对于任何小部件显示工具提示,并自动进行位置调整。

示例

示例1:带有自定义小部件的工具提示

高级工具提示可以显示自定义的小部件,允许你完全个性化工具提示中的内容。

Tooltip with Custom Widgets

示例2:简单的文本工具提示

简单的工具提示显示文本内容,具有可自定义的背景色、边框和位置。

Simple Tooltip with Text

开始使用

1. 添加依赖

在你的 pubspec.yaml 文件中添加 smart_tooltip 包:

dependencies:
  smart_tooltip: ^0.0.16

2. 安装依赖

运行以下命令安装依赖:

flutter pub get

3. 导入包

在你的Dart文件中导入包:

import 'package:smart_tooltip/smart_tooltip.dart';

4. 使用示例

以下是使用 SmartTooltipSmartTooltipWithWidget 的示例代码:

简单文本工具提示示例

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Smart Tooltip Example')),
        body: Center(
          child: SmartTooltip(
            borderColor: Colors.black,
            message: 'This is a tooltip!',
            child: ElevatedButton(
              onPressed: () {},
              child: Text('Hover over me'),
            ),
          ),
        ),
      ),
    );
  }
}

带有自定义小部件的工具提示示例

SmartTooltipWithWidget(
  borderRadius: 10,
  tooltipContent: Container(
    height: 100,
    width: 100,
    decoration: BoxDecoration(
      color: Colors.black,
      borderRadius: BorderRadius.circular(10),
    ),
    child: const Text('Hello', style: TextStyle(color: Colors.white)),
  ),
  borderColor: const Color(0xFF04A777),
  position: TooltipPosition.top,
  child: const Icon(
    Icons.ac_unit,
    size: 50,
    color: Color(0xFF04A777),
  ),
)

完整示例 Demo

以下是一个完整的示例代码,展示了如何在一个页面中同时使用多个不同类型的工具提示:

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

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Smart Tooltip Demo',
      home: TooltipDemoScreen(),
    );
  }
}

class TooltipDemoScreen extends StatefulWidget {
  const TooltipDemoScreen({super.key});

  [@override](/user/override)
  State<TooltipDemoScreen> createState() => _TooltipDemoScreenState();
}

class _TooltipDemoScreenState extends State<TooltipDemoScreen> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: const Color.fromARGB(255, 0, 0, 0),
      appBar: AppBar(
        titleTextStyle: const TextStyle(color: Colors.white),
        backgroundColor: Colors.black12,
        centerTitle: true,
        title: const Text(
          'Smart Tooltip Demo',
          style: TextStyle(
            color: Colors.white,
            fontSize: 20,
          ),
        ),
      ),
      body: Expanded(
        child: Column(
          children: [
            const Spacer(),
            Row(
              crossAxisAlignment: CrossAxisAlignment.center,
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: [
                // 右侧工具提示
                Column(
                  children: [
                    SmartTooltip(
                      borderColor: const Color(0xFF04A777),
                      message: "This is a Right Smart tooltip!",
                      backgroundColor: const Color.fromARGB(255, 0, 0, 0),
                      textStyle: const TextStyle(color: Colors.white),
                      position: TooltipPosition.right,
                      child: Icon(
                        Icons.ac_unit,
                        size: 50,
                        color: const Color(0xFF04A777),
                      ),
                    ),
                    const Text(
                      "Right Tooltip",
                      style: TextStyle(
                        color: Colors.white,
                        fontSize: 20,
                      ),
                    ),
                  ],
                ),
                // 左侧工具提示
                Column(
                  children: [
                    SmartTooltip(
                      borderColor: const Color(0xFF04A777),
                      message: "This is a Left Smart tooltip!",
                      backgroundColor: const Color.fromARGB(255, 0, 0, 0),
                      textStyle: const TextStyle(color: Colors.white),
                      position: TooltipPosition.left,
                      child: Icon(
                        Icons.ac_unit,
                        size: 50,
                        color: const Color(0xFF04A777),
                      ),
                    ),
                    const Text(
                      "Left Tooltip",
                      style: TextStyle(
                        color: Colors.white,
                        fontSize: 20,
                      ),
                    ),
                  ],
                ),
                // 自定义小部件工具提示
                Column(
                  children: [
                    SmartTooltipWithWidget(
                      borderRadius: 10,
                      tooltipContent: Container(
                        height: 215,
                        width: 300,
                        padding: const EdgeInsets.all(10),
                        decoration: BoxDecoration(
                          color: Colors.black,
                          borderRadius: BorderRadius.circular(10),
                        ),
                        child: Column(
                          children: [
                            Row(
                              mainAxisAlignment: MainAxisAlignment.spaceBetween,
                              children: [
                                const Text(
                                  "Socials",
                                  style: TextStyle(
                                    color: Colors.white,
                                    fontSize: 20,
                                    fontWeight: FontWeight.bold,
                                  ),
                                ),
                                const Spacer(),
                                Row(
                                  children: [
                                    const Icon(
                                      Icons.abc_outlined,
                                      color: Colors.pink,
                                    ),
                                    const SizedBox(width: 5),
                                    Icon(
                                      Icons.abc_outlined,
                                      color: Colors.blue[900],
                                    ),
                                    const SizedBox(width: 5),
                                    Icon(
                                      Icons.abc_outlined,
                                      color: Colors.green[600],
                                    ),
                                    const SizedBox(width: 5),
                                    Icon(
                                      Icons.abc_outlined,
                                      color: Colors.blue[800],
                                    ),
                                  ],
                                ),
                              ],
                            ),
                            const SizedBox(height: 10),
                            Stack(
                              children: [
                                Container(
                                  height: 100,
                                  width: 100,
                                  decoration: const BoxDecoration(
                                    border: Border.fromBorderSide(
                                      BorderSide(color: Color(0xFF04A777), width: 2),
                                    ),
                                    shape: BoxShape.circle,
                                    image: DecorationImage(
                                      image: NetworkImage(
                                        "https://media.licdn.com/dms/image/v2/D4D03AQGydAZQyXtTng/profile-displayphoto-shrink_800_800/profile-displayphoto-shrink_800_800/0/1732221355286?e=1739404800&v=beta&t=kI0MjYSVuGdyr0lgRbYozkQ1bWQrn6MOY-9KZ24XcAY",
                                      ),
                                    ),
                                  ),
                                ),
                                Positioned(
                                  top: 5,
                                  right: 15,
                                  child: Container(
                                    height: 10,
                                    width: 10,
                                    decoration: const BoxDecoration(
                                      shape: BoxShape.circle,
                                      color: Color(0xFF04A777),
                                    ),
                                  ),
                                ),
                              ],
                            ),
                            const SizedBox(height: 10),
                            const Text(
                              "Talha Attique",
                              style: TextStyle(
                                color: Colors.white,
                                fontSize: 16,
                                fontWeight: FontWeight.bold,
                              ),
                            ),
                            const Text(
                              "Flutter Developer",
                              style: TextStyle(
                                color: Color(0xFF04A777),
                                fontSize: 12,
                              ),
                            ),
                          ],
                        ),
                      ),
                      borderColor: const Color(0xFF04A777),
                      position: TooltipPosition.top,
                      child: Container(
                        height: 100,
                        width: 100,
                        decoration: const BoxDecoration(
                          shape: BoxShape.circle,
                          image: DecorationImage(
                            image: NetworkImage(
                              "https://media.licdn.com/dms/image/v2/D4D03AQGydAZQyXtTng/profile-displayphoto-shrink_800_800/profile-displayphoto-shrink_800_800/0/1732221355286?e=1739404800&v=beta&t=kI0MjYSVuGdyr0lgRbYozkQ1bWQrn6MOY-9KZ24XcAY",
                            ),
                          ),
                        ),
                      ),
                    ),
                    const Text(
                      "Custom Widget Tooltip",
                      style: TextStyle(
                        color: Colors.white,
                        fontSize: 20,
                      ),
                    ),
                  ],
                ),
                // 顶部工具提示
                Column(
                  children: [
                    SmartTooltip(
                      borderColor: const Color(0xFF04A777),
                      message: "This is a Top Smart tooltip!",
                      backgroundColor: const Color.fromARGB(255, 0, 0, 0),
                      textStyle: const TextStyle(color: Colors.white),
                      position: TooltipPosition.top,
                      child: Icon(
                        Icons.ac_unit,
                        size: 50,
                        color: const Color(0xFF04A777),
                      ),
                    ),
                    const Text(
                      "Top Tooltip",
                      style: TextStyle(
                        color: Colors.white,
                        fontSize: 20,
                      ),
                    ),
                  ],
                ),
                // 底部工具提示
                Column(
                  children: [
                    SmartTooltip(
                      borderColor: const Color(0xFF04A777),
                      message: "This is a Bottom Smart tooltip!",
                      backgroundColor: const Color.fromARGB(255, 0, 0, 0),
                      textStyle: const TextStyle(color: Colors.white),
                      position: TooltipPosition.bottom,
                      child: Icon(
                        Icons.ac_unit,
                        size: 50,
                        color: const Color(0xFF04A777),
                      ),
                    ),
                    const Text(
                      "Bottom Tooltip",
                      style: TextStyle(
                        color: Colors.white,
                        fontSize: 20,
                      ),
                    ),
                  ],
                ),
              ],
            ),
            const Spacer(),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter智能提示插件smart_tooltip的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter智能提示插件smart_tooltip的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,作为一个IT专家,我可以为你提供一个关于Flutter智能提示插件smart_tooltip的使用示例。这个插件可以帮助你在应用中实现带有提示信息的浮动工具提示。以下是一个简单的代码案例,展示如何在Flutter中使用smart_tooltip

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

dependencies:
  flutter:
    sdk: flutter
  smart_tooltip: ^x.y.z  # 请替换为最新的版本号

然后,运行flutter pub get来安装依赖。

接下来,你可以在你的Flutter应用中使用这个插件。以下是一个完整的示例代码:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Smart Tooltip Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  GlobalKey _key1 = GlobalKey();
  GlobalKey _key2 = GlobalKey();

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Smart Tooltip Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            TextButton(
              key: _key1,
              onPressed: () {
                // 显示工具提示
                SmartTooltip.show(
                  context,
                  widgetKey: _key1,
                  tooltip: TooltipInfo(
                    text: '这是一个按钮提示',
                    position: TooltipPosition.right,
                    backgroundColor: Colors.blue.withOpacity(0.8),
                    textColor: Colors.white,
                    margin: EdgeInsets.all(8),
                    padding: EdgeInsets.all(12),
                    borderRadius: BorderRadius.circular(8),
                  ),
                );
              },
              child: Text('显示提示'),
            ),
            SizedBox(height: 20),
            TextButton(
              key: _key2,
              onPressed: () {
                // 隐藏所有工具提示
                SmartTooltip.hideAll(context);
              },
              child: Text('隐藏所有提示'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中有两个按钮。第一个按钮使用SmartTooltip.show方法来显示一个工具提示,第二个按钮使用SmartTooltip.hideAll方法来隐藏所有显示的工具提示。

关键点解释

  1. GlobalKey:我们使用GlobalKey来标识需要显示工具提示的按钮。
  2. SmartTooltip.show:显示工具提示的方法,需要传入contextwidgetKeytooltip参数。tooltip参数是一个TooltipInfo对象,用于配置工具提示的样式和内容。
  3. SmartTooltip.hideAll:隐藏所有显示的工具提示的方法。

这个示例展示了如何使用smart_tooltip插件在Flutter应用中实现基本的工具提示功能。你可以根据需要进一步自定义和扩展这个示例。

回到顶部