Как выполнить код перед выходом из приложения - PullRequest
2 голосов
/ 12 февраля 2020

Я хочу определить, когда пользователь вышел из приложения и выполнил какой-то код раньше, но я не знаю, как это сделать. Я пытался использовать этот пакет: https://pub.dev/packages/flutter_lifecycle_state, но у меня есть эта ошибка:

flutter / .pub-cache / hosted / pub.dartlang.org / flutter_lifecycle_state-1.0. 0 / lib / flutter_lifecycle_state.dart: 80: 30: ошибка: получатель не найден: «приостановлен». case AppLifecycleState.suspending

Если у вас есть какое-либо решение этой проблемы или вы знаете другой способ определить, когда пользователь вышел из моего приложения, это может быть круто

1 Ответ

0 голосов
/ 12 февраля 2020

Вы не можете делать именно то, что вы хотите сделать прямо сейчас, во всяком случае, лучший подход прямо сейчас - это проверить, работает ли приложение в фоновом режиме / неактивно, используя AppLifecycleState из SDK (в основном это то, что пытается сделать ваша библиотека do)

Используемая вами библиотека устарела, поскольку с ноября 2019 года запрос на извлечение AppLifecycleState.suspending называется AppLifecycleState.detached.

. Вы можете посмотреть перечисление AppLifecycleState в api.flutter.dev веб-сайт

Вот пример того, как наблюдать состояние жизненного цикла содержащей операции:

import 'package:flutter/widgets.dart';

class LifecycleWatcher extends StatefulWidget {
  @override
  _LifecycleWatcherState createState() => _LifecycleWatcherState();
}

class _LifecycleWatcherState extends State<LifecycleWatcher> with WidgetsBindingObserver {
  AppLifecycleState _lastLifecycleState;

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
  }

  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    setState(() {
      _lastLifecycleState = state;
    });
  }

  @override
  Widget build(BuildContext context) {
    if (_lastLifecycleState == null)
      return Text('This widget has not observed any lifecycle changes.', textDirection: TextDirection.ltr);

    return Text('The most recent lifecycle state this widget observed was: $_lastLifecycleState.',
        textDirection: TextDirection.ltr);
  }
}

void main() {
  runApp(Center(child: LifecycleWatcher()));
}

Я думаю, что удаление ваших данных на неактивный цикл, а затем его создание в возобновленном может работать на вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...