1
resposta

Recuperar estado de navegação após SO matar app

Não consigo encontrar sobre o assunto, mas pra mim isso é primordial para qualquer app. Preservar e restaurar o estado da IU de uma atividade em tempo hábil quando o sistema inicia a destruição do aplicativo ou da atividade é uma parte crucial da experiência do usuário. Nesses casos, o usuário espera que o estado da IU permaneça o mesmo, mas o sistema destrói a atividade e qualquer estado armazenado nela. Vocẽ consegue simular esta situação, ativando a opção "não manter atividade em segundo plano". Ao contruir uma aplicação no flutter, eu passo pelo splash, faço login, vou pra home, acessso outra tela. Mas se recebo uma ligação por exemplo e o sistema resolve liberar memória minha aplicação é destruida, e quando eu voltar da ligação para entrar no app novamente, O app vai iniciar no splash novamente. No android fazermos tratativas para que o app volte na mesma tela que estava antes de sair. Mas no flutter não encontrei uma forma de resolver este problema. Se estou preenchendo um formulário e vou até outro app, quando retornar não vou ver o formulário mais e sim a home.

Alguém já fez algo para resolver isso?

1 resposta

Olá! Entendo a sua preocupação em relação à preservação do estado da IU de uma atividade em um aplicativo. De fato, isso é muito importante para proporcionar uma boa experiência ao usuário.

No Flutter, é possível preservar o estado da IU de uma atividade usando o pacote "flutter_bloc". Com ele, você pode gerenciar o estado do aplicativo de forma eficiente e restaurá-lo quando necessário.

Além disso, você pode usar o "SharedPreferences" para armazenar informações importantes do aplicativo, como o estado da IU, e restaurá-las quando o aplicativo for reiniciado.

Aqui está um exemplo simples de como usar o "SharedPreferences" para armazenar e restaurar o estado da IU:

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  String _text = '';

  @override
  void initState() {
    super.initState();
    _loadText();
  }

  _loadText() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    setState(() {
      _text = (prefs.getString('text') ?? '');
    });
  }

  _saveText(String value) async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    setState(() {
      prefs.setString('text', value);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Meu aplicativo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              decoration: InputDecoration(labelText: 'Digite algo'),
              onChanged: (value) => _saveText(value),
            ),
            Text(_text),
          ],
        ),
      ),
    );
  }
}

Esse exemplo simplesmente armazena o texto digitado em um "TextField" usando o "SharedPreferences" e o exibe na tela. Quando o aplicativo é reiniciado, o texto é restaurado automaticamente.

Espero ter ajudado e bons estudos!