README.md 3,4 КБ
Newer Older
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
1
2
# workmanager_aurora

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
3
The Aurora implementation of the [workmanager](https://pub.dev/packages/workmanager).
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
4

Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
5
6
# ATTENTION!!!

Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
7
Workmanager plugin for Aurora is only compatable with Flutter [main](https://gitlab.com/omprussia/flutter/flutter/-/tree/main) channel. Use `flutter-aurora channel main` to switch channel.
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
8

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
9
## Features
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
10

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
11
12
13
14
15
- registerOneOffTask
- registerPeriodicTask
- cancelByUniqueName
- cancelByTag
- cancelAll
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
16

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
17
## Limitations
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
18

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
19
20
21
22
23
24
1. Dart entry point for handling tasks should be called `callbackDispatcher`.
2. One-off tasks do not try to restart on error (no backoff support).
3. The constraints are set in the application's desktop file, not through the dart code.
4. Initial delay in periodic tasks is not supported.
5. Periodic tasks are started immediately upon registration.
7. Minimum frequency of periodic tasks is 15 minutes.
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
25
8. In order to test background tasks for Aurora please run your application from app icon. `flutter run` won't work due to it doesn't use Runtime manager.
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
26

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
27
## Usage
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
28

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
29
30
This package is not an _endorsed_ implementation of `workmanager`.
Therefore, you have to include `workmanager_aurora` alongside `workmanager` as dependencies in your `pubspec.yaml` file.
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
31

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
32
**pubspec.yaml**
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
33

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
34
35
36
37
38
39
40
41
```yaml
dependencies:
  workmanager: ^0.5.2
  workmanager_aurora:
    git:
      url: https://gitlab.com/omprussia/flutter/flutter-community-plugins/workmanager_aurora.git
      ref: aurora-0.0.1
```
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
42

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
43
**CMakeLists.txt**
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
44

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
45
46
47
48
```
find_package(Qt5 COMPONENTS Core REQUIRED)
target_link_libraries(${BINARY_NAME} PRIVATE Qt5::Core)
```
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
49

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
50
***main.cpp**
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
51

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
52
53
54
```desktop
#include <flutter/application.h>
#include <flutter/flutter_compatibility_qt.h> // <- Enable Qt
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
55

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
56
#include "generated_plugin_registrant.h"
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
57

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
58
59
60
61
62
63
64
65
int main(int argc, char *argv[]) {
    aurora::Initialize(argc, argv);
    aurora::EnableQtCompatibility(); // <- Enable Qt
    aurora::RegisterPlugins();
    aurora::Launch();
    return 0;
}
```
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
66

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
67
***.desktop**
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
68

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
69
In Aurora OS, background tasks need to be declared in a desktop file.
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
70

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
71
The mandatory field is `Type`, where you should specify `worker` for one-of tasks and `periodic` for periodic tasks.
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
72

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
73
You can also optionally specify the permissions that your background task needs through an enumeration in the `Permissions` field.
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
74

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
75
76
77
78
```desktop
[X-Task <ONE_OF_TASK_NAME>]
Type=worker
Permissions=
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
79

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
80
81
82
83
[X-Task <PERIODIC_TASK_NAME>]
Type=periodic
Permissions=Location
```
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
84

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
85
You can also optionally specify the conditions of the background task. For example, if your background task requires the Internet, you can specify the following in the `Conditions` field:
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
86

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
87
88
89
90
91
92
```desktop
[X-Task <PERIODIC_TASK_WITH_INTERNET_NAME>]
Type=periodic
Permissions=Internet
Conditions=internet
```
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
93

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
94
***.spec**
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
95

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
96
97
98
99
100
```spec
BuildRequires: pkgconfig(appdir-cpp)
BuildRequires: pkgconfig(runtime-manager-qt5)
BuildRequires: pkgconfig(nemonotifications-qt5)
```
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
101

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
102
***.dart**
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
103

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
104
105
```dart
import 'package:workmanager/workmanager.dart';
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
106

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
107
108
109
110
111
112
113
114
115
116
@pragma('vm:entry-point')
void callbackDispatcher() {
  Workmanager().executeTask((task, inputData) {
    switch (task) {
      case "SimpleTask":
        print("Background task started: $task");
        break;
      default:
        return Future.value(false);
    }
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
117

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
118
119
120
    return Future.value(true);
  });
}
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
121

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
122
123
void main() {
  WidgetsFlutterBinding.ensureInitialized();
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
124

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
125
126
  Workmanager().initialize(callbackDispatcher, isInDebugMode: true);
  Workmanager().registerOneOffTask("unique-task-id", "SimpleTask");
Красавин Никита Сергеевич's avatar
Красавин Никита Сергеевич включено в состав коммита
127

Denis Glazkov's avatar
Denis Glazkov включено в состав коммита
128
129
130
  runApp(MyApp());
}
```