Мне действительно интересно, как использовать пакет https://pub.dev/packages/background_fetch.
Я хочу запустить простую задачу по захвату записей из моей базы данных sqllite для изменения статуса.
В файле main.dart у меня есть:
Future main() async {
WidgetsFlutterBinding.ensureInitialized();
initPlatformState();
await DotEnv().load('.env');
runApp(MyApp());
// Register to receive BackgroundFetch events after app is terminated.
// Requires {stopOnTerminate: false, enableHeadless: true}
BackgroundFetch.registerHeadlessTask(backgroundFetchHeadlessTask);
BackgroundFetch.start();
}
Первый , На самом деле нет, если мне нужно поставить: BackgroundFetch.start();
?
Тогда вот моя функция называется:
// Platform messages are asynchronous, so we initialize in an async method.
Future<void> initPlatformState() async {
// Configure BackgroundFetch.
BackgroundFetch.configure(BackgroundFetchConfig(
minimumFetchInterval: 15,
stopOnTerminate: false,
enableHeadless: false,
requiresBatteryNotLow: false,
requiresCharging: false,
requiresStorageNotLow: false,
requiresDeviceIdle: false,
requiredNetworkType: NetworkType.ANY
), (String taskId) async {
// This is the fetch-event callback.
print("[BackgroundFetch] Event received $taskId");
// take all photos not uploaded
final repo = di.get<DossierRepository>();
final photosNotUploaded = await repo.getPhotosNotUploaded();
await for (final photo in Stream.fromIterable(photosNotUploaded)) {
// resend them simply
repo.resendPhoto(photo.dossierId, photo.photoId);
}
// IMPORTANT: You must signal completion of your task or the OS can punish your app
// for taking too long in the background.
BackgroundFetch.finish(taskId);
}).then((int status) {
print('[BackgroundFetch] configure success: $status');
}).catchError((e) {
print('[BackgroundFetch] configure ERROR: $e');
});
}
У меня это предупреждение:
[TSBackgroundFetch start] Task flutter_background_fetch already registered
Я понимаю, что мне нужно проверить, не зарегистрирована ли задача, но как? И если я внесу изменения в свой код, мне нужно «уничтожить» старую задачу и зарегистрировать новую?
И это хороший способ использования этого плагина? У меня всего одна задача для моего приложения, я хочу, чтобы она работала постоянно. Обязательно ли регистрировать задачи? Или этого достаточно?