Flutter条件触发插件conditional_trigger的使用

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

Flutter条件触发插件conditional_trigger的使用

conditional_trigger插件可以帮助你更轻松地为特定方法设置条件。通过这个插件,你可以根据应用程序的使用情况(如打开次数、天数等)来决定是否执行某些操作,例如显示横幅广告或提示用户进行应用内评分。

插件安装

首先,在pubspec.yaml文件中添加conditional_trigger依赖:

dependencies:
  conditional_trigger: ^latest_version

然后运行flutter pub get以安装插件。

使用示例

以下是一个完整的示例代码,展示了如何使用conditional_trigger插件来实现条件触发功能。我们将创建一个简单的Flutter应用程序,该应用程序会在满足特定条件时显示一个横幅和弹出对话框。

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

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

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  // 创建两个条件触发器
  final bannerSurvey = const ConditionalTrigger(
    'BannerSurvey',
    minDays: 3,      // 至少3天后触发
    minCalls: 5,     // 至少启动5次应用后触发
    debugLog: true,  // 打印调试日志
  );

  final announce = const ConditionalTrigger(
    'Announce',
    minDays: 1,      // 至少1天后触发
    minCalls: 3,     // 至少启动3次应用后触发
    debugLog: true,  // 打印调试日志
  );

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

  // 初始化时检查条件
  void initial() async {
    // 检查公告条件是否满足
    if (await announce.checkOnce() == ConditionalState.satisfied) {
      if (mounted) {
        // 如果条件满足,显示对话框
        showDialog(
          context: context,
          builder: (_) => const AlertDialog(
            title: Text('公告'),
            content: Text('这是一个公告'),
          ),
        );
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: FutureBuilder(
          future: bannerSurvey.checkOnce(),  // 检查横幅条件
          builder: (ctx, snapshot) {
            if (!snapshot.hasData) {
              return const SizedBox.shrink();  // 如果没有数据,返回空 widget
            }

            // 如果条件满足,显示横幅文本
            if (snapshot.data == ConditionalState.satisfied) {
              return const Padding(
                padding: EdgeInsets.all(16.0),
                child: Text('这是一个调查横幅'),
              );
            } else {
              return const Center(
                child: Text('尚未满足条件'),
              );
            }
          },
        ),
      ),
    );
  }
}

参数说明

ConditionalTrigger构造函数接受多个参数,用于定义触发条件:

  • name: 条件的名称,同时也是SharedPreferences的前缀。
  • minDays: 自上次调用以来的最小天数。
  • minCalls: 方法被调用的最小次数(每次执行方法时计数器会增加)。如果将其放在main()中,则相当于应用程序的启动次数。
  • noRequestVersions: 如果当前版本在该列表中,则不会触发请求。
  • remindedVersions: 允许应用程序提醒用户进行应用内评分的版本列表。
  • keepRemind: 如果为true,则每次新版本满足所有条件时都会继续提示;如果为false,则只在第一次满足条件时提示。
  • debugLog: 是否启用调试日志。

检查条件

你可以使用check()方法来检查条件是否满足:

final state = await condition.check();

if (state == ConditionalState.satisfied) {
  // 条件满足,执行相应操作
}

如果你已经在其他地方调用过check(),可以直接使用lastState属性获取上次检查的结果:

final state = condition.lastState;

如果你想确保check()只调用一次,可以使用checkOnce()方法:

final stateOnce = await condition.checkOnce();

if (state == ConditionalState.satisfied) {
  // 条件满足,执行相应操作
}

条件状态

ConditionalState枚举定义了可能的条件状态:

  • ConditionalState.keepRemindDisabled: 条件满足,但keepRemindfalse
  • ConditionalState.noRequestVersion: 当前版本在noRequestVersions列表中,因此不满足条件。
  • ConditionalState.notSatisfiedWithMinCallsAndDays: 未满足minCallsminDays条件。
  • ConditionalState.notSatisfiedWithMinCalls: 未满足minCalls条件。
  • ConditionalState.notSatisfiedWithMinDays: 未满足minDays条件。
  • ConditionalState.satisfied: 所有条件都已满足。

测试

你可以使用setMockInitialValues方法来设置模拟值,以便在测试时控制条件的状态:

condition.setMockInitialValues(ConditionalMock());

如果你想移除模拟值,可以传递一个空的ConditionalMock对象:

condition.setMockInitialValues();

更多关于Flutter条件触发插件conditional_trigger的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter条件触发插件conditional_trigger的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,conditional_trigger 插件在 Flutter 中可以帮助你根据特定条件触发某些操作。尽管没有名为 conditional_trigger 的官方 Flutter 插件,但我们可以基于类似的概念实现一个自定义的条件触发机制。

下面是一个示例,展示了如何在 Flutter 中实现一个简单的条件触发机制。在这个例子中,我们将创建一个自定义的 ConditionalTrigger 类,该类根据某个条件执行特定的操作。

1. 创建 ConditionalTrigger

首先,创建一个新的 Dart 文件 conditional_trigger.dart,并定义 ConditionalTrigger 类:

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

typedef TriggerAction = void Function();

class ConditionalTrigger {
  final bool Function() condition;
  final TriggerAction action;

  ConditionalTrigger({required this.condition, required this.action});

  void checkCondition() {
    if (condition()) {
      action();
    }
  }
}

2. 使用 ConditionalTrigger

在你的主应用文件中(例如 main.dart),你可以使用这个 ConditionalTrigger 类来根据条件触发操作。例如,我们可以根据一个按钮的点击次数来触发一个操作。

// main.dart
import 'package:flutter/material.dart';
import 'conditional_trigger.dart';

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

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

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

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  @override
  Widget build(BuildContext context) {
    // 定义条件:当点击次数达到5次时触发操作
    bool condition() => _counter >= 5;

    // 定义操作:显示一个Snackbar
    void triggerAction() {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(
          content: Text('点击次数已达到5次!'),
          action: SnackBarAction(
            label: '关闭',
            onPressed: () {},
          ),
        ),
      );
    }

    // 创建ConditionalTrigger实例
    final ConditionalTrigger conditionalTrigger = ConditionalTrigger(
      condition: condition,
      action: triggerAction,
    );

    return Scaffold(
      appBar: AppBar(
        title: Text('Conditional Trigger Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              '你点击了按钮 $_counter 次',
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                setState(() {
                  _counter++;
                });

                // 检查条件
                conditionalTrigger.checkCondition();
              },
              child: Text('点击我'),
            ),
          ],
        ),
      ),
    );
  }
}

3. 运行应用

运行上述代码,你将看到一个简单的 Flutter 应用,其中包含一个按钮。每次点击按钮时,计数器会增加。当点击次数达到5次时,会显示一个 Snackbar 提示信息。

这个示例展示了如何在 Flutter 中实现一个基本的条件触发机制。你可以根据需要扩展这个机制,以适应更复杂的条件和操作。

回到顶部