Flutter辅助工具插件help_me的使用

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

Flutter辅助工具插件help_me的使用

添加灵活的用户指南到您的应用程序页面!

示例:

示例

使用方法

HelpMe.showHelp(
  color: Colors.amber.withOpacity(0.2),
  gradient: LinearGradient(colors: [
    Colors.purple.withOpacity(0.2),
    Colors.blue.withOpacity(0.2),
  ]),
  items: [
    HelpMeItem(
      key: keyButton,
      shape: const HelpMeRectShape(
        borderRadius: BorderRadius.all(Radius.circular(24)),
      ),
      guideWidget: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Text(
          "Lorem Guide",
          style: TextStyle(color: Colors.white),
        ),
      ),
    ),
    // 其他帮助项...
  ],
  pageContext: context,
  nextWidget: Text("Next"),
  skipWidget: Text("Skip"),
);

完整示例

以下是一个完整的示例,展示了如何在Flutter应用中使用help_me插件。

import 'dart:async';
import 'dart:ui';

import 'package:example/new_svg.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:help_me/help_me.dart';

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

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  GlobalKey keyHello = GlobalKey();
  GlobalKey keyArrow = GlobalKey();
  GlobalKey keyHeadphone = GlobalKey();
  GlobalKey keyList = GlobalKey();
  GlobalKey keyButton = GlobalKey();
  final helpActions = StreamController<HelpAction>();

  [@override](/user/override)
  Widget build(BuildContext context) {
    var appbar = AppBar(
      title: Text("Flutter HelpMe"),
    );
    return Scaffold(
      appBar: appbar,
      body: CustomScrollView(
        slivers: [
          SliverToBoxAdapter(
            child: Column(
              children: <Widget>[
                SizedBox(
                  height: 100,
                ),
                Align(
                  alignment: Alignment.topRight,
                  child: Row(
                    crossAxisAlignment: CrossAxisAlignment.end,
                    mainAxisSize: MainAxisSize.min,
                    children: [
                      Container(
                        margin: const EdgeInsets.only(right: 32),
                        alignment: Alignment.topRight,
                        key: keyHello,
                        padding: const EdgeInsets.all(8),
                        decoration: BoxDecoration(
                          borderRadius: BorderRadius.all(Radius.circular(8)),
                        ),
                        child: const Icon(Icons.document_scanner),
                      ),
                    ],
                  ),
                ),
                SizedBox(
                  height: 16,
                ),
                Container(
                  key: keyButton,
                  height: 50,
                  width: 300,
                  child: Text(
                    'A custom painter from svg',
                    textAlign: TextAlign.center,
                  ),
                ),
                SizedBox(
                  height: 32,
                ),
                Icon(Icons.arrow_downward_rounded, key: keyArrow),
                SizedBox(
                  height: 32,
                ),
              ],
            ),
          ),
          SliverToBoxAdapter(
            child: Column(
              children: [
                Container(
                  width: 100,
                  height: 100,
                  child: CustomPaint(
                    key: keyHeadphone,
                    painter: RPSCustomPainter(),
                  ),
                ),
                SizedBox(
                  height: 24,
                ),
                Text(
                  "Test with a list!",
                  style: TextStyle(fontSize: 22),
                ),
              ],
            ),
          ),
          SliverList(
            delegate: SliverChildBuilderDelegate(
              (_, index) {
                return Card(
                  key: index == 5 ? keyList : null,
                  elevation: 10,
                  color: Color.fromARGB(255, 58, 116, (index * 100) + 40),
                  margin: const EdgeInsets.only(right: 16, left: 16, bottom: 8, top: 8),
                  child: Container(
                    margin: const EdgeInsets.all(24),
                    child: Text("Item : $index"),
                  ),
                );
              },
              childCount: 10,
            ),
          ),
        ],
      ),
      floatingActionButton: FloatingActionButton.extended(
        onPressed: () async {
          var currentBox = keyHeadphone.currentContext!.findRenderObject() as RenderBox;
          HelpMe.showHelp(
            actions: helpActions.stream,
            gradient: LinearGradient(colors: [
              Colors.blue.withOpacity(0.2),
              Colors.purple.withOpacity(0.2),
            ]),
            items: [
              HelpMeItem(
                key: keyButton,
                arrow: Arrow(color: Colors.amber, width: 4),
                shape: const HelpMeRectShape(
                  borderRadius: BorderRadius.all(Radius.circular(24)),
                ),
                guideWidget: Container(
                  key: GlobalKey(),
                  color: Colors.black,
                  margin: const EdgeInsets.all(16.0),
                  child: Column(
                    children: [
                      ElevatedButton(
                        onPressed: () {
                          helpActions.sink.add(HelpAction.NEXT);
                        },
                        child: Text("TEST NEXT"),
                      ),
                      ElevatedButton(
                        onPressed: () {
                          helpActions.sink.add(HelpAction.BACK);
                        },
                        child: Text("TEST BACK"),
                      ),
                      Text(
                        "Contrary to popular belief.",
                        style: TextStyle(color: Colors.white),
                      ),
                    ],
                  ),
                ),
              ),
              HelpMeItem(
                shape: HelpMeRectShape(width: 1, color: Colors.transparent),
                key: keyHello,
                guideWidget: _itemHelp(
                  GlobalKey(),
                  'Documents',
                  'Your Title Deed is stored in Documents. Here you can upload more documents like tenancy agreements, bills, and view your beautiful realtime inventory report.',
                  2,
                ),
                arrow: Arrow(color: Colors.amber, width: 2),
              ),
              HelpMeItem(
                key: keyArrow,
                shape: HelpMeOvalShape(color: Colors.red, width: 8),
                guideWidget: Container(
                  key: GlobalKey(),
                  color: Colors.black,
                  margin: const EdgeInsets.all(16.0),
                  padding: const EdgeInsets.all(16.0),
                  child: Column(
                    mainAxisSize: MainAxisSize.min,
                    children: [
                      Image.asset(
                        'assets/arrow.gif',
                        height: 60,
                      ),
                      Text(
                        "This is an arrow",
                        style: TextStyle(color: Colors.white),
                      ),
                    ],
                  ),
                ),
              ),
              HelpMeItem(
                key: keyHeadphone,
                shape: HelpMeCustomShape(path: getPath2(currentBox.size)),
                guideWidget: Container(
                  key: GlobalKey(),
                  color: Colors.black,
                  margin: const EdgeInsets.all(16.0),
                  padding: const EdgeInsets.all(16.0),
                  child: Text(
                    "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s",
                    style: TextStyle(color: Colors.white),
                  ),
                ),
              ),
              HelpMeItem(
                key: keyList,
                shape: HelpMeRectShape(),
                guideWidget: Container(
                  key: GlobalKey(),
                  color: Colors.white,
                  margin: const EdgeInsets.all(16.0),
                  padding: const EdgeInsets.all(16.0),
                  child: Text(
                    "Where can I get some?",
                    style: TextStyle(color: Colors.white),
                  ),
                ),
              ),
            ],
            pageContext: context,
          );
        },
        tooltip: 'Increment',
        label: Text("Help!"),
      ),
    );
  }

  _itemHelp(GlobalKey key, String title, String message, int index) {
    return Container(
      key: key,
      margin: const EdgeInsets.symmetric(horizontal: 27),
      padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 19),
      decoration: BoxDecoration(
        color: Colors.black,
        borderRadius: BorderRadius.all(Radius.circular(10)),
      ),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Row(
            children: [
              Expanded(
                child: Text(
                  title,
                  style: TextStyle(
                    fontSize: 18,
                    fontWeight: FontWeight.w700,
                    color: Colors.amber,
                  ),
                ),
              ),
              SizedBox(
                width: 12,
              ),
              SizedBox(
                width: 25,
                height: 25,
                child: CircularProgressIndicator(
                  color: Colors.amber,
                  backgroundColor: Colors.white,
                  value: 0.111 * index,
                ),
              ),
              SizedBox(
                width: 6,
              ),
              Text(
                "$index/9",
                style: TextStyle(fontWeight: FontWeight.w700, color: Colors.white),
              ),
            ],
          ),
          SizedBox(
            height: 12,
          ),
          Text(
            message,
            style: TextStyle(color: Colors.white),
          ),
          SizedBox(
            height: 12,
          ),
          Row(
            mainAxisAlignment: MainAxisAlignment.end,
            children: [
              if (index > 1)
                TextButton(
                  onPressed: () {
                    helpActions.sink.add(HelpAction.BACK);
                  },
                  child: Text(
                    "Back",
                    style: TextStyle(color: Colors.amber),
                  ),
                ),
              SizedBox(
                width: 8,
              ),
              TextButton(
                onPressed: () {
                  helpActions.sink.add(HelpAction.NEXT);
                },
                child: Text(
                  "Next",
                  style: TextStyle(color: Colors.amber),
                ),
              ),
            ],
          ),
        ],
      ),
    );
  }
}

