Flutter引导提示插件guide_it的使用

Flutter引导提示插件guide_it的使用

在开发Flutter应用时,有时我们需要为用户提供引导提示或教程。guide_it 插件是一个非常方便的工具,可以用来创建和展示引导提示或交互式教程。

使用

该插件使用 GlobalKey 来找到要高亮显示的小部件,并动态创建一个教程覆盖层。可以定义多个顺序的引导项来高亮显示不同的小部件。

请查看 示例 项目以了解如何将此插件集成到您的应用中。

示例代码

以下是使用 guide_it 插件的一个完整示例:

import "package:example/theme.dart";
import "package:flutter/material.dart";
import "package:guide_it/guide_it.dart";

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: "GuideIt example",
      theme: activeTheme,
      home: const MyHomePage(title: "GuideIt example"),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});
  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final GlobalKey _textKey = GlobalKey();
  final GlobalKey _iconKey = GlobalKey();
  final GlobalKey _secondIconKey = GlobalKey();
  final GlobalKey _fabKey = GlobalKey();

  final GuideController _controller = GuideController();
  static const String _guideId = "test";

  [@override](/user/override)
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  List<GuideItem> _guideItems() {
    return [
      GuideItem(
        targetWidgetKey: _textKey,
        child: const Wrap(
          alignment: WrapAlignment.center,
          crossAxisAlignment: WrapCrossAlignment.center,
          spacing: 16,
          children: [
            Icon(Icons.help_rounded), // 帮助图标
            Text("欢迎来到GuideIt示例"), // 提示文本
          ],
        ),
      ),
      GuideItem(
        targetWidgetKey: _iconKey,
        child: const Wrap(
          alignment: WrapAlignment.center,
          crossAxisAlignment: WrapCrossAlignment.center,
          spacing: 16,
          children: [
            Icon(Icons.place_rounded), // 地标图标
            Text("这是第一个图标,点击任何地方继续"), // 提示文本
          ],
        ),
      ),
      GuideItem(
        targetWidgetKey: _secondIconKey,
        child: const Wrap(
          alignment: WrapAlignment.center,
          crossAxisAlignment: WrapCrossAlignment.center,
          spacing: 16,
          children: [
            Icon(Icons.ac_unit_rounded), // 冰箱图标
            Text("这是第二个图标"), // 提示文本
          ],
        ),
      ),
      GuideItem(
        targetWidgetKey: _fabKey,
        displayOptions: (options) => options.copyWith(
          borderRadius: const Radius.circular(12), // 设置边框圆角
          defaultIndicator: GuideIndicator(
            child: Icon(
              Icons.replay_rounded, // 重新开始图标
              size: 32,
              color: Theme.of(context).colorScheme.secondary,
            ),
            adaptRotation: false, // 不旋转指示器
            animationOptions: const GuideAnimationOptions(
              curve: Curves.easeInBack, // 动画曲线
              duration: Duration(milliseconds: 350), // 动画时长
            ),
            size: 32,
          ),
        ),
        child: const Wrap(
          alignment: WrapAlignment.center,
          crossAxisAlignment: WrapCrossAlignment.center,
          spacing: 16,
          children: [
            Text("这是浮动操作按钮,按下它重新播放引导"), // 提示文本
          ],
        ),
      ),
    ];
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Guide(
      guid: _guideId,
      canShow: (guid) => true, // 控制是否显示引导
      controller: _controller,
      displayOptions: GuideDisplayOptions(
        highlightColor: Theme.of(context).colorScheme.tertiary.withOpacity(0.1), // 高亮颜色
        backgroundColor: Theme.of(context).colorScheme.background.withOpacity(0.85), // 背景颜色
        animationOptions: const GuideAnimationOptions(
          animate: true, // 启用动画
          fade: true, // 启用淡入淡出效果
          initialScale: 0.9, // 初始缩放比例
          transitionOffset: 50, // 过渡偏移
          type: AnimationType.translation, // 动画类型
          translationMode: TranslationMode.vertical, // 动画方向
          duration: Duration(milliseconds: 500), // 动画时长
        ),
      ),
      items: _guideItems(), // 引导项列表
      child: Scaffold(
        appBar: AppBar(
          backgroundColor: Theme.of(context).colorScheme.inversePrimary,
          title: Text(widget.title),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.start,
            children: [
              const SizedBox(height: 64),
              Padding(
                key: _textKey,
                padding: const EdgeInsets.all(8),
                child: const Text("欢迎来到GuideIt"), // 欢迎文本
              ),
              const Divider(height: 32), // 分割线
              Wrap(
                crossAxisAlignment: WrapCrossAlignment.center,
                spacing: 32,
                children: [
                  Icon(
                    key: _iconKey,
                    Icons.place_rounded,
                    size: 48,
                  ),
                  Icon(
                    key: _secondIconKey,
                    Icons.ac_unit_rounded,
                    size: 48,
                  ),
                ],
              ),
            ],
          ),
        ),
        floatingActionButton: FloatingActionButton(
          key: _fabKey,
          onPressed: () {
            _controller.showTutorial(params: ShowGuideParams(id: _guideId, force: true)); // 显示引导
          },
          child: const Icon(Icons.add), // 按钮图标
        ),
      ),
    );
  }
}

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

