Flutter & Background fetch - как справиться с простым примером? - PullRequest
0 голосов
/ 25 мая 2020

Мне действительно интересно, как использовать пакет 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

Я понимаю, что мне нужно проверить, не зарегистрирована ли задача, но как? И если я внесу изменения в свой код, мне нужно «уничтожить» старую задачу и зарегистрировать новую?

И это хороший способ использования этого плагина? У меня всего одна задача для моего приложения, я хочу, чтобы она работала постоянно. Обязательно ли регистрировать задачи? Или этого достаточно?

...