Flutter任务管理插件flutter_tasker的使用

Flutter任务管理插件flutter_tasker的使用

使用

首先检查是否具有相关的权限!

使用 FlutterTasker.checkStatus() 获取任务器状态 (TaskerStatus) 来检查是否可以触发任务。

使用 FlutterTasker.checkCommandPermission() 检查任务器命令系统的权限是否被授予 (bool)。

请求相关的权限如果需要!

使用 FlutterTasker.requestCommandPermission() 触发一个权限对话框以请求命令系统权限。

使用 FlutterTasker.openExternalAccessSetting() 打开任务器中的外部访问菜单以便用户启用它。

请求并触发任务

使用 FlutterTasker.getTasks() 获取命名任务列表 (List<String>).

使用 FlutterTasker.triggerTask(String task) 触发一个任务。

通过任务器命令系统发送命令

使用 FlutterTasker.sendCommand(String command) 发送命令。

如何安装

在插件的 Android 清单文件中已经声明了相关的权限:

<uses-permission android:name="net.dinglisch.android.tasker.PERMISSION_SEND_COMMAND"/>
<uses-permission android:name="net.dinglisch.android.tasker.PERMISSION_RUN_TASKS"/>
<queries>
	<package android:name="net.dinglisch.android.taskerm" />
</queries>

此外,还需要在任务器设置中启用选项 允许外部访问。提供辅助函数 (FlutterTasker.checkStatus()FlutterTasker.openExternalAccessSetting()) 可用于检查此选项是否已启用,并为用户提供打开相关菜单的功能。

示例

查看示例应用程序以获取简单的实现示例。

许可证

本项目根据 BSD-3 Clause 许可证授权,完整的许可证文本可以在包含的 LICENSE 文件中找到。

TaskerIntent.java 文件由任务器开发者在此处提供:https://tasker.joaoapps.com/code/TaskerIntent.java

贡献

问题和拉取请求总是欢迎的!
如果你觉得这个项目对你有帮助,请考虑请我喝杯咖啡。

  • PayPal

示例代码

以下是示例代码:

// Copyright 2022 Pepe Tiebosch (byme.dev/Jellepepe). All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

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

void main() {
  runApp(
    const MaterialApp(
      home: MyApp(),
    ),
  );
}

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String command = '';
  bool commandPermission = false;
  TaskerStatus status = TaskerStatus.invalid;
  List<String> tasks = [];

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('任务器插件示例'),
      ),
      body: Column(
        children: [
          Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              TextButton(
                onPressed: () {
                  FlutterTasker.checkStatus().then((value) {
                    setState(() {
                      status = value;
                    });
                  });
                },
                child: Text('检查状态: $status'),
              ),
              TextButton(
                onPressed: () {
                  FlutterTasker.checkCommandPermission().then((value) {
                    setState(() {
                      commandPermission = value;
                    });
                  });
                },
                child: Text("检查命令权限: ${commandPermission ? '已授予' : '缺少'}"),
              ),
            ],
          ),
          Row(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              TextButton(
                onPressed: () {
                  FlutterTasker.openExternalAccessSetting().then((value) {
                    ScaffoldMessenger.of(context)
                        .showSnackBar(SnackBar(content: Text('成功打开外部访问菜单: $value')));
                  });
                },
                child: const Text('打开外部访问菜单'),
              ),
              TextButton(
                onPressed: () {
                  FlutterTasker.requestCommandPermission().then((value) {
                    ScaffoldMessenger.of(context)
                        .showSnackBar(SnackBar(content: Text('成功请求权限: $value')));
                  });
                },
                child: const Text('请求命令权限'),
              ),
            ],
          ),
          TextButton(
            onPressed: () {
              FlutterTasker.getTasks().then((value) {
                ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('任务: $value')));
                setState(() {
                  tasks = value ?? [];
                });
              });
            },
            child: const Text('获取任务'),
          ),
          Column(
            children: [
              for (String task in tasks)
                TextButton(
                  onPressed: () {
                    FlutterTasker.triggerTask(task);
                  },
                  child: Text('运行任务: $task'),
                )
            ],
          ),
          const Text('命令:'),
          TextField(
            decoration: const InputDecoration(
              labelText: '命令',
            ),
            onChanged: (value) {
              command = value;
            },
          ),
        ],
      ),
      floatingActionButton: FloatingActionButton(
        child: const Icon(Icons.send),
        onPressed: () {
          try {
            FlutterTasker.sendCommand(command).then(
              (value) => ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('命令结果: $value'))),
            );
          } catch (e) {
            ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('命令失败: $e')));
          }
        },
      ),
    );
  }
}

更多关于Flutter任务管理插件flutter_tasker的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


flutter_tasker 是一个用于在 Flutter 应用中管理后台任务的插件。它允许你在应用后台执行任务,例如数据同步、定时任务等。以下是如何使用 flutter_tasker 插件的详细步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutter_tasker: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 配置 Android 和 iOS

为了确保插件在 Android 和 iOS 上正常工作,你需要进行一些配置。

Android 配置

android/app/src/main/AndroidManifest.xml 文件中,添加以下权限:

<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

iOS 配置

ios/Runner/Info.plist 文件中,添加以下键值对:

<key>UIBackgroundModes</key>
<array>
    <string>fetch</string>
    <string>processing</string>
</array>

3. 初始化插件

在你的 Dart 代码中初始化 flutter_tasker 插件:

import 'package:flutter_tasker/flutter_tasker.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await FlutterTasker.initialize();
  runApp(MyApp());
}

4. 定义后台任务

你可以定义一个后台任务,例如每隔一定时间执行一次的任务:

void myBackgroundTask() {
  print("Background task is running!");
  // 在这里执行你的后台任务逻辑
}

5. 注册后台任务

使用 FlutterTasker 注册你的后台任务:

FlutterTasker.registerTask(
  taskName: 'my_background_task',
  callback: myBackgroundTask,
  frequency: TaskFrequency.every15Minutes,  // 设置任务执行频率
);

6. 启动和停止任务

你可以手动启动或停止后台任务:

// 启动任务
FlutterTasker.startTask('my_background_task');

// 停止任务
FlutterTasker.stopTask('my_background_task');

7. 处理任务结果

你可以在任务完成后处理任务结果:

FlutterTasker.onTaskComplete.listen((taskName) {
  print('Task $taskName completed');
});

8. 处理设备重启

如果设备重启,你可能需要重新注册任务。可以在应用启动时检查并重新注册任务:

void checkAndRegisterTasks() async {
  if (await FlutterTasker.isTaskRegistered('my_background_task')) {
    print('Task is already registered');
  } else {
    FlutterTasker.registerTask(
      taskName: 'my_background_task',
      callback: myBackgroundTask,
      frequency: TaskFrequency.every15Minutes,
    );
  }
}

9. 示例代码

以下是一个完整的示例代码:

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

void myBackgroundTask() {
  print("Background task is running!");
  // 在这里执行你的后台任务逻辑
}

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await FlutterTasker.initialize();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Tasker Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: () {
                  FlutterTasker.registerTask(
                    taskName: 'my_background_task',
                    callback: myBackgroundTask,
                    frequency: TaskFrequency.every15Minutes,
                  );
                  FlutterTasker.startTask('my_background_task');
                },
                child: Text('Start Background Task'),
              ),
              ElevatedButton(
                onPressed: () {
                  FlutterTasker.stopTask('my_background_task');
                },
                child: Text('Stop Background Task'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
回到顶部