Buscar pacotes, repositórios e categorias de apps

Detalhes do pacotev2.0.0

enhanced_future_builder

Envoltório que melhora a legibilidade e resolve o problema comum de reativação do FutureBuilder

AndroidiOSWebmacOSWindowsLinux
Downloads em 30 dias
1,1 mil
Curtidas
29
Pontos Pub
140

Instalar pacote

flutter pub add enhanced_future_builder

Visão geral do pacote

Orientação gerada a partir de informações públicas. Apenas para referência.

EnhancedFutureBuilder é um pacote Flutter que aprimora o FutureBuilder padrão, melhorando a legibilidade do código e eliminando o problema comum de reconstruções desnecessárias quando o futuro é concluído. Ele oferece uma API mais limpa e intuitiva para lidar com dados assíncronos, reduzindo o código boilerplate e evitando reconstruções indesejadas de widgets. Construído como uma extensão do Future, integra-se perfeitamente em projetos Flutter existentes. O pacote suporta todas as principais plataformas, incluindo Android, iOS, Web, macOS, Windows e Linux.

Casos de uso

  • Manipulação de dados assíncronos com reconstruções reduzidas
  • Melhorando a clareza do código na gestão de estado
  • Simplificando atualizações de interface baseadas no futuro
  • Substituindo padrões verbosos do FutureBuilder
  • Simplificando estados de carregamento/erro/carregamento

Principais recursos

  • Evita reconstruções indesejadas após a conclusão da Future
  • Sintaxe mais limpa e legível
  • Suporte integrado para estados de carregamento, erro e dados
  • Estende Future para uso intuitivo
  • Compatibilidade multiplataforma

Indicado para

  • Desenvolvedores em busca de manipulação de UI assíncrona mais simples
  • Projetos com o objetivo de reduzir reconstruções de widget
  • Equipes que priorizam a manutenibilidade do código
  • Iniciantes do Flutter aprendendo padrões assíncronos
  • Aplicativos com busca frequente de dados assíncronos

Considerações

  • Requer Dart 2.12 ou superior
  • Pode exigir refatoração do código FutureBuilder existente
  • Limitado ao uso com operações baseadas em Future
  • Não adequado para cenários complexos de fluxo
  • Depende da gestão adequada do ciclo de vida futuro

README original

Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.

This library is no longer maintained. Use at your own discretion.

enhanced_future_builder

Small FutureBuilder wrapper to improve readabiltity. It can also be used as an easy solution to the common 'my FutureBuilder keeps refiring' problem (more info about that here).

Actions Status codecov

Stop FutureBuilder from refiring

Let's say you want to build an app that displays a random cat from the internet at launch and then increases a counter whenever a button is clicked. You came up with the following code:

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text('Clicked $_counter times')
    ),
    body: FutureBuilder(
      // resolves to cat data from the internet
      future: widget._api.getRandomCat(),
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.done) {
          // builds an image widget containing a random cat
          return _showCatWidget(snapshot.data);
        }else {
          return Center(child: Text('Loading...'));
        }
      }
    ),
    floatingActionButton: FloatingActionButton(
      // _incrementCounter calls setState() to update the view
      onPressed: _incrementCounter,
      tooltip: 'Increment',
      child: Icon(Icons.add),
    ),
  );
}

Which results in the following app:

I love cats

As you can see there's a problem. Whenever the button is clicked, a new cat is shown to the user. This is not what we want and can be solved by using EnhancedFutureBuilder. Import the package and change the code to:

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text('Clicked $_counter times')
    ),
    body: EnhancedFutureBuilder(
      future: widget._api.getRandomCat(),
      // this is where the magic happens
      rememberFutureResult: true,
      whenDone: (dynamic cat) => _showCatWidget(cat),
      whenNotDone: Center(child: Text('Loading...')),
    ),
    floatingActionButton: FloatingActionButton(
      onPressed: _incrementCounter,
      tooltip: 'Increment',
      child: Icon(Icons.add),
    ),
  );
}

As you can see the code is a little easier to read now and the result will be just how we want it to be:

yeah cats are great

Usage

Ironically, EnhancedFutureBuilder doesn't require a builder anymore.

FutureBuilder:

FutureBuilder(
  future: _futureToResolve(),
  builder: (context, snapshot) {
    if (snapshot.connectionState == ConnectionState.done) {
      return MyWidget(snapshot.data);
    }else if (snapshot.connectionState == ConnectionState.waiting){
      return Center(child: Text('Waiting...'));
    }
    }else if (snapshot.connectionState == ConnectionState.active){
      return Center(child: Text('Active...'));
    }
    // ...
  }
}

EnhancedFutureBuilder:

EnhancedFutureBuilder(
  future: _futureToResolve(),
  rememberFutureResult: false,
  whenDone: (dynamic data) => MyWidget(data),
  whenWaiting: Center(child: Text('Waiting...')),
  whenActive: Center(child: Text('Active...')),
  // whenNone: ...
),

Categorias

Repositório-fonte

Projetos que usam este pacote

Ainda não há dados.