Flutter定时任务生成插件cron_generator_annotations的使用

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

Flutter定时任务生成插件cron_generator_annotations的使用

安装依赖

首先,你需要安装以下依赖项:

dart pub add cron_generator_annotations dev:cron_generator

使用说明

在你的类上添加 [@CronBase](/user/CronBase)() 注解,并在你希望作为定时任务执行的方法上添加 [@CronGenMethod](/user/CronGenMethod) 注解。

final CronStuff = CronStuffBase with _$CronStuffBaseCron; 

[@CronBase](/user/CronBase)()
class CronStuffBase {
  [@CronGenMethod](/user/CronGenMethod).parse('*/1 * * * *') /// 将在每分钟运行
  void myCronStuffs(int arg, {required int requiredArg, double? optionalArg}) {
    print('myMethodTestWithPositioneds original $arg requiredArg $requiredArg');
  }  
}

然后你可以像这样使用它:

final cronObj = CronStuff();

// 执行定时任务
cronObj.myCronStuffs(1g, requiredArg: 2);

补充信息

此包提供了一个包装 dart cron package 的的包装器。 如果你需要文档或特定的cron使用案例,建议使用此包。

示例代码

下面是一个完整的示例代码,展示了如何使用 cron_generator_annotations 插件来创建定时任务。

import 'package:cron_generator_annotations/cron_generator_annotations.dart';

part 'cron_generator_annotations_example.g.dart';

class MyCron = MyCronTest with _$MyCronCron;

[@CronBase](/user/CronBase)()
class MyCronTest {
  [@CronGenMethod](/user/CronGenMethod)(minutes: '1-2')
  void myCronStuffs(int arg, {required int requiredArg, double? optionalArg}) {
    print('myMethodTestWithPositioneds original $arg requiredArg $requiredArg');
  }
}

Future<void> main() async {
  final cronObj = MyCron();
  cronObj.myCronStuffs(1, requiredArg: 2);

  await Future<void>.delayed(const Duration(minutes: 10));

  await cronObj.close();
}

更多关于Flutter定时任务生成插件cron_generator_annotations的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter定时任务生成插件cron_generator_annotations的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何使用Flutter定时任务生成插件 cron_generator_annotations 的代码示例。这个插件允许你使用注解来定义Cron表达式,从而简化定时任务的配置。

首先,确保你的Flutter项目已经添加了 cron_generator_annotations 依赖。你可以在 pubspec.yaml 文件中添加以下依赖:

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

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

接下来,我们编写一个示例,展示如何使用 cron_generator_annotations 来定义定时任务。

  1. 定义任务类并使用注解
import 'package:cron_generator_annotations/cron_generator_annotations.dart';

// 定义一个简单的任务类
class MyTasks {
  
  // 使用 @Cron 注解定义一个每天凌晨1点执行的任务
  @Cron(expression: '0 0 1 * * ?')
  void dailyTask() {
    print('Daily task executed at 1 AM');
  }

  // 使用 @Cron 注解定义一个每小时的第5分钟执行的任务
  @Cron(expression: '0 5 * * * ?')
  void hourlyTask() {
    print('Hourly task executed every hour at 5 minutes');
  }
}
  1. 生成Cron任务

由于 cron_generator_annotations 插件本身不直接执行定时任务,你需要结合其他库(如 flutter_crondart_cron)或手动管理这些任务。不过,这里为了展示注解的使用,我们假设有一个机制来解析并执行这些注解定义的任务。以下是一个简化的示例,展示如何手动触发这些任务(实际项目中,你可能需要一个调度器来解析并执行):

import 'package:cron_generator_annotations/cron_generator_annotations.dart';
import 'package:reflective_annotation/reflective_annotation.dart';
import 'dart:mirrors';

void main() {
  // 初始化反射系统
  initializeReflectiveSystem();

  // 获取MyTasks类的镜像
  ClassMirror classMirror = reflectClass(MyTasks);

  // 获取所有方法镜像
  classMirror.declarations.values.forEach((declaration) {
    if (declaration is MethodMirror && declaration.metadata.isNotEmpty) {
      declaration.metadata.forEach((metadata) {
        if (metadata.reflectee is Cron) {
          Cron cron = metadata.reflectee as Cron;
          print('Found cron task: ${cron.expression} in method ${declaration.simpleName}');
          
          // 这里只是打印信息,实际中你需要根据cron表达式来调度任务
          // 例如,你可以使用dart_cron库来解析并执行这些任务
          // 注意:这里省略了实际的调度逻辑
        }
      });
    }
  });

  // 示例:手动触发一个任务(仅用于演示,实际中不这样做)
  MyTasks tasks = MyTasks();
  tasks.dailyTask(); // 这将打印 "Daily task executed at 1 AM"
}

注意:上面的代码示例中,我们手动触发了 dailyTask 方法,这仅用于演示注解的使用。在实际应用中,你需要一个调度器来根据Cron表达式自动触发这些任务。你可能需要查找或编写一个能够解析Cron表达式并根据当前时间执行相应任务的调度器。

此外,Flutter环境中使用Dart的反射机制可能受到一些限制,特别是在AOT(Ahead-Of-Time)编译模式下。因此,在实际生产环境中,你可能需要寻找或实现一个不依赖于反射的调度解决方案。

回到顶部