1 回复

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


当然,下面是如何在Flutter项目中使用guide_it插件来实现引导提示的示例代码。guide_it是一个用于在Flutter应用中创建引导提示(也称为新手引导)的插件。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  guide_it: ^latest_version  # 请将latest_version替换为实际的最新版本号

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

2. 导入插件

在你的Dart文件中(例如main.dart),导入guide_it插件:

import 'package:guide_it/guide_it.dart';

3. 配置引导提示

在你的Flutter应用中,你可以通过以下步骤来配置和显示引导提示。

示例代码

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  final GuideIt guideIt = GuideIt();

  @override
  void initState() {
    super.initState();

    // 配置引导提示
    configureGuideIt();
  }

  void configureGuideIt() {
    // 创建一个简单的引导提示
    final Guide guide = Guide(
      id: 'guide1',
      target: findTargetByKey('targetButton'),  // 通过key找到目标widget
      title: 'Welcome!',
      description: 'This is a guide!',
      position: GuidePosition.bottom,
      padding: EdgeInsets.all(16.0),
      color: Colors.blue.withOpacity(0.8),
      textStyle: TextStyle(color: Colors.white, fontSize: 16),
      onSkip: () {
        // 用户点击跳过按钮时的回调
        print('Guide skipped');
      },
      onDone: () {
        // 用户完成引导时的回调
        print('Guide completed');
      },
    );

    // 添加引导提示到GuideIt
    guideIt.addGuide(guide);

    // 显示引导提示
    guideIt.showGuide('guide1');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('GuideIt Example'),
      ),
      body: Center(
        child: ButtonWidget(),
      ),
    );
  }
}

class ButtonWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      key: ValueKey('targetButton'),  // 设置key以便找到这个widget
      onPressed: () {
        // 按钮点击事件
      },
      child: Text('Target Button'),
    );
  }
}

4. 运行应用

运行你的Flutter应用,你应该会看到一个引导提示指向“Target Button”。你可以根据需要调整引导提示的样式、位置和文本内容。

注意事项

  • findTargetByKey方法用于通过widget的key找到目标widget。在上面的示例中,我们使用了ValueKey来设置目标button的key。
  • 你可以添加多个引导提示,通过不同的id来区分它们。
  • 你可以根据需要自定义引导提示的样式和行为,例如更改背景颜色、文本样式、位置等。

这个示例代码展示了如何在Flutter应用中使用guide_it插件来创建和显示引导提示。希望这对你有所帮助!

回到顶部