Когда сохранять данные во Flutter (эквивалент onPause)

Я пишу приложение Flutter для мобильных устройств. Я привык к парадигме Android, в которой вы сохраняете все изменения, сделанные пользователем в onPause, который обычно вызывается всякий раз, когда текущий экран переходит в фоновый режим. Я не могу найти эквивалент Flutter.

Во всех примерах, которые я вижу, есть своего рода кнопка «Отправить», но я ожидаю, что приложение сохранит данные, когда я нажимаю кнопку «Назад» или «Домой» (или если я нажимаю значок сохранения на панели приложения).

Где приложения Flutter обычно сохраняют состояние в хранилище?

1 ответ

Вы можете использовать WidgetsBindingObserver чтобы получить AppLifecycleState.paused:

      class MyPage extends StatefulWidget {
  @override
  _MyPageState createState() => _MyPageState();
}

class _MyPageState extends State<MyPage> with WidgetsBindingObserver {
  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
  }

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

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    super.didChangeAppLifecycleState(state);
    switch (state) {
      case AppLifecycleState.resumed:
        break;
      case AppLifecycleState.inactive:
        break;
      case AppLifecycleState.paused:
        _saveState();
        break;
      case AppLifecycleState.detached:
        break;
    }
  }

  void _saveState() {
    // Save state here
  }

  @override
  Widget build(BuildContext context) => Scaffold(
        body: WillPopScope(
          onWillPop: () async {
            _saveState();
            return true;
          },
          child: SafeArea(
            child: Container(),
          ),
        ),
      );
}

Другой вариант - использовать hydrated_bloc , который автоматически сохранит состояние для вас.

Другие вопросы по тегам