Pakete, Repositories und App-Kategorien suchen

Paketdetailsv2.0.0

enhanced_future_builder

Wrapper, der die Lesbarkeit verbessert und das häufige Problem des erneuten Auslöbens von FutureBuilder löst

AndroidiOSWebmacOSWindowsLinux
30-Tage-Downloads
1050
Likes
29
Pub-Punkte
140

Paket installieren

flutter pub add enhanced_future_builder

Paketübersicht

Aus öffentlichen Paketdaten erstellte Orientierung.

EnhancedFutureBuilder ist ein Flutter-Paket, das den Standard-FutureBuilder verbessert, indem die Codelesbarkeit erhöht und das häufige Problem unnötiger Neuerstellungen bei Abschluss des Futures beseitigt wird. Es bietet eine saubere, intuitivere API zur Verarbeitung asynchroner Daten, reduziert Boilerplate-Code und verhindert unbeabsichtigte Widget-Rebuilds. Als Erweiterung von Future entwickelt, lässt sich das Paket nahtlos in bestehende Flutter-Projekte integrieren. Das Paket unterstützt alle wichtigen Plattformen, einschließlich Android, iOS, Web, macOS, Windows und Linux.

Anwendungsfälle

  • Asynchrone Datenverarbeitung mit reduzierten Neuerstellungen
  • Verbesserung der Code-Klarheit bei der Zustandsverwaltung
  • Vereinfachung zukunftsorientierter UI-Updates
  • Lange FutureBuilder-Muster ersetzen
  • Vereinfachung von Lade-/Fehler-/Ladezuständen

Hauptmerkmale

  • Verhindert unerwünschte Neuerzeugungen nach der Fertigstellung des Futures
  • Sauberere, lesbarere Syntax
  • Eingebaute Unterstützung für Lade-, Fehler- und Datenzustände
  • Erweitert Future für intuitiven Einsatz
  • Plattformübergreifende Kompatibilität

Geeignet für

  • Entwickler, die einfachere asynchrone UI-Behandlung suchen
  • Projekte, die darauf abzielen, Widget-Rebuilds zu reduzieren
  • Teams, die der Code-Wartbarkeit Priorität einräumen
  • Flutter-Anfänger lernen asynchrone Muster
  • Apps mit häufigem asynchronen Datenabruf

Hinweise

  • Erfordert Dart 2.12 oder höher
  • Kann eine Umgestaltung des bestehenden FutureBuilder-Codes erfordern
  • Beschränkt auf den Einsatz mit zukünftig basierten Operationen
  • Nicht geeignet für komplexe Stream-Szenarien
  • Abhängig von einer ordnungsgemäßen Lebenszyklusverwaltung zukünftiger Zustände

Original-README

Originaler README-Schnappschuss aus dem verknüpften Quell-Repository. Aktuelle Inhalte finden Sie im Repository.

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: ...
),

Kategorien

Quell-Repository

Projekte, die dieses Paket verwenden

Noch keine Daten verfügbar.