更多关于Flutter辅助工具插件help_me的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter辅助工具插件help_me的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,关于Flutter辅助工具插件help_me的使用,以下是一个基本的示例代码,展示了如何集成和使用该插件(假设help_me插件提供了某些辅助功能,如显示提示信息、日志记录等)。请注意,实际插件的功能和API可能会有所不同,以下代码仅为示例用途。

首先,确保你已经在pubspec.yaml文件中添加了help_me插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  help_me: ^x.y.z  # 替换为实际的版本号

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

接下来,在你的Flutter项目中导入并使用help_me插件。以下是一个简单的示例:

import 'package:flutter/material.dart';
import 'package:help_me/help_me.dart';  // 假设插件的导入路径为 'package:help_me/help_me.dart'

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  @override
  void initState() {
    super.initState();
    // 初始化插件(如果插件需要初始化)
    // HelpMe.instance.initialize();

    // 使用插件显示提示信息
    _showHelpMessage();
  }

  void _showHelpMessage() {
    // 假设插件提供了一个显示提示信息的方法
    HelpMe.instance.showMessage(
      title: '提示',
      message: '这是一个帮助提示信息!',
    );
  }

  void _logInformation() {
    // 假设插件提供了一个日志记录的方法
    HelpMe.instance.log('这是一条日志信息');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Demo Home Page'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              '点击按钮显示帮助信息',
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                _showHelpMessage();
              },
              child: Text('显示帮助信息'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                _logInformation();
                // 注意:由于日志通常不会在UI上显示,这里只是为了演示调用插件的日志方法
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(content: Text('日志已记录')),
                );
              },
              child: Text('记录日志信息'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们假设help_me插件提供了两个方法:showMessage用于显示提示信息,log用于记录日志。我们创建了一个简单的Flutter应用,其中有两个按钮,一个用于显示帮助信息,另一个用于记录日志信息。

请注意,实际的help_me插件可能有不同的API和方法。你应该查阅该插件的官方文档或源代码以获取准确的信息和使用指南。如果插件有特定的初始化步骤或配置要求,请确保按照文档进行相应的设置。

回到顶部