Skip to content

FutureBuilder gerando navegação em segundo plano no meu app, por que ocorre esse “bug”?

  1. class Algo extends StatefulWidget {
  2.   @override
  3.   _AlgoState createState() => _AlgoState();
  4. }
  5.  
  6. class _AlgoState extends State<Algo> {
  7.   // declarando a variável Future
  8.   Future<String> x;
  9.  
  10.   @override
  11.   void initState() {
  12.   // inicializando o objeto da classe Future no initState
  13.   // que é chamado apenas quando o Widget entra pela primeira vez na árvore de widgets
  14.     x = facaAlgo();
  15.     super.initState();
  16.   }
  17.  
  18.   Future<String> facaAlgo() async {
  19.     return “algo”;
  20.   }
  21.  
  22.   @override
  23.   Widget build(BuildContext context) {
  24.     return Container(
  25.       child: FutureBuilder(
  26.         // quando você passa a Future para o widget, quando o FutureBuilder for reconstruído,
  27.         // ele vai TESTAR se esse objeto da classe Future é o mesmo de antes dele ser reconstruído,
  28.         // se forem diferentes, ele vai re chamar a Future
  29.  
  30.         // nesse caso, ele Não vai refazer a chamada, porque o objeto já foi criado no initState e sempre será o mesmo
  31.         future: x,
  32.          
  33.  
  34.          // nesse caso, ele vai refazer a chamada, porque toda vez que a função facaAlgo é chamada, ela retorna um novo objeto
  35.          // da classe Future
  36.        //  future: facaAlgo(),
  37.         builder: (ctx, snapshot) {
  38.           if (!snapshot.hasData)
  39.             return Center(
  40.               child: CircularProgressIndicator(),
  41.             );
  42.  
  43.           return Center(
  44.             child: Text(” fiz : ${snapshot.data}”),
  45.           );
  46.         },
  47.       ),
  48.     );
  49.   }
  50. }

O código acima simplifica o problema. O builder tende a carregar seus métodos dentro do que é future, logo, quando você acessa algo em seu app e o setState() gira dentro do Future, ele vai rodar novamente seu método, o que consequentemente vai acessar urls sem sua autorização. A saída é exatamente essa relatada acima como exemplo.

Fonte? https://forum.flutterando.com.br/d/61-futurebuilder-fazendo-requests-em-segundo-plano-durante-a-navega-o-do-app

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.